GUIDE · COMPARISON 9 min ·

Doppler for solo developersWhat it gets right. Where it falls short.

Doppler has a real free tier, a clean dashboard, and a CLI that injects secrets at exec time. It also has a fundamental problem for anyone running AI coding agents: the injected env vars still flow to every child process the agent spawns.

TL;DR· the answer, in twenty seconds

What: Doppler is a SaaS secret manager with a usable dashboard and a CLI that wraps commands with injected env vars. For solo devs who deploy to cloud infrastructure, it solves real problems around env sprawl and team sharing.

The gap: doppler run -- your-command injects secrets into the full environment of every child process, including AI coding agents and anything the agent spawns. There is no per-process or per-call scoping at the OS level. The env leak vector that cost GitGuardian's 2026 State of Secrets Sprawl report its headline stat (AI-assisted commits leak 2x more often) runs directly through this model.

Lesson: Injection at exec time is better than ambient shell exports. It still is not process-tree scoping. If your workflow includes an AI coding agent that touches production keys, exec-time injection solves 60% of the problem and leaves 40% open.

Doppler has been around since 2019, graduated from Y Combinator, and now has more than 25,000 customers. For a team of two shipping a SaaS product, that pedigree matters. The product is not vaporware. The docs are complete. The CLI works.

But "works for teams" and "works for solo devs running AI coding agents" are different questions. Most Doppler reviews assume the former. This one assumes the latter.

The short version: Doppler is worth using if you already live in cloud infrastructure and want central secret storage with per-environment promotion. It is a bad fit if you are paranoid about where your secrets sit, if you work in a regulated industry, or if you run an AI coding agent against production secrets and care about what those secrets can touch.

What to know in 60 seconds

  • Doppler's free tier allows unlimited projects, unlimited environments, and one user. Team features (access policies, audit logs, SCIM) start at $6/user/month as of early 2026.
  • doppler run -- node server.js injects your project's secrets as env vars before starting the process. The process itself does not need Doppler installed.
  • Secrets live in Doppler's cloud. Your local machine gets a Doppler token; the token fetches secrets at run time. That token is the new secret-zero.
  • Every child process the wrapped command spawns inherits the full env. If you doppler run -- claude code, the agent gets all your secrets and so does everything the agent runs.
  • Doppler supports GitHub Actions, Vercel, Railway, and most CI providers natively. For those integrations, a service token replaces the developer token but introduces the same problem one level up.

What Doppler gets right

The dashboard is the best argument for Doppler. You log in, create a project, add dev, staging, and production environments, and set per-environment values. No YAML templating. No .env.staging file checked into the wrong branch. The diff view when you promote from staging to production is clear: here are the values that differ, confirm and push.

The CLI is similarly clean:

doppler setup          # interactive: pick project and environment
doppler run -- npm start
doppler secrets        # list current env's secrets
doppler secrets set STRIPE_KEY=sk_live_...

doppler run is the key behavior. Instead of export STRIPE_KEY=$(doppler secrets get STRIPE_KEY --plain) polluting your shell, the key exists only inside the child process. Your terminal session never holds it. If you run env in a parallel shell tab, the key is not there.

That is a genuine improvement over the standard .env workflow. It is better than direnv. It is better than source .env. The threat model it addresses (accidental env output, shell history, shell snapshot capture) is real.

Doppler also manages the "two-person problem" for tiny teams without a lot of ceremony. Developer A sets the production key in Doppler, Developer B runs doppler run -- ... and gets the current value without ever seeing the raw string. For a two-person startup sharing a production Stripe account, that is a lot of operational overhead removed.

Where the free tier actually draws the line

The Doppler free plan is genuinely free for one user. Not a 14-day trial, not a feature-locked demo. One developer, unlimited projects, unlimited environments, the full CLI. For a solo developer, the free tier covers everything except team access controls and the audit log.

The audit log is the catch. On the free plan, you do not get fine-grained access audit. You can see who updated a secret, but not a full read history. If something leaks from your Doppler environment, attribution is limited.

Team pricing at $6/user/month is not expensive for a funded startup. For a solo developer or a two-person bootstrapped project with no revenue, it is a recurring line item for something you could handle with a local vault and a bit of tooling.

The pricing model also has a structural lock-in question. Your secrets are in Doppler's cloud. Migration means scripting an export, auditing every integration, and updating every deployment that expects a Doppler service token. That is a half-day task minimum, not a one-liner.

Doppler run does not scope to the calling process

This is the part most comparisons skip.

doppler run -- your-command works by setting env vars in the child process's environment before exec. The child process inherits a full environment that includes every secret Doppler injected. Every subprocess that child spawns also inherits those vars. That is how Unix process inheritance works: fork copies the parent's env, and exec preserves it unless the new process explicitly unsets variables.

If your-command is claude code (or Cursor, or Aider, or any other coding agent), the agent process has your full Doppler environment. The agent can read DATABASE_URL directly. The agent can write it to a file, pass it to a tool, or log it in its scratchpad. Anything the agent spawns (npm scripts, shell commands via tool use, MCP servers) inherits the same env.

Knostic's February 2026 disclosure about Claude Code's settings.local.json recording environment variables is the concrete version of this risk. The disclosure found env-var capture in roughly 1-in-13 npm packages. Doppler does not change that attack surface. An agent wrapped in doppler run has just as many secrets to capture as an agent started with export statements. The source looks different; the env the agent reads is the same.

GitGuardian's 2026 State of Secrets Sprawl reported AI-assisted commits leak 2x more often than human-only commits. That number does not go down because secrets arrived via doppler run. The agent still has them. The leak vector is still open.

The service token is another secret-zero

Setting up Doppler in CI requires a service token:

