CopyAnySite vs monolith

monolith packs a page into one file from the command line. Where that model shines, where it breaks, and the measured difference offline.

monolith is a small, fast Rust CLI that turns a page and its assets into a single HTML file. It is a good tool with a specific model, and the model is the whole comparison: it never opens a browser.

The measurement

Eight pages, three runs, median, each copy rendered with the original host unreachable and diffed against the live page with pixelmatch. Harness: npm run bench:rivals.

PageCopyAnySitemonolith
arthize.com99.97%99.24%
linear.app99.64%98.88%
news.ycombinator.com100%100%
Travlia (WP theme demo)98.39%84.54%
wikipedia.org100%99.92%
stripe.com95.99%49.03%
heyclicky.com98.71%71.60%
tailwindcss.com98.25%64.27%
Average98.87%83.44%
Remote requests left4365

monolith reaches 100% on Hacker News — a page with no fonts and no JavaScript — and stays close on Wikipedia, linear.app and a simple agency site. It falls to 49.03% on stripe.com and 64.27% on the Tailwind docs, and leaves 365 references pointed at the original hosts across the eight pages.

There is also a file-size oddity worth knowing: monolith's linear.app copy is 25.8 MB and its Travlia copy 82.9 MB — larger than ours in both cases — because it bundles what the HTML references rather than what the page rendered, including variants nothing on screen used.

Why the gap

No browser means no rendered page. monolith gets the server's HTML, resolves what it can parse, and inlines it. So it misses everything built by JavaScript after load, everything whose URL only exists in computed styles, the actual srcset candidate your viewport chose, canvas pixels, and which of thirty declared webfonts the page really rendered in.

CopyAnySite starts from the settled DOM in the browser and records computed styles per element and pseudo-element, then embeds the bytes.

Where monolith is the right tool

  • Pipelines. One binary, one command, no browser, no extension, no session. Perfect in CI or a cron job.
  • Server-rendered pages at volume. Loop it over a URL list.
  • Free and open source.
  • Cross-platform and tiny. monolith https://example.com > page.html.
  • Reproducibility. Same input, same output, no rendering variance.

Where the extension is the right tool

  • Anything client-rendered.
  • Anything where the visual layer is the product.
  • Editable WordPress/Gutenberg output, ZIP bundles, AI dev kits, MCP for agents.
  • A capture taken from your session, of the page you are actually looking at.

Recommendation

Automating single-file snapshots of server-rendered pages: monolith. Copying a page whose design matters, or one that needs a browser to exist at all: a rendered capture. Both produce one file; only one of them starts from the page you saw.

FAQ

What is monolith?

An open-source Rust command-line tool that saves a web page as a single HTML file with its assets embedded as data URIs. No browser is involved.

Why does monolith miss content?

Because it does not execute JavaScript. Anything the page assembles in the browser is not in the HTML monolith downloads.

Does monolith work offline afterwards?

Partly. In our runs its copies still made 365 requests to the original hosts across eight pages, so some assets only resolve while the origin is reachable.

Is monolith better than wget?

They are close in our measurements (83.44% vs 87.40% average) with different failure modes: monolith produces one file, wget produces a folder and can mirror whole sites.

Can monolith export to WordPress?

No. It outputs a single HTML file. For editable blocks you need a capture tool that writes Gutenberg output.

Try it on the page you are looking at

CopyAnySite is a Chrome extension: open any page you can reach, press capture, and take away a standalone HTML file, an editable WordPress page, or a kit a coding agent can build from. The free key needs no card.

Download CopyAnySite

Keep reading