Announcement đź“Ł
From the makers that brought you Dotenv, introducing Dotenv Sync.
Sync your .env files between machines, environments, and team members.
Join the early access list.đź’›

# dotenv dotenv Dotenv is a zero-dependency module that loads environment variables from a `.env` file into [`process.env`](https://nodejs.org/docs/latest/api/process.html#process_process_env). Storing configuration in the environment separate from code is based on [The Twelve-Factor App](http://12factor.net/config) methodology. [![BuildStatus](https://img.shields.io/travis/motdotla/dotenv/master.svg?style=flat-square)](https://travis-ci.org/motdotla/dotenv) [![Build status](https://ci.appveyor.com/api/projects/status/github/motdotla/dotenv?svg=true)](https://ci.appveyor.com/project/motdotla/dotenv/branch/master) [![NPM version](https://img.shields.io/npm/v/dotenv.svg?style=flat-square)](https://www.npmjs.com/package/dotenv) [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard) [![Coverage Status](https://img.shields.io/coveralls/motdotla/dotenv/master.svg?style=flat-square)](https://coveralls.io/github/motdotla/dotenv?branch=coverall-intergration) [![LICENSE](https://img.shields.io/github/license/motdotla/dotenv.svg)](LICENSE) [![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org) [![Rate on Openbase](https://badges.openbase.com/js/rating/dotenv.svg)](https://openbase.com/js/dotenv) ## Install ```bash # install locally (recommended) npm install dotenv --save ``` Or installing with yarn? `yarn add dotenv` ## Usage Usage is easy! ### 1. Create a `.env` file in the **root directory** of your project. ```dosini # .env file # # Add environment-specific variables on new lines in the form of NAME=VALUE # DB_HOST=localhost DB_USER=root DB_PASS=s1mpl3 ``` ### 2. As early as possible in your application, import and configure dotenv. ```javascript // index.js require('dotenv').config() console.log(process.env) // remove this after you've confirmed it working ``` .. or using ES6? ```javascript // index.mjs (ESM) import 'dotenv/config' // see https://github.com/motdotla/dotenv#how-do-i-use-dotenv-with-import import express from 'express' ``` ### 3. That's it! 🎉 `process.env` now has the keys and values you defined in your `.env` file. ```javascript require('dotenv').config() ... const db = require('db') db.connect({ host: process.env.DB_HOST, username: process.env.DB_USER, password: process.env.DB_PASS }) ``` ## Examples See [examples](https://github.com/dotenv-org/examples) of using dotenv with various frameworks, languages, and configurations. * [nodejs](https://github.com/dotenv-org/examples/tree/master/dotenv-nodejs) * [nodejs (debug on)](https://github.com/dotenv-org/examples/tree/master/dotenv-nodejs-debug) * [nodejs (override on)](https://github.com/dotenv-org/examples/tree/master/dotenv-nodejs-override) * [esm](https://github.com/dotenv-org/examples/tree/master/dotenv-esm) * [esm (preload)](https://github.com/dotenv-org/examples/tree/master/dotenv-esm-preload) * [typescript](https://github.com/dotenv-org/examples/tree/master/dotenv-typescript) * [typescript parse](https://github.com/dotenv-org/examples/tree/master/dotenv-typescript-parse) * [typescript config](https://github.com/dotenv-org/examples/tree/master/dotenv-typescript-config) * [webpack](https://github.com/dotenv-org/examples/tree/master/dotenv-webpack) * [webpack (plugin)](https://github.com/dotenv-org/examples/tree/master/dotenv-webpack2) * [react](https://github.com/dotenv-org/examples/tree/master/dotenv-react) * [react (typescript)](https://github.com/dotenv-org/examples/tree/master/dotenv-react-typescript) * [express](https://github.com/dotenv-org/examples/tree/master/dotenv-express) ## Documentation Dotenv exposes two functions: * `config` * `parse` ### Config `config` will read your `.env` file, parse the contents, assign it to [`process.env`](https://nodejs.org/docs/latest/api/process.html#process_process_env), and return an Object with a `parsed` key containing the loaded content or an `error` key if it failed. ```js const result = dotenv.config() if (result.error) { throw result.error } console.log(result.parsed) ``` You can additionally, pass options to `config`. #### Options ##### Path Default: `path.resolve(process.cwd(), '.env')` Specify a custom path if your file containing environment variables is located elsewhere. ```js require('dotenv').config({ path: '/custom/path/to/.env' }) ``` ##### Encoding Default: `utf8` Specify the encoding of your file containing environment variables. ```js require('dotenv').config({ encoding: 'latin1' }) ``` ##### Debug Default: `false` Turn on logging to help debug why certain keys or values are not being set as you expect. ```js require('dotenv').config({ debug: process.env.DEBUG }) ``` ##### Override Default: `false` Override any environment variables that have already been set on your machine with values from your .env file. ```js require('dotenv').config({ override: true }) ``` ### Parse The engine which parses the contents of your file containing environment variables is available to use. It accepts a String or Buffer and will return an Object with the parsed keys and values. ```js const dotenv = require('dotenv') const buf = Buffer.from('BASIC=basic') const config = dotenv.parse(buf) // will return an object console.log(typeof config, config) // object { BASIC : 'basic' } ``` #### Options ##### Debug Default: `false` Turn on logging to help debug why certain keys or values are not being set as you expect. ```js const dotenv = require('dotenv') const buf = Buffer.from('hello world') const opt = { debug: true } const config = dotenv.parse(buf, opt) // expect a debug message because the buffer is not in KEY=VAL form ``` ## Other Usage ### Preload You can use the `--require` (`-r`) [command line option](https://nodejs.org/api/cli.html#cli_r_require_module) to preload dotenv. By doing this, you do not need to require and load dotenv in your application code. This is the preferred approach when using `import` instead of `require`. ```bash $ node -r dotenv/config your_script.js ``` The configuration options below are supported as command line arguments in the format `dotenv_config_