Skip to content

Latest commit

 

History

History
543 lines (521 loc) · 42.5 KB

File metadata and controls

543 lines (521 loc) · 42.5 KB
title
From the creator of {% include components/dotenv.html %}

Secrets for Agents

The secrets CLI for agents—and developers.
Protect secrets across prompts, code, and runtime.

{% include components/three-key-rect.html height="170px" class="h-[170px] md:!h-[560px]" %}

Trusted by AI platforms and tools powering agentic software.

<div class="mt-10 md:mt-12 max-w-[58rem] md:max-w-[50rem] lg:max-w-[64rem] mx-auto grid grid-cols-2 sm:grid-cols-3 md:grid-cols-3 lg:grid-cols-6 gap-x-3 md:gap-x-4 lg:gap-x-8 gap-y-7 md:gap-y-8 items-center">
<a href="https://github.com/GoogleCloudPlatform/cloud-run-mcp" target="_blank" class="flex items-center justify-center opacity-100 text-zinc-100 dark:text-zinc-100" aria-label="Google Cloud Run MCP repository">
      {% include logos/google2.html class="w-[10.2rem] lg:w-[12.3rem] h-auto mx-auto" %}
</a>
<a href="https://supabase.com/docs/guides/local-development/managing-config#going-further" target="_blank" class="flex items-center justify-center opacity-100 text-zinc-100 dark:text-zinc-100" aria-label="Supabase documentation using dotenvx for branching">
      {% include logos/supabase2.html class="w-[9.2rem] lg:w-[12.1rem] h-auto mx-auto" %}
</a>
<a href="https://github.com/daytonaio/daytona" target="_blank" class="flex items-center justify-center opacity-100 text-zinc-100 dark:text-zinc-100" aria-label="Daytona repository">
      {% include logos/daytona.html class="w-[10.2rem] lg:w-[12.3rem] h-auto mx-auto" %}
</a>
<a href="https://github.com/RooCodeInc/Roo-Code" target="_blank" class="hidden md:flex items-center justify-center opacity-100 text-zinc-100 dark:text-zinc-100" aria-label="RooCode repository">
      {% include logos/roocode.html class="w-[10.2rem] lg:w-[13.6rem] h-auto mx-auto" %}
</a>
<a href="https://github.com/nasa/earthdata-search" target="_blank" class="hidden md:flex items-center justify-center opacity-100 text-zinc-100 dark:text-zinc-100" aria-label="NASA Earthdata Search using dotenvx">
      {% include logos/nasa.html class="h-14 lg:h-15 w-auto mx-auto" %}
</a>
<a href="https://www.npmjs.com/package/@webflow/webflow-cli?activeTab=readme" target="_blank" class="flex items-center justify-center opacity-100 text-zinc-100 dark:text-zinc-100" aria-label="Webflow CLI npm package">
      {% include logos/webflow.html class="w-[10.2rem] lg:w-[12.3rem] h-auto mx-auto" %}
</a>
<a href="https://github.com/TencentCloudBase" target="_blank" class="flex items-center justify-center opacity-100 text-zinc-100 dark:text-zinc-100" aria-label="Tencent CloudBase organization">
      {% include logos/tencent.html class="w-[10.2rem] lg:w-[12.3rem] h-auto mx-auto" %}
</a>
<a href="https://github.com/paypal/agent-toolkit" target="_blank" class="hidden md:flex items-center justify-center opacity-100 text-zinc-100 dark:text-zinc-100" aria-label="PayPal agent toolkit using dotenvx">
  {% include logos/paypal.html class="h-10 lg:h-11 w-auto mx-auto" %}
</a>
<a href="https://github.com/SocketDev/socket-cli" target="_blank" class="hidden md:flex items-center justify-center opacity-100 text-zinc-100 dark:text-zinc-100" aria-label="Socket CLI using dotenvx">
      {% include logos/socket2.html class="w-[8.9rem] lg:w-[12.1rem] h-auto mx-auto" %}
</a>
<a href="https://docs.amplify.aws/react/deploy-and-host/fullstack-branching/secrets-and-vars/#local-environment-2" target="_blank" class="flex items-center justify-center opacity-100 text-zinc-100 dark:text-zinc-100" aria-label="AWS documentation referencing dotenvx">
      {% include logos/aws.html class="h-16 lg:h-15 w-auto mx-auto" %}
