Shared over chat or by hand
Plaintext lingers in message history, on devices, and in backups — and you can't take it back.
Offline-first secret sharing CLI
Kapsaro is a secret-sharing tool for Git/PR-centric teams. It encrypts secrets per member, so you can review who has access and what changed in a pull request — no dedicated server or external SaaS.
brew install ebisawa/kapsaro/kapsaro
# 1. Import an existing .env, encrypted
kapsaro import .env
# 2. Review the encrypted diff in a PR
git add . && git commit -m "update secrets"
# 3. Run without writing plaintext
kapsaro run -- npm start
01 · The problem
The states you most want to avoid: you just send it over chat, it only lives on one laptop, and nobody knows who holds which value.
Plaintext lingers in message history, on devices, and in backups — and you can't take it back.
You lose track of where the latest value is and who actually has it.
There is no record of who changed what and when, or who it is currently shared with.
02 · The solution
Not enough to justify a dedicated secrets management platform or a cloud Secrets Manager, but you want to stop handing out plaintext. Kapsaro fills that gap — no dedicated server or external SaaS.
Secrets are encrypted to each member's public key, so there is no shared password to distribute. Ciphertext lives under .kapsaro/secrets/, keeping the plaintext .env out of the repository.
Both value changes and recipient updates show up as a diff in a pull request, on the same review flow as your code.
kapsaro run passes decrypted values to the process, leaving no plaintext file on disk.
03 · How it works
Your application startup stays familiar. Only the decrypted values are passed as environment variables.
You can use an existing Ed25519 SSH key, such as one already used with GitHub.
Secrets are encrypted per key, so changed entries and signatures are the primary diff.
Decrypted values are passed to the process, leaving no plaintext file on disk.
# 1. Initialize the workspace
kapsaro init --member-handle alice@example.com
# 2. Encrypt and import your existing .env
kapsaro import .env
# 3. Run without writing plaintext
kapsaro run -- npm start
# 4. Retrieve a single value
kapsaro get DATABASE_URL
04 · Good fit
For teams that want to step out of plaintext sharing without changing their Git workflow. It is not a control plane for every production secret — pair it with a dedicated Secrets Manager or KMS where you need instant revocation, detailed audit logs, or dynamic secrets.
Share the .env used locally or in staging without passing plaintext around.
Distribute client certificates and key files in a traceable way.
Manage narrowly scoped CI secrets through the same repository review.
Run on your existing repository and PR review without adopting new infrastructure.
05 · Security
Kapsaro protects secrets with public-key cryptography — keyed per member — and proven, industry-standard algorithms. It does not rely on a custom cryptographic algorithm.
Secrets are encrypted with public-key cryptography, addressed to each recipient. There is no shared password or common key to hand around; only the registered owner can decrypt with their own key.
Kapsaro uses published, widely vetted public-key encryption and signatures (such as HPKE and Ed25519) rather than homegrown cryptography.
Encryption and decryption happen locally. The keys that can decrypt stay on each member's machine, and the repository holds only ciphertext — so there is no single place whose breach leaks all the plaintext.
06 · Getting started
If you already have an Ed25519 SSH key — the one you use with GitHub — you can start in your existing repository. No GPG, no dedicated server, no external SaaS. Install with Homebrew and import your existing .env.
# Homebrew
brew install ebisawa/kapsaro/kapsaro
# Initialize and import
kapsaro init --member-handle alice@example.com
kapsaro import .env
Appendix · FAQ
kapsaro import .env imports it. After that, use kapsaro run or kapsaro get.kapsaro encrypt and kapsaro decrypt.