Live demo (the actual app): https://cablepull.github.io/exif-stripper-wasm/ — open this URL for the drop zone and processing UI.
(The GitHub repository page below only shows this README; it is not the demo.)
Remove EXIF and other embedded metadata from JPEG and PNG images in the browser. Processing uses a Rust core compiled to WebAssembly; files are not uploaded to a server.
- Rust stable with the
wasm32-unknown-unknowntarget (seerust-toolchain.toml) - wasm-pack
- Node.js 20+ (for the
www/front-end)
From the repository root:
wasm-pack build --target web --release
cd www && npm ci && npm run buildpkg/— JavaScript and WASM bindings produced by wasm-pack (load this path fromwww/during dev/build).www/dist/— Static site ready to deploy (includes hashed assets from Vite).
For a local production build that matches GitHub Pages asset paths (/exif-stripper-wasm/…), run:
cd www && GITHUB_ACTIONS=true npm run buildGITHUB_ACTIONS is set automatically in the GitHub workflow.
wasm-pack build --target web
cd www && npm run devOpen the URL Vite prints (typically http://localhost:5173).
After every wasm-pack build, you can fingerprint the compiled module:
shasum -a 256 pkg/exif_stripper_wasm_bg.wasmStore the printed digest with your release notes or CI logs. Re-run the same command on another checkout or build artifact and compare digests to confirm the .wasm file matches.
- Live site (GitHub Pages): https://cablepull.github.io/exif-stripper-wasm
- Source repository: https://github.com/cablepull/exif-stripper-wasm
- CI:
.github/workflows/deploy.ymlbuilds on push tomainand publisheswww/dist. - Cloudflare Pages: The
www/public/_headersfile is copied to the site root by Vite so responses can include CSP, COOP/COEP, andX-Content-Type-Options.
| Path | Role |
|---|---|
src/ |
Rust library and wasm-bindgen exports |
tests/ |
Host-side integration tests (cargo test --tests) |
www/ |
Vite app, Web Worker, UI |
intent.md, requirements.md, design.md, tasks.md |
Spec artifacts (see CLAUDE.md for the spec-check gate workflow) |
- Storage: After processing, confirm DevTools → Application shows no image blobs in persistent storage (see
tasks.mdM5). - Network: With the page loaded, process a file and confirm no new requests appear in the Network panel (beyond the initial page load).
- Latency: Use the per-file processing time shown in the UI to spot slow runs; the spec targets < 100 ms for typical JPEGs under 10 MB on a warm tab.
See the repository’s license file when one is added.