cmdvault is an offline command-line snippet manager. It keeps that command findable, fills in the variable parts when you copy, and keeps everything you knew about it attached. One binary for Linux, macOS or Windows, no install, no account. It runs on your machine and makes no outbound requests, and the whole vault is a JSON file you own.
Twenty-one sample entries running inside this page. Try dockr,
k8s, or --force-with-lease, then pick one and fill in
the blanks. Nothing you type is stored or sent anywhere — open the network
tab and watch.
The search here is a stand-in, and the usage numbers are invented. The real engine is a four-stage pipeline and reproducing it in a page script would misrepresent it. Everything else behaves the way the app does: the same placeholder grammar, the same seven types, secrets dropped after the copy, and a destructive marker that tells you what somebody wrote and then gets out of the way.
Typing a long command on a phone keyboard is where the typos come from: no tab completion, half the screen taken by the keyboard, one wrong character and you start again. Switch sharing on, open the address on your phone, fill the blanks in a form, and copy the finished command in one go.
Your engagement toolkit on a machine that originates no traffic. Values you type into a field marked secret are never written to the vault file. Export per client and hand the file over — or delete it — when the job ends.
One entry for a command instead of one per server. What you actually use rises to the top, because ranking decays with a fourteen-day half-life rather than counting forever.
Build a command set for a course, export it as one file, hand it to a class. No accounts and no license keys. Students keep it, add their own, and it is still theirs after the term ends.
If your reference is a text file you can't search, a browser tab you're afraid to close, or your own memory, this replaces all three. If the problem is getting output off a second machine rather than remembering a command, pastebridge is the other half of that.
kubectl logs -f {pod} -n {namespace} --tail={lines:number=200}
Write the variable parts as blanks and cmdvault asks for them when you
copy. Seven types: text, number, choice, path, url, boolean, and secret.
A choice becomes a menu, a number gets a number pad on a phone. Use the
same name twice in one command and you fill it once —
docker run -p {port}:{port} {image} is a two-field form.
The parser is deliberately narrow about what counts as a blank.
${PORT} is a shell variable, {{.Names}} is a Go
template, and {{port}} is an escaped literal. None of them
are fields, and the fill form leaves all three alone.
PGPASSWORD={dbpass:secret} pg_restore -h {host} -d {database}
Mark a blank secret and its value builds the command and is then dropped. It is not saved to the vault, not kept in the remembered-values list, not recorded in a usage event, and never appears in an export.
Two honest limits on that. Copying still puts the finished command on your system clipboard, where other applications can read it and where some operating systems sync it between devices. And a placeholder's default value is part of the command text, so it is stored and does appear in exports whatever the placeholder is marked.
What it does Load a .dump into an existing database
Prerequisites Target database must exist and be empty
Example usage the real invocation, not a synopsis
Notes anything that bit you the first time
Every entry carries a description, prerequisites, a real example, notes, a shell, and a platform — all searchable alongside the command text. Description and example are weighted differently by the search, which is why they are separate fields rather than one long box.
Marked destructive Deletes named volumes too. Any database
running in Docker loses its data.
You tick a box in the editor and write a note in your own words. From then on the note sits above the command every time you open it. There is no detector, no pattern list, and no rescan on save, so there is exactly one source for that flag: you.
Which cuts both ways, and the app says so where the marker appears. An unmarked command has not been checked and found harmless. It has not been checked at all. Nothing in cmdvault reads command text and forms an opinion about it.
k8s → finds everything tagged kubernetes
docekr → finds docker, through the fuzzy fallback
--force-with-lease → matched whole, not split at the dashes
Clients / Northwind → nested projects, still in global search
Four stages: recall by weighted token match unioned with trigram
substring match, a structural filter, a fuzzy rescore, then a blended
score. Recall is OR rather than AND, so "see running containers" doesn't
require the word "see" to appear anywhere. When recall comes up empty the
search falls back to a bounded scan and lets the fuzzy cutoff do the
filtering, which is how a typo like docekr still lands.
The tokenizer keeps - _ .
: / @ inside tokens, so
docker-compose and node_modules survive whole.
Ranking decays on a fourteen-day half-life, and it decays when read as
well as when written — a score that only decays when you touch it
leaves stale entries sitting at the top.
~/.cmdvault/vault.json
Import: 14 added, 5 skipped — nothing modified, nothing replaced
Import only ever adds. It cannot modify, replace, or delete a command already in your vault, and there is no flag that makes it. An incoming entry is skipped if its UUID is already present, or if its command text hashes to something already in the same project. Re-import last week's export and you get nothing new; if you edited one of those commands since, your edit stands.
Import runs in two steps. The file is summarized first — projects, tags, counts, with nothing written — and that summary becomes the filter list, so you can take a colleague's whole vault and pull in only their Kubernetes commands. Export mirrors it: project and tag checkboxes, a live "N of M commands" count, and toggles for sub-projects, ALL-versus-ANY tag matching, favorites only, and whether usage statistics travel with it.
Share on this network → https://192.168.1.24:7718
Then enter this PIN → 418 302
Flip the switch in the header and a second listener starts on your local network over TLS, using a certificate the machine generates for itself. Your phone opens the address, accepts the certificate warning once, enters the six-digit PIN, and is looking at the same vault. Ten wrong guesses locks pairing until you reset it.
Off means no listener exists, not a listener refusing connections. Turning sharing off stops it and ends every paired session, so switching it back on doesn't silently re-admit a device you disconnected. The certificate is self-signed, which defeats passive listening on the network and does not defeat someone already positioned to intercept traffic between your two devices.
We would rather say this plainly than let a page full of privacy claims imply an audit route that doesn't exist. The license is on the next section. What it doesn't grant is the right to read, modify, or reverse engineer the binary. So the claims above are worth exactly as much as your ability to test them from outside, and most of them are testable from outside.
Run it, use the app normally, and watch nothing happen. With sharing off there is no listener on the network at all; check with ss -ltn.
No network namespace, no route anywhere. The app works exactly the same, because it never needed one.
Fill a field marked secret with a string you'll recognize, copy the command, then go looking for it in the file. It isn't there, and it isn't in an export either.
Every archive publishes its own .sha256 file alongside it, listed in full with curl commands further down. They tell you the file arrived intact; they don't tell you what's inside it.
cmdvault is a single static binary of about 7.5 MB, built from the
Go standard library with nothing else linked in. Run it and it opens your
browser at a loopback address; the interface is served by the binary
itself. Your vault lands at ~/.cmdvault/vault.json.
No runtime, no libraries, no package to install. Drop it anywhere on your path.
Unsigned, so Gatekeeper will ask the first time. Right-click and choose Open, or clear the quarantine attribute yourself. Intel Macs aren't published; it builds for them, ask if you need one.
Built with the GUI flag, so there's no console window sitting behind your browser.
There is no separate mobile build, because there doesn't need to be one. Your phone talks to the machine already running the vault, over your own network. Nothing is installed on the phone.
-seed imports a starter file if the vault is empty. -port and -vault move things. -exit-on-idle quits after a stretch with no browser attached. Stop it from the Quit button, with Ctrl-C, or by letting it time out — all three flush the pending save first.
A tour file ships alongside: twelve commands covering all seven placeholder types, the parser guards, the destructive marker, nested projects, tag aliases, and four shells.
Each platform ships as one compressed archive with the binary inside it. Check it before you unpack it.
cmdvault-linux-v1_1 — 8014b0f63807cf27e90a326635bf6936e742ea1e12205135a629d2881be9b24f
cmdvault-mac-v1_1 — 77b220fe988e977e67ae135b86ce9bc9c673cf86736e5968201561c456ac1316
cmdvault-v1_1.exe — 1349132710ecccb3deb1371883910a090de9a4ca8a2809cace8932a2c2470e98
sha256sum -c reads the sums file, hashes the archive next to it and prints OK or FAILED. One line, because there is one file in it. If it fails, delete the download and fetch it again rather than unpacking it.
macOS ships shasum rather than sha256sum; -a 256 picks the same algorithm and -c checks the file the same way. The binary is unsigned, so Gatekeeper will ask the first time — right-click and choose Open, or run xattr -d com.apple.quarantine cmdvault-mac-v1_1.
curl.exe is built into Windows 10 and later, as is Get-FileHash, so there is nothing to install. The comparison prints OK or FAILED the same way sha256sum -c does. certutil -hashfile cmdvault-v1_1.zip SHA256 works too if you would rather read the hash yourself and compare it against the row above.
The archive hash covers the download. This one covers the file you will actually run, which is the one that matters if the archive was unpacked somewhere else or passed to you on a stick. Compare it with the Binary inside line in the table above; it should match character for character.
What a matching hash tells you is that the file arrived intact and is the same file we hashed. It does not tell you what the file does, and it cannot: a hash published on the same site as the download is only worth as much as the site. It catches a corrupted transfer or a tampered mirror. It is not an audit, and cmdvault is proprietary, so there is no source to audit against. The checks in the section above are the ones that test behavior.
cmdvault is proprietary software published by 0xPeerHold LLC under an end user license agreement, not under an open source license. In practice:
The License, Privacy, Safety notes, About, Licenses and Imprint panels are all inside the app, offline, with the version and effective date on each so a support conversation can establish which text you actually saw.
cmdvault is free to download and use, with no paid tier planned. Donations cover build machines, signing, and maintenance hours.
If something here saved you an afternoon, buy us a coffee. Bitcoin goes straight to a wallet we hold, with no processor in the middle taking a cut or a name. Or a clear bug report to [email protected] is worth more than most donations and costs you less.
Bitcoin, straight to a wallet we hold.

On-chain only. Check the address matches before sending.