Redact personal data from your files without it ever leaving your browser.
RemoveMyID is a 100% client-side PII redaction tool. Drop in a .txt, .csv, .pdf, or image file, choose what to scrub, and get a redacted copy back — no upload, no backend, no third party ever sees the file. Every byte of processing happens locally — in a Web Worker for text, and via in-browser OCR for images — using regex and lightweight NLP running in your own browser tab.
🔗 Live demo: removemyid.com
Most "redact my PDF" tools are a file upload to someone else's server. RemoveMyID's privacy guarantee isn't a policy promise — it's architectural: there is no server in this app at all. Everything from parsing to redaction to rebuilding the output file happens in your tab, and you can disconnect from the internet after the page loads and it still works.
- Detects and redacts: email addresses, phone numbers, credit card numbers, Social Security Numbers, names, addresses, dates, and ages
- Format-tolerant phone matching: typing
0543990303will find054-3990303,+1 (415) 555-2671, etc. in the file regardless of how it's formatted - Fine-grained control: toggle any category on/off, or target specific values only (e.g. redact just one name, leave the rest) — comma-separated lists supported
- Transparent results: the results screen shows exactly what was found and redacted per category, not just a count
- Preview before you commit: open the redacted file in a new tab before downloading it
- PDF redaction that's actually secure: pages are rasterized to an image and the redaction boxes are drawn on the flattened image, so there's no underlying text layer left to copy/extract after redaction — unlike tools that just draw a black box over selectable text
- Image redaction via on-device OCR: upload a photo, screenshot, or scanned ID (
.jpg,.png,.webp) and PII visible in the image itself is found with in-browser OCR (English, Hebrew, Spanish, French, German) and blacked out on the flattened image — plus all EXIF metadata (GPS coordinates, device info, timestamps) is stripped as a side effect - Runs entirely offline after the initial page load, including OCR — the language model and OCR engine ship with the app instead of being fetched from a CDN
- Upload — a file is read locally via the File API; it never touches
fetch,XMLHttpRequest, or any network call. - Configure — choose which PII categories to redact and optionally narrow any category to specific values.
- Redact:
.txt/.csv— text is sent to a Web Worker running a regex pipeline (email/phone/SSN/credit card/date/age) plus compromise.js for name/place NER. Matches are replaced with[REDACTED]..pdf— pdfjs-dist extracts per-page text with character offsets, the same detection pipeline finds PII in it, each page is rendered to a canvas, black boxes are drawn over the matched spans using real font-metric measurement (not just character-count guessing), and the flattened page image is embedded into a brand-new PDF via pdf-lib. The original text layer is discarded entirely..jpg/.png/.webp— the image is drawn to a canvas, Tesseract.js OCRs it locally to recover text with word-level bounding boxes, the same detection pipeline finds PII in the recognized text, black boxes are drawn over the matched words, and the canvas is re-encoded back to an image. Re-encoding through canvas also drops all EXIF metadata.
- Results — see exactly what was redacted, preview the output, or download it.
- React + TypeScript + Vite
- Tailwind CSS v4
- react-dropzone for the upload UI
- pdfjs-dist for PDF parsing/rendering
- pdf-lib for PDF generation
- compromise for lightweight in-browser NLP
- Tesseract.js for in-browser OCR on images
- lucide-react for icons
git clone https://github.com/Sinaini/removemyid.git
cd removemyid
npm install
npm run devOther scripts:
npm run build # typecheck + production build to dist/
npm run preview # serve the production build locally
npm run lint # oxlintNo environment variables, no API keys, no backend to stand up — it's a static site.
src/
components/
layout/ Header, Footer, StepLayout (shared wizard chrome)
pages/ LandingPage, UploadPage, ConfigurePage, ResultsPage
landing/ Hero, TrustSection, RedactionSummaryPanel
lib/
redaction/ regex + NLP detectors, category metadata, options model
files/ text/CSV file → Blob pipeline
pdf/ PDF text extraction + canvas redaction + pdf-lib flattening
images/ OCR (Tesseract.js) + canvas redaction for image files
hooks/ useRedactionWorker — talks to the Web Worker
workers/ redaction.worker.ts — runs the redaction pipeline off the main thread
types/ shared TypeScript types
- Detection is regex/NLP-based, not a trained ML model — it will miss some formats and occasionally over- or under-match. Treat it as a strong first pass, not a compliance guarantee.
- PDF redaction rasterizes every page to an image. This is the tradeoff for guaranteeing no residual text — it also means the output PDF loses selectable text and any vector content.
- Large multi-page PDFs are slower, since each page does a full canvas render + PNG encode + embed.
- Image redaction depends on OCR accuracy: blurry, low-contrast, handwritten, or heavily stylized text may be missed entirely. OCR text recognition covers English, Hebrew, Spanish, French, and German, but the name/place detector (compromise.js) is English-only, so names and addresses in other languages won't be caught — only the regex-based categories (email, phone, credit card, SSN, date) are language-independent. Redaction boxes cover whole OCR-recognized words, which can be coarser than the PDF path's character-precise boxes.
Contributions are welcome — see CONTRIBUTING.md.
