Skip to content
CAI
Software that uses CAICheck a score

yakaz/yamerl

65.7

Adequate · 2 October 2026

9.1k

lines of production code

Erlang

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Yamerl is an Erlang library that parses YAML 1.1/1.2 and JSON documents into Erlang terms. It provides both simple and detailed construction modes, supporting streaming via a chunked API and high-level convenience functions for decoding strings and files. The system is built using Rebar 3 and includes comprehensive test coverage for parsing edge cases and construction options.

How it got here

2011 — Yamerl initial release and build migration

8 changes.

The project launched the Yamerl library, an Erlang-based YAML 1.2 parser, while simultaneously migrating the build infrastructure from Autotools to Rebar 3. This period involved renaming the application from 'yaml' to 'yamerl', updating header files, and refactoring the test suite to use standard EUnit.

2016 — test coverage expansion and documentation migration

4 changes.

This period focused on significantly expanding the EUnit test suite for the yamerl library, covering YAML construction, parsing edge cases, and wrapper functions. Concurrently, the project migrated its documentation from a previous format to EDoc to provide a standardized user guide.

Features

Initial release of the Yamerl YAML 1.2 parser

This change introduces the Yamerl library, an Erlang-based YAML 1.2 parser that also supports JSON. It provides a complete construction layer (\yamerl\_constr\) to convert YAML documents into Erlang terms, supporting both simple built-in types and detailed node records with location metadata. The library includes node modules for standard types (strings, integers, floats, booleans, binaries, maps, sequences) and extensions for Erlang-specific atoms and functions. It offers convenience wrapper functions (\yamerl.decode/1,2\ and \yamerl.decode\_file/1,2\) for easy parsing of strings and files, and supports streaming via a chunked API. Configuration is handled through the \yamerl\ application environment, allowing users to customize behavior such as detailed construction mode and handling of unrecognized tags.

src · high confidence

Removals

Removal of legacy Debian packaging files

The legacy Debian packaging infrastructure for the 'yaml' package has been removed, including the changelog, control, copyright, rules, and compat files. This cleanup eliminates the old build system configuration and package metadata, reflecting a transition away from the previous packaging structure.

debian · high confidence

Behavioural changes

Migrate build system from Autotools to Rebar 3

The project has switched its build infrastructure from the legacy Autotools suite (configure.ac, Makefile.am) to Rebar 3. This change simplifies integration for Erlang and Elixir users by allowing yamerl to be consumed directly as a Hex.pm package dependency in rebar.config or mix.exs files, replacing the previous requirement to build from source using autoconf and automake.

(repo-wide) · high confidence

Migration to rebar3 and application rename

The build system has moved from autotools to rebar3, resulting in the removal of the legacy ebin/Makefile.am and the old yaml.appup.in template. Concurrently, the application has been renamed from "yaml" to "yamerl", and the version has been bumped to 0.2.0 to support hot upgrades from the previous 0.1.0 release.

ebin · high confidence

Removal of legacy Autotools M4 macros

The build system has migrated from Autotools to rebar3, resulting in the deletion of the \m4/\ directory contents. Specifically, the \ax\_compare\_version\, \colored-echo\, and \erlang\ M4 macros have been removed, as they are no longer required for the new build configuration.

m4 · high confidence

Renamed include headers from yaml\_\* to yamerl\_\*

The library has been renamed from 'yaml' to 'yamerl', and the corresponding Erlang header files in the include directory have been renamed accordingly (e.g., \yaml\_parser.hrl\ to \yamerl\_parser.hrl\, \yaml\_tokens.hrl\ to \yamerl\tokens.hrl\). This change updates the internal module and record naming conventions to reflect the new project identity, requiring consumers to include the new \yamerl\\.hrl\ files instead of the previous \yaml\\*.hrl\ headers.

include · high confidence

Switch to EDoc documentation format

The project documentation has been migrated to EDoc format, replacing the previous documentation style. This change introduces a new \doc/overview.edoc\ file that serves as the primary user guide, detailing the library's capabilities (YAML 1.1/1.2 and JSON parsing), usage examples, and error handling strategies. Users should refer to this EDoc-generated documentation for up-to-date information on how to integrate and use the library.

doc · high confidence

Testsuite migration to standard EUnit

The testsuite has been refactored to use the standard EUnit framework, replacing the previous custom homegrown test runner and template-based test generation system. This change removes the custom \etest\ script, the \eunit\_lib\ and \eunit\_tty\ helper modules, and the Perl-based \template.pl\ and \template.erl\ files that previously generated test code from \.pattern\ files. Users will now run tests using standard EUnit mechanisms, which simplifies the test infrastructure and aligns the project with common Erlang testing practices.

testsuite · high confidence

Test coverage

Add EUnit test suite for YAML parsing examples and wrapper functions; Expanded parsing test coverage for YAML edge cases; Expanded test coverage for YAML construction node types and options; Removal of YAML parser test fixtures.

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

Score

  • CAI 61 → 66 (+4.5)
  • Rubric changed (rubric-2026.09.12 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 86 → 86 (+0.0)
  • Architecture 100 → 86 (-14.3)
  • Maturity 60 → 60 (+0.0)
  • Readiness 64 → 68 (+3.7)
  • Security 53 → 65 (+11.7)

Resolved (3)

  • Coverage not measured — no coverage collector is wired up
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)

New (1)

  • Projects may be oversized for their cohesion

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

Survey your own repository

yakaz/yamerl 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 2 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 27f6168f2636e0a9e16177250912783746de6081 — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.