How it works, in detail.
Every command and flag, how it shares models and sessions with the desktop app, what a pipeline licence covers, and every request it makes. Nothing here is installable yet.
Four commands.
Text in, masked text out. The reversal key is a file you name and keep, so nothing about a session lives somewhere you cannot see.
cat notes.txt | velum maskMask a stream.
Text arrives on standard input, masked text leaves on standard output. Pipe it into anything. This is the free tier and stays free, at the same detection depth as every other surface.
velum mask report.pdf --map m.jsonMask a file, keep the key.
The mapping written to --map is the reversal key. Add --pass to encrypt it with AES-256-GCM. Without a map file the masking is one way, which is sometimes what you want.
velum unmask reply.txt --map m.jsonRestore the reply.
Unmasking is never gated, licence or no licence, on any Velum surface. A lapsed contract must never strand data you already masked.
velum mask ./contracts --policy team.jsonplannedMask a folder against a policy.
A policy file fixes which entity types are redacted and which are pseudonymized, so a whole directory is processed the same way every time.
Flags
- --map <path>
- Write or read the reversal key. Required to unmask.
- --pass <phrase>
- Encrypt the map file with AES-256-GCM via scrypt.
- --tier regex|lite|full
- Detection depth. Regex needs no model at all.
- --policy <path>
- A JSON file setting per-entity handling.
- --countries ES,US,GB
- Which national identifier packs run. Defaults to all.
- --pseudo-person
- Use the person pseudonymizer instead of a token.
It shares with the desktop app.
Running both is the normal case, so the two are built to cooperate rather than to coexist by luck.
- Does it conflict with the desktop app?
- No. When the desktop app is running, the CLI attaches to the service it already has open, so there is one process, one set of models in memory and one session. Nothing is loaded twice and no port is taken.
- Will it download the models again?
- The large detection models are shared. Both surfaces read the same directory, so a model the desktop app already fetched is a model the CLI already has.
- Can it unmask what the desktop app masked?
- While both are running, yes. For anything durable, export a map file from the desktop app and pass it to the CLI with --map. Session mappings expire by design; map files do not.
What it sends.
The whole list. The browser extension is the surface with the literal zero-network property; this one is scoped more narrowly and says so.
- No document data leaves the machine. Not the text, not the file, not the mapping.
- Detection models are fetched once from Hugging Face, then never again. Set a mirror to fetch them from your own network instead.
- The regex tier needs no model and makes no request of any kind.
- A licence key is verified offline against a signature. There is no call to check it.
Running it in a pipeline.
An Individual or Team licence covers a person at a keyboard, on as many of their own machines as they use. A CI job, a cron task or a server-side batch is a different thing, and it needs its own licence.
Included at Business and above
Pipeline masking comes with the plan. Nothing extra to buy and nothing extra to configure.
499 US dollars a year otherwise
One organisation, unlimited runners and unlimited runs. There is no metering, because nothing counts your usage and nothing will.
It will not break your build
Without an automation licence the CLI still runs and prints one line telling you it needs one. We are not willing to fail a customer’s pipeline over licensing.
See the full ladder on pricing, or what central management adds on enterprise.
How it will install.
One signed binary with no runtime to install first. The engine is licensed source-available under PolyForm and publishing shortly, for anyone who wants to read what runs on their data, and the binary is what you actually install.
| platform | route | status |
|---|---|---|
| macOS | Homebrew, or a signed binary | coming soon |
| Linux | Homebrew, a shell installer, or a tarball | coming soon |
| Windows | Scoop | coming soon |
The binary is code-signed on every platform, on Windows with the same certificate as the Windows desktop app. Nothing here asks you to click past a warning to install it.
See it work on your own data.
Tell us what you work with and we will walk you through it on a call, on your own files. Nothing leaves your machine while we do.
Your address is used to reply to you, and for nothing else.