Understanding .env and .env.local Files
Learn the difference between .env and .env.local files for local development and shared configurations.
When building applications, especially web applications, you often need to manage configuration settings that vary between development, testing, and production environments. Things like API keys, database connection strings, and other sensitive information should never be hardcoded or committed directly into your Git repository. This is where .env files come in.
What are .env files?
.env files (short for "environment") are simple text files that contain key-value pairs representing environment variables. They are typically used to store configuration specific to the environment where your application is running.
For example:
1# .env - Shared environment variables 2# (NEVER commit this with actual secrets) 3NEXT_PUBLIC_API_URL=https://api.your-app.com 4DATABASE_URL=postgresql://user:password@localhost:5432/mydb
Crucially, .env files containing actual secrets should always be added to your .gitignore to prevent them from being accidentally committed to version control. A common practice is to commit a .env.example file, which serves as a template showing which environment variables are required without exposing their values.
1# .env.example - Commit this template to Git 2NEXT_PUBLIC_API_URL= 3DATABASE_URL=
The Role of .env.local
Many modern frameworks and build tools, such as Next.js, support a convention where .env.local files are used for local overrides or personal environment configurations.
Here's the key difference:
.env: Contains default environment variables that might be shared across different development machines or non-production environments (if you choose to commit it without sensitive data, or for production builds on a server)..env.local: Contains environment variables that are specific to your local development environment. These values will override any corresponding values found in.envor other.envfiles (e.g.,.env.development,.env.production).
This hierarchy is extremely useful:
- A shared
.envfile can provide general settings or defaults. - Your personal
.env.localfile can then override these defaults with values specific to your machine, such as your local database credentials or API keys for personal testing.
Example:
Suppose your .env file has:
1# .env 2API_KEY=default_shared_key
And your .env.local file has:
1# .env.local 2API_KEY=my_personal_dev_key
When your application runs locally, it will use API_KEY=my_personal_dev_key.
Just like .env files containing secrets, .env.local should almost always be in your .gitignore because it contains sensitive, local-specific information that should not be shared or version-controlled.
⚡ 5-Minute Setup: Get Secure Now
Create .env
In your project root, add your API keys and database URLs.
Add to .gitignore
Immediately add both `.env` and `.env.local` to your `.gitignore` file.
Create .env.example
Copy `.env` and replace values with placeholders.
Create .env.local (optional)
Add personal dev overrides that won't affect other developers.
Test it
Restart your dev server and verify variables load correctly.
That's it. Your secrets are secure and your team can onboard faster.
Best Practices
- Use
.gitignore: Always add.envand.env.local(and any other.env.*files containing secrets) to your.gitignore. - Provide
.env.example: Create a.env.examplefile that lists all required environment variables with placeholder values. This helps new developers set up their local environment quickly. - Local Overrides: Leverage
.env.localfor personal, local-only configurations that shouldn't affect other developers or deployed environments. - Consistency: Be consistent with your naming conventions and how you load environment variables in your application.
By understanding and correctly utilizing .env and .env.local files, you can maintain a clean, secure, and flexible configuration strategy for your projects.
Ready to build without the back-and-forth?
Turn messy thoughts into engineering-grade prompts that coding agents can nail the first time.
Get Started