Skip to main content

A minimal, self-contained CLI vault for managing personal account secrets

Project description

Mimir

PyPI

A minimal, self-contained CLI vault for your account secrets. Everything lives in a single encrypted file you can store anywhere — recover it on any machine with just your master password.

Published on PyPI as mimir-vault.

  • Doomsday recovery — lose every device and still get all your accounts back from the vault file and your password.
  • Daily driver — one unlock per session, short commands, readable output.
  • Portable — Python 3.9+, a single pip install, any Linux/macOS box. No daemon, no account, no cloud lock-in.
  • Simple & auditable — small codebase, one dependency (cryptography). The whole vault is one AES-256-GCM blob; nothing is stored in plaintext.

How it works

The vault is a single file encrypted with AES-256-GCM. Your master password is stretched with scrypt to derive the key — namespace names, keys, and values are all inside the encrypted blob, so the file is safe to keep anywhere public (a Git repo, cloud storage, a USB stick).

Secrets are organized into namespaces (one per account/service), each holding key–value pairs. Values can be marked sensitive, in which case they are masked as *** unless you pass --reveal.

Setup

Requires Python 3.9+ on Linux or macOS. git is optional and only needed for push/pull.

pip install mimir-vault

Or run from a checkout with uv:

uv sync
uv run mimir --help

Create your vault and set the master password (asked once, no recovery if lost):

mimir init

By default the vault lives at ~/.config/mimir/vault.mimir. Point it elsewhere if you like:

mimir config set vault ~/Dropbox/secrets/vault.mimir

Sync to a Git remote (recommended for recovery)

So you can recover from scratch, sync the vault to a Git remote — a public GitHub repo is fine, since the file is fully encrypted. Create an empty repo, then:

mimir config set remote git@github.com:you/my-vault.git
mimir config set branch main          # optional, defaults to main
mimir push

Mimir uses your existing Git credentials and only ever tracks the vault file. To recover on a fresh machine, install mimir, set the same remote, and pull:

mimir config set remote git@github.com:you/my-vault.git
mimir pull
mimir show gmail --reveal

Usage

The master password is asked once per session (default idle timeout: 15 minutes), then cached so subsequent commands don't prompt. Run mimir lock to end the session immediately.

Namespaces

mimir add gmail                 # create a namespace
mimir list                      # list all namespaces
mimir show gmail                # show its entries (sensitive values masked)
mimir show gmail --reveal       # ...with sensitive values unmasked
mimir delete gmail              # delete the namespace and all its keys

Keys

mimir set gmail email alex@example.com        # non-sensitive value
mimir set gmail password 'hunter2' --sensitive   # masked by default
mimir get gmail email                         # -> alex@example.com
mimir get gmail password                      # -> ***
mimir get gmail password --reveal             # -> hunter2
mimir delete gmail password                   # delete a single key

-r / -s are short forms of --reveal / --sensitive.

Sync

mimir push          # commit the vault and push to the configured remote
mimir pull          # fetch the vault; refuses to overwrite a newer local copy
mimir pull --force  # overwrite the local vault regardless

Session & config

mimir lock                              # end the session now
mimir config list                       # show all config values
mimir config get session-timeout
mimir config set session-timeout 0      # 0 = never time out
Config key Default Description
vault ~/.config/mimir/vault.mimir Path to the vault file
session-timeout 900 Session idle timeout in seconds (0 = no timeout)
remote (unset) Git remote URL for push/pull
branch main Branch to push to and pull from

Config is a plain-text file at ~/.config/mimir/config and is never encrypted.

Releasing

Build and publish instructions live in publish.md.

Security notes

  • The master password is set once at mimir init. There is no recovery — lose it and the vault is unreadable.
  • The derived key is cached for the session in /tmp/mimir-<uid> (mode 0600), never the password itself. It is removed by mimir lock, on reboot, or after the idle timeout.
  • AES-GCM authenticates the file: any tampering causes decryption to fail with an explicit error.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mimir_vault-0.1.2.tar.gz (44.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mimir_vault-0.1.2-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file mimir_vault-0.1.2.tar.gz.

File metadata

  • Download URL: mimir_vault-0.1.2.tar.gz
  • Upload date:
  • Size: 44.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for mimir_vault-0.1.2.tar.gz
Algorithm Hash digest
SHA256 a878cb276f1ee3f938b105d8a0dcf338364f62fed34d1195818fd814533db85c
MD5 6a999fefb23f053bacf69fb553ff7307
BLAKE2b-256 f474e91c67a77828dc96187dcf7370d68efeecf36c5a7f604b11d91576a2ee7f

See more details on using hashes here.

File details

Details for the file mimir_vault-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: mimir_vault-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 15.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for mimir_vault-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 91aa8a065a020602e18da8ba6804acfdb2a68169b8c277de5ee6c03ed7375afd
MD5 67f9f939a2c217483ac81f803f87bc5f
BLAKE2b-256 317c1cf062a9b6a7a7950d17e34f2ea694d5ad288341714a250d084c62bc58d6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page