zenv

Crates.iozenv
lib.rszenv
version0.8.0
sourcesrc
created_at2021-05-16 08:36:48.434189
updated_at2021-12-24 14:10:11.481909
descriptionDotenv (.env) loader written in rust
homepagehttps://github.com/numToStr/zenv
repositoryhttps://github.com/numToStr/zenv
max_upload_size
id398128
size60,297
(numToStr)

documentation

README

.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

Commit count: 92

cargo fmt