4 min read

ArchiveBox: Your Own Self-Hosted Wayback Machine (GitHub, Scanned)

Save web pages, videos and feeds to your own archive as HTML, PDF, screenshots and WARC files.

ArchiveBox logo
✅
Scan: safe. Nothing malicious. Two things to know: by default it submits your URLs to archive.org and leaves the index public, and anyone who can view a snapshot can see the cookies or private URLs used to capture it. Scanned Oct 28, 2026; the full report is below.

ArchiveBox keeps your own copy of the web. Give it URLs one at a time, or point it at bookmarks, browser history, RSS feeds, Pocket or Pinboard exports, and it saves each page in several redundant formats: the original HTML with its assets, a SingleFile HTML, a screenshot, a PDF, a WARC, the article text and headers. Media pages get their video or audio through yt-dlp, and git links get a clone. Everything lands in ordinary files and folders plus a SQLite index, so the archive stays readable without ArchiveBox, and you can drive it from a web UI, a CLI, a browser extension, a Python API or a REST API.

It has been around since 2017, led by Nick Sweeting, and has about 28,900 stars, 151 contributors and more than 9,200 commits. It is MIT-licensed and run as a US 501(c)(3) fiscally sponsored project funded by donations, with no paid tier. Development is busy: the 0.9 line is new, with v0.9.77 released on 27 October 2026, and pip still treats 0.9 as a pre-release, which is why the install commands ask for it explicitly.

People use it for bookmark backups, research collections, preserving sources for journalism and saving evidence for legal cases before a page changes or disappears. It can also archive pages behind a login using a saved browser profile, which is powerful and worth reading the security notes about first.

Who it is for

Researchers, journalists and archivists preserving sources, people who want their bookmarks to outlive the sites they point to, and self-hosters comfortable with Docker and a little configuration.

Getting started

1. Make a folder and download the Docker Compose file (Docker required)

mkdir -p ~/archivebox/data && cd ~/archivebox && curl -fsSL 'https://docker-compose.archivebox.io' > docker-compose.yml

2. Start it, then open http://admin.archivebox.localhost:5797 to finish setup

docker compose up -d --wait

3. Archive your first URL

docker compose run --rm archivebox add 'https://example.com'

4. Or, without Docker, install with uv and create a collection

uv tool install --python 3.13 --prerelease explicit --upgrade 'archivebox>=0.9.0rc0,<0.10' && archivebox init

By default every URL you add is also submitted to the Internet Archive, and the snapshot index is public to anyone who can reach your server. For private material, set ARCHIVEDOTORG_ENABLED=False, PUBLIC_INDEX=False and PERMISSIONS=private before you add anything. The optional curl | bash setup script uses sudo to install packages.

Safety scan

We cloned ArchiveBox/ArchiveBox at commit 6efff9f on Oct 28, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.

  • No secrets, no binaries and no bare-IP URLs across 1,066 files and about 233,000 lines, mostly Python.
  • The raw-socket hit in archivebox/cli/archivebox_persona.py is os.dup2 handing a payload file to a child command as its standard input before it starts; no socket is involved. The two curl | sh hits are in bin/setup.sh: its own one-line install instruction, and fetching the uv installer from astral.sh.
  • bin/setup.sh, the optional one-line installer, is 519 lines. It uses sudo to install system packages, and run under sudo it creates a system-owned deployment in /var/lib/archivebox. The Docker install avoids it entirely and is what the project recommends.
  • uv.lock pins 192 Python packages and none has a known advisory. Chrome, wget, yt-dlp and SingleFile are installed separately (inside the Docker image, or by ArchiveBox's plugin installer) and were not part of this check, so keep them updated.
  • 17 workflows, none using pull_request_target; 30 of 38 third-party actions are pinned to commits. Security policy, Dependabot, CodeQL, licence, contributing guide and code of conduct all present. Archived JavaScript is untrusted, and the default server security mode isolates or disables its replay depending on your hostname.

What the scanner counted

CheckResult
SecretsNone found.
Suspicious code3 pattern hits found and read; every one is listed under the raw findings.
Install-time code3 installer scripts (one fetches and runs a remote script; one can call sudo)
Committed binariesNone.
CI workflows17 workflows. None use pull_request_target. 8 of 38 third-party actions pinned to a tag rather than a commit.
Network hosts40 distinct hosts referenced from source; most often github.com, archivebox.io, archivebox.localhost, blog.sweeting.me. No URLs to bare IP addresses.
Known vulnerabilities0 advisories across 192 pinned packages: 0 critical, 0 high, 0 moderate, 0 low. uv.lock: 192 packages, 0 advisories.
Project hygieneHas security policy, automated dependency updates, CodeQL, licence file, contributing guide.
OpenSSF Scorecard5.5 out of 10, as of Oct 19, 2026.

The raw findings

Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.

Pattern hits (3)
WhereRuleMatch
archivebox/cli/archivebox_persona.py:617raw-socket-shellos.dup2(payload_file.fileno(), 0)
bin/setup.sh:6download-piped-to-shell# curl -fsSL 'https://raw.githubusercontent.com/ArchiveBox/ArchiveBox/main/bin/setup.sh' | bash
bin/setup.sh:259download-piped-to-shellcurl -LsSf https://astral.sh/uv/install.sh | sh
Installer scripts (3)
  • bin/deploy_dev_demo.sh, 118 lines
  • bin/setup.sh, 519 lines, uses sudo, fetches and runs a remote script; talks to admin.archivebox.localhost, astral.sh, docs.docker.com, example.com, get.archivebox.io, github.com, raw.githubusercontent.com, redsymbol.net, www.gnu.org
  • bin/setup_monorepo.sh, 338 lines; talks to github.com

By the numbers

Stars28.9K
Forks1,623
Contributors151
Commits9,217
Open issues158
Open pull requests1
Releases41
Latest releasev0.9.77
LicenceMIT
Main languagePython
Project age9 years
Last pushOct 28, 2026
Tracked files1,066
Lines of code232.8K
Checkout size22 MB

Lines by language: Python 135K, Markdown 50K, HTML 21.3K, CSS 13.8K, Shell 4,730, YAML 3,884.

Questions

Is ArchiveBox free?

Yes. ArchiveBox is MIT-licensed and free to self-host, with no paid tier; the project is funded by tax-deductible donations through its fiscal sponsor. Your only costs are the machine it runs on and the disk space, which grows quickly if you save video.

Does ArchiveBox send my URLs anywhere?

By default, yes: each URL is also submitted to the Internet Archive for a public copy, and pages are fetched from the sites themselves. Turn off ARCHIVEDOTORG_ENABLED for local-only archiving, and make the index private if your server is reachable by others.

Keeping copies for private study, research, journalism or evidence is widely done, and in the US libraries and researchers rely on fair use for it, but republishing archived pages can infringe copyright and the rules differ by country. Archive only what you have access to, keep logged-in captures private, and respect removal requests if you publish an archive.


This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.