Skip to content

Reference

Look-up facts for NATS Server and JetStream: release matrix, ports, defaults, server configuration keys, stream and consumer fields, message headers, system subjects, client and tooling versions, security advisories, and a hardening checklist. Values are taken from the v2.15.0 server source and the official release notes unless stated otherwise.

Source of truth

Defaults below were read from server/const.go, server/opts.go, server/filestore.go, server/stream.go, and server/consumer.go at tag v2.15.0 (2026-09-17). Re-check the source or the configuration docs after upgrading.

Release Matrix

Dates come from the Go module proxy (proxy.golang.org) tag timestamps and the GitHub release pages. NATS skipped 2.13.

Line First release Latest patch (date) Headline features
2.15 2.15.0 (2026-09-17) 2.15.0 (2026-09-17) Desired-state metalayer, stream move cancel, evacuate endpoints, metalayer rescue, backup/restore v2, default 1,000 consumers per stream
2.14 2.14.0 (2026-04-30) 2.14.7 (2026-09-15) Fast batch publish, recurring (cron/interval) schedules, WorkQueue/Interest sourcing with AckFlowControl, consumer reset API, feature flags, Raft overrun protection
2.13 skipped n/a n/a
2.12 2.12.0 (2025-09-22) 2.12.15 (2026-08-12) Atomic batch publish, counter CRDT, delayed message scheduling, prioritized pull policy, mirror promotion, strict JetStream API by default
2.11 2.11.0 (2025-03-19) 2.11.17 (2026-04-27) Distributed message tracing, per-message TTL, subject delete markers, pull consumer priority groups, consumer pause, ingest rate limiting
2.10 2.10.0 (2023-09-19) 2.10.29 (2025-05-01) Auth callout, stream compression, subject transforms, multi-filter consumers, route pooling, sync_interval

Support windows are not formally published

NATS does not publish fixed EOL dates. Observed practice (2026): security fixes land on the current and previous minor lines (for example the June 2026 advisories were fixed in 2.14.x and 2.12.x, the March 2026 ones in 2.12.x and 2.11.x). Treat any line two minors behind as unsupported. TBD: whether 2.12 receives patches now that 2.15 is out.

Version-Specific Upgrade Rules

Moving to Rule Source
2.15 All peers must be on 2.14.0+ before 2.15 runs: js_raft_delete_range is on by default and older peers panic on the new Raft entry server/feature_flags.go (v2.15.0)
2.15 js_ack_fc_v2 is still off by default in 2.15.0 (the 2.14 guide had announced a 2.15 default switch) server/feature_flags.go (v2.15.0)
2.14 Remove feature_flags from config before downgrading below 2.14 2.14 upgrade guide
2.12 JetStream API is strict: unknown JSON fields are rejected (jetstream { strict: false } to relax temporarily) 2.12 upgrade guide
2.12 Downgrade only to 2.11.9 or later (earlier 2.11 does not recognise 2.12-only assets) 2.12 upgrade guide
2.11 Server, cluster and gateway names containing spaces are rejected at startup 2.11 upgrade guide
2.11 Clean shutdown now exits with code 0 (was 1) 2.11 upgrade guide

Ports

Only the client and monitoring ports have compiled-in defaults (server/const.go). The others are conventions used across the docs and Helm chart and must be set explicitly.

Port Listener Default? Config block
4222 Client (NATS protocol) Yes (DEFAULT_PORT) port
8222 HTTP monitoring Default value when enabled (DEFAULT_HTTP_PORT) http_port / -m
6222 Cluster routes Convention cluster { port }
7222 Gateways (supercluster) Convention, no compiled default gateway { port }
7422 Leaf node connections Yes (DEFAULT_LEAFNODE_PORT) leafnodes { port }
1883 MQTT 3.1.1 Convention, must be set mqtt { port }
443 / 8080 WebSocket Must be set websocket { port }
7777 prometheus-nats-exporter /metrics Exporter default exporter -port

Server Defaults and Limits

