| Merge, split, organize, protect | Browser + workers | App shell only |
| Compress, redact, clean | Browser + workers | App shell only |
| Export (PNG / JPEG / text) | Browser (pdf.js canvas) | App shell only |
| Forms, watermark, page #, insert | Browser (pdf-lib) | App shell only |
| OCR | Browser (pdf.js + Tesseract) | Same-origin WASM/worker/lang after postinstall (no third-party OCR CDN) |
| Duplicate scan (Organize) | Browser worker (pdf.js) | App shell only |
| Share Desk (P2P) | Browser WebRTC + OPFS worker | Signaling WebSocket + STUN (optional TURN) — no file bytes to SafePaper |
| Media Studio | Browser + FFmpeg WASM (lazy) + image workers | Same-origin FFmpeg under /vendor/ffmpeg/ |
| Data Zone | Web Workers + DuckDB-wasm + OPFS queues | DuckDB bundles may fetch from jsDelivr on first SQL use — not your table rows |
| Security Vault | Browser Web Crypto + jose (no upload) | Analytics disabled on these routes |
| AI Desk (RAG) | Embedding + chat workers; IndexedDB index | One-time model weight downloads (Transformers.js / WebLLM CDN) |
| Record Desk | Capture + OPFS mux; Whisper worker | Whisper ONNX/WASM may fetch from jsDelivr on first caption run |
| Vision Studio | Image inference worker (ONNX / Transformers.js) | One-time model weight downloads (Hugging Face / jsDelivr); images stay local |
| Audio Lab | FFmpeg WASM worker + Web Audio; Whisper for transcription | One-time FFmpeg/Whisper asset downloads; audio samples stay local |
| Health Desk | dicom-parser + canvas; pure-JS HL7/FHIR; localStorage lab history | None — scans, records, and lab data are parsed and stored entirely on-device |
| Scan Desk | Camera + canvas image pipeline; Tesseract OCR; pdf-lib export | Same-origin OCR WASM/worker/lang only; scans stay on-device |
| Diagram Desk | Mermaid + Graphviz (WASM); canvas rasterize for export | One-time Graphviz WASM fetch; diagram source stays local |
| Handwriting Desk | Canvas render; MediaRecorder + FFmpeg WASM for video | Same-origin fonts + one-time FFmpeg assets; text stays local |
| Photo Desk | Canvas pixel ops; heic-to WASM decode; RAW preview parse | One-time HEIC WASM assets; photos are edited & encoded on-device |
| Resume Desk | @react-pdf render; pdf.js text extract; localStorage | App shell only; resume data stays in your browser's local storage |
| Archive Desk | zip.js + fflate in archive worker | App shell only (central directory parsed locally) |
| Data Room | crypto-packager worker + offline HTML export | Same-origin /dataroom-template.html at build time |