Cover image for Announcing dotenv-linter: a tool to lint your .env files

Announcing dotenv-linter: a tool to lint your .env files

sobolevn profile image Nikita Sobolev ・2 min read

I happy to announce a simple yet very useful tool to lint your .env files.

GitHub logo wemake-services / dotenv-linter

☺️ Linting dotenv files like a charm!


wemake.services Build Status codecov Github Action Python Version Documentation Status

Simple linter for .env files.


While .env files are very simple it is required to keep them consistent This tool offers a wide range of consistency rules and best practices.

And it integrates perfectly to any existing workflow.

Read the announcing post.

Installation and usage

pip install dotenv-linter

And then run it:

dotenv-linter .env .env.template

See Usage section for more information.


There are many things that can go wrong in your .env files:

# Next line has leading space which will be removed:
# Equal signs should not be spaced:
# Quotes won't be preserved after parsing, do not use them:
SECRET="my value"

# Beware of duplicate keys!
SECRET=Already defined ;(

# Respect the convention, use `UPPER_CASE`:

And much more! You can find the full list of violations in our docs.


As a part of our "not blaming but fixing" corporate culture we build a lot of tools that prevent us from making the same mistakes over and over again.

dotenv-linter is one of these tools.

Some time ago we had several problems with .env files:

  • Some developers used CONSTANT_CASE for variable names and some developers used snake_case for that. While this is not a technical issue, but it is not very practical to mix these two cases and then think: what case I have used for this particular variable? Consistency is important!
  • We also had a problem with quotes and extra spaces. Some developers used KEY=VALUE and some used KEY = "VALUE" while in fact, these two examples will resolve in exactly the same thing - we prefer to have one-- and preferably only one --obvious way to do it. So, we now stick to KEY=VALUE notation
  • We also once had a duplicate key that ruined my day. I have spent several hours debugging my app because of this simple issue. That was a turning point for me and I have decided: let's automate it!


You can install it via pip (or any other similar tool):

$ pip install dotenv-linter

Why pip? Because python is present almost on all Linux setups. And we try to make this tool as portable as possible.


Usage is really simple:

$ dotenv-linter path/to/your/.env even/multiple/files/are/fine/.env

Real-life examples

If you are interested in how we use it real life applications you can have a look at (and even try!) our django template. Here's the line that invokes it.

We also have a full list of linting rules in our docs, check it out.


I hope this simple tool will save you some time, make your project more consistent, and your life slightly better. Add me on github to stay informed about the tools I am building!


wemake.services is a group of technology evangelists and simply those who love to write beautiful code. We are dedicated to deliver products of high quality basing on best practices, broad experience and a good portion of common sense. Hire us!


markdown guide

Cool! Have you thought about making a VS Code extension 😃?


Nope, but I have now! Do you want to help?


I will give it a try next week! Technically speaking, if it's possible to install the repo as dependency of the extension (or it could be a requirement) and execute the linter as a python shell call, it should be able to tell the user if the file has some errors and the line numbers? As I did a quick read of the source code it reports the filename and line number.

Yes, it sounds like it would work.


What about a Sublime Text 3 extension?


Pretty much the same as with vscode. It is on the roadmap. Contributions are especially welcome.

Feel free to start a project. You will have all my support :)