Setting Default Notes
max_payload 1 MB (MAX_PAYLOAD_SIZE) Per-message payload cap. Raising it raises buffer sizes on every connection
max_pending 64 MB (MAX_PENDING_SIZE) Server-side outbound bytes buffered per client before it is a slow consumer
write_deadline 10 s (DEFAULT_FLUSH_DEADLINE) Also settable per cluster, gateway, leafnodes block
max_connections 65,536 DEFAULT_MAX_CONNECTIONS
max_control_line 4,096 bytes Protocol control line limit
ping_interval 2 min Server-to-client PING
lame_duck_duration 2 min Time over which clients are closed in lame duck mode
lame_duck_grace_period 10 s Wait before starting to close clients
cluster { pool_size } 3 Route connections per peer pair (since 2.10)
cluster { connect_backoff } false Exponential reconnect backoff 1 s to 30 s (since 2.12)
JetStream sync_interval 2 min Filestore fsync interval; always fsyncs every write
JetStream max_buffered_msgs 10,000 Per-stream ingest queue (since 2.11; unlimited in 2.10)
JetStream max_buffered_size 128 MB Per-stream ingest queue bytes (since 2.11)
JetStream limits { default_max_consumers } 1,000 New in 2.15; -1 disables
Filestore block size 1 / 4 / 8 MB Chosen from stream limits; 8 MB is the maximum; KV buckets use 4 MB
KV history 1 (max 64) nats kv add --history accepts 1-64
Object Store chunk size 128 KB Client-side default in nats.go (objDefaultChunkSize)

Server Configuration Keys

Top-Level and Cluster Keys

Key Purpose
server_name, server_tags, server_metadata Identity and placement. server_metadata (map) added in 2.12
port, host, http_port, https_port Client and monitoring listeners
max_payload, max_pending, max_connections, write_deadline Connection limits (see defaults above)
lame_duck_duration, lame_duck_grace_period Graceful drain on --signal ldm
tls { cert_file, key_file, ca_file, verify, verify_and_map, cipher_suites, handshake_first } TLS for clients; each listener has its own tls block
allow_insecure_cipher_suites Re-enable insecure suites, disabled by default since 2.12
operator, system_account, resolver, resolver_preload Decentralized JWT auth
authorization { ... auth_callout { ... } } Static users or auth callout (since 2.10)
accounts { A { jetstream, users, exports, imports } } Static multi-account config
feature_flags { js_ack_fc_v2: true } Opt in or out of staged behaviour (since 2.14)
cluster { name, port, routes, pool_size, compression, no_advertise, connect_backoff, write_deadline } Cluster routes
gateway { name, port, gateways: [{name, urls}], connect_backoff } Supercluster links
leafnodes { port, remotes: [{url, account, credentials, disabled}], isolate_leafnode_interest, compression } Leaf nodes; remotes reloadable since 2.14
mqtt { port, ... }, websocket { port, no_tls, ... } Protocol bridges

JetStream Block Keys

Keys parsed by parseJetStream in server/opts.go (v2.15.0):

Key Purpose
store_dir File store directory
max_memory_store (max_mem) / max_file_store (max_file) Per-server resource ceilings
domain JetStream domain, isolates JetStream across leaf nodes
sync_interval Fsync interval or always
cipher (chachapoly or aes), key, prev_key At-rest encryption, per server
tpm { ... } Windows TPM-backed encryption keys (since 2.11)
unique_tag Spread replicas across a tag, for example availability zones
max_buffered_size, max_buffered_msgs Ingest rate limiting (since 2.11)
strict Strict JetStream API JSON parsing (default on since 2.12)
max_outstanding_catchup, request_queue_limit, info_queue_limit, max_concurrent_io Cluster catchup and API queue tuning
meta_compact, meta_compact_size, meta_compact_sync Meta-layer snapshot tuning
limits { max_ack_pending, max_ha_assets, max_request_batch, default_max_consumers, duplicate_window, batch } Server-wide JetStream limits

JetStream Stream Configuration

Fields of StreamConfig (JSON names as used by the API and nats stream add --config):

