Skip to content
This repository was archived by the owner on Dec 6, 2025. It is now read-only.
/ env-native Public archive

Minimalistic, dependency-free .env loader using Node.js's native util.parseEnv. Much faster than dotenv, with CLI support.

License

Notifications You must be signed in to change notification settings

sefinek/env-native

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

78 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“„ 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!

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

⚠️ 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(); // It will immediately load your .env file into process.env

Example with parseEnv:

const { parseEnv } = require('node:util');
parseEnv('HELLO=keyboard cat');// Returns: { 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)

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 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(); // require('env-native').config(); for CJS

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.