Skip to content

Repository files navigation

RemoveMyID logo

RemoveMyID

Redact personal data from your files without it ever leaving your browser.

CI MIT License

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

Why

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.

Features

  • Detects and redacts: email addresses, phone numbers, credit card numbers, Social Security Numbers, names, addresses, dates, and ages
  • Format-tolerant phone matching: typing 0543990303 will find 054-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

How it works

  1. Upload — a file is read locally via the File API; it never touches fetch, XMLHttpRequest, or any network call.
  2. Configure — choose which PII categories to redact and optionally narrow any category to specific values.
  3. 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].
    • .pdfpdfjs-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.
  4. Results — see exactly what was redacted, preview the output, or download it.

Tech stack

Getting started

git clone https://github.com/Sinaini/removemyid.git
cd removemyid
npm install
npm run dev

Other scripts:

npm run build    # typecheck + production build to dist/
npm run preview  # serve the production build locally
npm run lint      # oxlint

No environment variables, no API keys, no backend to stand up — it's a static site.

Project structure

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

Known limitations

  • 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.

Contributing

Contributions are welcome — see CONTRIBUTING.md.

License

MIT

About

Privacy-first, 100% client-side PII redaction tool for text, CSV, and PDF files — no server, no uploads, everything runs in your browser.

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages