DocRedact.in is a zero-server redactor. No file you drop on the page ever leaves your browser tab. Here is the full pipeline.
Pipeline
Your browser tab ├── File drop / 📷 Take Photo ├── PDF ? → pdf.js rasterize each page to canvas (3x for auto-detection) │ Image ? → draw to canvas ├── Parallel: │ ├── Tesseract.js OCR (English, WASM, lazy) │ ├── MediaPipe BlazeFace (short + full range, WASM, lazy) │ └── zxing-wasm QR scan (lazy) ├── Regex + Verhoeff: │ ├── Aadhaar (12 digit + Verhoeff check → mask first 8) │ ├── PAN (AAAAA9999A + entity-code check) │ └── Passport MRZ (ICAO 9303, Indian country code) ├── Review toggles → you choose what actually masks ├── Canvas mask render: │ └── Solid black rectangles for every masked region (text, QR, face) └── pdf-lib: JPEG embed each flattened page → image-only PDF → download No network hop between any of these steps carries document data.
Open source
The full source is at github.com/shadab127/doc-redact-in, licensed under AGPL-3.0-or-later. The key source files to look at if you want to verify the privacy story yourself:
src/detection/DetectionOrchestrator.ts— the top of the pipeline. Notice that the inputs are only canvases and blobs; no document bytes ever leave this module.src/masking/PdfFlattener.ts— the PDF builder. It callspdf-lib, which itself emits aUint8Arraylocally; the “download” step wraps that array in a Blob and triggers a same-tab save.tests/e2e/no-outbound-network.spec.ts— the Playwright test that asserts no document-data request ever leaves the origin during redaction.
What gets loaded from the network
Three categories of static asset are fetched, all same-origin from Cloudflare Pages:
- The HTML / JavaScript / CSS of this page (obvious).
- The Tesseract, MediaPipe, and zxing-wasm WebAssembly bundles — fetched lazily the first time you run a redaction so they do not bloat the initial page load.
- The BlazeFace model weights from
/vendor/mediapipe/— fetched on first face detection.
Cloudflare Web Analytics sends one small beacon per page view to a Cloudflare-hosted endpoint. It contains a page URL and a referrer, and is cookie-free. You can see these requests in DevTools — they do not carry any part of your document. Loading the page alone does not load all detection assets. Offline use requires those assets to be loaded and available in your browser cache.