Skip to main content

keycmd 🔑

CI PyPI version

Prefix any command with keycmd to source your secrets from the OS keyring, instead of risky .env files (or worse 🙈). Your credentials are exposed as environment variables for exactly one command, and nowhere else.

📖 Documentation · 📦 PyPI · 🚀 Quick Start

Supports Windows, macOS and Linux. Common applications include npm, pip, uv, poetry, docker, docker compose and kubectl.

Quick start

uv tool install keycmd

Store a credential in your OS keyring, name it in a .keycmd file:

[keys]
OPENAI_API_KEY = { credential = "my-openai-token", username = "your-username" }

...and run anything that needs it, by putting keycmd in front of the command you were going to run anyway:

keycmd python my_openai_script.py

The variable exists inside that command, and nowhere else — no .env file, no secret pasted into your terminal, nothing left behind afterwards. 😱 → 😌

Continue with the Quick Start tutorial, which walks through storing the credential on each platform.

Why keycmd?

  • Your secrets stay in the keyring. The Windows Credential Manager, the macOS keychain and the Linux secret service already exist to keep credentials safe — keycmd reads from them, so a checked-out repository never has to contain a token.
  • Exposed for one command only, or for a subshell with keycmd --shell when you're debugging.
  • Configuration that follows your project, merged from your home folder, from .keycmd files up the directory tree, and from pyproject.toml.
  • One credential, many shapes. Format strings and aliases expose the same secret as plain text, base64, or a basic auth header — whatever each tool insists on.
  • Any keyring backend, through keyring, with no special configuration.

Documentation

Everything lives at korijn.github.io/keycmd:

  • Installation — globally, under pyenv, or from WSL
  • Running commands — prefixing a command, quoting one, subshells
  • Configuration — where it lives, keys, format strings, aliases
  • Keyring backends — third party backends, and keycmd's startup time
  • WSL — reaching the Windows Credential Manager from a distribution
  • Troubleshooting — start with keycmd --verbose
  • Examples — an OpenAI API key, and one Azure DevOps token shared by poetry, npm and docker compose
  • Reference — every flag, environment variable and configuration field

Contributing

Issues and pull requests are welcome. See Contributing and Testing to get set up:

uv sync
uv run pre-commit install
uv run pytest tests

License

MIT

Download files

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

Source Distribution

keycmd-0.8.0.tar.gz (32.2 kB view details)

Uploaded Source

Built Distribution

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

keycmd-0.8.0-py3-none-any.whl (18.4 kB view details)

Uploaded Python 3

File details

Details for the file keycmd-0.8.0.tar.gz.

File metadata

  • Download URL: keycmd-0.8.0.tar.gz
  • Upload date:
  • Size: 32.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for keycmd-0.8.0.tar.gz
Algorithm Hash digest
SHA256 ea4df9ae03877dabff3f67be668cc62afb672a89a76990ad01e254d3764fc700
MD5 28cae3459836188a4a9224662baa7ff2
BLAKE2b-256 958fdeb386f0c8a92af0dd6059cdabc8eae9c06e444f17a63383bd81f03ad838

See more details on using hashes here.

File details

Details for the file keycmd-0.8.0-py3-none-any.whl.

File metadata

  • Download URL: keycmd-0.8.0-py3-none-any.whl
  • Upload date:
  • Size: 18.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for keycmd-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1c647181e8c0810bf47d374c244ec1ad7fe2b51a2ea4419973aaed924aac9ca9
MD5 dfd2ca2497fcc4520d926e2ace6709fc
BLAKE2b-256 ae00122c5d2e89eab01492231fd60d1d6c93d1b1896d06425e04a07cffb70f00

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.8.0 This release

2 files

0.7.0

2 files

0.6.0

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 files

Supported by

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