Repository navigation
Home
AI-assisted document redaction. Upload a PDF, Word document, spreadsheet, deck, email, mailbox, CSV, text file or image. Anonify proposes what looks sensitive, you decide, and the export removes it.
The governing rule: AI proposes, the application applies, and only what a person accepted is removed.
A beautiful editor that leaves the original text under a black rectangle is not a redaction system.

Current release: v1.10.0 (2026-09-29) · Apache-2.0 · What's new · Release History
| I want to… | Go to |
|---|---|
| Run it on my own machine | Getting Started · CLI Reference |
| Know what it can redact | Supported Formats |
| Learn the review screen | Review Workspace · Search and Rules · Hush Assistant |
| Understand exports, methods, vaults and restore | Export and Anonymisation |
| Work with many files or a mailbox | Batches and Mailboxes |
| Understand how it is built | Architecture · Processing Workflow · Streaming IO |
| Understand detection | Redaction Engine · Redaction Presets · AI Providers |
| Understand how bytes are stored | Storage and Encryption |
| Configure limits, quotas, drivers, models | Configuration |
| Call it from code | API Reference · Data Model |
| Deploy it, or upgrade it | Deployment · Upgrading |
| Trust it | Security Model · Testing and Benchmarks |
| Fix something that broke | Troubleshooting · Failure Codes · FAQ |
| Contribute | Contributing · Good First Issues · Roadmap · Glossary |
flowchart LR
U["Upload<br/>browser → storage<br/>(direct, or via /api/upload/local)"]
Q["Queue<br/>per-owner admission"]
I["Ingest<br/>sniff · checksum · seal<br/>delete the plaintext"]
X["Expand<br/>attachments and mailboxes<br/>become documents"]
E["Extract<br/>ranged, streamed reads<br/>→ one normalized model"]
D["Detect<br/>patterns first,<br/>model for context only"]
R["Review<br/>accept · reject · manual<br/>search · rules · Hush"]
V["Export<br/>apply · VERIFY · checksum · seal"]
P["Deliver<br/>signed link · report · vault"]
U --> Q --> I --> X --> E --> D --> R --> V --> P
Four layers are kept deliberately separate:
| Layer | What it is | Where |
|---|---|---|
| A. Source | The uploaded file. Never mutated. | Object storage, sealed in AES-256-GCM chunks |
| B. Normalized | Pages, spans with geometry, runs, sheets, regions, with a page index |
lib/documents/*, sealed beside the source |
| C. Redactions | The record of what should be removed: suggested → accepted / rejected
|
Postgres rows, lib/redaction/*
|
| D. Output | A new document generated from A plus the accepted part of C, then verified |
lib/redaction/export.ts, deliver.ts
|
Detail: Architecture.
Human review. Detection produces suggestions, and only an accepted suggestion reaches the exporter. That is the difference between a tool that redacts for you and a tool you redact with. It turns a wrong suggestion into a non-event instead of a data loss. Hush, the assistant, follows the same rule: every change it proposes waits for Approve.
Verification as a gate. Every export is re-opened and read the way an adversary would: extracted PDF text, every OOXML part, every sheet including hidden ones, a re-parsed MIME tree, sampled pixels and EXIF. If an accepted value survived, the export fails instead of shipping. A rebuilt mailbox is split again and checked message by message.
Located, never trusted. A model returns the text it claims to have seen. Anonify finds that text in the source itself and discards anything it cannot locate, so a model cannot invent a value into your document.
Encrypted everywhere, bound to its name. Every document has its own random data key. Every stored object is sealed in authenticated 1 MB chunks bound to the path it was written under, so objects cannot be truncated, reordered or swapped.
Detail: Security Model.
PDF · DOCX · XLSX · PPTX · EML · MBOX · CSV · TSV · TXT · RTF · Images (PNG/JPEG/WebP)
How each one is redacted and how each is verified: Supported Formats.
The wiki was last rewritten for v1.1.0. Since then:
| Area | What landed | Read |
|---|---|---|
| Review | Server-side search with RegEx, RegEx rules, global rules (encrypted, exportable), a Rules tab, word-level click-to-redact, exact-character highlights, a shortcut sheet | Search and Rules · Review Workspace |
| Assistant | Hush: a tool-using agent where every change needs your approval, plus learned-shape rule offers that need no model | Hush Assistant |
| AI providers | 25+ providers: official SDK adapters, Azure, Bedrock, Vertex, Ollama / LM Studio / llama.cpp, OpenRouter, any OpenAI-compatible URL, ChatGPT sign-in; verification that says why it failed | AI Providers |
| Scale | Chunked encryption, streamed uploads and extraction, ranged reads of Office and PDF files, a page-at-a-time editor, streamed downloads | Streaming IO · Storage and Encryption |
| Batches | Download in the original format (a mailbox comes back as .mbox) or as processed files in provenance folders; batches over 50 documents fixed |
Batches and Mailboxes |
| HTML bodies analysed as markdown; messages fold into headers, bodies and attachments | Supported Formats | |
| Setup |
pnpm setup finishes a local install, pages model catalogs, shows list prices; pnpm ai verifies, logs in, reports status |
Getting Started · CLI Reference |
| Local stack | RustFS replaces the archived MinIO | Deployment · Upgrading |
| Security | PDF box placement advisory (GHSA-h3hv-rpqw-7p84) fixed; objects bound to their names; standalone build no longer copies local storage; dependency advisories cleared | Security Model · Release History |
| Measurement | A labelled synthetic corpus, a scorer, and pnpm bench:models for the deterministic-first claim |
Testing and Benchmarks |
| Process | Releases cut from pull request labels; release notes assembled from changelog.d/ fragments |
Contributing |
The full list, release by release: Release History.
git clone https://github.com/Anonify-v2-0/Anonify2.0.git && cd Anonify2.0
pnpm install
pnpm setup --local # generates the secrets, writes .env, can start everything for you
docker compose up -d # Postgres, RustFS, migrations, then Anonify
# http://localhost:3000No accounts, no external services, nothing leaves the machine. The contextual model pass is optional and can run locally through Ollama. Full walkthrough: Getting Started.
Current release: v1.10.0. Open work: Roadmap. The two biggest open items are preserving the PDF text layer on redacted pages (#40) and the first published model benchmark (#153).
The standing ask is to benchmark it. The harness and a 534-document labelled corpus now exist, and the deterministic baseline has been measured. No model run has been published yet. See Testing and Benchmarks.
Anonify: AI proposes, the application applies, and only what a person accepted is removed.
Repository · Report a bug · Request a feature · Security policy · Apache-2.0
This wiki describes v1.10.0 and summarises and links the in-repo documentation. Where the two disagree, the files under docs/, CHANGELOG.md and SECURITY.md are canonical.
Getting going
Using it
- Supported Formats
- Review Workspace
- Search and Rules
- Hush Assistant
- Redaction Presets
- Export and Anonymisation
- Batches and Mailboxes
How it works
- Architecture
- Processing Workflow
- Redaction Engine
- Storage and Encryption
- Streaming IO
- Data Model
- API Reference
- Security Model
When it breaks
Contributing
Repository · Issues · Releases · Changelog