Field Meaning Since
name, subjects, description, metadata Identity and bound subjects metadata 2.10
retention limits (default), interest, workqueue pre-2.10
max_msgs, max_bytes, max_age, max_msgs_per_subject, max_msg_size, max_consumers Limits pre-2.10
discard old (default) or new; discard_new_per_subject for KV-style semantics pre-2.10
storage file or memory pre-2.10
num_replicas 1 to 5 pre-2.10
duplicate_window Dedup window for Nats-Msg-Id (default 2 min) pre-2.10
placement, mirror, sources Placement and replication topology pre-2.10
compression none or s2 for file streams 2.10
first_seq, subject_transform, republish Sequence seed, transforms, republish 2.10
allow_direct, mirror_direct Direct get (used by KV) pre-2.10
sealed, deny_delete, deny_purge, allow_rollup_hdrs Immutability and rollup controls pre-2.10
consumer_limits Default inactive_threshold and max_ack_pending for consumers 2.10
allow_msg_ttl, subject_delete_marker_ttl Per-message TTL and delete markers 2.11
allow_msg_counter Counter CRDT stream 2.12
allow_atomic Atomic batch publish 2.12
allow_msg_schedules Delayed (2.12) and recurring (2.14) schedules 2.12 / 2.14
persist_mode default (flush immediately) or async present in 2.15 source
allow_batched Fast batch publish 2.14

JetStream Consumer Configuration

Field Values / meaning
durable_name, name, description, metadata Identity
deliver_policy all, last, new, by_start_sequence, by_start_time, last_per_subject
ack_policy none, all, explicit, flow_control (2.14, used for WorkQueue/Interest sourcing)
ack_wait, max_deliver, backoff, max_ack_pending Redelivery control
filter_subject, filter_subjects Server-side filtering; multiple filters since 2.10
replay_policy instant or original
max_waiting, max_batch, max_expires, max_bytes Pull request limits
deliver_subject, deliver_group, flow_control, idle_heartbeat Push consumers
inactive_threshold Cleanup of idle consumers
num_replicas, mem_storage Consumer state replication and storage
headers_only, sample_freq, rate_limit_bps Delivery shaping and sampling
pause_until Consumer pause (2.11)
priority_groups, priority_policy, priority_timeout none, overflow, pinned_client (2.11), prioritized (2.12)

Message Headers

Header Purpose Since
Nats-Msg-Id Publish deduplication within duplicate_window pre-2.10
Nats-Expected-Stream, Nats-Expected-Last-Sequence, Nats-Expected-Last-Msg-Id Optimistic concurrency on publish pre-2.10
Nats-Expected-Last-Subject-Sequence Per-subject CAS (used by KV Update) pre-2.10
Nats-Rollup sub or all rollup purge pre-2.10
Nats-TTL Per-message TTL (seconds or duration string) 2.11
Nats-Marker-Reason Reason on subject delete markers 2.11
Nats-Trace-Dest, Nats-Trace-Only Distributed message tracing 2.11
Nats-Incr, Nats-Counter-Sources Counter CRDT increments and aggregation 2.12
Nats-Batch-Id, Nats-Batch-Sequence, Nats-Batch-Commit Atomic and fast batch publish 2.12 / 2.14
Nats-Schedule, Nats-Schedule-Target, Nats-Schedule-TTL, Nats-Schedule-Time-Zone, Nats-Schedule-Source Message scheduling 2.12 / 2.14
Nats-Schedule-Rollup Rollup on scheduled message 2.14
Nats-Pin-Id Pinned-client priority group 2.11

Special Subjects

Subject Purpose
_INBOX.> Default request-reply inbox prefix used by clients
$JS.API.> JetStream management API (STREAM.CREATE, CONSUMER.CREATE, META.RESCUE in 2.15, ...)
$JS.ACK.> Acknowledgements. v1: $JS.ACK.<stream>.<consumer>...; v2 adds <domain>.<account hash> (flag js_ack_fc_v2)
$JS.FC.> Flow control replies (same v1/v2 split)
$JS.EVENT.ADVISORY.> / $JS.EVENT.METRIC.> JetStream advisories and metrics
$KV.<bucket>.<key> KV keys, stored in stream KV_<bucket>
$O.<bucket>.C.<nuid> / $O.<bucket>.M.<name> Object Store chunks and metadata, both in stream OBJ_<bucket>
$SYS.ACCOUNT.<acc>.CONNECT / .DISCONNECT Connection events (system account)
$SYS.SERVER.<id>.CLIENT.AUTH.ERR Authentication error events
$SYS.SERVER.<id>.STATSZ, $SYS.REQ.SERVER.PING.<endpoint> Server statistics and discovery
$SYS.REQ.SERVER.<id>.RELOAD Config reload over NATS (2.10)

Clients and Tooling

Versions checked 2026-09-25 against package registries.