</a>
<a href="https://github.com/shadcn-ui/ui" target="_blank" class="hidden md:flex items-center justify-center opacity-100 text-zinc-100 dark:text-zinc-100" aria-label="shadcn/ui repository">
      {% include logos/shadcn.html class="w-[8.9rem] lg:w-[12.1rem] h-auto mx-auto" %}
</a>
<a href="https://github.com/search?q=org%3Abrowser-use%20dotenvx&type=code" target="_blank" class="hidden md:flex items-center justify-center opacity-100 text-zinc-100 dark:text-zinc-100" aria-label="Browser Use repository">
      {% include logos/browser-use.html class="w-[8.9rem] lg:w-[12.1rem] h-auto mx-auto" %}
</a>
</div>

Encrypted .env files for agent stacks in one line.

Keep the .env interface agents already expect, but make it encrypted.

// before
require('dotenv').config()
// after
require('@dotenvx/dotenvx').config()
1

Install

Replace dotenv with @dotenvx/dotenvx.

2

Encrypt

Run dotenvx encrypt and protect your secrets.

3

Protect

Protect secrets across prompts, code, and runtime.

Built-in for agent architecture.

Encrypt, inject, scope, and audit secrets without changing how agents run.

01

Encrypt

dotenvx encrypt

Commit ciphertext in .env files. Keep private keys separate from code.

{% include components/live-demo-encrypt.html %}
<article class="feature-cli-card hidden lg:flex flex-col rounded-lg border border-zinc-800 bg-zinc-950/60 p-5 md:p-6 md:col-span-1 lg:col-span-3 min-h-[14rem] md:min-h-[15.5rem]">
  <div class="text-[#ecd53f] text-xs font-semibold tracking-[0.12em] uppercase">02</div>
  <div class="feature-card-head mt-3">
    <h3 class="m-0 text-zinc-100 text-2xl md:text-[2rem] leading-[1.08]">Inject</h3>
    <div class="feature-cli-cmd"><code>dotenvx run -- your-agent</code></div>
  </div>
  <p class="mt-2 text-zinc-400 text-sm md:text-base">Decrypt only at runtime for the command or agent process that needs it.</p>
  {% include components/live-demo-run.html %}
</article>
02

Inject

dotenvx run -- your-agent

Decrypt only at runtime for the command or agent process that needs it.

{% include components/live-demo-run.html %}
<article class="feature-cli-card flex flex-col rounded-lg border border-zinc-800 bg-zinc-950/60 p-5 md:p-6 min-h-[11.5rem] md:min-h-[12.5rem]">
  <div class="text-[#ecd53f] text-xs font-semibold tracking-[0.12em] uppercase">03</div>
  <div class="feature-card-head mt-3">
    <h3 class="m-0 text-zinc-100 text-xl md:text-[1.55rem] leading-[1.1]">Scope</h3>
    <div class="feature-cli-cmd"><code>dotenvx run -f .env.production</code></div>
  </div>
  <p class="mt-2 text-zinc-400 text-sm md:text-base">Load the right secret set per environment so agents only get what they should.</p>
  <div class="feature-cli-visual feature-cli-visual-scope">
    <div class="feature-chip-row">
      <span class="feature-chip">.env</span>
      <span class="feature-chip feature-chip-active">.env.production</span>
      <span class="feature-chip">.env.ci</span>
    </div>
  </div>
</article>

<article class="feature-cli-card flex flex-col rounded-lg border border-zinc-800 bg-zinc-950/60 p-5 md:p-6 min-h-[11.5rem] md:min-h-[12.5rem]">
  <div class="text-[#ecd53f] text-xs font-semibold tracking-[0.12em] uppercase">04</div>
  <div class="feature-card-head mt-3">
    <h3 class="m-0 text-zinc-100 text-xl md:text-[1.55rem] leading-[1.1]">Audit</h3>
    <div class="feature-cli-cmd"><code>git diff .env*</code></div>
  </div>
  <p class="mt-2 text-zinc-400 text-sm md:text-base">Track encrypted secret changes through Git history and PR review workflows.</p>
  <div class="feature-cli-visual feature-cli-visual-audit">
    <div class="feature-diff-line">+ DATABASE_URL="encrypted:..."</div>
    <div class="feature-diff-line">+ OPENAI_API_KEY="encrypted:..."</div>
  </div>
