Build Doppler
KINDAreplaces $21/mosaves $252/yrback to the verdict
Secrets management without a secrets server: sops and age encrypt env files you commit, a wrapper decrypts them into a process and never to disk, environments have different recipients so a laptop key cannot read production, CI holds one key, rotation removes a leaver, and a push command feeds one platform.
Before step 1
Everything below is assumed from the first step. Tick each one when you actually have it, not when you plan to.
- installfree
Why Every step below is a command you type or a file you edit.
Get it VS Code (code.visualstudio.com), Cursor or Zed. Open a folder for the project and use the editor's built-in terminal. open ↗
Verify
You can open a folder and run a command in its terminal - installfree
Why History for your code, and the way most hosts deploy.
Get it Install from git-scm.com or with your package manager, then run git init in the project folder once it exists. open ↗
Verify
git --version prints a version - installfree
Why The whole mechanism.
Get it brew install sops age, or the releases pages. age-keygen -o key.txt creates a key pair. open ↗
Verify
sops --version and age --version print - decidefree
Why Recipients define who can decrypt each environment.
Get it Each person runs age-keygen; the private key goes in their password manager, the public key into .sops.yaml.
- accountfree
Why Phase 5 pushes secrets into one platform via its CLI.
Get it Vercel, Railway or Fly CLI logged in.
- accountfree
Why CI holds only the age private key.
Get it GitHub Actions: Settings > Secrets and variables > Actions.
Environment variables
These go in a .env file the app reads at startup. The pack's .env.example is this table as a file · copy it, never commit the filled-in version.
| Variable | Needed | Example | Where the value comes from |
|---|---|---|---|
SOPS_AGE_KEY_FILE | required | ~/.config/sops/age/keys.txt | Where sops finds your private key locally. |
SOPS_AGE_KEYsecret | optional | AGE-SECRET-KEY-... | The CI private key, set only in the CI secret store. |
The build, in order
Keys and one file
An encrypted dev.env committed; plaintext never can be.
Files
.sops.yamlsecrets/dev.envterminalage-keygen -o ~/.config/sops/age/keys.txt sops --encrypt --in-place secrets/dev.env
done when · tick each as it passesRuntime
secrets run --env dev -- npm start, nothing decrypted to disk.
- terminal
sops exec-env secrets/dev.env 'npm start'
done when · tick each as it passesEnvironments and CI
Rotation and audit
Remove a leaver; see who changed what.
- terminal
sops updatekeys secrets/*.env
done when · tick each as it passesSync where needed
One platform fed from the encrypted file.
Files
README.md
done when · tick each as it passesTeam hygieneproduct builder
Onboarding and offboarding as procedures.
done when · tick each as it passes
That is the whole plan for Doppler. What it deliberately does not cover is below · check the gaps before you call it a replacement.
- Dynamic secrets, sync to every platform, per-person access in a UI.
- one-click sync into Vercel, AWS, GitHub Actions and the rest
- the audit log and access control per person
- automatic rotation and dynamic secrets
- the dashboard
- Infisical self-hosted when the team outgrows files
Need the files? The project pack on the verdict page hands your agent the whole brief · more security.