The short answer
Core NATS is at-most-once: a message reaches every subscriber connected at the moment of publish, and the server does not store it for anyone offline. JetStream is the persistence layer on top, adding streams and at-least-once delivery so messages survive restarts and can be replayed.
Hiring for this?
Conntal places middleware engineers on contract, contract-to-hire or direct hire, each screened by a practitioner before you see a CV.
NATS has two delivery models under one name, and the most common production surprise is a team that assumed the second while running the first. The NATS documentation is direct about the difference [1][2].
Core NATS: at-most-once, nothing stored
Core NATS is at-most-once: a message reaches every interested subscriber connected at the moment of publish, at most once [1]. A subscriber that is offline, restarting, or not yet subscribed never sees that message — the server does not store it for later [1].
That is a feature, not a flaw. For telemetry, presence, cache invalidation and request-reply, losing a message to a restarting consumer is acceptable and the simplicity is the point.
JetStream: streams and at-least-once
- JetStream is the persistence layer that sits on top of core NATS, used when messages need to wait for a subscriber, survive a restart, or be replayed [1].
- A stream is a server-side store of messages, bound to one or more subjects [2].
- A consumer is a server-side, stateful view of a stream that tracks how far a client has progressed [2].
- The result is at-least-once delivery: messages survive restarts and can be replayed [2].
What we ask
When we screen NATS engineers, we ask which subjects in their last system were core and which were backed by a stream, and why. Engineers who have run it in production answer with the failure they were designing against; the rest answer with the feature list.
Hiring for this?
Conntal places middleware engineers on contract, contract-to-hire or direct hire, each screened by a practitioner before you see a CV.
Sources
Go deeper with the engineers who run it
Conntal is the staffing arm of AceMQ. When you need the platform supported rather than a person placed, these are the pages to read.
Related questions
Does core NATS store messages?
No. Core NATS is at-most-once; a subscriber that is offline or not yet subscribed never sees the message, and the server does not store it for later. Persistence requires JetStream.
What delivery guarantee does NATS JetStream provide?
At-least-once. Messages are stored in streams, survive restarts and can be replayed, so consumers should be idempotent.