3.1.0 (2026-08-26)

Features

  • client: make restart intensity configurable (019e6ad)
  • consumer: add cumulative acknowledgement (318c8a7)
  • consumer: report reaching the end of a terminated topic (#196) (5bc1936)
  • route invalid messages through callback (#214) (a8d8bb0)

Bug Fixes

  • broker: a close-on-exit ack was logged as an unknown request (#197) (8034d33)
  • consumer: recover from a payload that cannot be decompressed (#204) (1cf1c5c)
  • consumer: run terminate/2 when a worker is stopped (6655b63)
  • reader: fail when a non-durable worker is lost (#213) (cd60627)
  • reader: give each reader a subscription name no other node will pick (c77aa4e)
  • restore graceful completion and metadata retry semantics (21721a0)
  • topology: escalate every resource that cannot run (b8c3e62)
  • topology: leave a group that stopped intentionally stopped (efe1f6f)

Dependencies

Documentation

  • add a 2.x to 3.0 upgrade guide (#200) (c8224bf)
  • add acknowledgement and redelivery guide (0cf4362)
  • shorten upgrade to 3.x guide (946a73c)

Code Refactoring

  • simplify resource shutdown and worker startup (fd91c46)
  • test: stop using Utils.wait_for/2 (#215) (50ae4b1)
  • topology: separate reading a tree from being one (3c2c7c7)

Tests

  • cleaner and improved tests (#207) (82c251b)
  • consumer: cover that stopping a consumer removes it (#199) (75826cb)
  • fix flaky cumulative ack test (#216) (78f3e4f)
  • keep a resource that cannot run off a shared client (7e9e6aa)
  • producer: wait for the deduplicated event instead of racing it (#201) (625aae4)

Miscellaneous Chores

3.0.1 (2026-08-15)

Bug Fixes

  • consumer: manual flow control stalled on uncounted permits (#191) (994385b)

3.0.0 (2026-08-15)

⚠ BREAKING CHANGES

  • remove producer_count option (#187)
  • chunking: chunked messages are not wire-compatible (#177)
  • producer: route partition keys with a Pulsar hashing scheme (#176)
  • options: downcase enum option atoms (#171)
  • make Pulsar.Message independent of batching and chunking (#170)
  • consumer: pass the resolved topic and subscription to callback (#169)
  • make Client, Consumer, and Producer the public API (#164)

Features

  • consumer: add handle_invalid_message/2 (31cfddf)
  • consumer: pass the resolved topic and subscription to callback (#169) (59444de)
  • producer: async send (#186) (81d403d)
  • producer: key-based batching (#183) (d2f44bd)
  • producer: send timeout and backpressure (#185) (6ceefb5)

Bug Fixes

  • application: stop dropping unknown client options (e43d308)
  • broker: accept general socket option lists (1b60c63)
  • broker: broker crashes on unexpected info messages (#161) (5989995)
  • broker: ignore events from stale sockets (73434b4)
  • broker: stale parse buffer desyncs the stream on reconnect (d5552a1)
  • chunking: chunked messages are not wire-compatible (#177) (83f52eb)
  • client: accept :infinity as a connection timeout (9e48526)
  • consumer: a batch index ack acknowledged the whole batch (#179) (39e8b1b)
  • consumer: deliver unverifiable messages instead of dropping the connection (d4b9229)
  • consumer: give invalid messages their payload (99d2284)
  • consumer: stop :name naming both the group and the consumers (136ccc4)
  • consumer: supervise the dead letter producer under its consumer (#172) (7395f53)
  • producer: a batch carried no key for Key_Shared to dispatch on (#182) (d0fbc0a)
  • producer: a batching producer dropped delayed delivery (#181) (4c9324c)
  • producer: advertise the full sequence id range of a batch (1c0cabd)
  • producer: deduplicated sends reported as stored messages (664926d)
  • producer: route partition keys with a Pulsar hashing scheme (#176) (eb3eb13)
  • producer: silent data loss after producer restart (a68bb69)
  • protocol: accept message frames without a checksum (86f4825)
  • protocol: bound the frame size read off the wire (7c7d7fd)
  • protocol: crash on unsupported inbound command types (6333aba)
  • protocol: decode/1 raises and kills the connection (e51f49c)
  • protocol: reject BaseCommands missing their command (ff0c5f9)
  • protocol: verify the CRC32C checksum on inbound message frames (c90ce8c)

Performance Improvements

  • protocol: copy a frame once rather than once per packet (1b484f1)

Dependencies

  • bump apachepulsar/pulsar from 4.2.3 to 4.2.4 (#174) (b97b864)
  • bump jdx/mise-action from 4 to 4.2.3 (#175) (bfa974f)
  • bump jdx/mise-action from 4.2.3 to 4.2.4 (#180) (0969a29)
  • bump styler from 1.11.0 to 1.12.2 (#167) (8357854)

Documentation

Code Refactoring

  • client: validate options against a schema (bb4349e)
  • consumer: validate options against a schema (389fae3)
  • make Client, Consumer, and Producer the public API (#164) (b353b19)
  • make Pulsar.Message independent of batching and chunking (#170) (6cdd75a)
  • options: downcase enum option atoms (#171) (0d2f381)
  • producer: validate options against a schema (f10d3f3)
  • protocol: fold encode_message into encode (f2ba4ff)
  • reader: validate options against a schema (09e99b4)
  • remove producer_count option (#187) (2737c2a)

Tests

  • add connection reset tests (3b848ae)
  • add unit tests for the binary protocol (c7deb74)

Miscellaneous Chores

  • auto-update version on new release (af0e77f)

2.11.1 (2026-07-17)

Dependencies

2.11.0 (2026-07-13)

Features

  • add became_{active, passive}/1 callbacks for failover consumers (#155) (07584dd)

Dependencies

2.10.1 (2026-06-19)

Dependencies

  • bump protobuf from 0.16.1 to 0.17.0 (e49cbc7)
  • ci: bump actions/checkout from 6 to 7 (#149) (1cda711)
  • ci: bump apachepulsar/pulsar from 4.2.1 to 4.2.2 (#147) (20200b3)

2.10.0 (2026-06-07)

Features

  • ability to fetch a consumer's fully resolved topic (b13bcab)

Code Refactoring

  • dedicated application callback module (e2dd713)

Continuous Integration

  • simplify and pin pulsar setup in docker-compose (ff405fb)

2.9.0 (2026-06-06)

Features

Bug Fixes

  • configurable partition auto-discovery interval (935567b)
  • producer: routing bug on topics with 10+ partitions (a255bc8)

Tests

  • consumer: improve test reliability (c99e44a)

Continuous Integration

  • limit test concurrency to improve ci reliability (adaae35)

2.8.19 (2026-06-05)

Dependencies

  • bump credo from 1.7.18 to 1.7.19 (#127) (e3ff5fc)
  • bump erlang and elixir versions to 29 and 1.20 (953a9a8)
  • bump oauth2 from 2.1.0 to 2.1.1 (#124) (25e78e3)
  • bump protobuf from 0.16.0 to 0.16.1 (6a21a12)
  • bump pulsar protocol to pulsar 4.2.1 (#136) (41af52f)
  • ci: bump actions/cache from 4 to 5 (#132) (ed8c07f)
  • ci: bump actions/checkout from 4 to 6 (#133) (6540d2c)
  • ci: bump dorny/test-reporter from 2.2.0 to 3.0.0 (#135) (d5721bf)
  • ci: bump jdx/mise-action from 2 to 4 (#134) (e5626b3)

Build System

  • use mix dependency to generate protobuf modules (9d78579)

Continuous Integration

  • configure dependabot to bump gha dependencies (817cde9)
  • fix issue with parallel coveralls jobs (98cac09)
  • fix typo in dialyzer plt cache key (3a64326)
  • migrate releases to release-please (9e6d60f)
  • migrate releases to release-please (#126) (9eeaa5c)
  • migrate releases to release-please (#128) (0a1675e)

2.8.18 (2026-05-30)

2.8.17 (2026-05-21)

2.8.16 (2026-05-21)

2.8.15 (2026-05-21)

2.8.14 (2026-05-21)

2.8.13 (2026-04-11)

2.8.12 (2026-03-19)

2.8.11 (2026-03-10)

2.8.10 (2026-03-04)

2.8.9 (2026-02-27)

2.8.8 (2026-02-19)

2.8.7 (2026-02-04)

Bug Fixes

  • cannot start multiple clients from configuration (#108) (35e640b)

2.8.6 (2026-02-03)

2.8.5 (2026-01-29)

2.8.4 (2026-01-25)

2.8.3 (2026-01-21)

2.8.2 (2026-01-09)

Bug Fixes

2.8.1 (2026-01-09)

2.8.0 (2026-01-09)

Features

2.7.0 (2026-01-05)

Features

2.6.1 (2025-12-27)

2.6.0 (2025-12-15)

Features

2.5.1 (2025-12-10)

Bug Fixes

2.5.0 (2025-12-09)

Features

2.4.0 (2025-12-09)

Features

2.3.0 (2025-12-06)

Features

2.2.7 (2025-12-06)

2.2.6 (2025-12-05)

Bug Fixes

  • build: wrong protoc-gen-elixir path (099b4b6)
  • regenerate protobuf models (e9c4225)

2.2.5 (2025-12-05)

2.2.4 (2025-12-04)

2.2.3 (2025-12-04)

Bug Fixes

  • better ssl defaults using castore (1c20a54)

2.2.2 (2025-12-04)

2.2.1 (2025-12-03)

Bug Fixes

  • broadway: stale consumer when using DLQ policy (b03d3f8)

2.2.0 (2025-12-03)

Features

  • producer: support additional delivery options (#76) (fcff5ae)

2.1.1 (2025-12-03)

2.1.0 (2025-12-01)

Features

2.0.0 (2025-11-30)

⚠ BREAKING CHANGES

  • use struct for consumed messages

Features

  • use struct for consumed messages (8b0b6cd)

1.2.1 (2025-11-29)

1.2.0 (2025-11-29)

Features

  • exec callback's init upon successful subscription (0dd20ee)
  • graceful client shutdown (ff6b1ec)

Bug Fixes

  • broker api does not support non-default clients (e4fbf76)
  • dlq producer started within wrong client (7019c32)

1.1.0 (2025-11-24)

Features

  • promote consumer callback behavior to a macro (c27a183)

1.0.1 (2025-11-23)

1.0.0 (2025-11-23)

✨ Features

  • add support for a variety of subscription options (#21) (c0e351d)
  • add support for DLQ topics (f3d6885)
  • add support for nacking messages (74e516f)
  • add support for partitioned topics (8928ba8)
  • basic producer support (b35a627)
  • batch acknowledgements (ec1ef27)
  • broadway support (#48) (3b4f162)
  • broker-initiated consumer and producer closures (dc8ce61)
  • configurable flow control (ce608dd)
  • consumer group and partitioned consumer abstractions (#36) (61db170)
  • consumer groups (a8783f6)
  • graceful shutdown (a1973d0)
  • multi-client architecture (#50) (33687a0)
  • support batched messages in consumers (f8fef69)
  • support message compression (ba84919)

🐛 Bug Fixes

  • async acking and flow control (7eaba3c)
  • async acknowledgements (1ac4fe1)
  • async manual acks (c70e5b0)
  • broker not ready for for partitioned topic check (cba0096)
  • cannot seek subscription in consumer with multiple workers (3f18fb8)
  • cannot set start_delay_ms using application env (b6e48af)
  • concurrent named consumers not starting due to name clash (88421fc)
  • configurable start up delay (#32) (1bc5c7b)
  • do not ignore broker opts from config (cd49e1d)
  • do not start consumers if cannot subscribe to topic (b1b5e73)
  • flow control issues when consuming batched messages (527fe98)
  • force-reply to pending requests (c2419f2)
  • handle incomplete messages from the broker (f4789a8)
  • message not uncompressed when missing broker metadata (6aba8e3)
  • nested opts not passed to consumers/producers (5050df1)
  • OAuth2 settings examples in README (#51) (963e55c)
  • overloaded broker during startup (dbb4bc6)
  • parallelize processing of messages (#49) (ed695b1)
  • producers cannot be start using Pulsar.start/1 (40ef2bb)
  • rework consumer/producer startup logic (6d0e464)
  • safer default for secure tls connections (#33) (5563aac)
  • slow broker reconnects (806b295)
  • verbose logs when consumer in crash loop (f25bc2e)
  • zombie consumer due to race condition (5677dd0)

🛠 Builds

  • re-organize consumer tests to speed-up builds (#35) (3887fa3)
  • start/stop pulsar cluster only once per build (3dc4b23)

📦 Code Refactoring

  • client architecture (#58) (f1d501d)
  • move topic lookup logic to service discovery module (ef7028c)

⚙️ Continuous Integrations

  • automated releases (6f6415d)
  • automated releases (9d2cce1)
  • bump insurgent/conventional-changelog-preset version [skip ci] (b36ffae)
  • set up initial gha workflow (a478891)

♻️ Chores