Passwords & PINs
Bank logins, door codes, the router password you set once in 2019.
vult put bank/bmo/pin 0420vult keeps your passwords, API keys and 2FA codes encrypted on your devices and in sync between them. Our servers only ever hold noise: no names, no paths, no idea what you keep.
$ curl -fsSL https://vult.app/install.sh | sh
Apple Silicon and Intel. Run it again any time to update.
Free forever for 1 space. No credit card. No browser extension.
This runs the same scheme vult uses, right in your browser, with a throwaway key your browser just made. Nothing you type leaves this page.
Change either field and watch the right side change completely.
……A 4-digit PIN and a long recovery phrase come out the same size. The path is gone, folders are gone, even the list of what exists is an encrypted node like this one.
Anything that fits in a string. Organise it with paths, the way you already think: bank/bmo/pin, work/aws/prod.
Bank logins, door codes, the router password you set once in 2019.
vult put bank/bmo/pin 0420Keep keys out of dotfiles and shell history, and pipe them straight into scripts.
export KEY=$(vult get work/stripe/live)Store the TOTP secret once; get a fresh code, with its countdown, on every device.
vult get otp/github --cbThe backup codes every service tells you to "store somewhere safe". This is somewhere safe.
vult put recovery/google "8c2f 19ab …"Copy to the clipboard when a form asks. Never written to disk in the clear.
vult get bank/bmo/account/1234 --cbSSH passphrases, database URLs, the one-liner that fixes prod. Split work and home into spaces.
vult put work:db/prod "postgres://…"Encrypted before it leaves your machine, signed by your key, unreadable everywhere else.
One binary. One login. Your secrets are a tree you already understand.
Commands that read like sentences, and output that pipes cleanly into your scripts.
put, get, ls, rm: that's the core--cb copies instead of printing$(…) and pipesIf someone copied our entire database tomorrow, here's what they'd have: random-looking ids pointing at same-sized encrypted blobs. Here's how.
Stretched with PBKDF2-SHA256 over 100,000 rounds and a salt, it decrypts a private key that only ever travels encrypted. The password itself is never sent anywhere. Changing it re-encrypts that key and signs every device out.
HMAC-SHA256 derives separate keys from the private key for encrypting values and for naming nodes, so no key does two jobs.
Each secret is stored under HMAC(key, space + path). Without your key, nobody can even test a guess like "is there a bank/bmo?"
AES-256-GCM with a fresh random nonce per write, padded to a power of two (at least 512 bytes). Sizes give nothing away.
The map of paths to nodes is itself encrypted, lives at a secret location, and looks exactly like every other node. There's no "file list" to find.
Your ECDSA P-256 key signs each change. The relay refuses anything not signed by you, and every device checks every signature.
Every decision in vult starts with one question: what could someone do with our servers if they had them? These are the rules we hold ourselves to.
The honest part: because we never hold your password or keys, we can't recover your data if you forget the password. Write it down somewhere offline.
A small background service on each device keeps an encrypted local copy and syncs through a relay. Write on one machine; it's on the others a moment later.
Reads and writes work with no network. Changes sync the moment you're back.
The key is dropped from memory after a few idle minutes (you choose how many with vult config secret ttl 2m).
vult session ls lists every device signed in. Lost a laptop? vult session logout … cuts it off the relay right away.
Real commands, real output. Click through.
$ curl -fsSL https://vult.app/install.sh | sh ==> Fetching latest release... ==> Latest version: 2026-11-08-9da7e57 ==> Downloading vult.darwin.arm64.2026-11-08-9da7e57.9da7e57... ==> Installing to /usr/local/bin ==> Installation complete! $ vult start vult daemon started $ vult status daemon: running (pid 50753) connected: 1 of 1
On Windows, in PowerShell: irm https://vult.app/install.ps1 | iex. Run the installer again any time to update. vult start sets up a small user-level background service that keeps the encrypted local copy and talks to the relay.
$ vult session login ali@example.com Password for ali@example.com: ali@example.com has no account yet; creating one Confirm password: created and logged in as ali@example.com (locks at 7:59PM) → email not verified: open the link we sent to ali@example.com, then run `vult session login` again there is no password recovery: if you lose the password, the data is gone # click the link in your inbox, then $ vult session login logged in as ali@example.com (locks at 7:59PM); signed in to the server
One command signs up or logs in. New email? It confirms your password and sends a verification link.
$ vult put bank/bmo/account/1234 "4520 0011 2233" stored bank/bmo/account/1234 $ vult put email/gmail # no value: type it, shown as * Value: ************ stored email/gmail $ cat ~/.ssh/id_ed25519 | vult put keys/ssh stored keys/ssh $ vult get bank/bmo/account/1234 4520 0011 2233 $ vult get email/gmail --cb copied email/gmail to the clipboard $ vult get keys/ssh > ./id_ed25519 # byte for byte $ psql "$(vult get work/db/prod)" # pipes cleanly
Leave the value off and vult reads whatever you pipe in, or asks for it with the typing masked, so it never lands in your shell history. Redirect vult get and you get the value back exactly as stored.
$ vult ls default ├── bank │ └── bmo │ ├── account │ │ └── 1234 │ └── pin ├── email │ └── gmail └── otp └── github $ vult ls bmo bank/bmo ├── account │ └── 1234 └── pin
This tree exists only on your devices. On the relay it's one more encrypted node.
$ vult put otp/github '{"raw_secret": "JBSWY3DPEHPK3PXP"}' --otp stored otp/github $ vult get otp/github OTP code is 913686, expires in 19s $ vult get otp/github --cb copied the OTP code for otp/github to the clipboard; it expires in 18s $ vult get otp/github --raw {"type":"totp","raw_secret":"JBSWY3DPEHPK3PXP","algorithm":"SHA1","digits":6,"period":30}
Paste an otpauth:// URL from a QR code, or JSON. TOTP and HOTP, SHA-1/256/512, 6–10 digits.
$ vult session ls SESSION ID DEVICE PLATFORM STATUS LAST SEEN * xqGVoB3S1Aw… ali-macbook macOS 26.6 (arm64) connected now Lm81pQz0vRk… ali-desktop Ubuntu 24.04 (amd64) disconnected 3h ago 9fHc2TtBaYe… old-laptop macOS 14.5 (amd64) stale 21d ago $ vult session logout 9fHc2TtBaYe… signed out session 9fHc2TtBaYe…; that device is disconnected
Every device you sign in shows up here, with when it was last seen. Sign any of them out in one command.
$ vult upgrade ls PLAN SPACES NODES DATA MONTHLY YEARLY * free 1 100 500 KB free free pro 5 1000 2 MB $2.99 $28.70 (save 20%) elite 50 5000 10 MB $5.99 $57.50 (save 20%) You're on free: 1 of 1 spaces, 7 of 100 nodes, 7.1 KB of 500 KB. Upgrade with: vult upgrade pro or vult upgrade elite $ vult upgrade pro Open this link to upgrade from free to pro ($2.99/month or $28.70/year): https://vult.app/upgrade?t=N0tyZE9QTnpV…
Upgrading never needs a browser login: the CLI hands you a signed, one-hour link.
That's a real code, generated live in your browser from the public demo secret JBSWY3DPEHPK3PXP. Add it to any authenticator app and the codes will match.
--cb copies straight to the clipboard and still tells you how long it's good for.--raw shows it when you need to move it.Every plan gets the same encryption and sync across all your devices. Bigger plans just hold more. Click a plan for a step-by-step guide.
What's a node? Each secret is one node, and your account uses three for itself (the account, the node list and the encrypted index). So Free holds about 97 secrets, and each person you share with takes one more. Downgrading never deletes anything: you keep reading and deleting, you just can't add more until you're under the limit.
No ads, no analytics, nothing sold. Here's the complete list, in plain words.
vult session ls, so you can sign devices out.~@3f9a0c27e1b84d55a6c2f0e9b17d3a48c5e2f1aa
└─ nodes → 7c1e…, a90f…, 22d4…, e5b3…
Install, sign up and store your first secret in under a minute. Free, for as long as you like.
$ curl -fsSL https://vult.app/install.sh | sh
Apple Silicon and Intel. Run it again any time to update.