ArchiveBox
Saves web pages and bookmarks as HTML, PDF and media for later.
- Replaces
-
Paid web page archiving services, such as Pinboard.
All open-source alternatives to Pinboard
- Difficulty
-
Difficulty: Medium
1 service, 2 volume mounts, 4 env values to set, no elevated host access. Heuristic score 3 of 11: medium.
- Stack
Python (language)
- Deployment
docker_compose
- Requirements
Not stated.
- License
-
MIT(OSI-approved open source)Read from github.com/ArchiveBox/ArchiveBox/blob/c55089e/LICENSE
- Business model
-
Unknown
The README at the pinned commit does not state a business model, so it stays unknown.
Source: github.com/ArchiveBox/ArchiveBox/blob/c55089e/README.md, read on .
- Repository
GitHub stats
- Stars
- 28,843
- Forks
- 1,621
- Open issues and pull requests
- 157
- Last push
- 2026-10-20
- Latest release
- v0.9.73
- Released
- 2026-10-06
From the GitHub API on . These numbers are a snapshot, not live. GitHub detected the license as MIT.
Compose file
# Usage
#
# mkdir -p ~/archivebox/data && cd ~/archivebox
# curl -fsSL 'https://docker-compose.archivebox.io' > docker-compose.yml
# docker compose up -d
# Open /admin/ on the hostname or IP used to reach ArchiveBox e.g: http://admin.archivebox.localhost:5797/
#
# docker compose exec archivebox archivebox add --depth=1 'https://news.ycombinator.com'
# docker compose exec -T archivebox archivebox add < ~/Downloads/bookmarks.txt
# docker compose exec archivebox archivebox help
#
# More Info: https://github.com/ArchiveBox/ArchiveBox/wiki/Docker#docker-compose
services:
archivebox:
image: ${ARCHIVEBOX_IMAGE:-archivebox/archivebox:latest}
restart: unless-stopped
ports:
- "${ARCHIVEBOX_PORT:-5797}:5797"
volumes:
- ./data:/data # Required: main data directory must be on a fast local SSD
# - /mnt/archivebox/data/archive:/data/archive # Optional: store the bulky data/archive content on a slower HDD or remote network store
- tmp:/tmp/archivebox # lets one-off `docker compose run` commands reuse main server's runners
environment:
# - ADMIN_USERNAME=admin # optional admin user to create on first run, skips first-time setup admin creation UI
# - ADMIN_PASSWORD=SomeSecretPassword
- BASE_URL # canonical URL users will access this server at, can be set up via first-run wizard in the UI as well
- SERVER_SECURITY_MODE # defaults to "auto", can be set up via first-run wizard in the UI as well
- PUBLIC_ADD_VIEW=False # set to True to allow anonymous users to submit new URLs to archive
- ARCHIVEDOTORG_ENABLED=True # set to False if you dont want to send URLs to Archive.org
- PUID # optional numeric UID for NFS/CIFS/FUSE mounts (defaults to collection owner or 911)
- PGID # optional numeric GID for NFS/CIFS/FUSE mounts (defaults to collection group or 911)
# For all other options, it's better to use data/ArchiveBox.conf or the new Personas config feature in the admin UI...
# - TIMEOUT=60
# - CHECK_SSL_VALIDITY=False # settings here data/ArchiveBox.conf to be able to edit it in the UI
# - USER_AGENT="..." # ... move any settings like these into
# ...
# For more info, see: https://github.com/ArchiveBox/ArchiveBox/wiki/Docker#configuration
shm_size: 1gb # chrome runs better when it can use a decently sized shm pool
pids_limit: 2048 # avoids low systemd task caps with Chrome and parallel extractors
####################################################################################################################
### No Separate containers are needed for sonic or scheduled archiving, these are all optional addons: ###
### Optional: HTTPS ingress using Cloudflare
# https://developers.cloudflare.com/tunnel/reference/run-parameters/
#
# cloudflared:
# image: cloudflare/cloudflared
# command: tunnel --no-autoupdate --loglevel debug --retries 15 --protocol http2 --overwrite-dns --url http://archivebox:5797 --hostname archivebox.io --name archivebox.io
# volumes: # ^ (replace archivebox.io with your own domain)
# # Download a cert.pem into this folder from https://dash.cloudflare.com/argotunnel
# - ./etc/cloudflared:/etc/cloudflared
### Optional: ArchiveBox Bot + ArchiveBox AI Bot: save links and run archiving tasks from Slack, WhatsApp, etc.
# https://github.com/ArchiveBox/archivebox-chat-bot
#
# archivebox-chat-bot:
# build: https://github.com/ArchiveBox/archivebox-chat-bot.git#main
# restart: unless-stopped
# ports:
# - "127.0.0.1:5798:5798"
# # Open http://localhost:5798, choose a console password, then connect to http://archivebox:5797 with your API key.
# volumes:
# - ./archivebox-chat-bot:/data
# # Optional: set ADMIN_PASSWORD to skip the first-run password setup UI.
# # environment:
# # ADMIN_PASSWORD: your-console-password
### Optional: container to run xvfb+noVNC so you can watch the ArchiveBox browser screen as it archives things /
# remote control it to set up a chrome profile w/ logins for sites you want to archive
#
# https://github.com/ArchiveBox/ArchiveBox/wiki/Chromium-Install#setting-up-a-chromium-user-profile
# https://github.com/ArchiveBox/ArchiveBox/wiki/Chromium-Install#docker-vnc-setup
#
# novnc:
# image: theasp/novnc:latest
# environment:
# - DISPLAY_WIDTH=1920
# - DISPLAY_HEIGHT=1080
# - RUN_XTERM=no
# healthcheck:
# test: ["CMD", "xdpyinfo", "-display", ":0"]
# interval: 2s
# timeout: 2s
# retries: 10
# ports:
# # to view/control ArchiveBox's browser, visit: http://127.0.0.1:8080/vnc.html
# # restricted to access from localhost by default because it has no authentication
# - 127.0.0.1:8080:8080
### Optional: VPN to your home IP to avoid rate limits and captchas
# https://tailscale.com/docs/features/containers/docker/how-to/connect-docker-container
# tailscale:
# image: tailscale/tailscale:latest
# cap_add:
# - net_admin
# - net_raw
# environment:
# - TS_AUTHKEY=<tskey-YOUR-AUTH-KEY>
# - TS_STATE_DIR=/var/lib/tailscale
# volumes:
# - ./tailscale:/var/lib/tailscale
# restart: unless-stopped
### Optional: Run ChangeDetection.io to watch for changes to websites, then trigger ArchiveBox to archive them
# https://github.com/ArchiveBox/ArchiveBox/wiki/Change-Detection
#
# changedetection:
# image: ghcr.io/dgtlmoon/changedetection.io
# volumes:
# - ./data-changedetection:/datastore
### Optional: Set up remote network storage for your ./data/archive bulky files (to S3, B2, Google Drive, OneDrive, SFTP, etc.)
# Follow the steps here to set up the Docker RClone Plugin https://rclone.org/docker/
# https://github.com/ArchiveBox/ArchiveBox/wiki/Setting-Up-Storage
#
# $ docker plugin install rclone/docker-volume-rclone:amd64 --grant-all-permissions --alias rclone
# $ nano /var/lib/docker-plugins/rclone/config/rclone.conf
# [examplegoogledrive]
# type = drive
# scope = drive
# drive_id = 1234567...
# root_folder_id = 0Abcd...
# token = {"access_token":...}
#
# volumes:
# archive:
# driver: rclone
# driver_opts:
# remote: 'examplegoogledrive:archivebox'
# allow_other: 'true'
# vfs_cache_mode: full
# poll_interval: 0
volumes: # if you run multiple archivebox containers (or run multiple "docker run" commands)
tmp: # this lets them share a single orchestrator instead of fighting over which one is the leader
From the app's own repository: github.com/ArchiveBox/ArchiveBox/blob/c55089e/docker-compose.yml.
Compose file from the app repository.
Install
- Docker with the Compose plugin (github.com/ArchiveBox/ArchiveBox/blob/c55089e/docker-compose.yml)
A host with Docker and the Docker Compose plugin. This entry runs from a compose file.
- Save the compose file as docker-compose.yml (github.com/ArchiveBox/ArchiveBox/blob/c55089e/docker-compose.yml)
Use the compose file shown above.
- Set the values the compose file needs (github.com/ArchiveBox/ArchiveBox/blob/c55089e/docker-compose.yml)
These variables have no default in the compose file: BASE_URL, PGID, PUID, SERVER_SECURITY_MODE. Compose reads them from the shell or from a .env file next to the compose file.
- Start it (github.com/ArchiveBox/ArchiveBox/blob/c55089e/docker-compose.yml)
docker compose up -d - Open the app (github.com/ArchiveBox/ArchiveBox/blob/c55089e/docker-compose.yml)
Open http://localhost:5797. The compose file publishes host port 5797 for the archivebox service.
Compose file check: config_ok on 2026-10-22.
Gotchas and maintenance
Gotchas
- Some images use the latest tag or no tag. Images without a pinned version: archivebox: ${ARCHIVEBOX_IMAGE:-archivebox/archivebox:latest}. A later pull can get a different version. (github.com/ArchiveBox/ArchiveBox/blob/c55089e/docker-compose.yml, checked 2026-10-22)
- The compose file publishes host ports. Host ports: 5797 (archivebox). A port without a host address listens on all host network interfaces. (github.com/ArchiveBox/ArchiveBox/blob/c55089e/docker-compose.yml, checked 2026-10-22)
- The compose file mounts host folders. Host paths mounted into containers: ./data at /data (archivebox). (github.com/ArchiveBox/ArchiveBox/blob/c55089e/docker-compose.yml, checked 2026-10-22)
Signals
- Open issues and pull requests: 157
- Last push: 2026-10-20 (1 days before this page was built)
- Latest release: v0.9.73 on 2026-10-06 (15 days before this page was built)