Skip to content
CAI
Software that uses CAICheck a score

circe/circe-yaml

66.3

Adequate · 20 September 2026

1.7k

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 that provides YAML serialization and deserialization capabilities for Circe JSON objects. It supports multiple YAML standards and backends, including YAML 1.1 via SnakeYAML, YAML 1.2 via snakeyaml-engine, and a Scala.js/Scala Native compatible backend using scala-yaml. The library offers configurable parsing and printing options, such as handling empty keys, controlling indentation, and managing character escaping, while enforcing code quality through standardized linting and formatting tools.

Features

Add Scala Yaml backend for YAML parsing and printing

Users can now use scala-yaml as an alternative backend for parsing and printing YAML in the circe-yaml library. This change introduces new implementation files (Parser.scala, Printer.scala, and associated package objects) in the shared module that bridge circe's Json type with scala-yaml's Node structures, enabling YAML operations to run on Scala.js and Scala Native platforms. The implementation handles parsing scalars, sequences, and mappings, as well as pretty-printing JSON back to YAML, with corresponding test coverage for parsing edge cases and printing formatting.

circe-yaml-scalayaml/shared · high confidence

Introduce circe-yaml-v12 module with SnakeYAML Engine and new PrinterBuilder

A new \circe-yaml-v12\ module is added, providing YAML 1.2 parsing and printing capabilities backed by the \snakeyaml-engine\ library. This module introduces a new \PrinterBuilder\ that allows users to configure output formatting, including the ability to drop empty objects and arrays, control indentation with indicators, and handle non-printable characters. The module also provides a new \Parser\ implementation with configurable settings for duplicate keys, recursive keys, and comment parsing, exposing these via a dedicated \Config\ case class.

circe-yaml-v12/src/main · high confidence

Library restructured with multiple YAML backends and updated documentation

The library now supports multiple YAML backends: the original \circe-yaml\ for YAML 1.1 (using SnakeYAML), a new \circe-yaml-v12\ module for YAML 1.2 (using snakeyaml-engine), and a \circe-yaml-scalayaml\ module for Scala.js/Scala Native compatibility (using scala-yaml). The README has been completely rewritten to reflect these changes, including updated usage instructions, API examples, and build badges. Additionally, the project now includes configuration files for Scalafmt (v3.11.5), Scalafix, and Scalastyle to enforce code style and linting rules.

(repo-wide) · high confidence

New PrinterBuilder with support for dropping empty objects and arrays

The circe-yaml module introduces a new PrinterBuilder that allows users to configure the YAML printer to drop empty objects and arrays via the new \dropEmptyKeys\ option. This is implemented in the new PrinterImpl class, which checks for empty collections when converting JSON objects to YAML nodes. The existing Printer class remains unchanged and does not support this feature, while the PrinterBuilder provides a fluent API to configure various printing options including the new empty-key dropping behavior.

circe-yaml/src/main · high confidence

Removals

Removed SnakeYAML-based YAML parser and printer

The custom YAML parser and printer implementations that relied on the SnakeYAML library have been removed from the codebase. This eliminates the ability to parse YAML strings into Circe JSON objects and serialize JSON back to YAML using the previous SnakeYAML-backed components, effectively stripping out this specific serialization/deserialization capability from the main source directory.

src/main · high confidence

Behavioural changes

Introduces common YAML parsing and printing abstractions

The circe-yaml-common/shared module now provides the foundational Parser and Printer traits that define the core YAML serialization interface. The Parser trait exposes methods for parsing YAML streams and decoding JSON objects, including safety limits for alias cycles and code points to prevent resource exhaustion. The Printer trait defines the contract for converting JSON to YAML strings, with configuration options for flow/block styles, line breaks, and string escaping. These abstractions serve as the backend-agnostic layer for YAML processing.

circe-yaml-common/shared · high confidence

Test coverage

Added test coverage for YAML parsing, printing, and escaping; Added test coverage for circe-yaml v12 module; Removal of ParserTests.scala.

Dependencies

Upgrade to circe 0.14.14 and SnakeYAML 2.2 with Scala 3 support

The library has been upgraded to use circe 0.14.14, replacing the older circe-parser with circe-jawn for parsing, and updated to SnakeYAML 2.2 for YAML 1.1 support. The build now supports Scala 2.13.16 and Scala 3.3.7, and introduces new modules for YAML 1.2 support via snakeyaml-engine and for scala-yaml integration. Test dependencies have also been updated to ScalaTest 3.2.20, ScalaCheck 1.20.0, and discipline-core 1.7.0.

(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 66.

Lenses

  • Code Health 95
  • Architecture 100
  • Maturity 53
  • Readiness 78
  • Security 70

Changes since last survey

  • 300 commits — 290 feature/other, 10 fixes

By area

  • (root) — 106 commits
  • (repo) — 105 commits
  • project/build.properties — 34 commits
  • project/plugins.sbt — 28 commits
  • .github/workflows — 13 commits
  • circe-yaml-v12/src — 6 commits
  • src/main — 4 commits
  • circe-yaml/src — 2 commits
  • circe-yaml-scalayaml/shared — 1 commit
  • src/test — 1 commit

Notable commits

  • fix: Fix Bin-compatibility
  • fix: Fix CI workflow
  • fix: Fix Parser.parseDocuments (#346)
  • fix: Fix SnakeYAML link
  • fix: Fix build.sbt settings for 0.15.1 release
  • fix: Merge branch 'main' into jkobejs/fix-356
  • fix: Merge pull request #331 from circe/Fix-Bincompat
  • fix: Merge pull request #357 from jkobejs/jkobejs/fix-356
  • fix: Revert commit(s) c117a6b, ae7d95c
  • fix: Revert commit(s) cec1eb5
  • change: Add 'Reformat with scalafmt 3.5.9' to .git-blame-ignore-revs
  • change: Add 'Reformat with scalafmt 3.6.1' to .git-blame-ignore-revs
  • change: Add ability to drop empty objects and arrays in PrinterBuilder (#531)
  • change: Add module that uses snakeyaml-engine, which only handles yaml 1.2 (#303)
  • change: Added indent with indicators to yaml-v12 (#406)
  • change: Allow tuning loader options (#333)
  • change: Backport #333 (#349)
  • change: Bump tlBaseVersion to 0.15 (#401)
  • change: Crosscompile for JS and Native with scala-yaml as the backend (#431)
  • change: Extend from Parser
  • …and 280 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

circe/circe-yaml 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 639054e7c593af9572b9a87f0b17c8eb55586a4f — 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.