One matrix, every environment
Keys as rows, environments as columns. Edit a value where it lives, not in four tabs.
FreeOpen source · macOS
Local-first secrets manager for developers. Edit variables across environments, catch drift before it ships, use them from the CLI.
Features
Keys as rows, environments as columns. Edit a value where it lives, not in four tabs.
Smart views flag values that differ between environments and keys missing from one of them.
Values stay masked until you reveal them. Press ⌘L to lock, and Vault locks itself after two idle minutes.
$ lpm env import --env=production .env.production
✓ imported 6 secrets from .env.production (production)
$ lpm run start --env=production
Env: production (via --env · 6 vault secrets)
The signed lpm CLI reads the same Keychain items. lpm dev and lpm run load them into your scripts at startup. No account, no daemon, no SDK.
Import existing files, export any environment. No proprietary format to migrate away from.
How it works
Import what you have, edit in the matrix, and point the CLI at your vault. Your app reads normal environment variables.
Create a project, add its environments, and import an existing .env file into each one.
Change values in the matrix and spot keys that drift or go missing before you ship.
Copy the vault ID into lpm.json. Then lpm dev and lpm run load the right values for each script.
{ "$schema": "https://cli.lpm.dev/schemas/lpm.json", "vault": "7f3a1e2c-5b9d-4a8f-b6c1-9b1d2e3f4a5b"}
$ lpm dev
Env: default (6 vault secrets)
$
Security
Vault keeps values in the macOS Keychain on your Mac, shared with the signed lpm CLI. Sync with lpm.dev is optional, and values are encrypted on your Mac before they leave it.
macOS 14 or later · Apple silicon and Intel · Free, MIT or Apache-2.0