</article>

<article class="feature-cli-card flex flex-col rounded-lg border border-zinc-800 bg-zinc-950/60 p-5 md:p-6 min-h-[11.5rem] md:min-h-[12.5rem]">
  <div class="text-[#ecd53f] text-xs font-semibold tracking-[0.12em] uppercase">05</div>
  <div class="feature-card-head mt-3">
    <h3 class="m-0 text-zinc-100 text-xl md:text-[1.55rem] leading-[1.1]">Rotate</h3>
    <div class="feature-cli-cmd"><code>dotenvx rotate</code></div>
  </div>
  <p class="mt-2 text-zinc-400 text-sm md:text-base">Rotate aging or compromised secrets without rewriting agent code.</p>
  <div class="feature-cli-visual feature-cli-visual-rotate">
    <div class="feature-rotate-row">
      <span class="feature-rotate-key">DOTENV_PRIVATE_KEY</span>
      <span class="feature-rotate-v">v3</span>
      <span class="feature-rotate-arrow">→</span>
      <span class="feature-rotate-v feature-rotate-v-new">v4</span>
    </div>
  </div>
</article>

Developers are talking about Dotenvx.

Installed 5 million times a week on npm.

Ben Holmes

Ben Holmes Warp

@BHolmesDev

dotenvx is really smart concept. Instead of plaintext .env’s, secrets are encrypted files. Agents can't read them, and they're shippable to cloud runners with a single key.

11:58 AM · Mar 4, 2026 · 65.9K views
21
26
426
505
<a href="https://x.com/commte/status/1996144456891060730?s=46" target="_blank" rel="noopener noreferrer" class="block h-full cursor-pointer select-none rounded-lg border border-zinc-800 bg-[#06080d] p-5 md:p-6 no-underline hover:no-underline hover:border-zinc-700 transition-[border-color,transform] duration-150 active:translate-y-px md:flex md:flex-col">
  <div class="flex items-start justify-between gap-3">
    <div class="flex items-center gap-2 min-w-0">
      <img src="/assets/img/testimonials/commte.jpg" alt="コムテ" class="h-9 w-9 self-center rounded-full border border-zinc-700 object-cover" />
      <div class="min-w-0 self-center">
        <p class="m-0 text-zinc-100 font-semibold text-sm leading-tight truncate">コムテ</p>
        <p class="m-0 mt-px text-zinc-500 text-xs leading-tight truncate font-normal">@commte</p>
      </div>
    </div>
  </div>
  <p class="mt-3.5 text-zinc-500 text-xs leading-tight font-normal"><span class="text-sky-400">Show translation</span></p>
  <p class="mt-2.5 text-zinc-300 text-sm leading-relaxed font-normal">
    <span class="block">.env 共有は dotenvxが最強</span>
    <span class="block">.env を暗号化したまま Git にコミットできるツール</span>
    <span class="block">便利さそのまま+漏洩リスクほぼゼロ</span>
    <span class="mt-3 block">・平文 .env を配らなくていい</span>
    <span class="block">・GitHub に上げても解読されない</span>
    <span class="block">・チーム開発で共有がラク</span>
  </p>
  <div class="mt-auto">
  <div class="mt-3.5 text-[11px] leading-4 font-normal text-zinc-500">1:08 AM · Dec 3, 2025 · <span class="text-zinc-400 font-medium">505.3K</span> views</div>
  <div class="mt-3 border-t border-zinc-800 py-2.5 flex items-center justify-start gap-5 text-zinc-500 text-xs">
    <div class="inline-flex items-center gap-1.5">
      <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
        <path d="M21 11.5a8.5 8.5 0 0 1-8.5 8.5h-6l-3.5 2 1.3-3.9A8.5 8.5 0 1 1 21 11.5Z"></path>
      </svg>
      <span class="text-zinc-300 font-semibold">3</span>
    </div>
    <div class="inline-flex items-center gap-1.5">
      <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
        <path d="m17 1 4 4-4 4"></path>
        <path d="M3 11V9a4 4 0 0 1 4-4h14"></path>
        <path d="m7 23-4-4 4-4"></path>
        <path d="M21 13v2a4 4 0 0 1-4 4H3"></path>
      </svg>
      <span class="text-zinc-300 font-semibold">346</span>
    </div>
    <div class="inline-flex items-center gap-1.5">
      <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
        <path d="M12 21s-7.2-4.5-9.4-8.2C.7 9.8 2 6.2 5.4 5.2c2-.6 4.2.1 5.6 1.8 1.4-1.7 3.6-2.4 5.6-1.8 3.4 1 4.7 4.6 2.8 7.6C19.2 16.5 12 21 12 21Z"></path>
      </svg>
      <span class="text-zinc-300 font-semibold">2K</span>
    </div>
    <div class="inline-flex items-center gap-1.5">
      <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
        <path d="M6 3h12a1 1 0 0 1 1 1v17l-7-4-7 4V4a1 1 0 0 1 1-1Z"></path>
      </svg>
      <span class="text-zinc-300 font-semibold">1.9K</span>
    </div>
  </div>
  </div>
