Skip to content
CAI
Software that uses CAICheck a score

dnsimple/bugsnag-erlang

49.8

Weak · 17 September 2026

906

lines of production code

Erlang

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is a Bugsnag client library for Erlang applications, designed to report errors and exceptions to the Bugsnag service. It integrates with the Erlang logger to automatically capture and forward structured log events and exceptions, while supporting configuration for API keys, release stages, and application versions. The project also includes a modernized build system using rebar3 and native OTP logging, along with a comprehensive test suite to verify its functionality.

Features

Added BugSnag logger handler for structured logging

A new OTP logger-compliant handler module (\bugsnag\_logger\_handler\) has been introduced to automatically forward structured log events to BugSnag. This handler processes incoming log messages, ensuring they are structured with necessary metadata (such as MFA and level) and extracting exception details where available, before notifying BugSnag. It includes safeguards to prevent infinite logging loops from the BugSnag worker and handles unstructured logs by treating the message as the primary event field.

src/handlers · high confidence

Initial release of the Bugsnag Erlang client

This change introduces the \bugsnag\_erlang\ application, providing a notifier for Erlang applications to report errors and exceptions to Bugsnag. The client supports configuration via application environment variables or programmatic setup, allowing users to define API keys, release stages, handler names, and pool sizes. It features a logger handler integration to automatically capture and report errors, supports granular configuration of multiple handlers, and includes an API for manually notifying Bugsnag of events. The implementation handles exception formatting, breadcrumb tracking, and sends payloads using the Bugsnag Error Reporting API v5.

src · high confidence

Introduce optional app version reporting in Bugsnag worker

The Bugsnag worker now supports an optional \app\_version\ configuration option. When provided, this version is included in the base event payload sent to Bugsnag, allowing users to track which application version generated specific errors. If not specified, the version field is omitted from the event data.

src/workers · high confidence

Behavioural changes

Major build system overhaul and dependency migration

The project has been upgraded to require OTP 27 and migrated from the lager logging library to the native Erlang/OTP Logger, removing the jsx dependency in favor of the standard json module. The build process now uses rebar3 exclusively, replacing the previous reltool-based release structure with a modern plugin ecosystem (including erlfmt, dialyzer, and hex publishing). This change introduces stricter code quality checks, new linting rules, and a simplified development workflow via a new Makefile.

(repo-wide) · high confidence

Test coverage

Added comprehensive test suite for Bugsnag Erlang integration

Added a new Common Test suite (bugsnag\_SUITE.erl) and an HTTP helper module (http\_helper.erl) to verify the Bugsnag Erlang application. The tests cover application startup configurations (enabled/disabled, API keys, release stages, pool sizes, custom log levels, and app version reporting), logger handler lifecycle, and the generation of telemetry and Datadog exception events from structured logs.

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

Baseline

  • First survey — no prior run to compare against. CAI 50.

Lenses

  • Code Health 100
  • Architecture 69
  • Maturity 35
  • Readiness 76
  • Security 50

Changes since last survey

  • 120 commits — 112 feature/other, 8 fixes

By area

  • (root) — 56 commits
  • .github/workflows — 23 commits
  • src/bugsnag.erl — 16 commits
  • (repo) — 6 commits
  • .github/dependabot.yml — 5 commits
  • src/workers — 5 commits
  • src/bugsnag.app.src — 2 commits
  • src/bugsnag_app.erl — 2 commits
  • src/bugsnag_erlang.app.src — 2 commits
  • src/bugsnag_error_logger.erl — 2 commits
  • test/bugsnag_SUITE.erl — 1 commit

Notable commits

  • fix: Fix datadog error type information
  • fix: Fix event type extras
  • fix: Fix exceptions when the reason is not a printable string (#50)
  • fix: Fix flaky test (#46)
  • fix: Fix getting the right version (#47)
  • fix: Fix hex releases (#38)
  • fix: Fix markdown.
  • fix: ci: Fix YAML warning
  • change: Add OTP28 to CI (#52)
  • change: Add app-startup verification and preparation of configuration (#32)
  • change: Add basic CI workflow (#13)
  • change: Add changelog for the last release candidate (#39)
  • change: Add erlfmt (#10)
  • change: Add simple makefile
  • change: Adding a lager handler to report lager messages above a certain level to Busgnag
  • change: Adds "auto merge" to GithubAction updates PRs (#17)
  • change: Adds release process to hex.pm (#18)
  • change: Allow to granularly configure the logger handler that is given (#35)
  • change: An exit with reason normal should not send error.
  • change: Basic structure.
  • …and 100 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

dnsimple/bugsnag-erlang 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 17 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 da32e417eadb720e045a21b40ccbb342efd850fa — the exact code this score is about.
  • Scored under rubric-2026.09.13 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-d1ef6c0bd534.