skip to content
szczecin 53.43N 14.55E ./start-project

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_subscriptions option 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_timeout defaults 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-ID header 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.

bash
docker pull idcttech/nuts:v0.6.1