Skip to content
CAI
Software that uses CAICheck a score

beam-telemetry/telemetry

59.9

Adequate · 23 September 2026

745

lines of production code

Erlang

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Telemetry is a lightweight, language-agnostic eventing library for the BEAM ecosystem, implemented in Erlang to serve both Erlang and Elixir projects. It provides a core API for attaching handlers, executing events, and managing event prefixes, with optimizations such as persistent term storage for faster dispatch and lazy execution for conditional emissions. The system is designed to be minimal and non-intrusive, focusing on efficient event dispatching without imposing a rigid application structure.

Features

Introduce persistent term optimization and lazy execution API

The library now supports a new \telemetry:persist/0\ function that compiles the handler table into Erlang's persistent term storage, significantly reducing lookup overhead for event dispatching at the cost of slower handler attachment and detachment. Additionally, a new \telemetry:execute\_lazy/2\ and \execute\_lazy/3\ API allows callers to defer event execution until after a function returns, enabling efficient conditional event emission without upfront handler lookups. The internal implementation has been refactored to use persistent terms for storage, with a fallback to ETS tables if persistence fails or is not yet applied.

src · high confidence

Removals

Removal of empty Events module and Application supervisor

The \Events\ module and its associated \Events.Application\ supervisor have been removed from the library. This eliminates the boilerplate structure that previously defined an empty module and an empty supervisor tree, indicating a shift in how the library initializes or manages its core components.

lib · high confidence

Behavioural changes

Project renamed to Telemetry and migrated to Erlang/rebar3

The library has been renamed from "Events" to "Telemetry" and rewritten from Elixir to Erlang, making it usable by all BEAM projects regardless of language. The build system has switched from Mix (Elixir) to rebar3, evidenced by the addition of rebar.config and the removal of .formatter.exs. The public API now uses Erlang module names (e.g., :telemetry instead of Telemetry) and requires handler configuration in attach calls. Documentation has been updated to reflect both Erlang and Elixir usage patterns, and the project now includes a CHANGELOG, LICENSE (Apache 2.0), and NOTICE file.

(repo-wide) · high confidence

Removal of legacy Mix.Config dependency

The \config/config.exs\ file has been deleted, removing the dependency on the \Mix.Config\ module. This indicates a migration away from the legacy configuration system, likely aligning with modern Elixir standards that utilize \config/config.exs\ with the \Config\ module or environment variables directly.

config · medium confidence

Test coverage

Added Common Test suites for telemetry core and test utilities

This change introduces comprehensive Common Test (CT) suites for the Erlang/OTP telemetry library. The new \telemetry\_SUITE.erl\ file validates core functionality including handler attachment, event execution, prefix-based listing, persistence, and failure handling (such as handler detachment on exception). Additionally, \telemetry\_test\_SUITE.erl\ tests the \telemetry\_test:attach\_event\_handlers/2\ utility. These additions replace the previous minimal ExUnit-based test structure (\events\_test.exs\ and \test\_helper.exs\), which have been removed.

test · 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

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 57 → 60 (+2.5)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 100 (+0.0)
  • Architecture 69 → 69 (+0.0)
  • Maturity 39 → 39 (+0.0)
  • Readiness 64 → 78 (+13.7)
  • Security 100 → 100 (+0.0)

Resolved (6)

  • 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
  • The README does not cover installation (how to add the dependency) and the required mix.exs/erlang.config settings needed to make Telemetry work with an application. (README.md)
  • complexity unreadable for .erl, .exs, .hrl — churn × complexity hotspots could not be measured

New (8)

  • Coverage not measured — no coverage collector is wired up
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • No dependency advisory monitoring
  • Workflow token permissions not restricted

Changes since last survey

  • 1 commits — 1 feature/other, 0 fixes

By area

  • src/telemetry.erl — 1 commit

Notable commits

  • change: Implement execute_lazy/{2,3} (#151)

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

Survey your own repository

beam-telemetry/telemetry 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 d5f3d7d9a2ab0611159401463a69595470dfcb0f — 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.