# weavejester/environ

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/weavejester-environ).**

935 stars · 71 forks · Clojure

## Links

- GitHub: https://github.com/weavejester/environ
- awesome-repositories: https://awesome-repositories.com/repository/weavejester-environ.md

## Topics

`clojure` `environment-variables`

## Description

Environ is a Clojure library designed to manage application configuration by consolidating settings from environment variables, system properties, and local files into a single, unified map. It facilitates the externalization of application settings, supporting the practice of injecting environment-specific configurations at runtime to maintain code portability.

The library distinguishes itself by implementing a global registry pattern that allows decoupled components to access configuration without passing state through the call stack. It performs automatic key normalization by converting underscores and dots into hyphens and forcing lowercase casing, ensuring that configuration keys remain predictable and uniform regardless of their source.

To ensure data accuracy, the library employs lazy resolution, deferring the reading of system environment state until the moment of access. This approach ensures that the application always retrieves the most current values from the underlying environment.

## Tags

### Programming Languages & Runtimes

- [Configuration Management Libraries](https://awesome-repositories.com/f/programming-languages-runtimes/clojure-build-tools/configuration-management-libraries.md) — Provides a library for managing and consolidating application configuration settings in Clojure.

### Data & Databases

- [Configuration Registries](https://awesome-repositories.com/f/data-databases/application-state-management/global-application-state/configuration-registries.md) — Provides a centralized, read-only registry for decoupled access to application configuration.
- [Key Normalizations](https://awesome-repositories.com/f/data-databases/key-value-stores/structured-object-mappings/object-linked-key-value-mappings/map-value-transformers/map-key-value-transformers/key-normalizations.md) — Standardizes configuration keys by normalizing casing and replacing delimiters for uniform lookups.

### Development Tools & Productivity

- [Configuration Aggregators](https://awesome-repositories.com/f/development-tools-productivity/configuration-aggregators.md) — Consolidates settings from environment variables, system properties, and local files into a single unified map. ([source](https://github.com/weavejester/environ#readme))

### Software Engineering & Architecture

- [Environment Variable-Based Configuration](https://awesome-repositories.com/f/software-engineering-architecture/application-lifecycle-management/configuration-management/environment-variable-management/environment-variables/environment-variable-based-configuration.md) — Consolidates environment variables, system properties, and local files into a unified map for application settings.
- [Deferred Configuration Values](https://awesome-repositories.com/f/software-engineering-architecture/lazy-evaluation-patterns/deferred-execution-graphs/deferred-configuration-values.md) — Defers the resolution of configuration values until the moment of access to ensure current environment state.
- [Twelve-Factor App Implementations](https://awesome-repositories.com/f/software-engineering-architecture/twelve-factor-app-implementations.md) — Facilitates the externalization of application settings to maintain code portability across environments.

### DevOps & Infrastructure

- [Dynamic Merging](https://awesome-repositories.com/f/devops-infrastructure/configuration-management/environment-management/environment-variable-management/environment-variable-configurations/environment-variable-configuration/dynamic-merging.md) — Combines multiple configuration sources into a single unified map at runtime.
