.env is end-to-end encrypted, shared with your team, and ready to deploy from a Node.js app. Five commands.
1
Install the CLI
2
Sync your secrets
From any project that has a On the first run, Capy authenticates you in the browser, creates a project, encrypts every value in your
.env:.env, and uploads the ciphertext. Capy rewrites .env in place with capy:… snippets, gitignores it, and commits only keep.lock - a small versioning manifest that lets teammates find the right project.Run capy again whenever you want to pull or push changes.3
Invite a teammate
capy redeem <code> and now share access - no key material ever touches Capy’s backend in plaintext.4
Run your app
Wrap your command with Capy decrypts Add it to your
capy run:.env in memory and spawns your process with plaintext values available as process.env. Your code reads env vars the standard way - no library to import:package.json scripts and forget it:5
Deploy
SECRETS_BLOB and PROJECT_KEY into the repo’s Actions secrets so your workflow can wrap its deploy step in capy run. For every other platform it opens a local setup page in your browser with the exact env vars - SECRETS_BLOB and PROJECT_KEY - to paste into that platform’s secret store.On the token + docs path, keep capy run as your production start command—when SECRETS_BLOB and PROJECT_KEY are both set, capy run ignores .env and decrypts the blob instead. The Vercel, Cloudflare, and AWS connectors write the values into the platform’s own store, so those deployments read them from the platform and need no capy run. The deploy token is double-wrapped: half lives with your platform, half lives with the Capy service, and your app combines the two at boot time to derive the decryption key in memory.capy, redeploy. Anyone you’ve invited stays in sync. Anyone you’ve kicked loses access immediately, with no re-encryption needed.
What’s next
How it works
The full cryptographic design.
CLI Reference
Every command, every flag.