EthioDeploy
DocsPricingDomainsBlogToolsChangelog
Tools / .env validator & converter

.env file validator and converter

Paste a .env file to see what each loader will actually read: duplicate keys, unclosed quotes, values cut short by a #, and server secrets that a public prefix would ship to the browser. Then copy it out as JSON, YAML, Compose or docker run flags.

  • Free
  • No signup
  • 100% in your browser
  • Nothing uploaded or stored
  • Parses like dotenv

Your secrets never leave this tab. The file is checked by JavaScript in your browser. Nothing is uploaded, logged or saved, and closing the tab erases it.

7
Variables
1
Errors
3
Warnings
1
Notes
  • L2Note: DATABASE_URL points at your own machine (localhost). Set the real address on the server.
  • L4Error: NEXT_PUBLIC_ variables are copied into the JavaScript sent to every visitor. The name says it's a secret: keep it server-side without the prefix, and rotate it if it has shipped.
  • L5Warning: Unquoted value with spaces. dotenv reads it, but `source .env` runs the second word as a command. Wrap it in quotes.
  • L7Warning: Spaces around "=". dotenv trims them, but Docker's --env-file and `source .env` don't.
  • L8Warning: PORT is set again (first on line 7). The last one wins, so the earlier value is dead.
{
  "DATABASE_URL": "postgres://app:secret@localhost:5432/app",
  "NEXT_PUBLIC_SUPABASE_URL": "https://abcd.supabase.co",
  "NEXT_PUBLIC_SUPABASE_SERVICE_ROLE_KEY": "eyJhbGciOiJIUzI1NiJ9.example",
  "APP_NAME": "My App",
  "SESSION_SECRET": "s3cr3t#value",
  "PORT": "8080",
  "STRIPE_SECRET_KEY": "sk_test_example"
}
Parsed variables (7)
DATABASE_URLpos••••••••••••
NEXT_PUBLIC_SUPABASE_URLhtt••••••••••••
NEXT_PUBLIC_SUPABASE_SERVICE_ROLE_KEYeyJ••••••••••••
APP_NAMEMy •••
SESSION_SECRETs3c•••••••••
PORT••••
STRIPE_SECRET_KEYsk_••••••••••••
EthioDeploy

Deploying this app? Paste the whole file once.

On EthioDeploy, paste a full .env into the environment variables form and every line becomes its own variable, encrypted at rest and injected on the next deploy. Same parser rules as this page.

How env vars work

How to use it

  1. 01

    Paste the file

    Paste a .env file, or a JSON object of variables. The check runs as you type.

  2. 02

    Fix errors first

    Errors are lines a loader skips or misreads, and public variables that hold a secret. Warnings work in dotenv but break in a shell or Docker.

  3. 03

    Compare and convert

    Paste your .env.example to list missing keys, then pick an output format and copy it. Duplicates resolve to the last value.

What the checks mean

Public prefixes
Variables starting with NEXT_PUBLIC_, VITE_, REACT_APP_ or EXPO_PUBLIC_are written into the JavaScript bundle at build time. Anyone can read them in the browser's dev tools, so a service-role key or a live payment key there is public.
The # in a value
dotenv ends an unquoted value at the first #, so PASS=abc#123 reads as abc. Quote any value that contains one.
dotenv vs Docker vs shell
docker run --env-file takes each line literally: no quotes removed, no export, no spaces around =. source .env follows shell rules, where an unquoted space splits the value.
Duplicates
When a key appears twice, the later line wins in dotenv, Docker and most hosting dashboards. The earlier value is dead text that someone will edit by mistake.
FAQ

Questions

Last updated November 1, 2026

Yes. The file is parsed by JavaScript in your browser tab and never sent to our servers or anyone else's. It isn't logged, saved to storage or kept after you close the tab, and values are masked in the variable list unless you choose to show them. To check, open your browser's dev tools, go to the Network tab and paste: no request goes out. You can also turn off your internet after the page loads and the tool keeps working.

The usual causes are a key that is set on your machine but not on the server, a typo or case difference in the key name, and front-end variables that were missing at build time. Vite and Next.js inline public variables during the build, so they must be set before the build runs, not only at runtime.

Yes, in dotenv, if it is wrapped in double quotes, which is how private keys are usually stored. You can also write \n inside double quotes. Docker's --env-file does not support multiline values.

No. Commit a .env.example with the keys and empty or dummy values, add .env to .gitignore, and set the real values in your hosting provider's settings. If a .env with real keys was ever pushed, rotate those keys.

Paste the file above and choose JSON. Every key becomes a string property; if a key appears twice, the last value is used, matching how dotenv loads it.

More free tools

All tools
AILLM token counterCount tokens for GPT models exactly and estimate Claude, with each token highlighted in your text.BotsDiscord permissions calculatorPick bot permissions, get the integer and the invite link, or decode a permissions number.

Read next: Vite env variables undefined in production · Environment variables on EthioDeploy

Ship it from GitHub.

EthioDeploy builds and runs your app on every push, with a database and HTTPS. Free plan, no card.

Deploy free
EthioDeploy

Agentic first development and deployment, started in Ethiopia, built for developers everywhere.

Telegram community
Product
PricingAI coding agentAgent mode docsDomainsCLIFree backend hostingHosting in EthiopiaChangelog
Deploy guides
Next.jsNode.jsPythonSvelteKitTanStack StartDjangoFastAPIFlaskExpressNestJSLaravelRailsGoTelegram botLovableBoltReplitv0Google AI StudioBase44Firebase StudioClaude Code & Cursor
Compare
vs Herokuvs Vercelvs Rendervs Railwayvs Fly.iovs NetlifyHeroku alternativesVercel alternativesNetlify alternativesRender alternativesRailway alternativesFly.io alternativesReplit alternatives
Resources
DocsBlogFree toolsAboutSupportContactllms.txt
© 2026 EthioDeployPay by card in USD or bank transfer in ETBTermsPrivacy