4 releases

0.16.2 Nov 16, 2023
0.16.1 Nov 16, 2023
0.16.0 Nov 11, 2023
0.15.0 May 1, 2023

#812 in Configuration

Download history 7377/week @ 2024-11-15 11819/week @ 2024-11-22 12730/week @ 2024-11-29 14885/week @ 2024-12-06 16046/week @ 2024-12-13 4346/week @ 2024-12-20 5685/week @ 2024-12-27 7658/week @ 2025-01-03 10939/week @ 2025-01-10 7347/week @ 2025-01-17 9137/week @ 2025-01-24 8037/week @ 2025-01-31 7282/week @ 2025-02-07 6766/week @ 2025-02-14 6799/week @ 2025-02-21 9370/week @ 2025-02-28

31,560 downloads per month
Used in razel

MIT license

37KB
919 lines

Crates.io

dotenv-flow.rs

A fork of dotenv-rs that adds support for the popular dotenv-flow loading strategy.

The dotenv-flow strategy works as follows:

  • if a DOTENV_ENV environment variable is set, load .env.{DOTENV_ENV}.local (e.g. .env.staging.local)
  • load .env.local
  • if a DOTENV_ENV environment variable is set, load .env.{DOTENV_ENV} (e.g. .env.staging)
  • load .env

Each step will only load variables that are not already present in the environment, so for example variables in the .env.{DOTENV_ENV}.local file will have the highest priority, followed .env.local and so on.

Breaking in 0.16.0

  • env.{DOTENV_ENV}.local is now loaded before .env.local

HowTo

Installation

cargo add dotenv-flow

Usage

To use this package, add the following line to your main function to load the environment variables from available .env.* files:

fn main() {
  dotenv_flow::dotenv_flow().ok();
}

Tests

To test this project, make sure you pass --test-threads=1 to cargo test, e.g.

cargo test -- --test-threads=1

This is necessary because cargo test runs tests in multiple threads by default, but environment variables are process-globals, therefore we need to limit concurrency to avoid race conditions.

Dependencies

~0–270KB