Choose a secret store
Use local Age secrets, an external OpenBao or Vault server, or a managed development server.
For a local project, start with Age: an encrypted store that does not need a separate server. See environment values and secrets. Use OpenBao or Vault when your team already has a server, or when you need to test that integration locally.
Connect an existing server
Give the connection a name, such as team-secrets, in .config/mm.yaml:
providers:
team-secrets:
driver: openbao
scope: project
mode: external
address: https://provider.example.test:8200
storage-mount: mm-kv
automation-auth-mount: mm-approle
trust-bundle: company-ca.pem
expected-trust-sha256: sha256:HEX_DIGEST
secrets:
database.password:
storage:
provider: team-secrets
location: database/password
Replace the address, trust bundle, and digest with verified server details. Store the public trust bundle in the project. Never put tokens, unseal keys, or TLS private keys in this file.
mm secret provider add team-secrets --driver openbao --mode external --scope project
mm secret provider test team-secrets
mm secret provider status team-secrets
Setup asks for credentials through a hidden prompt after showing its plan. Use the OpenBao or Vault guide for server requirements and bootstrap options.
Run a local development server
A managed provider is a server mm starts and maintains for you. Declare the
instance using the driver guide, then review its installation:
mm secret provider plan local-secrets --operation install
mm secret provider apply local-secrets --operation install --plan PLAN_HASH --yes
mm secret provider status local-secrets
Replace PLAN_HASH with the printed hash. These servers require shared local
ingress and a local Docker Compose or rootless Podman Compose runtime. Swarm
and remote managed lifecycle operations are unsupported. Rootless Podman also
needs a working user namespace and podman unshare.
Managed providers are for development, not production high availability or automatic unsealing after a disaster. Each instance has separate data volumes and a loopback-only management port.
Inspect or remove
mm secret provider list
mm secret provider show local-secrets
mm secret provider plan local-secrets --operation remove
mm secret provider remove local-secrets --plan REMOVE_PLAN_HASH --yes
Removal preserves data by default. Add --purge to both removal commands only
when you intend to delete it. Changing a provider's driver or mode requires a
reviewed replacement, not an in-place edit.
See the CLI reference for backup and restore options and the provider definitions for machine-readable supported operations.