Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,085 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This is how.

Load, expand, and compose environment variables from a deterministic dotenv cascade, then execute commands under that context. Use get‑dotenv as a library, a CLI, or a plugin‑first host to build dotenv‑aware tooling with cross‑platform shell control, CI‑friendly capture, and clear diagnostics.

get-dotenv

npm version Node Current docs changelog license

get‑dotenv helps you:

  • Load and merge env vars from a deterministic cascade (global/env × public/private) across multiple paths.
  • Expand values recursively with defaults.
  • Add dynamic variables (JS/TS) that compute from the composed env.
  • Run commands with normalized shell behavior and a consistent child environment.
  • Compose your own CLI from shipped plugins or your own.

See full guides:

Use Cases

  • Execute deployment steps across many repositories from one command sequence. See batch plugin guide
  • Run config‑driven, environment‑aware operations with simple CLI commands. See config guide
  • Compose a rich CLI from shipped and third‑party plugins and share it across projects. See shipped plugins overview
  • Drive complex AWS workflows in an authenticated, environment‑aware context. See aws plugin guide
  • Scaffold a project config and a host‑based CLI skeleton in seconds. See init plugin guide
  • Batch lint/build/test across a monorepo with deterministic output. See batch plugin guide
  • Run cross‑platform commands in CI with normalized shells and capture. See shell guide
  • Programmatically compose env and run tools inside Node scripts. See Getting started
  • Add observability without leaking secrets using trace, redaction, and entropy warnings. See diagnostics guide
  • Author new plugins with maximum DX and minimal boilerplate. See authoring plugins guide

Requirements

  • Node.js ≥ 20 (this repository pins 22.19.0 for CI/reproducibility)

Installation

npm install @karmaniverous/get-dotenv

Quick Start

Run a one‑off command with your env (parent alias so flags apply to getdotenv):

npx @karmaniverous/get-dotenv -c 'node -e "console.log(process.env.APP_SETTING ?? \"\")"'

Load programmatically:

import { getDotenv } from '@karmaniverous/get-dotenv';

const vars = await getDotenv({ env: 'dev', paths: ['./'] });
console.log(vars.APP_SETTING);

Embed a CLI quickly (shipped plugins wired for you):

#!/usr/bin/env node
import { createCli } from '@karmaniverous/get-dotenv/cli';

await createCli({ alias: 'toolbox' })();

More first steps and tips at Getting Started

Configuration & overlays

Author config in JSON/YAML/JS/TS at your project root. The loader is always on in the shipped host:

  • Data: vars (global), envVars (per‑env)
  • Root defaults and visibility for CLI flags: rootOptionDefaults, rootOptionVisibility
  • Optional scripts table: scripts
  • Dynamic (JS/TS only): dynamic
  • Validation (JS/TS schema or required keys): schema, requiredKeys

Set the target environment dynamically: defaultEnvKey names a variable in your global dotenv files (default: DEFAULT_ENV) that overrides the static defaultEnv when -e is not provided.

Overlays apply by kind/env/privacy/source with clear precedence. Details and examples in the Config guide.

Dynamic variables (JS/TS)

Add dynamic keys that compute from the composed env. Programmatic or file‑based (JS/TS). For TypeScript, install esbuild for auto‑compile.

// dynamic.ts
export default {
  GREETING: ({ APP_SETTING = '' }) => `Hello ${APP_SETTING}`,
};

Learn more in the Config guide formats section.

CLI basics

The shipped CLI is plugin‑first:

  • Execute commands within your dotenv context using the cmd subcommand or the parent alias:
    • getdotenv cmd ... or getdotenv -c 'echo $APP_SETTING'
    • Quoting, alias conflicts, expansion behavior. More info...
  • Normalize shell behavior across platforms; use --shell (default OS shell) or --shell-off, and enable capture for CI:
  • Execute across multiple working directories with the [batch plugin]guides/shipped/batch.md

Diagnostics (trace, capture, redact, entropy)

  • --trace [keys...] prints per‑key origin (dotenv | parent | unset) before spawning.
  • Deterministic output for CI: set GETDOTENV_STDIO=pipe or pass --capture.
  • Presentation‑time redaction for secret‑like keys: --redact / --redact-off (+ --redact-pattern for additional key matches).
  • Optional entropy warnings (length/printable/threshold gated) for likely secrets in logs/trace.

Learn more:

Shipped plugins

  • cmd — execute a command (with parent alias)
  • batch — run a command across multiple working directories
  • aws — establish a session and optionally forward to AWS CLI
  • init — scaffold config files and a host‑based CLI skeleton

Also see the shipped plugins overview.

Authoring your own CLI & plugins

The host resolves dotenv context once per invocation, overlays config, validates, and then runs plugins with a typed options bag.

API Reference

Typed API docs are built with TypeDoc.

Changelog

See CHANGELOG.md

License

BSD‑3‑Clause — see LICENSE


Built for you with ❤️ on Bali! Find more great tools & templates on my GitHub Profile.

About

Manage environment variables from dotenv files across multiple environments. Supports async/CLI operations, dynamic variables, custom CLI creation & more!

Topics

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages