๐ env-native
Minimalistic, zero-dependency .env
loader using Node.js's native util.parseEnv.
Significantly faster and smaller than dotenv
and dotenvx
.
If you like this module, please star the repository on GitHub. Thanks for your support!
โ ๏ธ Good to know
Since v20.12.0
, Node.js includes built-in process.loadEnvFile
and util.parseEnv
.
If you don't need env-native's CLI, stick with the built-in Node.js functions.
Example with loadEnvFile
(recommended):
process.loadEnvFile();
Example with parseEnv
:
const { parseEnv } = require('node:util');
parseEnv('HELLO=keyboard cat');
๐ Features
- Zero dependencies
- Fast and lightweight (~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)
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 low-end 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
import { config } from 'env-native';
config();
console.log(process.env.HELLO_WORLD);
๐งฉ API
config(options?)
Loads a .env
file and injects its variables into process.env
.
Parameters
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
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
--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.