zio/zio-config
64.0
Adequate · 20 September 2026
5k
lines of production code
Scala
primary language
1
measurement over time
What this system is
This system is a Scala library for managing application configuration within the ZIO ecosystem. It provides a unified API to load settings from diverse sources, including HOCON, YAML, TOML, XML, AWS Parameter Store, and Pureconfig. The library supports automatic derivation of configuration descriptors for case classes and enums via Magnolia and Scala 3 macros, while also offering integration with Cats, Scalaz, and Refined types for validation and functional programming patterns.
How it got here
2019–2021 — ZIO 2 migration and Scala 3 support
28 changes.
The project established its build infrastructure and migrated to ZIO 2 and Scala 3, introducing macro-based automatic configuration derivation via Magnolia. It expanded its ecosystem by adding support for various functional libraries like Cats, Scalaz, and Pureconfig, while integrating with Typesafe Config and YAML providers. The period also focused on backward compatibility, refined type validation, and comprehensive documentation generation.
2022–2026 — multi-format configuration support
5 changes.
This period focused on expanding the library's configuration capabilities by adding support for AWS Systems Manager Parameter Store, XML, and TOML formats. The work included implementing new configuration providers for these formats and enhancing test coverage for automatic derivation and XML parsing.
Features
Add AWS Systems Manager Parameter Store configuration provider
Users can now load configuration directly from AWS Systems Manager Parameter Store. A new \ParameterStoreConfigProvider\ implementation queries parameters via the SSM \getParametersByPath\ API, recursively fetching and decrypting values under a specified base path, and exposes them as a \ConfigProvider\. An implicit extension on \ConfigProvider\ (\fromParameterStore\) simplifies instantiation by accepting the base path and an SSM client instance.
aws/shared, zio-aws/shared · high confidence
Add Pureconfig integration for configuration loading
Users can now load configuration using Pureconfig readers within ZIO Config. A new \pureconfig\ module provides a \fromPureconfig\ method that accepts a Pureconfig \ConfigReader\ and returns a ZIO \Config\, allowing existing Pureconfig parsing logic to be reused directly in ZIO Config workflows.
pureconfig/shared · high confidence
Add Scalaz type-class instances and conversion helpers
The library now provides first-class support for Scalaz data structures. New implicit instances allow zio-config to work with Scalaz's Applicative type class, while dedicated helper functions enable seamless conversion between zio-config types and Scalaz-specific collections such as IList, ISet, ==\>\> (maps), and Maybe.
scalaz/shared · high confidence
Add TOML configuration support
Users can now load configuration from TOML files, paths, readers, or strings using the new \TomlConfigProvider\. This feature integrates with the existing \ConfigProvider\ API, allowing seamless reading of nested tables, arrays, and maps, and includes an option to enable comma-separated values as lists. The implementation relies on the TomlJ library for parsing.
toml/shared · high confidence
Add Typesafe Config provider with ZIO integration
This change introduces the \TypesafeConfigProvider\ module, enabling users to load configuration from Typesafe Config (HOCON) sources such as classpath resources, files, file paths, and strings. The provider exposes both synchronous methods (returning \ConfigProvider\) and ZIO-aware methods (returning \Task\[ConfigProvider\]\) for integration with ZIO effects. A key behavioral feature is the \enableCommaSeparatedValueAsList\ parameter, which allows users to control whether comma-separated values in configuration strings are treated as lists or single values. The implementation handles complex types including nested objects, lists with indexing, booleans, numbers, and nulls, ensuring proper mapping to ZIO's \ConfigProvider\ interface.
typesafe/shared · high confidence
Add support for Enumeratum enums in configuration
The library now provides built-in configuration readers for Enumeratum enum types. Users can parse string-based enums, as well as integer, long, short, byte, and character-based enums, directly from configuration sources using the new \enum\, \intEnum\, \longEnum\, \shortEnum\, \stringEnum\, \byteEnum\, and \charEnum\ methods in the \zio.config.enumeratum\ package.
enumeratum/shared · high confidence
Add support for refined types in configuration descriptors
The refined integration module now provides explicit support for \eu.timepit.refined\ types. Users can utilize the new \refine\ and \refineType\ functions to map configuration paths directly to refined types (e.g., \Refined\[String, NonEmpty\]\), enabling automatic validation of configuration values against predicates during the reading process. This replaces previous inheritance-based designs with a more orthogonal approach that integrates with the magnolia-based derivation system.
refined/shared/src/main · high confidence
Added Scala 3 auto-derivation example for configuration loading
A new example file, AutoDerivationSimple.scala, has been added to the Scala 3-specific examples directory. This file demonstrates how to use the magnolia library to automatically derive configuration structures from a map-based source in Scala 3, including handling of nested objects, lists, and case classes via the deriveConfig macro.
magnolia/shared/src/main/scala-dotty/zio/config/magnolia/examples · high confidence
Added macro-based tuple conversion support for Scala 2.x
The library now includes a new \TupleConversion\ mechanism in the Scala 2.x shared core, enabling automatic conversion between case classes and tuples (including single-parameter, multi-parameter, and zero-parameter cases) via compile-time macros. This allows users to seamlessly convert configuration objects to and from tuple representations without writing manual boilerplate code.
core/shared/src/main/scala-2.x · high confidence
Added shared example infrastructure and configuration files
The examples/shared module now includes new configuration files (application.conf and application.yml) defining Kafka client settings, alongside Scala source files that provide a TupleExample demonstrating config reading, a ZioSupport trait for unsafe ZIO execution in examples, and utility traits like EitherImpureOps. These additions establish a shared foundation for running and testing configuration examples within the project.
examples/shared · high confidence
Added support for Cats data types in configuration descriptors
The cats module now provides specific configuration descriptors for Cats data structures, allowing users to read Chain, NonEmptyChain, NonEmptyList, and NonEmptyMap directly from configuration sources. New functions such as chain, nonEmptyChain, nonEmptyList, and nonEmptyMap are available to describe these types, with nonEmpty variants ensuring that the resulting collections are not empty by returning a configuration error if the source data is empty.
cats/shared/src/main/scala/zio/config/cats · high confidence
Adds Cats type-class instances for ZIO Config
The library now provides implicit instances integrating ZIO Config with the Cats ecosystem. Users can leverage Cats type classes such as Applicative, SemigroupK, Semigroup, and Eq on ZIO Config types, enabling functional programming patterns like applicative composition, alternative configuration sources, and equality checks for configuration errors.
cats/shared/src/main/scala/zio/config/cats/instances · high confidence
Enable Scala 3 derivation syntax and macros for zio-config
This change introduces Scala 3-specific macro implementations and syntax support within the magnolia module. Users can now utilize the \derives Config\ syntax for automatic configuration derivation, leveraging new Scala 3 macros in \Macros.scala\ to handle annotations and default values. The \package.scala\ file exposes the necessary type aliases and extension methods to integrate this derivation logic with \ConfigProvider\, enabling seamless configuration loading for Scala 3 projects without requiring separate Scala 2/3 code paths.
magnolia/shared/src/main/scala-dotty/zio/config/magnolia · high confidence
Experimental XML configuration provider added
An experimental XML configuration provider is now available, allowing users to load configuration from XML strings via the new \fromYamlString\ method on \ConfigProvider\ (despite the method name, it parses XML). This feature introduces a new parser implementation in the \zio.config.xml.experimental\ package, including \XmlParser\ for converting XML strings into internal objects and \XmlConfigProvider\ to wrap the result in a standard \ConfigProvider\.
xml/shared/src/main · high confidence
Initial build infrastructure setup with Scala 3 support
The project establishes its build system using sbt 1.13.0 and configures cross-compilation for Scala 2.12, 2.13, and Scala 3 (Dotty 3.9.0). This setup includes essential plugins for code formatting, linting, documentation generation, and release management, while enabling Scala 3-specific compiler options and disabling certain features like parallel execution and kind-projector for the Dotty version.
project · high confidence
New configuration documentation and key-mapping capabilities
Users can now generate structured documentation for their configuration schemas via the new \ConfigDocsModule\, which converts configuration metadata into tables and exports them to GitHub-flavored or Confluence-flavored Markdown. Additionally, the \ConfigSyntax\ module introduces \mapKey\ and convenience methods like \toKebabCase\, \toSnakeCase\, \toUpperCase\, and \toLowerCase\ on \Config\ objects, allowing users to programmatically transform configuration key names during the reading process. The library also adds \IndexedFlat\ support for indexed path enumeration and new derivation annotations (\discriminator\, \kebabCase\, \snakeCase\, etc.) to customize how sealed traits and case classes are mapped to configuration keys.
repository · high confidence
Behavioural changes
Add ZIO 2-compatible YAML configuration provider with safe environment variable handling
The YAML module now provides a new \YamlConfigProvider\ and companion extension methods on \ConfigProvider\ (e.g., \fromYamlFile\, \fromYamlString\, \fromYamlReader\) that integrate with ZIO 2's \Task\ type for effectful loading. A key behavioral change is the introduction of \EnvConfigImpl\, which customizes how environment variable templates (like \:-\ and \:?\) are resolved, ensuring safe and consistent handling of missing environment variables during YAML parsing. Additionally, the provider supports an \enableCommaSeparatedValueAsList\ flag to control whether comma-separated values in YAML strings are treated as lists or plain strings.
yaml/shared/src/main · high confidence
Added empty platform-specific trait for ZIO Config on Native
A new empty trait \PropertyTypePlatformSpecific\ has been added to the ZIO Config core library to support the Native platform. This change provides a placeholder for platform-specific property type definitions, enabling the library to compile and function correctly on Native targets by satisfying platform-specific interface requirements.
core/native · low confidence
Added empty version-specific support objects for Scala 2.12 and 2.13
Empty \VersionSpecificSupport\ objects were added to the \zio.config\ package for both Scala 2.12 and 2.13. These files currently contain no implementation, serving as placeholders for future version-specific logic.
core/shared/src/main/scala-2.12, core/shared/src/main/scala-2.13 · low confidence
Added kebabCaseLegacy annotation for backward compatibility
The library now provides a \toKebabCaseLegacy\ conversion function alongside the improved standard \toKebabCase\. This legacy function maintains the original behavior where numeric boundaries and consecutive capitals are not separated (e.g., "myValue123" becomes "my-value123" instead of "my-value-123"), ensuring backward compatibility for configurations created before version 4.0.5.
core/shared/src/main/scala · high confidence
Improved error messages for unsupported derivation types
The library now provides clearer, more actionable error messages when attempting to derive configuration descriptors for \List\, \Option\, or \Either\ types directly. Instead of generic compilation errors, users will see specific guidance on how to wrap these types in a case class or use explicit derivation methods like \listOf\, \.optional\, or \.orElseEither\.
derivation/shared · high confidence
Introduces Scala 2.12-2.13 magnolia derivation package with legacy kebab-case support
A new \zio.config.magnolia\ package has been added for Scala 2.12 and 2.13, providing the \deriveConfig\ function for automatic configuration derivation and exposing key derivation annotations such as \kebabCase\, \snakeCase\, \prefix\, \postfix\, and \discriminator\. Notably, this release includes the \kebabCaseLegacy\ annotation to ensure backward compatibility for users relying on previous naming conventions.
magnolia/shared/src/main/scala-2.12-2.13 · high confidence
Optimized tuple derivation for Scala 3 config generation
The Scala 3-specific code generation for deriving configurations has been refactored to reduce the amount of generated code. This is achieved by introducing a new \TupleConversion\ mechanism in \TupleConversion.scala\ that leverages Scala 3's \Mirror\ and \Tuple.fromProductTyped\ for more efficient conversions between products and tuples, alongside a new \VersionSpecificSupport\ object to house version-specific logic.
core/shared/src/main/scala-3.x · high confidence
Test coverage
Added Scala 3-specific test coverage for automatic derivation, defaults, and documentation; Added property-based tests for the XML config provider and parser; Added test coverage for Typesafe HOCON configuration parsing; Added test suite for indexed configuration sequences and documentation generation; Added tests for Refined numeric and string type support; Added tests for YAML configuration reading; Added tests for automatic derivation of discriminated sum types; Added tests for key-format annotations and sealed trait derivation.
Dependencies
Update ZIO and AWS SDK dependencies
The build configuration updates the ZIO framework to version 2.1.26 and the AWS SDK for Java (aws-java-sdk-ssm) to version 1.12.797. Additionally, the ZIO AWS integration library (zio-aws-ssm) is updated to version 7.28.29.19, and the Magnolia library is upgraded to version 0.17.0.
(dependencies) · high confidence
Housekeeping
Repository initialization and tooling setup
The repository has been initialized with essential configuration files, including a Contributor License Agreement (CLA), an Apache 2.0 license, and a Nix flake for reproducible development environments. Development tooling is standardized with \.scalafmt.conf\ (version 3.11.5), \.scalafix.conf\, and \.gitattributes\, while CI automation is configured via \.mergify.yml\ to automatically handle Scala Steward dependency updates. The Node.js version is pinned to 20.9.0 via \.nvmrc\, and the README is now auto-generated by the \zio-sbt-website\ plugin.
(repo-wide) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 64.
Lenses
- Code Health 98
- Architecture 66
- Maturity 59
- Readiness 73
- Security 64
Changes since last survey
- 300 commits — 284 feature/other, 16 fixes
By area
- (root) — 113 commits
- project/plugins.sbt — 78 commits
- magnolia/shared — 28 commits
- .github/workflows — 19 commits
- project/build.properties — 19 commits
- (repo) — 12 commits
- examples/shared — 8 commits
- core/shared — 4 commits
- docs/index.md — 4 commits
- typesafe/shared — 3 commits
- cats/shared — 2 commits
- scalaz/shared — 2 commits
- xml/shared — 2 commits
- yaml/shared — 2 commits
- docs/read-from-various-sources.md — 1 commit
- docs/sidebars.js — 1 commit
- project/BuildHelper.scala — 1 commit
- refined/shared — 1 commit
Notable commits
- fix: Fix boolean in typesafe config, easier auto derivation and update documentations (#1108)
- fix: Fix compiling after merge error for Scala 3 (#1509)
- fix: Fix imports
- fix: Fix publish errors
- fix: Fix publish errors
- fix: Fix publishing errors (#1064)
- fix: Fix scala3
- fix: Fix scala3 (#1110)
- fix: Fix scala3 auto derivation (#1131)
- fix: Fix scala3 compile error
- fix: Fix scala3 compile error
- fix: Fix scala3 compile error
- fix: Fix scaladoc publish errors (#1063)
- fix: Fix the cats module under Scala 3.9 (#1740)
- fix: Series 4 remove fix checks (#1068)
- fix: fix: ZIO Config Guide Invalid link (#1434)
- change: Add zio.Duration for Scala 2 derivation (#1094)
- change: Add annotations for key modifications (#1399)
- change: Add examples
- change: Add map key into deriveConfig
- …and 280 more
Architecture
- 0 containers · 1 bounded contexts · 0 dependency edges (baseline)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
zio/zio-config was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 20 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 920f3397aa6d4fb50ba98f52c1d1897866305d03 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-b51f968c9b10.