Skip to content
CAI
Software that uses CAICheck a score

beam-community/bamboo

63.4

Adequate · 23 September 2026

3.7k

lines of production code

Elixir

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is the Bamboo email library for Elixir, providing a unified interface for sending emails through various providers like Mailgun, Mandrill, and SendGrid. It supports both immediate and background delivery strategies, allowing developers to send emails synchronously or asynchronously via a task supervisor. The library includes built-in tools for development and testing, such as a local email viewer, a JSON API for inspecting sent messages, and comprehensive assertion helpers for verifying email delivery in tests.

How it got here

2015 — Bamboo 2.5.0 major release and restructuring

9 changes.

This period focused on the Bamboo 2.5.0 release, which involved a significant library restructuring with new core modules and API changes such as renaming delivery methods. The update introduced support for multiple email service adapters including Mailgun, Mandrill, and SendGrid, alongside enhanced testing capabilities and strict configuration standards.

2016–2021 — Testing infrastructure and development tooling

9 changes.

This period focused on enhancing the library's testability and developer experience by introducing a centralized strategy system for background email delivery and comprehensive test coverage for adapters and helpers. It also added robust development tools, including a JSON API and an interactive viewer for inspecting sent emails, alongside an automated release script to streamline publishing.

Features

Automated release script for versioning and publishing

A new bin/release script has been added to streamline the release process. This tool automates the update of version numbers in README.md and mix.exs, commits the changes, creates a git tag, pushes to the remote repository, and publishes the package to Hex.

bin · high confidence

New Mix task to launch a development email viewer with sample data

A new Mix task, \Bamboo.StartSentEmailViewer\, has been added to assist with development. Running this task starts a local HTTP server on port 4003 using the \SentEmailViewerPlug\, allowing developers to view sent emails in a browser. As part of this setup, the task automatically generates and pushes five sample emails to the mailer, including those with HTML content, text bodies, and various attachments (such as images and .docx files), providing a realistic environment for testing the email viewer interface.

lib/mix · high confidence

New SentEmailApiPlug for exposing sent emails via JSON API

A new \Bamboo.SentEmailApiPlug\ has been added, providing a JSON API endpoint to inspect delivered emails. This plug exposes two endpoints: \GET /emails.json\ to retrieve a list of sent emails and \POST /reset.json\ to clear the email history. It is designed for integration test runners that cannot access \Bamboo.Test\ helpers, requiring the use of \Bamboo.LocalAdapter\ to function. The API returns email details including recipients, body content, headers, and attachments in a structured JSON format.

_lib/bamboo/plug/sent\_email\api · high confidence

New adapters and helper modules for Mailgun, Mandrill, SendGrid, and local testing

This change introduces the core adapter implementations and their specific helper modules for the Bamboo email library. It adds \Bamboo.MailgunAdapter\ and \Bamboo.MailgunHelper\ to support Mailgun's API features like tagging, templates, and scheduled delivery; \Bamboo.MandrillAdapter\ and \Bamboo.MandrillHelper\ for Mandrill's template and merge variable capabilities; and \Bamboo.SendGridAdapter\ and \Bamboo.SendGridHelper\ for SendGrid's v3 API, including dynamic template data, personalizations, and tracking options. Additionally, it provides \Bamboo.LocalAdapter\ for storing emails locally during development (with optional browser preview) and \Bamboo.TestAdapter\ for sending emails to the current process during testing, along with a shared \Bamboo.AdapterHelper\ for common HTTP client configuration.

lib/bamboo/adapters · high confidence

Removals

Removal of legacy config file

The config/config.exs file has been deleted. This file previously contained configuration for the Bamboo email library and logger, along with comments explaining Mix.Config usage. Its removal suggests that configuration is now handled elsewhere, likely via environment-specific files or mix.exs defaults, as hinted by the comments in the deleted file.

config · high confidence

Architecture

Adopts BEAM Community common configuration standards

The repository now enforces standardized development tooling by introducing configuration files synced from the beam-community/common-config set. This includes a conventional commit linting setup (.commitlintrc.yml), a Credo static analysis configuration (.credo.exs) with strict readability and refactoring checks, and an Elixir code formatter (.formatter.exs) set to a 120-character line length. Additionally, the project specifies Elixir 1.19 and Erlang 27.3 in .tool-versions, updates the .gitignore to exclude documentation and IDE artifacts, and adds a coveralls.json to exclude the email viewer task from coverage reports.

(repo-wide) · high confidence

Behavioural changes

Background email delivery is now handled by dedicated strategy modules

The \deliver\_later\ functionality has been moved from individual adapters into a centralized strategy system located in \lib/bamboo/strategies\. This introduces a new \Bamboo.DeliverLaterStrategy\ behaviour and provides two built-in implementations: \Bamboo.TaskSupervisorStrategy\ (the new default for background delivery using \Task.Supervisor\, which raises on errors) and \Bamboo.ImmediateDeliveryStrategy\ (used by Local and Test adapters to send emails synchronously). Users can now configure or replace the background delivery mechanism via the \deliver\_later\_strategy\ configuration option.

