Environment variables
There are a few ways to use environment variables in Deno:
Built-in Deno.env method
The Deno runtime offers built-in support for environment variables with Deno.env.
Deno.env has getter and setter methods. Here is example usage:
Deno.env.set("FIREBASE_API_KEY", "examplekey123");
Deno.env.set("FIREBASE_AUTH_DOMAIN", "firebasedomain.com");
console.log(Deno.env.get("FIREBASE_API_KEY")); // examplekey123
console.log(Deno.env.get("FIREBASE_AUTH_DOMAIN")); // firebasedomain.com
console.log(Deno.env.has("FIREBASE_AUTH_DOMAIN")); // true
.env file
Deno also supports .env files. You can tell Deno to read environment variables from .env with the --env-file flag, for example:
deno run --env-file main.ts
This will read the .env file from the current working directory or the first parent directory that contains one. If you want to load environment variables from a different file, you can specify that file as a parameter to the flag.
You can pass multiple --env-file flags (e.g., deno run --env-file=.env.one --env-file=.env.two --allow-env <script>) to load variables from multiple files.
When multiple declarations for the same environment variable exist within a single .env file, the first occurrence is applied. However, if the same variable is defined across multiple .env files (using multiple --env-file arguments), the value from the last file specified takes precedence. This means that the first occurrence found in the last .env file listed will be applied.
@std/dotenv
The dotenv package in the standard library can be used to load environment variables from .env.
Let's say you have an .env file that looks like this:
GREETING="Hello, world."
Import the load module to auto-import from the .env file and into the process environment.
import { load } from "jsr:@std/dotenv";
const env = await load({
// optional: choose a specific path (defaults to ".env")
envPath: ".env.local",
// optional: also export to the process environment (so Deno.env can read it)
export: true,
});
console.log(env.GREETING);
console.log(Deno.env.get("GREETING"));
Run this with deno run --allow-read --allow-env app.ts.
Further documentation for .env handling can be found in the @std/dotenv documentation.
Set a variable when running a command
As with other CLI commands, you can set environment variables before running a command like so:
MY_VAR="my value" deno run main.ts
This can be useful when you want to vary a task based on an environment variable, and can be helpfully combined with deno task commands like so:
{
...
"tasks": {
"build:full": {
"description": "Build the site with all features",
"command": "BUILD_TYPE=FULL deno run main.ts"
},
"build:light": {
"description": "Build the site without expensive operations",
"command": "BUILD_TYPE=LIGHT deno run main.ts"
}
}
}
When setting environment variables that contain space characters in a .env file, ensure you enclose the value in quotes. For example:
MY_VAR="my value with spaces"
Special environment variables
The Deno runtime has these special environment variables.
| name | description |
|---|---|
| DENO_AUTH_TOKENS | A semi-colon separated list of bearer tokens and hostnames to use when fetching remote modules from private repositories (e.g. abcde12345@deno.land;54321edcba@github.com) |
| DENO_TLS_CA_STORE | Comma-separated list of order dependent certificate stores. Possible values: system, mozilla. Defaults to mozilla. |
| DENO_CERT | Load certificate authorities from a PEM encoded file. The file can contain more than one certificate, each in its own PEM block. This is the environment variable form of the --cert flag. |
| NODE_EXTRA_CA_CERTS | Path to a PEM file with extra certificate authorities. Loaded at the root certificate store level, so the certs are honored by fetch(), Deno.connectTls(), and Node compat APIs (node:https, node:tls). Available in Deno 2.8+. Missing or invalid files emit a warning rather than failing, matching Node.js. |
| DENO_COVERAGE_DIR | Set the directory for collecting coverage profile data. This option only works for deno test subcommand. |
| DENO_DIR | Set the cache directory |
| DENO_INSTALL | Used by the shell install script to choose where the deno executable is installed. The binary is placed at $DENO_INSTALL/bin/deno. |
| DENO_INSTALL_ROOT | Set the installation root for deno install. Executables are placed in its bin subdirectory, unless the path already ends with bin (defaults to $HOME/.deno, i.e. executables go to $HOME/.deno/bin) |
| DENO_REPL_HISTORY | Set REPL history file path History file is disabled when the value is empty (defaults to $DENO_DIR/deno_history.txt) |
| DENO_NO_PACKAGE_JSON | Disables auto-resolution of package.json
|
| DENO_CONDITIONS | Comma-separated list of custom conditions to use when resolving npm package exports (equivalent to the --conditions flag) |
| DENO_UNSTABLE_TSGO | Set to 1 to type-check with TypeScript's native (Go) compiler. Equivalent to the --unstable-tsgo flag. See TypeScript. |
| DENO_NO_PROMPT | Set to disable permission prompts on access (alternative to passing --no-prompt on invocation) |
| DENO_NO_UPDATE_CHECK | Set to disable checking if a newer Deno version is available |
| DENO_V8_FLAGS | Set V8 command line options |
| DENO_JOBS | Number of parallel workers used for the --parallel flag with the test subcommand.Defaults to number of available CPUs. |
| DENO_KV_ACCESS_TOKEN | Personal access token used when connecting to Deno KV databases (for example via Deno.openKv or @deno/kv with a KV Connect URL). |
| DENO_AUDIT_PERMISSIONS | Audit every permission access. Set to a file path to write JSONL, or to the literal value otel to emit OpenTelemetry log records via the configured OTel exporter. See permissions audit for the field set. |
| DENO_TRACE_PERMISSIONS | Set to 1 to enable stack traces in permission prompts (disabled by default because collecting traces costs performance) |
| DENO_WEBGPU_TRACE | Path to a directory to output a WGPU trace to when using the WebGPU API |
| DENO_WEBGPU_BACKEND | Select the backend WebGPU will use, or a comma separated list of backends in order of preference. Possible values are vulkan, dx12, metal, or opengl
|
| HTTP_PROXY | Proxy address for HTTP requests (module downloads, fetch) |
| HTTPS_PROXY | Proxy address for HTTPS requests (module downloads, fetch) |
| NPM_CONFIG_REGISTRY | URL to use for the npm registry. |
| NO_COLOR | Set to disable color |
| NO_PROXY | Comma-separated list of hosts which do not use a proxy (module downloads, fetch) |
Last updated on
© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/reference/env_variables