dream_config

Type-safe configuration management for Gleam applications.

A standalone module for loading configuration from environment variables and .env files. Built with the same quality standards as Dream, but completely independent—use it in any Gleam project.

Features

Installation

gleam add dream_config

Quick Start

import dream_config/loader as config

// Load .env file (optional, fails silently if missing)
config.load_dotenv()

// Get required configuration
let assert Ok(database_url) = config.get_required("DATABASE_URL")
let assert Ok(port) = config.get_required_int("PORT")

// Get optional configuration with defaults
let debug_mode = config.get_bool("DEBUG")
let api_key = case config.get("API_KEY") {
  Ok(key) -> key
  Error(_) -> "default-key"
}

Usage

Loading .env Files

import dream_config/loader as config

// Load from default location (current directory)
config.load_dotenv()

// Load from specific path
config.load_dotenv_from("/etc/myapp/.env")

Required Values

Use get_required* functions for values your application cannot run without:

import dream_config/loader as config
import gleam/result

pub fn load_config() -> Result(AppConfig, String) {
  use db_url <- result.try(config.get_required("DATABASE_URL"))
  use port <- result.try(config.get_required_int("PORT"))
  
  Ok(AppConfig(database_url: db_url, port: port))
}

Optional Values

Use get* functions for values with sensible defaults:

import dream_config/loader as config
import gleam/option

let api_key = case config.get("API_KEY") {
  Ok(key) -> option.Some(key)
  Error(_) -> option.None
}

let port = config.get_int("PORT") 
  |> result.unwrap(3000)  // Default to 3000

Boolean Values

The get_bool() function treats these as True (case-insensitive):

Everything else (including unset) is False:

let debug_mode = config.get_bool("DEBUG")
if debug_mode {
  enable_debug_logging()
}

API Reference

Loading .env Files

Getting Values

Design Principles

This module follows the same quality standards as Dream:

About Dream

This module was originally built for the Dream web toolkit, but it’s completely standalone and can be used in any Gleam project. It follows Dream’s design principles and will be maintained as part of the Dream ecosystem.

License

MIT License - see LICENSE file for details.

Search Document