Elide is the toolkit that does the finding and the removing inside Nvisy. It is now open source, Apache-2.0, written in Rust.
What is in it
Recognizers, deduplication, validation, redaction operators, format codecs. You wire them into your own document flow.
elide-pattern carries the regex and checksum recognizers, elide-ner the
statistical ones, elide-llm the generative ones. elide-pdf, elide-office
and elide-image each handle one family of formats. Everything is
feature-gated, so a binary that only ever reads CSV does not carry a PDF parser.
Where this sits next to Presidio
Microsoft Presidio is the closest prior art, and Elide’s core is shaped by it: the recognizer and operator split, and several shipped patterns and validators adapted from it directly. Presidio is ahead on the things that make a tool usable on day one, with real spaCy and Transformers models out of the box, working OCR, and years of deployment behind it.
Elide’s differences are structural: one core generic over modality, so audio and container metadata are first-class rather than unsupported; a format layer it owns end to end, where Presidio works on content you extracted yourself; and an audit trail that is an object rather than a log line. The longer comparison, gaps included, is in docs/COMPARISON.md.
One entity model across every format
A social security number is the same thing whether it sits in a paragraph, a spreadsheet cell, a scanned page, or a sentence someone spoke aloud.
Elide promotes all four into one coordinate space. A recognizer written once serves every format, and an operator written once redacts in all of them. OCR reads a scanned page and puts the text back into the same pipeline; speech-to-text does the same for audio. There is no separate image path drifting out of sync with the text path.
Detection is three phases
Enrichers run first and sequentially, adding context the recognizers will need: detecting the language of a region, OCR’ing a scanned page, transcribing audio.
Then every recognizer runs concurrently over the same input. Regex, dictionary and checksum recognizers carry real validators, so a number with the right shape is not treated as the thing itself: Luhn for payment cards, IBAN check digits, national identifier schemes. NER and LLM recognizers run alongside them, not after. Each emits its own findings independently, which means they disagree.
Reconciling that disagreement is the third phase. Calibrate scales each recognizer’s confidence by its own multiplier, so detectors with different score distributions become comparable. Reconcile pools same-label overlaps and arbitrates between competing labels when two recognizers claim the same span. Filter applies your threshold. What comes out is one scored set rather than three competing answers, and the score is what sends review effort to the spans the engine is unsure about.
The operators
Blacking out every match leaves a document nobody can use, so the operators are narrower than that.
Text can be masked, replaced, truncated, hashed, generalized or clamped. Images can be blurred, pixelated or blacked out by region. Audio can be silenced or beeped. Tabular data can lose rows or columns. Encryption and pseudonymization round-trip, for the cases where the value has to come back.
The format layer matters as much as the operators do. A document carries more than the text you can see: the author, the last editor, the company, the timestamps. Redact the body and hand the file over, and all of that goes with it. Elide treats those as redactable too, and changes nothing else in the file.
What the audit trail records
“The document is redacted” is a claim. This is a record:
These nine digits matched an SSN pattern and passed its format check, scored 0.5, and rose to 0.85 because the words ‘social security’ sat next to them. Redacted under gdpr-art-17, right to erasure.
That survives someone asking. Each entity carries how it was found, how its score moved as evidence arrived, which conflicts were resolved, and which operator hid it. The closing attribution is the part auditors reach for: a policy author attaches the authority to the rule itself, so the trail says why the policy demanded a redaction and not only which rule fired.
Try it without trusting us
There is a live demo compiled to WebAssembly. Paste text in and redact it. It runs the pattern and dictionary recognizers only, without the NER and LLM passes, so it will miss things the full engine catches.
Nothing you type leaves the page. The engine is running in the tab, which demonstrates what “no upload” means better than a sentence claiming it.
The API is not stable yet
Elide is under active development. Public APIs, configuration shapes and on-disk formats change between releases, and you should pin a commit if you depend on it. That warning is at the top of the README for the same reason it is here.
The source is at nvisycom/elide, the
architecture is documented a stage at a time under docs/, and the API
reference is at docs.nvisy.com.
