Skip to main content
EnvVault
EnvVault
Git-native · Age-encrypted · Zero secret storage

Your .env files belong in your Git — encrypted

EnvVault encrypts environment variables with Age and stores them in your private Git repo. No secret database, no vendor lock-in — pull locally with envvault using 2FA and a master passphrase.

  • Secrets never stored on EnvVault servers
  • Age-encrypted in your private Git repo
  • CLI pull with local 2FA + passphrase
  • GitHub, GitLab & Bitbucket

Features

Everything you need to vault envs in Git

Upload from the browser, store ciphertext in your repo, pull locally with the CLI — without handing secrets to a SaaS vault.

  • Your Git repo is the vault

    Env files live in your private GitHub, GitLab, or Bitbucket repository — not on a third-party secret store. You own the data, the history, and the backups.

  • Encrypted before Git ever sees them

    Every env file is encrypted with Age (X25519 + ChaCha20-Poly1305) and stored as {project}/{environment}.env.age. Plaintext never sits in your repo.

  • Zero secret storage on our servers

    The web app uses OAuth to talk to Git. Your .env values pass through briefly during upload, then only encrypted blobs are committed. We do not run a secrets database.

  • Local CLI authentication

    Developers pull with envvault using TOTP + a master passphrase — verified on their machine. No EnvVault login, no central auth server on pull.

  • Self-hostable & open stack

    Run EnvVault on your own infrastructure. TanStack Start, OAuth, and the @env-vault/cli npm package — no proprietary lock-in.

  • Manage from the browser

    Upload, overwrite, and delete with OAuth. Fetch decrypted envs and share links require TOTP from your authenticator app.

Workflow

How it works

Three steps from OAuth sign-in to Age-encrypted env files in your own repository.

  1. Step 1

    Authenticate with OAuth

    Connect GitHub, GitLab, or Bitbucket. We request repo scope only — no passwords stored.

  2. Step 2

    Choose your private repo

    Pick a repo and project. Files land as Age-encrypted {projectName}/{environment}.env.age blobs.

  3. Step 3

    Upload or pull envs

    Upload from the web UI or pull with envvault — decrypt locally with 2FA + passphrase.

Why EnvVault

Built for teams who already trust Git

Stop choosing between insecure .env commits, expensive secret SaaS, and CLIs that phone home on every pull.

  • Unlike cloud secret managers, your ciphertext lives in Git you control — not a vendor database.

  • Unlike plain .env commits, every file is Age-encrypted before it reaches the remote.

  • Unlike server-login CLIs, envvault authenticates locally with 2FA + passphrase — no standing vendor session.

Compare

How EnvVault stacks up

A quick look at Git-native Age encryption vs common alternatives. No vendor names — just the capabilities that matter.

Secrets stored in your own private Git repo

EnvVaultYes
Cloud secret SaaSNo
Plain .env in GitYes
Server-login CLINo

Encrypted at rest in Git (Age / .env.age)

EnvVaultYes
Cloud secret SaaSVaries
Plain .env in GitNo
Server-login CLIVaries

EnvVault / vendor never stores your secret values

EnvVaultYes
Cloud secret SaaSNo
Plain .env in GitYes
Server-login CLINo

CLI works without vendor login on every pull

EnvVaultYes
Cloud secret SaaSNo
Plain .env in GitYes
Server-login CLINo

Local 2FA + passphrase for developer pulls

EnvVaultYes
Cloud secret SaaSNo
Plain .env in GitNo
Server-login CLIVaries

GitHub, GitLab & Bitbucket support

EnvVaultYes
Cloud secret SaaSVaries
Plain .env in GitYes
Server-login CLIVaries

Self-host the management app

EnvVaultYes
Cloud secret SaaSNo
Plain .env in GitYes
Server-login CLIVaries

No monthly per-seat secret manager bill

EnvVaultYes
Cloud secret SaaSNo
Plain .env in GitYes
Server-login CLIVaries

SupportedVaries by productNot typical

Developer CLI

Pull envs without a vendor login

The envvault CLI fetches encrypted blobs from Git and decrypts locally with TOTP + passphrase. The web Manage page also requires TOTP to fetch or share decrypted envs.

  1. 1

    Install the CLI

    npm install -g @env-vault/cli — public on npm, no vendor account required.

  2. 2

    Provision once

    Download vault_key.enc + totp.secret from the web app. Save to ~/.env-vault/.

  3. 3

    Pull with 2FA

    envvault pull myapp/production .env — TOTP and passphrase unlock locally, then decrypt in memory.

Example workflow
npm install -g @env-vault/cli
envvault config set --provider github --repo owner/my-env-vault
envvault config set --git-token ghp_...
envvault pull myapp/production .env

Security

Defense in depth, end to end

Modern cryptography at every layer — from the Age blobs in Git to the passphrase-protected keys on developer machines.

  • Age in Git

    X25519 + ChaCha20-Poly1305 for every .env.age blob in your repository.

  • Passphrase-wrapped keys

    Developers hold vault_key.enc (AES-256-CBC + PBKDF2) — never commit raw Age identities.

  • TOTP for CLI pulls

    RFC 6238 two-factor verification runs locally; no EnvVault API call on pull.

  • In-memory decrypt

    Age identity unlocked in RAM for one operation, then discarded. No plaintext keys on disk.

Get started

Connect your Git provider

Sign in once with OAuth, upload encrypted envs, and provision your team with the envvault CLI.

  • Files organized as {projectName}/{environment}.env.age (Age encrypted)
  • Overwrite or rotate envs anytime from the web app
  • Delete env files when a project is retired — ciphertext removed from Git

Ready to vault your first .env?

Connect your Git provider, create a private repo, and upload — your secrets stay encrypted in Git you control.