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
- bump castore from 1.0.20 to 1.0.21 (#208) (2356b2d)
- bump jdx/mise-action from 4.2.4 to 4.2.5 (#209) (edcc939)
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
- add AGENTS.md (03d64d4)
3.0.1 (2026-08-15)
Bug Fixes
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
Miscellaneous Chores
- auto-update version on new release (af0e77f)
2.11.1 (2026-07-17)
Dependencies
2.11.0 (2026-07-13)
Features
Dependencies
- bump actions/cache from 5 to 6 (#150) (2beb6f1)
- bump apachepulsar/pulsar from 4.2.2 to 4.2.3 (#154) (7d063eb)
- bump nimble_lz4 from 1.1.0 to 1.2.0 (#153) (88aa5c2)
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
- partition auto-discovery (73df1cd)
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
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
- dangling tcp connections (dc51ea5)
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
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
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
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
⚙️ Continuous Integrations
- automated releases (6f6415d)
- automated releases (9d2cce1)
- bump insurgent/conventional-changelog-preset version [skip ci] (b36ffae)
- set up initial gha workflow (a478891)
♻️ Chores
- add 'features' section to readme (11c29f7)
- add 'testing' section to readme (fb66a04)
- bump pulsar version (46eca44)
- ci: run only one build per branch (ef9eb54)
- end-to-end example (f65ea58)
- format codebase using styler (32179f0)
- run mix format (cb8edd7)
- set log level to info when running tests (fa0948a)
- update readme (5a37af0)
- update readme (027cae0)
- update readme (75f787e)
- update README.md (74d46ec)
- use mise to configure development environment (76d7b5a)