NUTS 0.5: ordered pull consumers and shared subscriptions
(nats, go, release-notes) 1 min read by Bartosz Pachołek
NUTS now streams from ordered pull consumers, can share one consumer per topic set, and handles NATS 2.15.
NUTS 0.5.0 reworks how messages travel from JetStream to the browser. It ships as a pre-built Caddy binary with the nuts handler and as a Docker image; the current release is 0.6.1.
What changed
- Ordered pull consumers. NUTS streams from ordered pull consumers instead of AckNone push consumers.
- Shared subscriptions. The new
shared_subscriptionsoption lets live connections that ask for the same set of topics share one consumer. - Batched writes. Queued frames are written in batches with one flush and one deadline each, message frames are built in one pass, and
write_timeoutdefaults to 30 seconds. - The id comes last. Every SSE event writes its
id:line last, so a truncated frame is never recorded as received. - Replay fixes. A valid
Last-Event-IDheader wins over?last-id=, with fail-closed protections around cursors. - NATS 2.15. Consumer limits, retryable refusals and control messages from NATS 2.15 are handled.
- Operations. NUTS metrics appear on Caddy's metrics endpoints, the Docker image has writable Caddy config and data directories, and silent misconfigurations are rejected at startup.
Tests
Subject matching no longer allocates and its contract is fuzzed. The mutation baseline of 27 September 2026 recorded 673 mutants killed and none surviving.
docker pull idcttech/nuts:v0.6.1