free · open source · local-only

Your keys never had a proper home. Now they do.

Keyr keeps every API key and secret in one encrypted vault on your own machine — and lends them to your tools only while they run. Then they lock themselves away.

Windows · macOS · Linux — Node.js 18+

Where keys live today

  • A note-taking app, or a message to yourself
  • A plaintext "apiKey" in a config file — synced, backed up, indexed
  • Pasted into code, then committed

Not carelessness — simply no proper place existed.

What one vault changes

  • Encrypted at rest — AES-256-GCM, scrypt-stretched passphrase
  • In use, keys live in process memory only
  • When the process exits, nothing remains to steal

The vault file itself is unreadable without your passphrase.

Four things, done deliberately

That is the whole feature list.

AES-256-GCM + scrypt

Node's built-in crypto: authenticated encryption, memory-hard key derivation, random salt, fresh IV on every write. No GPG, no system packages.

Single-file vault

Everything lives in ~/.keyr/vault.json. Back it up like any file; delete it to start over.

keyr run

Launch any command with secrets injected as environment variables. Tools that read {env:VAR} never need the real value on disk.

TUI + scriptable

An interactive menu for daily use; direct commands and KEYR_PASSPHRASE for automation. Passphrases are always prompted masked — never CLI arguments.

Open, lend, lock

The entire workflow.

Create the vault

keyr init — choose a passphrase. It is never stored; it cannot be recovered, and that is the point.

Store secrets

keyr set HIVE_API_KEY — values are masked on input, encrypted, then written to the single vault file.

Run your tools

" data-id="keyr run opencode — secret masuk ke environment proses anak. Config menunjuk nama, bukan nilai: \"apiKey\": \"{env:HIVE_API_KEY}\"">keyr run opencode — secrets enter the child process's environment. Configs point at names, not values: "apiKey": "{env:HIVE_API_KEY}"

How it compares

Established tools exist. Keyr is a specific trade-off — and choosing another tool is a fine outcome.

Tool The trade-off
pass / gopassBattle-tested, but requires GPG (painful on Windows) and spreads one file per secret across a tree.
Bitwarden CLINeeds a server (cloud or self-hosted) and an account.
1Password CLIGreat env injection — but paid, cloud, account.
Infisical / DopplerBuilt for teams; heavy for personal secrets.
age / sopsEncrypt files, but are not managers — no list/set/get or TUI.
KeyrNode-native (no GPG), single-file vault, keyr run injection, zero accounts. Local-only by design.

Honest questions

Including the ones with uncomfortable answers.

Is the vault safe if someone copies it?

Yes, within the limits of your passphrase. AES-256-GCM plus scrypt makes guessing expensive — a long passphrase is what makes it truly strong.

Does this protect me from malware on my machine?

No. Any process running as your user can read a child's environment or capture keystrokes. Keyr removes secrets from permanent storage on disk — it does not defend against active compromise. No local tool honestly can.

Where is my data sent?

Nowhere. Keyr has no network code at all — no telemetry, no update checks, no sync.

What if I forget the passphrase?

The secrets are gone. There is no recovery — by design. keyr reset deletes the vault so you can start over.