@karmaniverous/get-dotenv
    Preparing search index...

    @karmaniverous/get-dotenv

    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:

    • 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
    • Node.js ≥ 20 (this repository pins 22.19.0 for CI/reproducibility)
    npm install @karmaniverous/get-dotenv
    

    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' }).run(process.argv.slice(2));

    More first steps and tips at Getting Started

    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

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

    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.

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

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

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

    Typed API docs are built with TypeDoc.

    See CHANGELOG.md

    BSD‑3‑Clause — see LICENSE