Skip to content
CAI
Software that uses CAICheck a score

emqx/pulsar-client-erl

54.8

Weak · 17 September 2026

3.8k

lines of production code

Erlang

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is an Erlang client library for Apache Pulsar, designed to manage supervised connections for producing and consuming messages. It provides high-level APIs for batch and single-message sending, along with metrics integration and protocol optimizations for reduced overhead. The project also includes comprehensive testing suites, including interoperability validation with Python consumers, and is structured as an Elixir application with defined external dependencies.

Features

Initial release of the Erlang Apache Pulsar client library

This change introduces the \pulsar\ application, providing a complete Erlang client for Apache Pulsar. It includes core modules for managing supervised client connections (\pulsar\_client\_manager\), producing messages (\pulsar\_producers\, \pulsar\_producer\), and consuming messages (\pulsar\_consumers\, \pulsar\_consumer\). The library exposes high-level APIs for sending and synchronous sending of message batches, as well as starting and stopping supervised producers and consumers. It also incorporates generated protocol definitions (\pulsar\_api\), a metrics module (\pulsar\_metrics\) for telemetry integration, and a supervision tree (\pulsar\_app\, \pulsar\_client\_sup\, \pulsar\_consumers\_sup\) to manage the lifecycle of client workers.

src · high confidence

Behavioural changes

Add internal header definitions for metrics and producer messaging

New header files have been added to the include directory to support internal implementation details. The pulsar.hrl file defines the ETS table name used for metrics (pulsar\_metrics), while pulsar\_producer\_internal.hrl defines the message structure for producer send requests, enabling consistent internal communication patterns.

include · high confidence

Optimized single-message production when batch size is 1

When the producer's \batch\_size\ is configured to 1, messages are now sent as single-message produce requests without batch headers, reducing protocol overhead. This change utilizes the Pulsar protocol's native single-message format, where the \partition\_key\ is included directly in the \MessageMetadata\ instead of using \SingleMessageMetadata\ headers.

(repo-wide) · high confidence

Test coverage

Added comprehensive Common Test suites and utilities for Pulsar client and producer; Added interop test for Erlang producer and Python consumer with Key\_Shared strategy.

Dependencies

Initial Elixir project configuration with dependency definitions

The project now includes a mix.exs file that defines the Elixir application structure, specifying Elixir version 1.13+ and listing external dependencies such as telemetry 1.3.0, crc32cer, murmerl3, snappyer, replayq, snabbkaffe, and lc, along with development-only tools like redbug.

(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

Baseline

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

Lenses

  • Code Health 93
  • Architecture 97
  • Maturity 39
  • Readiness 43
  • Security 85
  • Event Sourcing 100

Changes since last survey

  • 300 commits — 166 feature/other, 134 fixes

By area

  • (root) — 71 commits
  • src/pulsar_producer.erl — 55 commits
  • (repo) — 45 commits
  • src/pulsar_client.erl — 39 commits
  • src/pulsar.appup.src — 24 commits
  • src/pulsar_consumer.erl — 9 commits
  • test/pulsar_SUITE.erl — 8 commits
  • src/pulsar_protocol_frame.erl — 7 commits
  • .github/workflows — 6 commits
  • src/pulsar_producers.erl — 4 commits
  • src/pulsar.app.src — 3 commits
  • src/pulsar_client_manager.erl — 3 commits
  • src/pulsar_socket.erl — 3 commits
  • src/pulsar.erl — 2 commits
  • src/pulsar_client_sup.erl — 2 commits
  • src/pulsar_consumers.erl — 2 commits
  • src/pulsar_producers_sup.erl — 2 commits
  • src/pulsar_socket_writer.erl — 2 commits
  • test/interop — 2 commits
  • test/pulsar_producer_SUITE.erl — 2 commits

Notable commits

  • fix: Fix
  • fix: Fix Same topic
  • fix: Fix badmatch
  • fix: Fix batch fail
  • fix: Fix batch messgae consumed fail
  • fix: Fix batch send message bug
  • fix: Fix conflicts
  • fix: Fix consumer receives the message bug
  • fix: Fix next_request_id fail
  • fix: Fix parse message fail
  • fix: Fix partition is 0
  • fix: Fix pulsar set flow fail
  • fix: Fix sticky package problem
  • fix: Fix string to binary
  • fix: Merge pull request #33 from emqx/fix-tls-topic-lookup
  • fix: Merge pull request #37 from emqx/fix-fn-clause-idle
  • fix: Merge pull request #41 from emqx/fix-coveralls-branch
  • fix: Merge pull request #42 from emqx/fix-relup-070
  • fix: Merge pull request #47 from emqx/fix-pulsar-down-lookup
  • fix: Merge pull request #50 from emqx/fix-ci-after-down-lookup
  • …and 280 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

emqx/pulsar-client-erl 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 fda5ce85e4fa9608df9ca30ee1dce43e376f9339 — the exact code this score is about.
  • Scored under rubric-2026.09.12 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-f94092f054c1.