High-resolution zoomable images (IIIF, Deep Zoom, Zoomify, krpano, and more).
- Website (repository root, deployed from this branch): worker-hosted wasm core discovery, direct-first transport with automatic eligible metadata proxy fallback, canvas assembly, and real save (Chromium E2E covered).
- Extension (
apps/extension/): explicit-action scan with unit coverage; available from the Chrome Web Store and Firefox Browser Add-ons. - Desktop (
apps/desktop/): real Tauri window with the five capability commands, native save dialog, and installer bundling (unsigned Linux x86_64.deb, Windows x86_64.msi, and Apple silicon macOS.dmg; automatic updates are disabled, check GitHub Releases manually). - CLI (
apps/cli/): real save pipeline through the native runtime, covering discovery, bounded tile acquisition, assembly, and output writing.
cargo xtask setup # verify tools and install the pnpm workspace
cargo xtask check # formatting, lint, artifact validation
cargo xtask test # one Rust workspace run + one combined Node unit run
cargo xtask test all # add generated WASM and browser integration (no public network)The fast test does not run check, generated WASM bindings, packaging, or
browsers. Node 24 is the minimum supported Node version. test all adds the
generated WASM Node harness, Chromium website E2E, and full Chromium/Firefox
extension integration without rerunning the fast matrix; the desktop real
window remains explicit.
cargo xtask test live --public is the only command that contacts real
websites (explicit opt-in). cargo xtask --help lists everything else,
including build, dev, ci, release, protocol, and fixtures. See
Development and Testing.
- Repository root: the website, where you paste a URL and save the image.
apps/: the extension, desktop app, and CLI.crates/: the Rust engine, with pure discovery core, job state machine, versioned protocol, native runtime, WASM adapter, and test tooling.packages/: TypeScript shared UI, browser runtime, and generated protocol bindings.testdata/scenarios: deterministic test fixtures.docs/: architecture, privacy, security, and release contracts.
The website always tries a direct browser fetch first, with a short 1500 ms window. If the direct fetch does not complete in time, it automatically retries eligible public metadata (never image tiles) through a same-origin metadata proxy. This proxy is visible in the UI and never carries cookies or credentials. The extension instead uses your browser session under permissions you grant; cookie handoff to the desktop app is a separate, explicitly consented step.