{
  "schema_version": 1,
  "generated_at": "2026-10-22T00:00:00.000Z",
  "canonical_url": "https://openlogs.fyi/tools/archivebox",
  "slug": "archivebox",
  "name": "ArchiveBox",
  "tagline": "Saves web pages and bookmarks as HTML, PDF and media for later.",
  "replaces": {
    "summary": "Paid web page archiving services, such as Pinboard.",
    "products": [
      {
        "slug": "pinboard",
        "name": "Pinboard",
        "vendor": "Pinboard",
        "url": "https://openlogs.fyi/alternatives/pinboard"
      }
    ]
  },
  "stack": [
    {
      "kind": "language",
      "name": "Python"
    }
  ],
  "deployment_methods": [
    "docker_compose"
  ],
  "requirements": {
    "min_ram_mb": null,
    "min_cpu_cores": null,
    "source_url": null
  },
  "license": {
    "spdx": "MIT",
    "class": "osi",
    "source_url": "https://github.com/ArchiveBox/ArchiveBox/blob/c55089eaefcacf3439322eec897763f518588f37/LICENSE"
  },
  "business_model": {
    "value": "unknown",
    "notes": "The README at the pinned commit does not state a business model, so it stays unknown.",
    "source_url": "https://github.com/ArchiveBox/ArchiveBox/blob/c55089eaefcacf3439322eec897763f518588f37/README.md",
    "checked_at": "2026-10-22"
  },
  "difficulty": {
    "value": "medium",
    "reason": "1 service, 2 volume mounts, 4 env values to set, no elevated host access. Heuristic score 3 of 11: medium."
  },
  "repository": {
    "owner": "ArchiveBox",
    "name": "ArchiveBox",
    "url": "https://github.com/ArchiveBox/ArchiveBox"
  },
  "compose_check": {
    "status": "config_ok",
    "validated_at": "2026-10-22",
    "summary": "config_ok on 2026-10-22"
  },
  "recipe": {
    "version": 1,
    "source_path": "docker-compose.yml",
    "source_repo": "ArchiveBox/ArchiveBox",
    "source_commit_sha": "c55089eaefcacf3439322eec897763f518588f37",
    "source_kind": "app_repo",
    "source_url": "https://github.com/ArchiveBox/ArchiveBox/blob/c55089eaefcacf3439322eec897763f518588f37/docker-compose.yml"
  },
  "install_steps": [
    {
      "order": 1,
      "kind": "prerequisite",
      "language": "text",
      "label": "Docker with the Compose plugin",
      "body": "A host with Docker and the Docker Compose plugin. This entry runs from a compose file.",
      "source_url": "https://github.com/ArchiveBox/ArchiveBox/blob/c55089eaefcacf3439322eec897763f518588f37/docker-compose.yml",
      "validation_status": "unvalidated"
    },
    {
      "order": 2,
      "kind": "compose",
      "language": "yaml",
      "label": "Save the compose file as docker-compose.yml",
      "body": "# Usage\n#\n#     mkdir -p ~/archivebox/data && cd ~/archivebox\n#     curl -fsSL 'https://docker-compose.archivebox.io' > docker-compose.yml\n#     docker compose up -d\n#     Open /admin/ on the hostname or IP used to reach ArchiveBox e.g: http://admin.archivebox.localhost:5797/\n#\n#     docker compose exec archivebox archivebox add --depth=1 'https://news.ycombinator.com'\n#     docker compose exec -T archivebox archivebox add < ~/Downloads/bookmarks.txt\n#     docker compose exec archivebox archivebox help\n#\n# More Info: https://github.com/ArchiveBox/ArchiveBox/wiki/Docker#docker-compose\n\nservices:\n    archivebox:\n        image: ${ARCHIVEBOX_IMAGE:-archivebox/archivebox:latest}\n        restart: unless-stopped\n        ports:\n            - \"${ARCHIVEBOX_PORT:-5797}:5797\"\n        volumes:\n            - ./data:/data                                       # Required: main data directory must be on a fast local SSD\n            # - /mnt/archivebox/data/archive:/data/archive       # Optional: store the bulky data/archive content on a slower HDD or remote network store\n            - tmp:/tmp/archivebox                                # lets one-off `docker compose run` commands reuse main server's runners\n        environment:\n            # - ADMIN_USERNAME=admin                             # optional admin user to create on first run, skips first-time setup admin creation UI\n            # - ADMIN_PASSWORD=SomeSecretPassword\n            - BASE_URL                                           # canonical URL users will access this server at, can be set up via first-run wizard in the UI as well\n            - SERVER_SECURITY_MODE                               # defaults to \"auto\", can be set up via first-run wizard in the UI as well\n            - PUBLIC_ADD_VIEW=False                              # set to True to allow anonymous users to submit new URLs to archive\n            - ARCHIVEDOTORG_ENABLED=True                         # set to False if you dont want to send URLs to Archive.org\n            - PUID                                               # optional numeric UID for NFS/CIFS/FUSE mounts (defaults to collection owner or 911)\n            - PGID                                               # optional numeric GID for NFS/CIFS/FUSE mounts (defaults to collection group or 911)\n            # For all other options, it's better to use data/ArchiveBox.conf or the new Personas config feature in the admin UI...\n            # - TIMEOUT=60\n            # - CHECK_SSL_VALIDITY=False                         # settings here data/ArchiveBox.conf to be able to edit it in the UI\n            # - USER_AGENT=\"...\"                                 # ... move any settings like these into \n            # ...\n            # For more info, see: https://github.com/ArchiveBox/ArchiveBox/wiki/Docker#configuration\n        shm_size: 1gb                                            # chrome runs better when it can use a decently sized shm pool\n        pids_limit: 2048                                         # avoids low systemd task caps with Chrome and parallel extractors\n\n\n####################################################################################################################\n    ### No Separate containers are needed for sonic or scheduled archiving, these are all optional addons: ###\n\n    ### Optional: HTTPS ingress using Cloudflare\n    #             https://developers.cloudflare.com/tunnel/reference/run-parameters/\n    #\n    # cloudflared:\n    #     image: cloudflare/cloudflared\n    #     command: tunnel --no-autoupdate --loglevel debug --retries 15 --protocol http2 --overwrite-dns --url http://archivebox:5797 --hostname archivebox.io --name archivebox.io\n    #     volumes:                                                                                                                 # ^ (replace archivebox.io with your own domain)\n    #         # Download a cert.pem into this folder from https://dash.cloudflare.com/argotunnel\n    #         - ./etc/cloudflared:/etc/cloudflared\n    \n\n    ### Optional: ArchiveBox Bot + ArchiveBox AI Bot: save links and run archiving tasks from Slack, WhatsApp, etc.\n    #             https://github.com/ArchiveBox/archivebox-chat-bot\n    #\n    # archivebox-chat-bot:\n    #     build: https://github.com/ArchiveBox/archivebox-chat-bot.git#main\n    #     restart: unless-stopped\n    #     ports:\n    #         - \"127.0.0.1:5798:5798\"\n    #         # Open http://localhost:5798, choose a console password, then connect to http://archivebox:5797 with your API key.\n    #     volumes:\n    #         - ./archivebox-chat-bot:/data\n    #     # Optional: set ADMIN_PASSWORD to skip the first-run password setup UI.\n    #     # environment:\n    #     #     ADMIN_PASSWORD: your-console-password\n\n\n    ### Optional: container to run xvfb+noVNC so you can watch the ArchiveBox browser screen as it archives things /\n    #             remote control it to set up a chrome profile w/ logins for sites you want to archive\n    # \n    #             https://github.com/ArchiveBox/ArchiveBox/wiki/Chromium-Install#setting-up-a-chromium-user-profile\n    #             https://github.com/ArchiveBox/ArchiveBox/wiki/Chromium-Install#docker-vnc-setup\n    #\n    # novnc:\n    #     image: theasp/novnc:latest\n    #     environment:\n    #         - DISPLAY_WIDTH=1920\n    #         - DISPLAY_HEIGHT=1080\n    #         - RUN_XTERM=no\n    #     healthcheck:\n    #         test: [\"CMD\", \"xdpyinfo\", \"-display\", \":0\"]\n    #         interval: 2s\n    #         timeout: 2s\n    #         retries: 10\n    #     ports:\n    #         # to view/control ArchiveBox's browser, visit: http://127.0.0.1:8080/vnc.html\n    #         # restricted to access from localhost by default because it has no authentication\n    #         - 127.0.0.1:8080:8080\n\n\n    ### Optional: VPN to your home IP to avoid rate limits and captchas\n    #             https://tailscale.com/docs/features/containers/docker/how-to/connect-docker-container\n    # tailscale:\n    #     image: tailscale/tailscale:latest\n    #     cap_add:\n    #       - net_admin\n    #       - net_raw\n    #     environment:\n    #       - TS_AUTHKEY=<tskey-YOUR-AUTH-KEY>\n    #       - TS_STATE_DIR=/var/lib/tailscale\n    #     volumes:\n    #       - ./tailscale:/var/lib/tailscale\n    #     restart: unless-stopped\n\n    ### Optional: Run ChangeDetection.io to watch for changes to websites, then trigger ArchiveBox to archive them\n    #             https://github.com/ArchiveBox/ArchiveBox/wiki/Change-Detection\n    #\n    # changedetection:\n    #     image: ghcr.io/dgtlmoon/changedetection.io\n    #     volumes:\n    #         - ./data-changedetection:/datastore\n\n\n### Optional: Set up remote network storage for your ./data/archive bulky files (to S3, B2, Google Drive, OneDrive, SFTP, etc.)\n#   Follow the steps here to set up the Docker RClone Plugin https://rclone.org/docker/\n#   https://github.com/ArchiveBox/ArchiveBox/wiki/Setting-Up-Storage\n#\n#     $ docker plugin install rclone/docker-volume-rclone:amd64 --grant-all-permissions --alias rclone\n#     $ nano /var/lib/docker-plugins/rclone/config/rclone.conf\n#     [examplegoogledrive]\n#     type = drive\n#     scope = drive\n#     drive_id = 1234567...\n#     root_folder_id = 0Abcd...\n#     token = {\"access_token\":...}\n#\n# volumes:\n#     archive:\n#         driver: rclone\n#         driver_opts:\n#             remote: 'examplegoogledrive:archivebox'\n#             allow_other: 'true'\n#             vfs_cache_mode: full\n#             poll_interval: 0\n\n\nvolumes:      # if you run multiple archivebox containers (or run multiple \"docker run\" commands)\n    tmp:      # this lets them share a single orchestrator instead of fighting over which one is the leader\n",
      "source_url": "https://github.com/ArchiveBox/ArchiveBox/blob/c55089eaefcacf3439322eec897763f518588f37/docker-compose.yml",
      "validation_status": "config_ok"
    },
    {
      "order": 3,
      "kind": "env",
      "language": "text",
      "label": "Set the values the compose file needs",
      "body": "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.",
      "source_url": "https://github.com/ArchiveBox/ArchiveBox/blob/c55089eaefcacf3439322eec897763f518588f37/docker-compose.yml",
      "validation_status": "unvalidated"
    },
    {
      "order": 4,
      "kind": "shell",
      "language": "bash",
      "label": "Start it",
      "body": "docker compose up -d",
      "source_url": "https://github.com/ArchiveBox/ArchiveBox/blob/c55089eaefcacf3439322eec897763f518588f37/docker-compose.yml",
      "validation_status": "unvalidated"
    },
    {
      "order": 5,
      "kind": "verify",
      "language": "text",
      "label": "Open the app",
      "body": "Open http://localhost:5797. The compose file publishes host port 5797 for the archivebox service.",
      "source_url": "https://github.com/ArchiveBox/ArchiveBox/blob/c55089eaefcacf3439322eec897763f518588f37/docker-compose.yml",
      "validation_status": "unvalidated"
    }
  ],
  "notes": [
    {
      "kind": "gotcha",
      "title": "Some images use the latest tag or no tag",
      "body": "Images without a pinned version: archivebox: ${ARCHIVEBOX_IMAGE:-archivebox/archivebox:latest}. A later pull can get a different version.",
      "source_url": "https://github.com/ArchiveBox/ArchiveBox/blob/c55089eaefcacf3439322eec897763f518588f37/docker-compose.yml",
      "checked_at": "2026-10-22"
    },
    {
      "kind": "gotcha",
      "title": "The compose file publishes host ports",
      "body": "Host ports: 5797 (archivebox). A port without a host address listens on all host network interfaces.",
      "source_url": "https://github.com/ArchiveBox/ArchiveBox/blob/c55089eaefcacf3439322eec897763f518588f37/docker-compose.yml",
      "checked_at": "2026-10-22"
    },
    {
      "kind": "gotcha",
      "title": "The compose file mounts host folders",
      "body": "Host paths mounted into containers: ./data at /data (archivebox).",
      "source_url": "https://github.com/ArchiveBox/ArchiveBox/blob/c55089eaefcacf3439322eec897763f518588f37/docker-compose.yml",
      "checked_at": "2026-10-22"
    }
  ],
  "signals": {
    "captured_at": "2026-10-22",
    "stars": 28843,
    "forks": 1621,
    "open_issues": 157,
    "last_push": "2026-10-20",
    "days_since_push": 1,
    "latest_release": "v0.9.73",
    "latest_release_date": "2026-10-06",
    "days_since_release": 15
  },
  "links": {
    "html": "https://openlogs.fyi/tools/archivebox",
    "markdown": "https://openlogs.fyi/tools/archivebox.md",
    "json": "https://openlogs.fyi/tools/archivebox.json"
  },
  "updated_at": "2026-10-22"
}
