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.
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.
{
"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"
}| DATABASE_URL | pos•••••••••••• |
|---|---|
| NEXT_PUBLIC_SUPABASE_URL | htt•••••••••••• |
| NEXT_PUBLIC_SUPABASE_SERVICE_ROLE_KEY | eyJ•••••••••••• |
| APP_NAME | My ••• |
| SESSION_SECRET | s3c••••••••• |
| PORT | •••• |
| STRIPE_SECRET_KEY | sk_•••••••••••• |
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.
Paste a .env file, or a JSON object of variables. The check runs as you type.
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.
Paste your .env.example to list missing keys, then pick an output format and copy it. Duplicates resolve to the last value.
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.#, so PASS=abc#123 reads as abc. Quote any value that contains one.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.Last updated
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.
Read next: Vite env variables undefined in production · Environment variables on EthioDeploy
EthioDeploy builds and runs your app on every push, with a database and HTTPS. Free plan, no card.
Deploy free