Skip to content
CAI
Software that uses CAICheck a score

basho/erlang_protobuffs

49.0

Weak · 23 September 2026

1.5k

lines of production code

Erlang

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a Protocol Buffers serialization library for Erlang, providing tools to generate and encode/decode messages. It features a refactored code generator that produces Erlang modules with robust support for nested types, extensions, and packed fields. The project has modernized its build infrastructure to use Rebar and includes comprehensive test coverage for all serialization features.

Features

Added scripts for generating Emakefile and MySQL-to-protocol buffer message generation

Users can now use the new \generate\_emakefile.escript\ to automatically generate an Emakefile that conditionally enables the Proper or EQC testing frameworks based on availability. Additionally, the new \mysql.escript\ allows users to generate protocol buffer message definitions directly from a MySQL table schema, mapping MySQL types to appropriate protocol buffer types.

scripts · high confidence

Automated GitHub release publishing script added

A new build script, build/publish, has been added to automate the creation of GitHub releases. The script accepts a version string (e.g., 1.0.0 or 1.0.0-beta1), validates it, and uses the GitHub API to create a new release with the appropriate pre-release flag. It requires a GitHub API token stored in $HOME/.ghapi and enforces that the script is run from the master branch for stable releases.

build · high confidence

Behavioural changes

Build system and project infrastructure updates

The project has migrated its build system from Rake to Rebar, introducing a new rebar.config and updating the Makefile to support Rebar-based targets like compile, test, and release. Additionally, the repository now includes a .gitignore file to exclude generated files and build artifacts, and a .travis.yml file to configure continuous integration with Travis CI.

(repo-wide) · high confidence

Refactored code generation and encoding/decoding logic

The code generator (protobuffs\_compile) was refactored to use the erltl library and generate forms instead of raw strings, and now supports nested types, extensions, and package resolution. The core encoding and decoding logic was restructured: the public API now exposes encode/3, encode\_packed/3, decode/2, and decode\_packed/2, while internal functions like decode\many were removed or deprecated. The generated \\_pb.erl files now include specific encode/decode functions for each message type, handle extensions via a '$extensions' field, and support repeated fields and default values more robustly.

src · high confidence

Removed legacy Makefile build system for Erlang compilation

The file support/include.mk, which previously managed the compilation of Erlang source files and templates into the ebin directory, has been removed. This eliminates the old build system, which handled tasks such as setting compiler flags for debug info and template processing, in favor of a newer build approach.

support · high confidence

Test coverage

Added comprehensive test coverage for the Protobuffs library; Expanded test coverage for Protocol Buffers features; Removed obsolete test suite and build file.

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 44 → 49 (+4.7)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 93 → 95 (+1.6)
  • Architecture 100 → 100 (+0.0)
  • Maturity 18 → 30 (+12.6)
  • Readiness 41 → 53 (+11.7)
  • Security 95 → 63 (-31.7)

Resolved (7)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • No exposed public API
  • Test reliability not included
  • TooManyMethods: protobuffs_compile (src/protobuffs_compile.erl)
  • complexity unreadable for .erl — churn × complexity hotspots could not be measured
  • dormant codebase — no living knowledge left to concentrate

New (17)

  • Coverage not measured — no coverage collector is wired up
  • Dependency hygiene PARTLY measured — rebar3 pinning read, dependency currency not (no rebar.lock-pinned Hex declaration to grade)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (10–11 lines × 2) (src/protobuffs_compile.erl)
  • Duplicated block (21–22 lines × 2) (src/pokemon_pb.erl)
  • Duplicated block (5 lines × 2) (src/protobuffs_compile.erl)
  • No SBOM
  • No artifact signing
  • No build provenance
  • No dependency lockfile committed (rebar.config)
  • protobuffs.encode_internal (cyclomatic 44) (src/protobuffs.erl)
  • protobuffs_compile.collect_full_messages (cognitive 19) (src/protobuffs_compile.erl)
  • protobuffs_compile.collect_full_messages (cyclomatic 30) (src/protobuffs_compile.erl)
  • protobuffs_compile.filter_forms (cognitive 16) (src/protobuffs_compile.erl)
  • protobuffs_compile.filter_forms (cyclomatic 36) (src/protobuffs_compile.erl)
  • protobuffs_compile.resolve_types (cognitive 18) (src/protobuffs_compile.erl)

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

Survey your own repository

basho/erlang_protobuffs 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 23 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 43c549e6ccd4524245190a906bb4344039bd2995 — 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-955b9cee9818.