btrix

A front end for Browsertrix Crawler

Say what you
want archived.

btrix settles the scope with you, writes the crawl config, and runs Browsertrix Crawler in a container on your machine. What comes back is a WACZ file you can replay, keep, and hand to anyone.

$npm install -g @edsu/btrix

macOS or Linux · Docker or Podman · Node 22.19+
Crawling needs no account. Bring your own model, or run one locally.

 _     _         _
| |__ | |_  _ _ (_)__ __    high-fidelity web archives
| '_ \|  _|| '_|| |\ \ /    Browsertrix Crawler, driven by conversation
|_.__/ \__||_|  |_|/_\_\

  ./btrix · 39G free · anthropic/claude-opus-5
  3 configs · 1 archive 210M · 1 login profile

  cultprotest                never run
  toi                        done           84/84  210M
  wikipedia → web-archiving  crawling       0/12

  ♥ Webrecorder builds the crawler — opencollective.com/webrecorder

btrix  crawling wikipedia → web-archiving · 0/12 · 0% still discovering · 0.0 pg/min
      archive 0B · profile 300M · 12G free · screencast :9037
      fetching https://en.wikipedia.org/wiki/Web_archiving
What btrix shows while a crawl runs. The widget repaints once a second.

The exchange

It runs on sentences, not flags.

Everything btrix does, it does because you asked for it in the terminal. There is no config syntax to learn first — though the config it writes is plain YAML, and yours to edit.

“Archive the Wikipedia article on web archiving and everything it links to”

Settles the scope with you first, then writes the config.

“Crawl wikipedia”

Starts the crawl in the background. Progress appears in the widget.

“Stop it”

Asks the crawler to shut down cleanly, keeping what it captured.

“Did that crawl work?”

Reports what was actually captured, and flags anything suspicious.

“Replay web-archiving”

Serves the archive and gives you a ReplayWeb.page link.

“This site needs a login”

Opens a browser for you to sign in, and saves the profile. btrix never sees the password.

“Why did this site only give me one page?”

Opens a real browser on the page and works out a custom behavior against it.

“What's taking up space?”

Reports old working directories, and clears them if you agree.

Recorded

One session, start to finish.

web-archiving.wacz captured from en.wikipedia.org terminal recording
A terminal session: describing five pages of en.wikipedia.org to archive, the crawl widget counting up, and the finished archive opening in ReplayWeb.page.

Five pages out of en.wikipedia.org: described, crawled, and replayed. Crawls are detached, so this one would have survived quitting the session.

On disk

Everything in one directory, beside your work.

./
├── btrix/
│   ├── config/wikipedia.yaml         your crawl configs
│   ├── out/web-archiving.wacz        finished archives
│   ├── out/web-archiving.btrix.json  how each was made
│   ├── profiles/                     browser logins
│   ├── runs/                         working files, kept
│   └── failed/                       nothing came back
└── notes.md, .git/                   your stuff, untouched
Put it anywhere
btrix --dir /Volumes/archive/wikipedia moves the whole store — useful for a large crawl on an external disk. The store writes its own .gitignore, so archives and profiles stay out of version control and config/ stays yours to commit.
Crawls outlive the session
Quit, come back tomorrow, and the widget picks the crawl back up. When one finishes you get a notification and a summary.
btrix never handles a password
For a site behind a login it opens a browser at localhost:6080. You sign in there; the profile it saves is kept private and mounted read-only into the crawl.
Any model, including a local one
/login connects a Claude, ChatGPT or Copilot subscription, or set an API key. A server on your own machine that speaks the OpenAI API works too — LM Studio, Ollama, vLLM, llama.cpp.