Find and redact personal information in documents — entirely on your device.
Load a PDF, markdown, or text file, detect PII with built-in rules or local ONNX models, review every match, and export a safely redacted copy. No document content ever leaves your machine.
Example · Features · Detection Backends · Setup · Development · Roadmap
PII GUI is a Tauri 2 desktop app (React 19 + TypeScript frontend, Rust backend) for local-first PII detection and redaction. Detection runs on-device with regex rules or quantized ONNX models; the only network access is the optional one-time model download.
PII GUI supports two local workflows.
Local inference only— PII detection runs entirely on-device. The only network access is the optional one-time model download from Hugging Face.PDF, Markdown, and plain-text input— PDFs are parsed with pdf.js, preserving per-character positions so detections are highlighted directly on the rendered page.Custom rules— add your own regex or exact-match filters on top of any backend.** Review before redacting**— toggle individual matches on or off in the workbench before export.** True PDF redaction**— exported PDFs burn opaque rectangles into the rendered pages with pdf-lib, so redacted text is not recoverable from the output file.Task history and persistence— tabs, custom rules, and filter results survive restarts via a local SQLite database and on-disk result files.** Long-document support**— input is split into token-bounded, page-aware chunks and processed through a task queue.** Localized UI**— English, Korean, and Japanese.
| Backend | Best for |
|---|---|
| Regex (built-in) | |
| Instant baseline detection of emails, phones, URLs, dates, account numbers, and secrets | |
| Long English documents and broad privacy-taxonomy detection | |
| European-language text where names, addresses, and ID-like entities matter |
Matches are labeled with a fixed privacy taxonomy:
account_number
· private_address
· private_email
· private_person
· private_phone
· private_url
· private_date
· secret
- Node.js 24+
- pnpm
- Rust and Cargo
- Tauri v2 platform prerequisites for your OS
Download the latest installer for macOS, Windows, or Linux from the Releases page.
On first launch, the onboarding flow lets you pick a default backend. Regex works immediately; the ONNX models are optional downloads (fetched from Hugging Face into the app data directory, and removable at any time from Settings).
Install from source:
cd tauri
pnpm install
Local release signing values are optional for development. If you need updater signing locally, copy the environment template and fill in your own key:
cp .env.example .env
Document (PDF / md / txt)
→ text extraction (pdf.js, per-character boxes for PDFs)
→ token-bounded, page-aware chunking
→ task queue → Rust `redact_text` command
→ regex / ONNX inference (ort + tokenizers)
→ matches + redacted text
→ review & toggle matches in the UI
→ export (burned-in PDF redaction or redacted text)
The frontend (React) handles document parsing, chunking, review, and export. The Rust backend (src-tauri/
) owns the detection engines, model lifecycle (download / verify / delete), and file I/O — all writes are confined to the Tauri app data directory.
cd tauri
pnpm install
pnpm tauri dev
cd tauri
pnpm tauri build
cd tauri
pnpm test:unit # frontend unit tests (vitest)
pnpm build # typecheck + frontend build
cd src-tauri
cargo test # Rust backend tests
- Local regex detection and review workflow
- Optional ONNX backend wiring for OpenAI Privacy Filter and BardsAI EU PII
- Burned-in PDF redaction export
- Local tab, custom-rule, and result persistence
- Broader import/export QA for large PDFs and multilingual documents
- Accessibility and keyboard-only review pass
- Integration with coding agents (Codex, Claude Code, Cursor)
tauri/ # the desktop app
src/ # React frontend
App.tsx # orchestrator: tabs, routing, workbench
components/ # PDF preview, shadcn/Radix UI primitives
lib/
pdf-document.ts # pdf.js text + char-box extraction
pii-text-chunks.ts # token-bounded chunking
pii-task-queue.ts # detection task queue
redaction-policy.ts # match merge/select/restore logic
pdf-redacted-export.ts# burned-in PDF redaction export
app-persistence.ts # SQLite + result-file persistence
i18n.ts # en / ko / ja UI copy
src-tauri/ # Rust backend
src/lib.rs # Tauri commands: redact_text, model lifecycle, file I/O
src/redact_engine.rs # regex / ONNX / BardsAI detection backends
docs/assets/ # README thumbnail and screenshot assets
.github/workflows/release.yml # cross-platform release builds
Contributions are welcome!
Bug reports & feature requests— open anissuewith steps to reproduce or a short description of the use case.Pull requests— keep changes small and focused. Before submitting, run the checks for the area you touched:- Frontend:
pnpm test:unit
andpnpm build
fromtauri/
- Rust backend:
cargo test
fromtauri/src-tauri/
- Frontend:
Detection quality— false positives/negatives are especially useful to report; include the backend (regex / Privacy Filter / BardsAI) and a minimal,PII-free sample that reproduces the issue.Benchmarks— keep local benchmark scripts and outputs out of commits;
/benchmarks/
is ignored.
PII GUI is licensed under the GNU Affero General Public License v3.0.
PII GUI builds on several open-source projects and model releases:
pdf.jsandpdf-libfor PDF parsing and export.ONNX Runtimeandtokenizersfor local model inference.OpenAI Privacy FilterandBardsAI EU PIIfor optional local PII detection models.
Run the smallest check that proves the change, then widen as needed:
cd tauri && pnpm test:unit
cd tauri && pnpm build
cd tauri/src-tauri && cargo check
git diff --check
For packaging, run pnpm tauri build
on the target platform before making release claims.