vlovgr/ciris
54.9
Adequate · 20 September 2026
3.4k
lines of production code
Scala
primary language
1
measurement over time
What this system is
Ciris is a Scala configuration library that provides type-safe decoding of configuration values from various sources, including environment variables, files, JSON, and YAML. It supports cross-platform execution on JVM, JavaScript, and Native, and offers integrations for popular libraries such as http4s, enumeratum, refined, and squants. The system emphasizes secure handling of sensitive data through secret redaction and robust error reporting with accumulated failures.
How it got here
2017 — API overhaul and platform expansion
9 changes.
The project underwent a significant architectural shift by replacing the deprecated ConfigReader API with a new ConfigDecoder type class, enhancing error handling and state management. This period also focused on expanding cross-platform support to Scala.js and Scala Native, modernizing the build infrastructure, and integrating with libraries like enumeratum and refined.
2019–2022 — Website launch and core integrations
4 changes.
This period focused on establishing the project's public presence with a dedicated documentation website and expanding its core functionality through new modules. Key developments included adding native support for JSON and YAML configuration decoding, as well as integrating http4s types for seamless network configuration handling.
Features
Add Circe integration for JSON configuration decoding and Secret serialization
Users can now decode configuration values from JSON strings into arbitrary types using the new \circeConfigDecoder\, which leverages the Circe library for parsing and validation. This integration also provides implicit \Decoder\ and \Encoder\ instances for \Secret\[A\]\, allowing sensitive configuration values to be seamlessly serialized and deserialized as JSON.
modules/circe · high confidence
Add YAML configuration decoding support via circe-yaml
A new circe-yaml module has been added, enabling users to decode configuration values from YAML format. This module provides a \circeYamlConfigDecoder\ for parsing YAML strings into specific types using the circe library, as well as a default \yamlConfigDecoder\ for decoding directly into circe's \Json\ type. The implementation includes detailed error reporting for both parsing and decoding failures, with support for redacting sensitive information in error messages.
modules/circe-yaml · high confidence
Add http4s integration decoders for network types
Users can now decode configuration values directly into http4s and ip4s types, including Host, Hostname, IpAddress, Port, Uri, and Origin. This new integration in the http4s module allows applications to leverage these types natively from configuration sources without manual parsing.
modules/http4s · high confidence
Add support for parsing squants Quantity types from configuration
Users can now automatically parse string configuration values into squants Quantity types (such as Time) using the new stringQuantityConfigDecoder. This implicit decoder allows configuration values to be converted to specific quantity types (e.g., parsing "1s" into a Time object) by leveraging the squants Dimension's parseString method, with appropriate error handling for invalid formats.
modules/squants/shared · high confidence
Initial website launch for Ciris
The project now includes a dedicated documentation website built with Docusaurus, providing users with a landing page, API documentation links, and structured guides for getting started with the library. The site features a custom design with specific branding assets, supports internationalization for UI strings, and displays build status and version information directly on the homepage.
website · high confidence
Platform-specific configuration sources and secret redaction
The core module now includes platform-specific implementations for loading configuration from environment variables and files on JVM and Native, while providing a JavaScript-specific environment variable loader. It also introduces a \Secret\ type that redacts sensitive values in logs and error messages by displaying only a short SHA-1 hash, supported by an internal SHA-1 digest implementation to ensure cross-platform compatibility.
modules/core · high confidence
Removals
Removal of Squants configuration readers
The \SquantsConfigReaders\ trait and the \ciris.squants\ package object have been removed from the JVM module. This eliminates the implicit \ConfigReader\ instances for Squants types (such as \Capacitance\, \Mass\, \Temperature\, and \Velocity\), meaning users can no longer automatically parse these physical quantities from configuration strings within this module.
modules/squants/jvm · high confidence
Behavioural changes
Core configuration loading and decoding API overhaul
The core configuration library has been refactored to introduce a new \ConfigDecoder\ type class for type-safe decoding, replacing the previous \ConfigReader\ and partially applied decoders. Configuration entries are now represented by a sealed \ConfigEntry\ hierarchy (Default, Failed, Loaded) rather than the old \ConfigValue\/\ConfigSourceEntry\ models, providing a more explicit state model for loading. Error handling has been significantly improved with a new \ConfigError\ algebra that supports accumulation (\and\/\or\), redaction of sensitive details, and specific checks like \isMissing\ and \isNonFatal\. These errors are now wrapped in a new \ConfigException\ case class with formatted, indented multi-line messages. Additionally, the \http4s-aws\ module now includes a default retry policy for AWS SSM parameter fetching, and the library adds support for Scala.js and Scala Native across core, enumeratum, and refined modules.
repository · high confidence
Migrate Ciris integration from ConfigReader to ConfigDecoder
The enumeratum module's integration with the Ciris configuration library has been updated to use Ciris's newer \ConfigDecoder\ API, replacing the deprecated \ConfigReader\ mechanism. This change involves removing the legacy \EnumeratumConfigReaders\ trait and introducing new \Ciris\ and \CirisEnum\ traits (along with specific implementations for value enums like \IntCirisEnum\ and \StringCirisEnum\) that provide \ConfigDecoder\ instances. Users relying on this integration will need to ensure they are using a version of Ciris that supports \ConfigDecoder\ and may need to adjust their imports or implicit resolution to use the new \CirisEnum\ mixin.
modules/enumeratum · high confidence
Project rebrand to Ciris and documentation overhaul
The project has been rebranded from 'Ciris' to 'Ciris' (with updated branding assets) and the README has been completely rewritten to direct users to the new microsite at https://cir.is for documentation. The build configuration has been updated to use Scala 2.13 as the runner dialect, and the scalafmt version has been bumped to 3.11.5. Additionally, the project now includes a .jvmopts file with default JVM settings (UTF-8 encoding, G1GC, memory limits) and a new .mergify.yml configuration to automatically merge scala-steward PRs. The license file has been updated to reflect copyright years 2017-2026.
(repo-wide) · high confidence
Refined integration migrated from ConfigReader to ConfigDecoder
The integration with the Refined library has been updated to use the new ConfigDecoder API instead of the deprecated ConfigReader. This change replaces the previous implementation (which relied on runtime reflection via WeakTypeTag) with a modern macro-based approach that works across Scala 2 and Scala 3, ensuring that configuration values are refined according to their types during decoding.
modules/refined · high confidence
Dependencies
Build infrastructure modernized with SBT 1.13 and updated plugins
The build system has been upgraded from SBT 0.13.15 to 1.13.0, bringing significant changes to the development environment. Several legacy plugins have been removed or replaced: the custom \LatestVersion\ and \SourceGenerators\ plugins are deleted, with configuration loading logic moved to generated \LoadConfigs\. The \sbt-release\ plugin is replaced by \sbt-ci-release\ for releases, and \sbt-microsites\ is replaced by \sbt-unidoc\ for documentation. Cross-project plugins for Scala.js and Scala Native are updated to version 1.4.0, and Scala.js itself is upgraded to 1.21.0. Other plugins like \sbt-buildinfo\, \sbt-doctest\, \sbt-mima-plugin\, \sbt-header\, \sbt-mdoc\, and \sbt-scalafmt\ are also updated to their latest versions.
project · high confidence
Updated build dependencies and added website configuration
The build configuration has been updated to use newer versions of key libraries, including cats-effect 3.7.1, circe 0.14.15, http4s 0.23.37, and refined 0.11.3, alongside Scala 3.3.8. Additionally, a new website directory was introduced with a package.json file configuring Docusaurus 1.6.2 for documentation hosting.
(dependencies) · 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 55.
Lenses
- Code Health 99
- Architecture 100
- Maturity 45
- Readiness 45
- Security 67
Changes since last survey
- 300 commits — 299 feature/other, 1 fixes
By area
- (repo) — 145 commits
- (root) — 69 commits
- project/plugins.sbt — 39 commits
- project/build.properties — 26 commits
- modules/core — 9 commits
- docs/src — 8 commits
- modules/http4s — 2 commits
- modules/circe — 1 commit
- modules/http4s-aws — 1 commit
Notable commits
- fix: Fix origin example environment variable name
- change: Add Scala Native support for ciris-enumeratum
- change: Add Scala Native support for ciris-http4s-aws
- change: Add ConfigError#isNonFatal
- change: Add ConfigValue#base64 for base64 decoding
- change: Add circe Decoder[Secret[A]] and Encoder[Secret[A]]
- change: Add ciris-http4s-aws
- change: Add decoders for IpAddress and Hostname
- change: Add default retry policy for http4s-aws
- change: Add docs section on alternative configurations
- change: Add findValid as a more permissive alternative to or
- change: Add http4s Origin decoder
- change: Add implicit ConfigDecoder[A, Secret[B]]
- change: Add scala.js support for ciris-http4s-aws
- change: Add taps to ConfigValue
- change: Change to clarify test names for ConfigValue#alt
- change: Change to pin docusaurus version to v1
- change: Change to rename master branch to main
- change: Change to workaround sbt#4181
- change: Merge branch 'main' into update/sbt-scalafmt-2.6.0
- …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
vlovgr/ciris 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 8fa62266db2cd5986d419364f913a096f3381f93 — 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.