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 (2x) │ Image ? → draw to canvas ├── Parallel: │ ├── Tesseract.js OCR (English, WASM, lazy) │ ├── face-api TinyFaceDetector (WASM, lazy, threshold 0.6) │ └── 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/shadabkhan/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, face-api, and zxing-wasm WebAssembly bundles — fetched lazily the first time you run a redaction so they do not bloat the initial page load.
- The TinyFaceDetector model weights from
/models/— about 200 KB, 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.