rune is a secure, local-first secrets management CLI designed for developers.
It lets you store, retrieve, and manage secrets safely on your machine, with strong client-side encryption, a clean namespace model, and an ergonomic workflow optimized for daily use.
Rune is intentionally simple: no servers, no accounts, no background services beyond what you explicitly start.
-
🔐 Zero-trust by default
Secrets are always encrypted client-side. Decrypted values never leave memory. -
🗝️ Per-secret encryption keys
Each secret can use its own encryption key. -
🗝️ Multi-field secret storage
Each secret can have multiple fields, allowing you to store complex secrets easily. -
🧠 Session-based default key (optional)
Keep an encryption key in memory for repeated use during a session. -
🗂️ Namespaced secrets
Organize secrets with paths likedb/prod/my-db. -
🧭 Interactive workflows
Secure prompts, interactive lists, clipboard integration. -
💻 Cross-platform
Works on Linux, macOS, and Windows.
pip install runeBefore managing secrets, you must select an active user.
At this stage, login does not authenticate or unlock anything — it simply sets the root namespace for secrets.
# Log in as a user
rune login <username>
# Log out
rune logoutThe active user determines which secrets are visible and writable.
rune add db/prod/my-db -f host=localhost,port,user,password -k super-secret-keyOptions:
- Secret names support namespaces using
/ --fields / -f- Comma-separated list of fields
- Fields without values are prompted securely
- If omitted entirely, Rune stores a single-field secret
--key / -k- Encryption key (securely prompted if omitted)
rune get db/prod/my-dbExample output:
[1] host
[2] port
[3] user
[4] password
Choose a field to copy (q to cancel):
- Selected values are copied to the clipboard by default
- Use
--showto display values in the terminal - Use
--interactiveto pick a secret from a list (rune ls -ishortcut)
rune ls- Secrets are displayed as a namespace tree
- Supports filtering by namespace
- Interactive mode allows direct retrieval
rune update db/prod/my-db -f user=new-user,password,new_field=new- Updates existing fields
- Adds new fields
- Missing values are prompted securely
rune move db/prod/my-db db/prod/cassandra- Renames or relocates a secret within the namespace tree
rune delete db/prod/cassandra- By default, secrets are soft-deleted (hidden)
- Use
--hardto permanently delete - Hard deletes require the encryption key
rune delete db/prod/cassandra -f passwordrune restore db/prod/cassandra- Restores a soft-deleted secret
- All soft-deleted fields are restored
Sessions allow you to keep an encryption key in memory so you don’t have to re-enter it for every operation.
- The key lives only in memory
- Stored in a local background daemon
- Never written to disk
- Communicated via a local TCP socket
Sessions are not accounts or master passwords.
They are simply a convenience mechanism for repeated encryption operations.
rune session start --session-key <key>- If the key is omitted, you’ll be prompted securely
- A session TTL can be configured (or disabled)
rune session end- Clears the session and removes the key from memory
rune session statusDisplays:
- Whether a session is active
- Associated user
- Remaining TTL (if any)
rune config showrune config whereShows where Rune stores:
- Settings
- Profiles
- Secrets (local storage)
Profiles allow you to save and switch between different configurations.
rune config profile save <name>
rune config profile load <name>
rune config profile list- Secrets are stored locally (JSON filesystem by default)
- Encryption is always client-side (decrypted secrets and encryption keys NEVER leave memory)
- Encryption mode is configurable (currently
aesgcm)
See ROADMAP.md for planned features and upcoming milestones.
Apache License 2.0