#env-file #linter #dotenv

bin+lib dotenv-linter

Lightning-fast linter for .env files

14 stable releases (3 major)

Uses new Rust 2024

4.0.0 Oct 18, 2025
3.3.0 Dec 20, 2022
3.2.0 Jan 24, 2022
3.1.1 Aug 24, 2021
1.1.2 Mar 13, 2020

#25 in Command line utilities

Download history 274/week @ 2025-11-17 639/week @ 2025-11-24 732/week @ 2025-12-01 762/week @ 2025-12-08 723/week @ 2025-12-15 355/week @ 2025-12-22 307/week @ 2025-12-29 771/week @ 2026-01-05 742/week @ 2026-01-12 943/week @ 2026-01-19 936/week @ 2026-01-26 1548/week @ 2026-02-02 1218/week @ 2026-02-09 955/week @ 2026-02-16 1068/week @ 2026-02-23 995/week @ 2026-03-02

4,256 downloads per month
Used in 3 crates (via dotenvx-rs)

MIT license

215KB
5.5K SLoC

dotenv-linter

⚡️Lightning-fast linter for .env files. Written in Rust 🦀

GitHub Actions Coverage Status License Releases

dotenv-linter can check / fix / diff .env files for problems that may cause the application to malfunction.

Available checks:

    ✅ Duplicated key
    ✅ Ending blank line
    ✅ Extra blank line
    ✅ Incorrect delimiter
    ✅ Key without value
    ✅ Leading character
    ✅ Lowercase key
    ✅ Quote character
    ✅ Schema violation
    ✅ Space character
    ✅ Substitution key
    ✅ Trailing whitespace
    ✅ Unordered key
    ✅ Value without quotes

What is a .env file?

    💡 A .env file or dotenv file is a simple text file containing all the environment variables of a project.
    Storing configuration in the environment variables is one of the tenets of the Manifesto of Twelve-Factor App.
    The .env file has a simple key-value format, for example: FOO=BAR.
    More information you can find in articles in English and Russian.

The key features:

    ⚡️ Lightning-fast because it is written in Rust 🦀
    💣 Can be used on any project regardless of the programming language 💥
    🚀 Can be integrated with reviewdog and other CI services (including GitHub Actions and Super-Linter) 🔥

Articles about dotenv-linter:

👨‍💻 Installation

Pre-compiled binary

# Linux / macOS / Windows (MINGW and etc). Installs it into ./bin/ by default
$ curl -sSfL https://raw.githubusercontent.com/dotenv-linter/dotenv-linter/master/install.sh | sh -s

# Or a shorter way
$ curl -sSfL https://git.io/JLbXn | sh -s

# Specify installation directory and version
$ curl -sSfL https://git.io/JLbXn | sh -s -- -b usr/local/bin v2.0.0

# Alpine Linux (using wget)
$ wget -q -O - https://git.io/JLbXn | sh -s

You can find other installation methods here: https://dotenv-linter.github.io/#/installation

🚀 Usage

✅ Check

dotenv-linter can check all .env files in the current directory:

$ dotenv-linter check .
Checking .env
.env:2 DuplicatedKey: The FOO key is duplicated
.env:3 UnorderedKey: The BAR key should go before the FOO key

Checking .env.test
.env.test:1 LeadingCharacter: Invalid leading character detected

Found 3 problems

🛠 Fix

It can also fix the found warnings with the fix command:

$ dotenv-linter fix .
Fixing .env
Original file was backed up to: ".env_1601378896"

.env:2 DuplicatedKey: The BAR key is duplicated
.env:3 LowercaseKey: The foo key should be in uppercase

All warnings are fixed. Total: 2

🤲 Diff

In addition, dotenv-linter can compare .env files with each other and output the difference between them:

$ dotenv-linter diff .env .env.example
Comparing .env
Comparing .env.example
.env is missing keys: BAR
.env.example is missing keys: FOO

Other use cases you can find on the documentation site (https://dotenv-linter.github.io):

🚦 Continuous Integration

dotenv-linter can also be used with CI services such as: GitHub Actions and Circle CI.

💻 Pre-commit

To run dotenv-linter as part of a pre-commit workflow, add something like the below to the repos list in the project's .pre-commit-config.yaml:

# .pre-commit-config.yaml

...
repos:
    ...
      - repo: https://github.com/dotenv-linter/dotenv-linter
      rev: 3.3.1
      hooks:
        - id: dotenv-linter
      ...

🚧 Benchmark

Benchmarking dotenv-linter/dotenv-linter and wemake-services/dotenv-linter has done using the hyperfine utility:

Command Mean [ms] Min [ms] Max [ms] Relative
dotenv-linter/dotenv-linter .env 2.7 ± 0.4 2.0 4.3 1.00
wemake-services/dotenv-linter .env 162.6 ± 12.1 153.0 201.3 60.83 ± 10.20
Content of .env file used for benchmarking
 SPACED=

KEY = VALUE

SECRET="my value"

SECRET=Already defined

kebab-case-name=1
snake_case_name=2

✌️ Mentorship

dotenv-linter is not just a linter for .env files — it is also a contributor-friendly open-source project with the purpose of helping others learn Rust using a simple, but useful tool. 😊

In addition to studying Rust, this project has another goal — to promote love for open-source, help you with the first steps in it and give an opportunity to contribute to the open-source project written in Rust. ❤️

We act as a mentor within this project and help developers follow the path of a novice contributor from start to the top. 🤗

🤝 Contributing

If you've ever wanted to contribute to open source, now you have a great opportunity:

👍 Similar projects

✨ Contributors

This project exists thanks to all the people who contribute. [Contribute].

♥️ Sponsors

dotenv-linter is created & supported by Evrone. What else we develop with Rust.

Sponsored by Evrone

Become a financial contributor and help us sustain our community.

📃 License

MIT

Dependencies

~10–22MB
~269K SLoC