Skip to main content

Default Configs

The transport ships with production-ready defaults for every stream and consumer type. This page lists the exact values from the source code. All defaults can be overridden via module configuration.

Stream Defaults

All streams share a common base configuration:

PropertyValue
retentionWorkqueue (overridden per type below)
storageFile
num_replicas1
discardOld
allow_directtrue
compressionS2
S2 Compression

All streams default to Snappy S2 compression. This reduces disk I/O and storage with negligible CPU overhead (~1-3%). Requires NATS Server >= 2.10 (see runtime requirements). Override per stream kind:

import { StoreCompression } from '@nats-io/jetstream';

events: {
stream: { compression: StoreCompression.None }, // disable for event streams
}

Event Stream

Workqueue retention — each message is removed after being acknowledged by a consumer.

PropertyValueNotes
retentionWorkqueue
storageFile
num_replicas1
allow_rollup_hdrstrue
max_consumers100
max_msg_size10 MB10,485,760 bytes
max_msgs_per_subject5,000,000
max_msgs50,000,000
max_bytes5 GB5,368,709,120 bytes
max_age7 daystoNanos(7, 'days')
duplicate_window2 minutestoNanos(2, 'minutes')
Scheduling

To enable message scheduling, add allow_msg_schedules: true to the event stream config. This requires NATS Server >= 2.12.

Command Stream

Short-lived RPC commands (JetStream RPC mode only).

PropertyValueNotes
retentionWorkqueue
storageFile
num_replicas1
allow_rollup_hdrsfalse
max_consumers50
max_msg_size5 MB5,242,880 bytes
max_msgs_per_subject100,000
max_msgs1,000,000
max_bytes100 MB104,857,600 bytes
max_age3 minutestoNanos(3, 'minutes')
duplicate_window30 secondstoNanos(30, 'seconds')

Broadcast Stream

Limits retention — messages persist until the configured limits are reached. Shared across all services.

PropertyValueNotes
retentionLimits
storageFile
num_replicas1
allow_rollup_hdrstrue
max_consumers200
max_msg_size10 MB10,485,760 bytes
max_msgs_per_subject1,000,000
max_msgs10,000,000
max_bytes2 GB2,147,483,648 bytes
max_age1 daytoNanos(1, 'days')
duplicate_window2 minutestoNanos(2, 'minutes')

Ordered Stream

Limits retention for strict sequential delivery. Ordered consumers are ephemeral.

PropertyValueNotes
retentionLimits
storageFile
num_replicas1
allow_rollup_hdrsfalse
max_consumers100
max_msg_size10 MB10,485,760 bytes
max_msgs_per_subject5,000,000
max_msgs50,000,000
max_bytes5 GB5,368,709,120 bytes
max_age1 daytoNanos(1, 'days')
duplicate_window2 minutestoNanos(2, 'minutes')

Consumer Defaults

Event Consumer

PropertyValueNotes
ack_wait10 secondstoNanos(10, 'seconds')
max_deliver3Message moves to dead-letter after 3 failed attempts
max_ack_pending100
ack_policyExplicit
deliver_policyAll
replay_policyInstant

Command Consumer

PropertyValueNotes
ack_wait5 minutestoNanos(5, 'minutes')
max_deliver1No retries — RPC failures propagate immediately
max_ack_pending100
ack_policyExplicit
deliver_policyAll
replay_policyInstant

Broadcast Consumer

PropertyValueNotes
ack_wait10 secondstoNanos(10, 'seconds')
max_deliver3
max_ack_pending100
ack_policyExplicit
deliver_policyAll
replay_policyInstant
note

Ordered consumers do not have a durable consumer configuration. They are ephemeral and managed entirely by the @nats-io/jetstream client library.

Connection Defaults

The transport applies the following connection defaults for production resilience:

PropertyValueNotes
maxReconnectAttempts-1Unlimited reconnection attempts
reconnectTimeWait10001 second between reconnection attempts

These defaults ensure the transport automatically recovers from transient network failures without manual intervention. Override them via connectionOptions in forRoot():

JetstreamModule.forRoot({
name: 'orders',
servers: ['nats://localhost:4222'],
connectionOptions: {
maxReconnectAttempts: 10, // limit to 10 attempts
reconnectTimeWait: 2_000, // 2 seconds between attempts
},
})

RPC Timeouts

ModeDefault TimeoutConstant
Core (standard NATS request-reply)30 secondsDEFAULT_RPC_TIMEOUT
JetStream (persistent RPC)3 minutesDEFAULT_JETSTREAM_RPC_TIMEOUT

The JetStream RPC timeout is intentionally longer because messages are persisted to a stream and the consumer may take time to process them.

Graceful Shutdown Timeout

PropertyValue
Shutdown timeout10 seconds

The transport waits up to 10 seconds for in-flight messages to be processed before forcing shutdown via drain().

Overriding Defaults

All stream and consumer defaults can be overridden in forRoot() options. User-provided values are merged on top of the defaults — you only need to specify the properties you want to change.

import { RetentionPolicy, StorageType } from '@nats-io/jetstream';
import { JetstreamModule, toNanos } from '@horizon-republic/nestjs-jetstream';

JetstreamModule.forRoot({
name: 'orders',
servers: ['nats://localhost:4222'],
events: {
stream: {
storage: StorageType.Memory, // override just storage type
max_age: toNanos(3, 'days'), // 3 days instead of 7
},
consumer: {
max_deliver: 5, // 5 retries instead of 3
},
},
rpc: {
mode: 'jetstream',
timeout: 60_000, // 1 minute instead of 3
stream: {
max_msg_size: 1024 * 1024, // 1 MB limit for RPC payloads
},
},
});

See Module Configuration for the full options reference.