</a>

<a href="https://x.com/kristianfreeman/status/1808552701673808135?s=46" target="_blank" rel="noopener noreferrer" class="block h-full cursor-pointer select-none rounded-lg border border-zinc-800 bg-[#06080d] p-5 md:p-6 no-underline hover:no-underline hover:border-zinc-700 transition-[border-color,transform] duration-150 active:translate-y-px md:flex md:flex-col">
  <div class="flex items-start justify-between gap-3">
    <div class="flex items-center gap-2 min-w-0">
      <img src="/assets/img/testimonials/kristian-freeman.jpg" alt="Kristian Freeman" class="h-9 w-9 self-center rounded-full border border-zinc-700 object-cover" />
      <div class="min-w-0 self-center">
        <p class="m-0 text-zinc-100 font-semibold text-sm leading-tight truncate inline-flex items-center gap-1.5">
          <span>Kristian Freeman</span>
          <span class="inline-flex h-4 w-4 items-center justify-center rounded-[3px] border border-zinc-700/80 bg-zinc-950">
            <img src="/assets/img/testimonials/cloudflare.jpg" alt="Cloudflare" class="h-3 w-3 rounded-[1px] object-cover" />
          </span>
        </p>
        <p class="m-0 mt-px text-zinc-500 text-xs leading-tight truncate font-normal">@kristianfreeman</p>
      </div>
    </div>
  </div>
  <p class="mt-3.5 text-zinc-300 text-sm leading-relaxed font-normal">
    <span class="block">Dotenvx looks like an interesting upgrade to .env</span>
    <span class="mt-2.5 block">Automatic encrypting of each value, almost identical usage in CLI and API</span>
    <span class="mt-2.5 block">Rails does something similar - though the whole file is encrypted!</span>
  </p>
  <div class="mt-auto">
  <div class="mt-3.5 text-[11px] leading-4 font-normal text-zinc-500">10:25 AM · Jul 3, 2024 · <span class="text-zinc-400 font-medium">652</span> views</div>
  <div class="mt-3 border-t border-zinc-800 py-2.5 flex items-center justify-start gap-5 text-zinc-500 text-xs">
    <div class="inline-flex items-center gap-1.5">
      <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
        <path d="M21 11.5a8.5 8.5 0 0 1-8.5 8.5h-6l-3.5 2 1.3-3.9A8.5 8.5 0 1 1 21 11.5Z"></path>
      </svg>
      <span class="text-zinc-300 font-semibold">1</span>
    </div>
    <div class="inline-flex items-center gap-1.5">
      <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
        <path d="m17 1 4 4-4 4"></path>
        <path d="M3 11V9a4 4 0 0 1 4-4h14"></path>
        <path d="m7 23-4-4 4-4"></path>
        <path d="M21 13v2a4 4 0 0 1-4 4H3"></path>
      </svg>
      <span class="text-zinc-300 font-semibold">3</span>
    </div>
    <div class="inline-flex items-center gap-1.5">
      <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
        <path d="M12 21s-7.2-4.5-9.4-8.2C.7 9.8 2 6.2 5.4 5.2c2-.6 4.2.1 5.6 1.8 1.4-1.7 3.6-2.4 5.6-1.8 3.4 1 4.7 4.6 2.8 7.6C19.2 16.5 12 21 12 21Z"></path>
      </svg>
      <span class="text-zinc-300 font-semibold">10</span>
    </div>
    <div class="inline-flex items-center gap-1.5">
      <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
        <path d="M6 3h12a1 1 0 0 1 1 1v17l-7-4-7 4V4a1 1 0 0 1 1-1Z"></path>
      </svg>
      <span class="text-zinc-300 font-semibold">3</span>
    </div>
  </div>
  </div>
