Local-first encryption
Every value is sealed with AES-256-GCM on your machine — a random IV per push, bound to your company, project, and environment.
packshell encrypts your .env files locally with AES-256-GCM, syncs the cipher through the cloud, and decrypts them only on your teammates’ machines. Not on the server. Not in the database. Nowhere in between.
A single .env file passes through dozens of hands and tools — and every hop is a place a key can leak, get cached, or quietly outlive the person who shared it.
Pasted into a shell, captured in history forever.
Dropped in Slack, screenshotted, never deleted.
Logged into Jira, visible to the whole org.
Copied between branches and deploy scripts.
From your terminal to your team — encryption happens before anything leaves your machine, and decryption happens only on theirs.
RSA-4096 keypair, generated on your machine.
Link a project. Get an AES-256 project key.
Encrypt locally, then upload the cipher blob.
Wrap the key to each teammate’s public key.
Teammate decrypts on their machine. Done.
Encryption isn’t a feature bolted on top — it’s the architecture. Here’s exactly what protects your secrets.
Every value is sealed with AES-256-GCM on your machine — a random IV per push, bound to your company, project, and environment.
Project keys are sealed individually to each member’s RSA-4096 public key. Access is granted without exposing a single secret.
The API receives only authenticated cipher bytes. There is no decryption key anywhere on the server. Ever.
Remove a member and their wrapped key copy vanishes. They can’t decrypt future — or cached — versions.
Plan-aware retention with a full Firestore audit trail: who pushed or pulled what, and when.
Each push records a SHA-256 of the plaintext and a key count, so corruption and drift are caught instantly.
No dashboards to babysit. packshell is a calm, fast command-line tool that fits straight into your existing workflow.
$ packshell authLog in via browser, register your public key.
$ packshell initLink the current project, mint a project key.
$ packshell pushEncrypt .env locally and upload the cipher.
$ packshell pullDownload the latest version and decrypt it.
$ packshell diffSee changed keys — never any values.
$ packshell inviteAdd a teammate and seal them the key.
$ packshell watchAuto-pull when a newer version lands.
Every plan ships full client-side encryption. Upgrade anytime with a premium code — packshell redeem.
Install the CLI, run packshell auth, and your team is syncing sealed environments before your coffee’s cold.
$npm install -g packshell