8 releases (breaking)

0.8.0 Dec 24, 2021
0.7.1 Jun 25, 2021
0.6.0 May 26, 2021
0.5.0 May 22, 2021
0.1.0 May 16, 2021

#2209 in Web programming

Download history 412/week @ 2023-12-16 232/week @ 2023-12-23 662/week @ 2023-12-30 425/week @ 2024-01-06 502/week @ 2024-01-13 232/week @ 2024-01-20 371/week @ 2024-01-27 231/week @ 2024-02-03 975/week @ 2024-02-10 283/week @ 2024-02-17 432/week @ 2024-02-24 704/week @ 2024-03-02 860/week @ 2024-03-09 975/week @ 2024-03-16 577/week @ 2024-03-23 653/week @ 2024-03-30

3,303 downloads per month

GPL-3.0-or-later

23KB
393 lines

.zenv

Dotenv (.env) loader written in rust 🦀

build docs crates.io

✨ Features

  • Fast as it is written in rust
  • Use as lib/crate or as a standalone cli
  • Support variable expansion

🚀 Installation

Crate

Add zenv with a version of your choice in the Cargo.toml

[dependencies]
zenv = "<version>" # Make sure it's the latest version

CLI

  • Using cargo
cargo install zenv --features=cli
  • Arch Linux
# Using `yay`
yay -S zenv

# Using `pamac`
pamac build zenv
  • From binaries

Check out the Release page for prebuild binaries for zenv, available for different operating systems.

🤞 Usage

Crate

fn main() {
    zenv::Zenv::new(".env", false).configure().ok();

    // or use macro, which expands to above statement

    zenv::zenv!()
}

Read the full documention

CLI

zenv
Dotenv (.env) loader written in rust

USAGE:
    zenv [FLAGS] [OPTIONS] -- <binary> [args]...

FLAGS:
    -v, --version       Prints version
    -h, --help          Prints help information
    -x, --expand        Enable variable expansion

OPTIONS:
    -f, --file          Path to .env file

ARGS:
    <binary>            Command that needs to be executed
    [args]...           Arguments for the command

Examples:
    zenv -f .env -- node index.js
    zenv -f .env -- npm run dev
    zenv -f .env -- terraform apply

🙌 Good to Know

Basic

PORT=5000
NODE_ENV=production

# Single and double quotes are also supported
S_QUOTE='single_quoted'
D_QUOTE='double_quoted'

Comments

Comments can be added by using # character.

# COMMENTED=commented
AT_THE_END=comment_at_the_end # I am here

# If you want # in you value then wrap the value in single or double quotes
QUOTED="quote_#_quoted" # I'll be removed

New Line and Escaping

New lines can added by new line (\n) character and this only works if the values is surrounded by double quotes.

PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nadflhsdlfsjkldfjklsdjf\n-----END RSA PRIVATE KEY-----"

# or like this
PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
adflhsdlfsjkldfjklsdjf
asdffwejdjf983283lk
-----END RSA PRIVATE KEY-----"

If you want to escape the new line character you can use the escape (\)

ESCAPED="escaped\\nnew\\nline"

Substitution

Zenv also supports variable substitution (off by default) from the current file or from the operating system. Substitution only works if the values is double quoted ie.e " and can be achieved by the following:

  • Using ${VAR} pattern (recommended)
  • Starting the variable name by $ character, which terminates after reaching a character which is not _ or alphanumeric.
BASIC=basic
EXPANDED='${BASIC}_expanded' # expands to 'basic_expanded'

# System variables (assuming `PATH` is available)
SYSTEM_VARIABLE="${PATH},/this/is/new/path"

🙏 Credits

Dependencies