Skip to content
Nabeel Wasif edited this page Sep 29, 2026 · 2 revisions

Anonify

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.

Anonify: a document is uploaded, suggestions appear, the reviewer accepts and rejects them, and a redacted file is exported

Current release: v1.10.0 (2026-09-29) · Apache-2.0 · What's new · Release History


Start here

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

What it does, in one pass

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
Loading

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.


The ideas that matter most

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.


Eleven formats

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.


What's new since v1.1

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


Quick install

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:3000

No accounts, no external services, nothing leaves the machine. The contextual model pass is optional and can run locally through Ollama. Full walkthrough: Getting Started.


Project status

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.

Clone this wiki locally