Back to Denoland

Environment variables

runtime/reference/env_variables.md

latest7.9 KB
Original Source

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:

ts
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:

sh
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.

:::note

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:

sh
GREETING="Hello, world."

Import the load module to auto-import from the .env file and into the process environment.

ts
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:

shell
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:

jsonc
{

  ...
  
  "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"
    }
  }
}

:::note Variables with spaces

When setting environment variables that contain space characters in a .env file, ensure you enclose the value in quotes. For example:

shell
MY_VAR="my value with spaces"

:::

std/cli

The Deno Standard Library has a std/cli module for parsing command line arguments. Please refer to the module for documentation and examples.

Special environment variables

The Deno runtime has these special environment variables.

namedescription
DENO_AUTH_TOKENSA semi-colon separated list of bearer tokens and hostnames to use when fetching remote modules from private repositories
(e.g. [email protected];[email protected])
DENO_TLS_CA_STOREComma-separated list of order dependent certificate stores.
Possible values: system, mozilla. Defaults to mozilla.
DENO_CERTLoad certificate authority from PEM encoded file
DENO_COVERAGE_DIRSet the directory for collecting coverage profile data. This option only works for deno test subcommand.
DENO_DIRSet the cache directory
DENO_INSTALL_ROOTSet deno install's output directory (defaults to $HOME/.deno/bin)
DENO_REPL_HISTORYSet REPL history file path History file is disabled when the value is empty
(defaults to $DENO_DIR/deno_history.txt)
DENO_NO_PACKAGE_JSONDisables auto-resolution of package.json
DENO_NO_PROMPTSet to disable permission prompts on access
(alternative to passing --no-prompt on invocation)
DENO_NO_UPDATE_CHECKSet to disable checking if a newer Deno version is available
DENO_V8_FLAGSSet V8 command line options
DENO_JOBSNumber of parallel workers used for the --parallel flag with the test subcommand.
Defaults to number of available CPUs.
DENO_KV_ACCESS_TOKENPersonal access token used when connecting to Deno KV databases (for example via Deno.openKv or @deno/kv with a KV Connect URL).
DENO_WEBGPU_TRACEPath to a directory to output a WGPU trace to when using the WebGPU API
DENO_WEBGPU_BACKENDSelect 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_PROXYProxy address for HTTP requests (module downloads, fetch)
HTTPS_PROXYProxy address for HTTPS requests (module downloads, fetch)
NPM_CONFIG_REGISTRYURL to use for the npm registry.
NO_COLORSet to disable color
NO_PROXYComma-separated list of hosts which do not use a proxy (module downloads, fetch)