lib/bamboo/strategies · high confidence

Bamboo library restructured with new core modules and API changes

The Bamboo email library has been significantly reorganized, introducing new core modules such as Bamboo.Email, Bamboo.Mailer, Bamboo.Attachment, Bamboo.Formatter, Bamboo.Interceptor, Bamboo.SentEmail, Bamboo.Template, Bamboo.View, Bamboo.Test, and Bamboo.ApiError. The delivery API has been renamed: deliver/1 is now deliver\_now/1, and deliver\_async/1 is now deliver\_later/1, with the old names raising helpful errors. Email addresses are now normalized to two-item tuples {name, address}, and the Bamboo.Formatter protocol allows custom data structures to be used as recipients. Attachments now support content\_id for embedding images in HTML emails. The Bamboo.Test module provides new assertion helpers like assert\_delivered\_email/1 and assert\_delivered\_email\_matches/1 for testing email delivery. Interceptors can now be used to modify or block emails before sending. The library also introduces a new ApiError for handling external email service API errors.

lib/bamboo · high confidence

Bamboo now starts a Task Supervisor and validates email addresses

Bamboo now starts a Task Supervisor by default, enabling background email delivery via \deliver\_later\. It also raises specific errors if the \from\ address is empty or if all recipients are \nil\, ensuring immediate feedback on invalid email configurations. Additionally, the JSON library used for encoding/decoding is now configurable via the \:json\_library\ application setting, defaulting to Jason.

lib · high confidence

Sent email viewer now displays recipient names, attachments, and escaped HTML

The SentEmailViewerPlug has been updated to provide a richer preview experience: it now formats and displays sender and recipient names alongside email addresses, renders email attachments with inline links, and escapes HTML in subjects, headers, and text bodies to prevent rendering issues. Additionally, the plug includes a new 'email not found' template and improved handling for text-only emails.

_lib/bamboo/plug/sent\_email\viewer · high confidence

Test coverage

Added comprehensive test coverage for Bamboo adapters and helpers; Added comprehensive test coverage for Bamboo email, attachment, and template features; Added test support files for interceptors, factories, and formatters; Added test templates for email rendering scenarios; Added tests for SentEmailApiPlug and SentEmailViewerPlug; Added tests for immediate and task supervisor delivery strategies; Updated test helper to start Phoenix dependencies.

Dependencies

Bamboo 2.5.0 release with updated dependencies

This update releases Bamboo version 2.5.0, raising the minimum Elixir requirement to 1.6 and configuring the application to start the Bamboo supervisor. It updates production dependencies to require hackney \>= 1.15.2, mime \~\> 1.4 or \~\> 2.0, and plug \~\> 1.0, while adding optional jason support. Test and development dependencies are also updated, including ex\_machina \~\> 2.4, excoveralls \~\> 0.13, and ex\_doc \~\> 0.23.

(dependencies) · 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

Score

  • CAI 68 → 63 (-4.6)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 95 → 97 (+2.4)
  • Architecture 94 → 75 (-18.5)
  • Maturity 52 → 52 (-0.1)
  • Readiness 83 → 83 (+0.1)
  • Security 76 → 81 (+4.8)
  • Accessibility 66 (new)

Resolved (13)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — no supported dependency manifest was read
  • Duplicated block (7 lines × 2) (lib/bamboo/adapters/mailgun_adapter.ex)
  • Duplicated block (7 lines × 2) (lib/bamboo/adapters/mandrill_adapter.ex)
  • High CVE: [GHSA redacted] (mix.lock)
  • High CVE: [GHSA redacted] (mix.lock)
  • High CVE: [GHSA redacted] (mix.lock)
  • It states the BEAM Community is maintaining Bamboo but links only to the README itself rather than the published docs site. (README.md)
  • Medium CVE: [GHSA redacted] (mix.lock)
  • No exposed public API
  • PR-triggered workflow without a permissions block
  • Test reliability not included
  • dormant codebase — no living knowledge left to concentrate

New (17)

  • Documentation: no installation or build instructions (README.md)
  • Duplicated block (7 lines × 2) (lib/bamboo/adapters/mailgun_adapter.ex)
  • Duplicated block (7 lines × 2) (lib/bamboo/adapters/mandrill_adapter.ex)
  • High CVE: [GHSA redacted] (mix.lock)
  • High CVE: [GHSA redacted] (mix.lock)
  • High CVE: [GHSA redacted] (mix.lock)
  • Medium CVE: [GHSA redacted] (mix.lock)
  • Outdated: credo
  • Outdated: dialyxir
  • Outdated: ex_doc
  • Outdated: ex_machina
  • Outdated: floki
  • Outdated: hackney
  • Outdated: jason
  • Outdated: plug
  • Unbounded dependency requirement: hackney
  • Workflow holding a long-lived secret is unscoped

Changes since last survey

  • 1 commits — 1 feature/other, 0 fixes

By area

  • .github/workflows — 1 commit

Notable commits

  • change: chore: sync files with beam-community/common-config (#768)

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-community/bamboo 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 a60604a5a468dfaa062e623c2fc086105c51e736 — 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.