Component Package Latest (date)
Server github.com/nats-io/nats-server/v2 v2.15.0 (2026-09-17)
nats CLI github.com/nats-io/natscli v0.5.0 (2026-09-17)
nsc github.com/nats-io/nsc/v2 v2.15.0 (2026-06-02)
NACK github.com/nats-io/nack, Helm chart nats/nack 0.35.0 v0.24.0 (2026-08-18)
Helm chart nats/nats 2.15.0 (image nats:2.15.0-alpine)
Go client github.com/nats-io/nats.go (JetStream API in jetstream package) v1.54.0 (2026-09-18)
JavaScript/TypeScript @nats-io/transport-node and sibling @nats-io/* modules (nats.js v3) 3.4.0 (2026-05-08)
Python nats-py (PyPI) 2.16.0 (2026-09-16)
Rust async-nats (crates.io) 0.50.0 (2026-07-20)
.NET NATS.Net (NuGet) 3.2.0 (2026-08-29)
Java io.nats:jnats (Maven Central) 2.26.3 (Maven metadata updated 2026-09-10)

Deprecated JavaScript packages

The npm nats package (last 2.29.3, 2025-03) is marked "Package moved. Use @nats-io/transport-node". The modular @nats-io/* v3 packages (repo nats-io/nats.js) supersede the older per-runtime nats, nats.ws and nats.deno packages.

NACK Custom Resources

API group jetstream.nats.io/v1beta2.

Kind Legacy controller (default) --control-loop controller
Stream Yes Yes
Consumer Yes Yes
KeyValue No Yes
ObjectStore No Yes
Account (connection and credentials config, does not create NATS accounts) No Yes

Authentication Modes

Mode Use case
No auth Local development only
Username/password or token Small static deployments
NKey (Ed25519 challenge) Services without JWT bookkeeping
TLS client certificate (verify_and_map) PKI as source of identity
Decentralized JWT (operator, account, user) Production, multi-tenant, superclusters
Auth callout (since 2.10) Delegate authN/authZ to an external service (LDAP, OIDC, custom)

NKey prefixes: O operator, A account, U user, N server, C cluster, S seed (private key), X curve (xkey encryption).

Security Advisories

Selected entries from advisories.nats.io. Always run the latest patch of a supported line.

ID Published Summary Fixed in
Security notes 2026-16 to 2026-28 (13 GHSAs, e.g. GHSA-38x3-76xf-cq45) 2026-06-29 Route API auth bypass, subscribe/queue authz bypasses, MQTT ACL and injection issues, pre-auth panics 2026-16: v2.14.0, v2.12.7, v2.11.16; check each note for the others
CVE-2026-33215 to CVE-2026-33249 (11 CVEs) 2026-03-24 MQTT password disclosure and ACL bypass, Nats-Request-Info spoofing, stream restore auth bypass, mTLS DN bypass, WebSocket pre-auth DoS v2.12.6, v2.11.15 (confirmed for 33215 and 33249; check each note)
CVE-2026-27889, CVE-2026-29785 2026-03-09 Pre-auth crash via WebSocket frames and leaf node handshake v2.12.6, v2.11.15 (27889)
CVE-2025-30215 2025-04-08 JetStream asset management across accounts (critical) v2.11.1, v2.10.27
CVE-2023-47090 2023-10-12 Auth bypass when only the system account is configured v2.10.2, v2.9.23
CVE-2022-24450 2022-02-07 Authenticated client could assume unconstrained accounts (critical) v2.7.2

Hardening Checklist

  • Operator key kept offline. Routine signing uses account signing keys.
  • mTLS on every listener (clients, routes, gateways, leaf nodes).
  • System account user credentials restricted to operations tooling.
  • JetStream at-rest encryption (cipher + key) enabled where disks are not otherwise encrypted.
  • User JWTs carry expires; account revocation lists maintained.
  • Connection and auth-error events ($SYS.ACCOUNT.*.CONNECT, $SYS.SERVER.*.CLIENT.AUTH.ERR) shipped to a SIEM.
  • Slow-consumer alerts wired to on-call (exporter metric gnatsd_varz_slow_consumers).
  • No credentials on the nats-server command line (exposed via monitoring before 2.11.15 / 2.12.6, CVE-2026-33247).
  • MQTT and WebSocket listeners disabled unless needed; both had several 2026 pre-auth advisories.
  • No PII in subject tokens.
  • auth_callout service (if used) deployed highly available.
  • Subscribed to advisories.nats.io and patched to the latest release of a supported line.

Sources