Skip to content
CAI
Software that uses CAICheck a score

zio/zio-config

64.0

Adequate · 20 September 2026

5k

lines of production code

Scala

primary language

1

measurement over time

CAI band scale
CAI lens gauges

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.