</a>

<a href="https://x.com/mizchi/status/2028845137833631901?s=46" target="_blank" rel="noopener noreferrer" class="block h-full cursor-pointer select-none rounded-lg border border-zinc-800 bg-[#06080d] p-5 md:p-6 no-underline hover:no-underline hover:border-zinc-700 transition-[border-color,transform] duration-150 active:translate-y-px md:flex md:flex-col">
  <div class="flex items-start justify-between gap-3">
    <div class="flex items-center gap-2 min-w-0">
      <img src="/assets/img/testimonials/mizchi.jpg" alt="mizchi" class="h-9 w-9 self-center rounded-full border border-zinc-700 object-cover" />
      <div class="min-w-0 self-center">
        <p class="m-0 text-zinc-100 font-semibold text-sm leading-tight truncate">mizchi</p>
        <p class="m-0 mt-px text-zinc-500 text-xs leading-tight truncate font-normal">@mizchi</p>
      </div>
    </div>
  </div>
  <p class="mt-3.5 text-zinc-500 text-xs leading-tight font-normal"><span class="text-sky-400">Show translation</span></p>
  <p class="mt-2.5 text-zinc-300 text-sm leading-relaxed font-normal">
    <span class="block">.env とAIの問題、dotenvx がもっと普及したらいいと思う</span>
  </p>
  <div class="mt-auto">
  <div class="mt-3.5 text-[11px] leading-4 font-normal text-zinc-500">6:49 AM · Mar 3, 2026 · <span class="text-zinc-400 font-medium">43.8K</span> views</div>
  <div class="mt-3 border-t border-zinc-800 py-2.5 flex items-center justify-start gap-5 text-zinc-500 text-xs">
    <div class="inline-flex items-center gap-1.5">
      <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
        <path d="m17 1 4 4-4 4"></path>
        <path d="M3 11V9a4 4 0 0 1 4-4h14"></path>
        <path d="m7 23-4-4 4-4"></path>
        <path d="M21 13v2a4 4 0 0 1-4 4H3"></path>
      </svg>
      <span class="text-zinc-300 font-semibold">82</span>
    </div>
    <div class="inline-flex items-center gap-1.5">
      <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
        <path d="M12 21s-7.2-4.5-9.4-8.2C.7 9.8 2 6.2 5.4 5.2c2-.6 4.2.1 5.6 1.8 1.4-1.7 3.6-2.4 5.6-1.8 3.4 1 4.7 4.6 2.8 7.6C19.2 16.5 12 21 12 21Z"></path>
      </svg>
      <span class="text-zinc-300 font-semibold">640</span>
    </div>
    <div class="inline-flex items-center gap-1.5">
      <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
        <path d="M6 3h12a1 1 0 0 1 1 1v17l-7-4-7 4V4a1 1 0 0 1 1-1Z"></path>
      </svg>
      <span class="text-zinc-300 font-semibold">726</span>
    </div>
  </div>
  </div>
