How to Use Dotenv in Nodejs

Introduction In modern web development, managing environment variables securely and efficiently is crucial for building scalable and maintainable applications. Node.js, being one of the most popular JavaScript runtime environments, often requires configuration settings like API keys, database credentials, and other sensitive information to be stored outside the source code. This is where dotenv co

Nov 17, 2025 - 11:25
Nov 17, 2025 - 11:25
 4

Introduction

In modern web development, managing environment variables securely and efficiently is crucial for building scalable and maintainable applications. Node.js, being one of the most popular JavaScript runtime environments, often requires configuration settings like API keys, database credentials, and other sensitive information to be stored outside the source code. This is where dotenv comes into play. Dotenv is a zero-dependency module that loads environment variables from a .env file into process.env, making it easier to manage configuration in Node.js projects.

This tutorial provides a comprehensive guide on how to use Dotenv in Node.js, covering everything from installation to best practices, real-world examples, and troubleshooting tips. Whether you're a beginner or an experienced developer, mastering dotenv will help you write cleaner, safer, and more flexible Node.js applications.

Step-by-Step Guide

1. Understanding Environment Variables

Environment variables are key-value pairs used to configure applications dynamically without hardcoding sensitive or environment-specific information. For example, instead of embedding API keys directly in your source code, you can store them in environment variables, which can be different for development, testing, and production environments.

2. Installing Dotenv

To get started, you need to install the dotenv package from npm. Run the following command in your Node.js project directory:

npm install dotenv

3. Creating a .env File

In the root folder of your Node.js project, create a file named .env. This file will contain your environment variables in a simple key-value format:

API_KEY=your_api_key_here

DB_HOST=localhost

DB_USER=root

DB_PASS=s1mpl3

Important: Never commit your .env file to version control systems like Git. Add .env to your .gitignore file to protect sensitive data.

4. Loading Environment Variables in Your Application

At the very top of your entry JavaScript file (e.g., app.js or server.js), require and configure dotenv to load variables:

require('dotenv').config();

After this, you can access your variables anywhere within your Node.js app using process.env.VARIABLE_NAME. For example:

const apiKey = process.env.API_KEY;

5. Using Environment Variables

Integrate environment variables into your application logic. For example, connect to a database using credentials stored in the .env file:

const mysql = require('mysql');

const connection = mysql.createConnection({

host: process.env.DB_HOST,

user: process.env.DB_USER,

password: process.env.DB_PASS,

});

connection.connect(err => {

if (err) throw err;

console.log('Connected to the database!');

});

6. Handling Multiple Environments

For different environments (development, testing, production), you can create multiple .env files like .env.development, .env.test, and .env.production. Use environment-specific scripts or tools like cross-env to load the correct file during execution, or programmatically specify paths in your Node.js app:

require('dotenv').config({ path: '.env.production' });

7. Verifying Environment Variables

Always verify that your environment variables have loaded correctly by logging them during development (avoid logging sensitive info in production):

console.log('API Key:', process.env.API_KEY);

Best Practices

1. Keep .env Files Out of Version Control

Never commit your .env files to public repositories. Use .gitignore to prevent accidental exposure of sensitive information.

2. Use Descriptive Variable Names

Use clear and consistent naming conventions for environment variables to improve readability and maintenance. For example, use DB_HOST instead of HOST.

3. Validate Environment Variables

Before using environment variables, validate their presence and format using packages like joi or envalid to avoid runtime errors.

4. Avoid Storing Secrets in Code

Always store sensitive credentials like API keys, passwords, and tokens in environment variables instead of embedding them directly in your source code.

5. Separate Configuration by Environment

Maintain separate .env files for different environments and load them accordingly to prevent accidental usage of wrong configurations.

6. Use Environment Variables for Feature Flags

Control application features dynamically by using environment variables as feature flags without changing code.

7. Document Your Environment Variables

Create a .env.example file to document required variables without real values. This helps onboard new developers and maintain clarity.

Tools and Resources

1. Dotenv GitHub Repository

Official repository with documentation and source code: https://github.com/motdotla/dotenv

2. Envalid

A package for validating and cleaning environment variables: https://github.com/af/envalid

3. Cross-env

Set environment variables across platforms for Node.js scripts: https://github.com/kentcdodds/cross-env

4. dotenv-expand

Extends dotenv to support variable expansion: https://github.com/motdotla/dotenv-expand

5. Node.js Official Documentation

Learn more about process environment variables: https://nodejs.org/api/process.html#process_process_env

Real Examples

Example 1: Basic Express Server Using Dotenv

This example demonstrates loading a port value and API key from a .env file:

// .env

PORT=3000

API_KEY=123456789abcdef

// app.js

require('dotenv').config();

const express = require('express');

const app = express();

const port = process.env.PORT || 5000;

const apiKey = process.env.API_KEY;

app.get('/', (req, res) => {

res.send(Your API Key is: ${apiKey});

});

app.listen(port, () => {

console.log(Server running on port ${port});

});

Example 2: Using dotenv with Sequelize for Database Connection

Here is how you can store database credentials securely and use them with Sequelize ORM:

// .env

DB_NAME=mydatabase

DB_USER=root

DB_PASS=secretpassword

DB_HOST=localhost

// config/database.js

require('dotenv').config();

const { Sequelize } = require('sequelize');

const sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASS, {

host: process.env.DB_HOST,

dialect: 'mysql',

});

module.exports = sequelize;

Example 3: Loading Environment Variables Conditionally

Load different .env files based on the current environment:

const dotenv = require('dotenv');

const envFile = .env.${process.env.NODE_ENV || 'development'};

dotenv.config({ path: envFile });

console.log(Running in ${process.env.NODE_ENV} mode);

FAQs

Q1: Why should I use dotenv instead of setting environment variables directly in the OS?

Dotenv simplifies the management of environment variables, especially during local development. It allows you to keep all variables in a single file, making your app easier to configure and share with your team without modifying system settings.

Q2: Can I use dotenv in production environments?

While dotenv is primarily designed for development, it can be used in production if you securely manage your .env files. Many production deployments use alternative methods like environment variable managers or secrets services for better security.

Q3: What happens if a variable is missing in the .env file?

If a variable is missing, process.env.VARIABLE_NAME will be undefined. It is a good practice to validate required variables during app startup to avoid unexpected behavior.

Q4: How do I handle environment variables in TypeScript projects?

You can use dotenv the same way in TypeScript. Additionally, use type definitions and create a custom type for process.env to get type safety.

Q5: Can I use dotenv with ES modules (ESM)?

Yes, but you need to import dotenv using the ESM syntax and call config() at the top level:

import dotenv from 'dotenv';
dotenv.config();

Conclusion

Using dotenv in Node.js projects provides a simple and effective way to manage environment variables securely and efficiently. By externalizing configuration data, you improve your application's flexibility and security, facilitating easier development, testing, and deployment. Following best practices like avoiding committing .env files, validating variables, and organizing environment-specific configurations will help you build robust Node.js applications.

With the detailed instructions, examples, and resources provided in this tutorial, you are now well-equipped to implement dotenv in your projects and enhance your development workflow.