# In GitHub Actions
- name: Inject secrets
  uses: dopplerhq/cli-action@v3
  env:
    DOPPLER_TOKEN: $

You stored DOPPLER_TOKEN in GitHub Actions secrets to avoid storing the actual secrets in GitHub Actions secrets. The attack surface shifted by one hop. If your Actions configuration is compromised, the attacker fetches everything in your Doppler project rather than just the secrets you had listed individually.

This is not unique to Doppler. HashiCorp Vault, AWS Secrets Manager, and every other centralized secret broker has the same structural property. The broker token is a master key that retrieves the actual keys. If the broker token leaks, everything in the broker is at risk. For a solo developer, that means a single GitHub Actions secret can unlock all your production credentials if an attacker gets it.

The question is whether the consolidation helps or hurts your threat model. For a five-person team with separate Doppler access policies per environment, it probably helps. For a solo developer with one Doppler project holding dev, staging, and production secrets, it concentrates the blast radius.

What gets missed: SaaS trust is not the same as local trust

Most Doppler reviews end with "great product, easy to use, recommended." The SaaS model rarely gets examined.

Your secrets sit on Doppler's servers. Doppler encrypts them at rest and in transit. Their security page lists SOC 2 Type II and describes their key management architecture. That is credible. It is not the same as local-first.

Local-first means the plaintext value of your DATABASE_URL never leaves your machine unless you send it somewhere yourself. With Doppler, the plaintext traverses Doppler's infrastructure on every doppler run invocation. Their CLI fetches secrets over HTTPS, decrypts them, and injects them into your process. Doppler sees the plaintext. That is the trust model.

For most developers, that is fine. For a developer working on a project for a healthcare client, a financial institution, or a government contractor, "fine" needs a compliance review, not an assumption. HIPAA, FedRAMP, and SOC 2 requirements do not disappear because a tool is popular.

For paranoid solo developers (a category that is not pathological, it is just an accurate risk assessment), the question is whether the convenience of a dashboard is worth trusting a third party with every production credential you own.

When to pick Doppler

Doppler is the right call if:

  • You are a team of two or more who need shared secret access without emailing .env files around.
  • Your production infrastructure is already cloud-hosted (Vercel, Railway, Render, Fly.io), and Doppler's native integrations will replace manual env var configuration in dashboards.
  • You want per-environment secret promotion with a clear diff view.
  • You are not running AI coding agents with access to production secrets.
  • You are comfortable with SaaS trust: Doppler encrypts and stores your secrets, and you trust their infrastructure.

When to skip Doppler

Skip Doppler if:

  • Your secrets cannot leave your machine for compliance reasons.
  • Your workflow is solo and you do not need shared access, so the dashboard value proposition does not apply.
  • You run an AI coding agent as part of your development loop and that agent touches non-throwaway credentials. The env-inheritance problem makes every doppler run -- agent invocation a potential exposure.
  • You want an audit log and you are not paying for the team tier.
  • You are concerned about the broker-token attack surface in CI: a compromised DOPPLER_TOKEN in your Actions secrets unlocks everything in Doppler, not just the secrets you thought were isolated.

A checklist for evaluating any secret manager

## Secret manager evaluation

- [ ] Where does the secret plaintext go? (local only, or SaaS cloud)
- [ ] What is the broker token, and where does it live?
- [ ] Does the injection method scope to a single process or the full process tree?
- [ ] Is the audit log available on the free/starter tier?
- [ ] Does the tool support process-tree scoping, or does it set env vars (inherited by all children)?
- [ ] If using with an AI coding agent: does the agent inherit the injected env?
- [ ] What happens if the service token used in CI leaks?
- [ ] What is the migration path if you want to leave?
- [ ] Are there compliance requirements (HIPAA, FedRAMP, SOC 2) that affect the trust model?

Run this list before committing to any tool, Doppler included. The questions do not change by vendor, but the answers do.

What this means for your stack

The env-inheritance problem is not a Doppler bug. It is a limit of how secrets managers that wrap processes with environment variables work. The OS hands every forked child a copy of the parent's env. No CLI flag changes that. The only way to avoid it is to not put secrets in the environment in the first place, or to scope delivery to a specific process boundary at exec time.

That is a different architecture: a local broker that holds secrets in an encrypted vault, receives a request from a specific process, injects the value into that process only at exec time, and writes an audit record for each delivery. The agent running adjacent to your editor gets a reference, not the value. When the agent spawns a subprocess, the subprocess does not automatically inherit the secret because the secret was never in the parent's env.

hasp is one working implementation. curl -fsSL https://gethasp.com/install.sh | sh, hasp setup, connect a project, and the next time an AI coding agent runs, it gets a reference rather than a live credential in its inherited environment. Source-available (FCL-1.0), local-first, macOS and Linux, no account.

Doppler is a good product for the problem it solves. The problem it solves is team secret sharing with a cloud-hosted vault. If that is your problem, it solves it well. If your problem is keeping secrets away from AI coding agents that inherit everything their parent process holds, a different class of tool applies.

Sources· cited above, in one place

NEXT STEP~90 seconds

Stop handing the agent your real keys.

hasp keeps secrets in one local encrypted vault, brokers them into the child process at exec, and never lets the agent read the value.

  • Local, encrypted vault — no account, no cloud, no telemetry by default.
  • Brokered run — agent gets a reference, the child process gets the value.
  • Pre-commit + pre-push hooks catch managed values before they ship.
  • Append-only HMAC audit log answers "did the agent touch the prod token?" in seconds.
→ okvault unlocked · binding ./api
→ okgrant once · pid 88421
→ okagent never read

macOS & Linux. Source-available (FCL-1.0, converts to Apache 2.0). No account.

Browse all clusters· eight threads, one index