</a>
<a href="https://x.com/zaidmukaddam/status/1941193539486089311?s=46" target="_blank" rel="noopener noreferrer" class="block h-full cursor-pointer select-none rounded-lg border border-zinc-800 bg-[#06080d] p-5 md:p-6 no-underline hover:no-underline hover:border-zinc-700 transition-[border-color,transform] duration-150 active:translate-y-px md:flex md:flex-col">
  <div class="flex items-start justify-between gap-3">
    <div class="flex items-center gap-2 min-w-0">
      <img src="/assets/img/testimonials/zaid.jpg" alt="Zaid" class="h-9 w-9 self-center rounded-full border border-zinc-700 object-cover" />
      <div class="min-w-0 self-center">
        <p class="m-0 text-zinc-100 font-semibold text-sm leading-tight truncate">Zaid</p>
        <p class="m-0 mt-px text-zinc-500 text-xs leading-tight truncate font-normal">@zaidmukaddam</p>
      </div>
    </div>
  </div>
  <p class="mt-3.5 text-zinc-300 text-sm leading-relaxed font-normal">
    <span class="block">you can deploy env files to prod now?</span>
    <span class="mt-2.5 block">creators of dotenv have been working on dotenvx which encrypts your env variables so llms can’t read them, basically it keeps secrets from leaking into prompts or model context</span>
  </p>
  <div class="mt-auto">
  <div class="mt-3.5 text-[11px] leading-4 font-normal text-zinc-500">10:53 AM · Jul 4, 2025 · <span class="text-zinc-400 font-medium">6,760</span> views</div>
  <div class="mt-3 border-t border-zinc-800 py-2.5 flex items-center justify-start gap-5 text-zinc-500 text-xs">
    <div class="inline-flex items-center gap-1.5">
      <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
        <path d="M21 11.5a8.5 8.5 0 0 1-8.5 8.5h-6l-3.5 2 1.3-3.9A8.5 8.5 0 1 1 21 11.5Z"></path>
      </svg>
      <span class="text-zinc-300 font-semibold">9</span>
    </div>
    <div class="inline-flex items-center gap-1.5">
      <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
        <path d="m17 1 4 4-4 4"></path>
        <path d="M3 11V9a4 4 0 0 1 4-4h14"></path>
        <path d="m7 23-4-4 4-4"></path>
        <path d="M21 13v2a4 4 0 0 1-4 4H3"></path>
      </svg>
      <span class="text-zinc-300 font-semibold">10</span>
    </div>
    <div class="inline-flex items-center gap-1.5">
      <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
        <path d="M12 21s-7.2-4.5-9.4-8.2C.7 9.8 2 6.2 5.4 5.2c2-.6 4.2.1 5.6 1.8 1.4-1.7 3.6-2.4 5.6-1.8 3.4 1 4.7 4.6 2.8 7.6C19.2 16.5 12 21 12 21Z"></path>
      </svg>
      <span class="text-zinc-300 font-semibold">154</span>
    </div>
    <div class="inline-flex items-center gap-1.5">
      <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
        <path d="M6 3h12a1 1 0 0 1 1 1v17l-7-4-7 4V4a1 1 0 0 1 1-1Z"></path>
      </svg>
      <span class="text-zinc-300 font-semibold">71</span>
    </div>
  </div>
  </div>
</a>

