env-native
TypeScript icon, indicating that this package has built-in type declarations

1.1.2 • Public • Published

📄 env-native

Minimalistic, zero-dependency .env loader powered by Node.js's native util.parseEnv. Significantly faster and smaller than dotenv and dotenvx. Designed for performance-critical, production-grade use cases in demanding environments. If you like this module, please star the repository on GitHub. Thank you!

npm version npm downloads Install size Build status Node.js version License MIT

🚀 Features

  • Zero dependencies
  • Fast and lightweight (just 14 KB)
  • Uses built-in util.parseEnv
  • Simple API: config(options) or parse(content, options)
  • Supports custom file paths and variable overrides
  • Supports CLI
  • ESM and CJS support
  • No self-promotion or console spam, unlike dotenv
  • Requires Node.js ≥ 20.12.0

📦 Installation

npm

npm install env-native

yarn

yarn add env-native

Make sure you're using Node.js version 20.12.0 or newer.

🧪 Benchmark (Node.js v22.17.0)

Module Size Workstation (ms) Thin Client (ms)
env-native (ESM) ~ 14 KB 0.79, 0.78, 0.78, 0.76 2.55, 2.97, 2.74, 2.51
dotenv (CJS) ~ 79 KB 7.71, 8.06, 8.1, 8.61 37.40, 40.96, 37.91, 35.93
dotenvx (CJS) ~ 293 KB 91.82, 97.76, 96.76, 99.50 286.74, 270.07, 269.07, 278.70

env-native is fast, clean, and native — with no logs, no overhead, and up to 90× faster than dotenvx on weaker systems. dotenvx is maintained by the same author as dotenv.

Test Environment

Workstation

  • CPU: AMD Ryzen 9 7945HX
  • Disk: KINGSTON SKC3000S1024G (NVM Express 1.4)
  • OS: Windows 11 Home 24H2

Thin Client

  • CPU: AMD GX-420GI
  • Disk: WD Red WDS500G1R0B (M.2 SATA)
  • OS: Ubuntu 24.04.2 LTS (Linux 6.8.0-63-generic)

🧪 Example

.env

HELLO_WORLD="Keyboard cat! https://youtu.be/J---aiyznGQ"

process.js

require('env-native').config();
console.log(process.env.HELLO_WORLD); // Keyboard cat! https://youtu.be/J---aiyznGQ

🧩 API

config(options?)

Loads a .env file and injects its variables into process.env.

Parameters

Option Type Default Description
path string .env Path to your .env file
encoding string utf8 File encoding
override boolean false Overwrite existing process.env variables

Note: All injected variables are always stored as strings in process.env.

Returns

void

Example with options

require('env-native').config({ path: './config/.env', override: true });

parse(content: string, options?)

Parses raw .env file content using the native util.parseEnv. Does not inject anything into process.env.

Parameters

Option Type Default Description
coerce boolean true Automatically converts values: "false"false, "42"42, etc.
freeze boolean true Freeze returned object (immutable)

Returns

Record<string, string | number | boolean>

Example

const { readFileSync } = require('node:fs');
const { parse } = require('env-native');

const raw = readFileSync('./config/.my-env-file', 'utf8');
const parsed = parse(raw, { coerce: true, freeze: true });

console.log(parsed);

🖥️ CLI Usage

env-native [--env <file>] [--coerce|--no-coerce] [--freeze|--no-freeze] [--cmd <command> [args...]]
enative [--env <file>] [--coerce|--no-coerce] [--freeze|--no-freeze]

The CLI is available as both env-native and enative (alias).

Options

Flag Alias Default Description
--env <file> -e .env Path to .env file
--cmd <command> -c Command to execute with loaded environment
--coerce true Auto-convert numbers and booleans
--no-coerce Disable auto-convert
--freeze true Freeze parsed object
--no-freeze Disable freezing
--help -h Show help message
--version -v Print version

Examples

env-native --env .env
env-native --env .env --no-coerce --no-freeze
env-native --env .env --cmd node app.js
env-native -e .env -c node app.js

🔒 License

Copyright © Sefinek. Licensed under the MIT License.

Dependents (0)

Package Sidebar

Install

npm i env-native

Weekly Downloads

24

Version

1.1.2

License

MIT

Unpacked Size

14.4 kB

Total Files

6

Last publish

Collaborators

  • sefinek