Version 2.0.0
The entire archiver was rewritten from Node.js to Rust. Same features, same file structure on disk, but now it’s a single static binary with no runtime dependencies.
Changed
- Rust rewrite — the entire scraper, builder, and server are now Rust. No Node.js, no npm, no runtime. One binary.
- Sitemap-first scraping — webChronicle now auto-discovers sitemaps (
/sitemap.xml,/sitemap_index.xml,/wp-sitemap.xml, etc.) before falling back to recursive crawling. You can also pass a sitemap URL directly. - 10-thread concurrent scraping — pages are fetched in parallel for faster runs.
- Local-first link rewriting — all links in snapshots are rewritten to point to local copies. No broken links when browsing offline.
- CDN image handling — images from CDN URLs are downloaded and stored locally.
data-src/data-srcsetsupport — lazy-loaded images are captured correctly.- Overlay injection moved to serve-time — snapshots on disk are clean HTML. The overlay (archive date, back link) is injected by the server on-the-fly via Shadow DOM. Copy a snapshot folder, get the original page.
ledger.tomlindex — replaces the old JSON index. Human-readable, hand-editable.- Tera templates — the index page uses Tera instead of Eleventy’s Liquid.
- System fonts — no web font requests. The UI uses
system-uiand friends.
Removed
- Node.js runtime, npm dependencies, Eleventy,
.nvmrc,package.jsonbuild scripts — all gone.package.jsonis metadata only. - Filmstrip UI — replaced with a blog-style feed (domain h2, snapshots ul/li,
max-width: 640px).
Install
<pre class="astro-code astro-code-themes github-light github-dark" style="background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#6F42C1;--shiki-dark:#B392F0">git</span><span style="color:#032F62;--shiki-dark:#9ECBFF"> clone</span><span style="color:#032F62;--shiki-dark:#9ECBFF"> https://github.com/freshjuice-dev/webchronicle.git</span></span> <span class="line"><span style="color:#005CC5;--shiki-dark:#79B8FF">cd</span><span style="color:#032F62;--shiki-dark:#9ECBFF"> webchronicle</span></span> <span class="line"><span style="color:#6F42C1;--shiki-dark:#B392F0">cargo</span><span style="color:#032F62;--shiki-dark:#9ECBFF"> build</span><span style="color:#005CC5;--shiki-dark:#79B8FF"> --release</span></span> <span class="line"></span> <span class="line"><span style="color:#6F42C1;--shiki-dark:#B392F0">./target/release/webchronicle</span><span style="color:#032F62;--shiki-dark:#9ECBFF"> init</span></span> <span class="line"><span style="color:#6F42C1;--shiki-dark:#B392F0">./target/release/webchronicle</span><span style="color:#032F62;--shiki-dark:#9ECBFF"> scrape</span></span> <span class="line"><span style="color:#6F42C1;--shiki-dark:#B392F0">./target/release/webchronicle</span><span style="color:#032F62;--shiki-dark:#9ECBFF"> build</span></span> <span class="line"><span style="color:#6F42C1;--shiki-dark:#B392F0">./target/release/webchronicle</span><span style="color:#032F62;--shiki-dark:#9ECBFF"> serve</span><span style="color:#005CC5;--shiki-dark:#79B8FF"> --port</span><span style="color:#005CC5;--shiki-dark:#79B8FF"> 3000</span></span></code></pre>Known gaps
@font-facedeclarations in CSS files are not yet parsed for local font downloading. Fonts referenced viaurl()in CSS are downloaded, but@font-facesrc URLs are not.