dotenv-schema

Crates.iodotenv-schema
lib.rsdotenv-schema
version0.1.1
created_at2025-10-18 13:59:19.975507+00
updated_at2025-10-18 14:16:33.87508+00
descriptionA crate to validate .env files against schemas
homepagehttps://github.com/dotenv-linter/dotenv-linter
repositoryhttps://github.com/dotenv-linter/dotenv-linter
max_upload_size
id1889230
size45,043
Grachev Mikhail (mgrachev)

documentation

https://docs.rs/dotenv-schema

README

Dotenv-schema

CI Version Docs.rs Downloads

A crate to validate .env files against schemas.

Usage

Add dotenv-schema to Cargo.toml:

[dependencies]
dotenv-schema = "0.1"

To validate .env file against schema

use dotenv_schema::{DotEnvSchema, ValidateResult};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let dotenv_schema = r#"{
            "version": "1.0.0",
            "entries": {
                "NAME": {
                    "type": "String"
                },
                "PORT": {
                    "type": "Integer"
                },
                "PRICE": {
                    "type": "Float"
                },
                "URL": {
                    "type": "Url"
                },
                "EMAIL":{
                    "type": "Email"
                },
                "FLAG":{
                    "type": "Boolean"
                }
            }
        }"#;
    let dotenv_schema_filename = ".dotenv_schema.json";

    std::fs::write(dotenv_schema_filename, dotenv_schema)?;

    let schema = match DotEnvSchema::load(dotenv_schema_filename) {
        Ok(schema) => Some(schema),
        Err(err) => {
            println!("Error loading schema: {err}");
            std::process::exit(1);
        }
    };

    let Some(schema) = schema else {
        return Err("Error loading .dotenv_schema.json".into());
    };

    let Some(port) = schema.entries.get("PORT") else {
        return Err("Error getting key PORT".into());
    };

    match port.is_valid("ABCD") {
        ValidateResult::Valid => {
            println!("PORT is valid");
        }
        ValidateResult::Invalid(_) => {
            println!("PORT is invalid");
        }
    }

    Ok(())
}

MSRV

Minimum Supported Rust Version: 1.56.1

License

MIT

Commit count: 454

cargo fmt