beam-telemetry/telemetry
59.9
Adequate · 23 September 2026
745
lines of production code
Erlang
primary language
5
measurements over time
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.