<a href="https://x.com/kenn/status/1906194315358937095" target="_blank" rel="noopener noreferrer" class="block h-full cursor-pointer select-none rounded-lg border border-zinc-800 bg-[#06080d] p-5 md:p-6 no-underline hover:no-underline hover:border-zinc-700 transition-[border-color,transform] duration-150 active:translate-y-px md:flex md:flex-col">
  <div class="flex items-start justify-between gap-3">
    <div class="flex items-center gap-2 min-w-0">
      <img src="/assets/img/testimonials/kenn.jpg" alt="Kenn Ejima" class="h-9 w-9 self-center rounded-full border border-zinc-700 object-cover" />
      <div class="min-w-0 self-center">
        <p class="m-0 text-zinc-100 font-semibold text-sm leading-tight truncate">Kenn Ejima</p>
        <p class="m-0 mt-px text-zinc-500 text-xs leading-tight truncate font-normal">@kenn</p>
      </div>
    </div>
  </div>
  <p class="mt-3.5 text-zinc-500 text-xs leading-tight font-normal"><span class="text-sky-400">Show translation</span></p>
  <p class="mt-2.5 text-zinc-300 text-sm leading-relaxed font-normal">
    <span class="block">今まで1passwordで.envを共有してたけど、dotenvxを使えば.env自体を暗号化してgit管理できるようになることを知ってこれに乗り換えることにした。</span>
    <span class="mt-2.5 block">管理対象が秘密鍵1個だけになるのでメンバーの入れ替わりなどでAPI Keyを個別にローテーションする手間もなくなる。</span>
    <span class="mt-2.5 block">時代は進化している!</span>
  </p>
  <div class="mt-auto">
  <div class="mt-3.5 text-[11px] leading-4 font-normal text-zinc-500">8:58 PM · Mar 29, 2025 · <span class="text-zinc-400 font-medium">250.5K</span> views</div>
  <div class="mt-3 border-t border-zinc-800 py-2.5 flex items-center justify-start gap-5 text-zinc-500 text-xs">
    <div class="inline-flex items-center gap-1.5">
      <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
        <path d="M21 11.5a8.5 8.5 0 0 1-8.5 8.5h-6l-3.5 2 1.3-3.9A8.5 8.5 0 1 1 21 11.5Z"></path>
      </svg>
      <span class="text-zinc-300 font-semibold">1</span>
    </div>
    <div class="inline-flex items-center gap-1.5">
      <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
        <path d="m17 1 4 4-4 4"></path>
        <path d="M3 11V9a4 4 0 0 1 4-4h14"></path>
        <path d="m7 23-4-4 4-4"></path>
        <path d="M21 13v2a4 4 0 0 1-4 4H3"></path>
      </svg>
      <span class="text-zinc-300 font-semibold">154</span>
    </div>
    <div class="inline-flex items-center gap-1.5">
      <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
        <path d="M12 21s-7.2-4.5-9.4-8.2C.7 9.8 2 6.2 5.4 5.2c2-.6 4.2.1 5.6 1.8 1.4-1.7 3.6-2.4 5.6-1.8 3.4 1 4.7 4.6 2.8 7.6C19.2 16.5 12 21 12 21Z"></path>
      </svg>
      <span class="text-zinc-300 font-semibold">1.3K</span>
    </div>
    <div class="inline-flex items-center gap-1.5">
      <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
        <path d="M6 3h12a1 1 0 0 1 1 1v17l-7-4-7 4V4a1 1 0 0 1 1-1Z"></path>
      </svg>
      <span class="text-zinc-300 font-semibold">1.1K</span>
    </div>
  </div>
  </div>
</a>

FAQ

{% include components/faq-question.html question="How does encryption work?" answer='Dotenvx uses Elliptic Curve Integrated Encryption Scheme (ECIES) to encrypt each secret with a unique ephemeral key, while ensuring it can be decrypted using a long-term private key.

When you initialize encryption, a DOTENV_PUBLIC_KEY (encryption key) and DOTENV_PRIVATE_KEY (decryption key) are generated. The DOTENV_PUBLIC_KEY is used to encrypt secrets, and the DOTENV_PRIVATE_KEY is securely stored in your cloud secrets manager or .env.keys file.

Your encrypted .env file is then safely committed to code. Even if the file is exposed, secrets remain protected since decryption requires the separate DOTENV_PRIVATE_KEY, which is never stored alongside it. Read the whitepaper for more details.' %} {% include components/faq-question.html question="Is it safe to commit an encrypted .env file to code?" answer='Yes. Dotenvx encrypts secrets using AES-256 with ephemeral keys, ensuring that even if the encrypted .env file is exposed, its contents remain secure. The encryption keys themselves are protected using Secp256k1 elliptic curve cryptography, which is widely used for secure key exchange in technologies like Bitcoin.

This means that every secret in the .env file is encrypted with a unique AES-256 key, and that key is further encrypted using a public key (Secp256k1). Even if an attacker obtains the encrypted .env file, they would still need the corresponding private key—stored separately—to decrypt anything.

Breaking this encryption would require brute-forcing both AES-256 and elliptic curve cryptography, which is computationally infeasible with current technology. Read the whitepaper for more details.' %} {% include components/faq-question.html question="How does it protect me from security incidents like Vercel?" answer="In the Vercel incident scenario, if an attacker accesses environment variables, they still cannot decrypt your encrypted .env secrets without the separate private decryption key. To steal your secrets, an attacker needs both the private key and the encrypted .env files." %}

The future of secrets.
Available today.