Reference
Configuration fields
Complete public-beta field and default reference. Every field can be overridden as NEXIR__SECTION__FIELD; nested TLS fields use another double underscore.
Server
| Field | Environment suffix | Default |
|---|---|---|
redis_bind | SERVER__REDIS_BIND | 127.0.0.1:6379 |
grpc_bind | SERVER__GRPC_BIND | 127.0.0.1:50051 |
default_read_mode | SERVER__DEFAULT_READ_MODE | LINEARIZABLE |
enable_admin_commands | SERVER__ENABLE_ADMIN_COMMANDS | false |
max_connections | SERVER__MAX_CONNECTIONS | 10,000 |
max_inflight_commands_global | SERVER__MAX_INFLIGHT_COMMANDS_GLOBAL | 100,000 |
max_inflight_commands_per_connection | SERVER__MAX_INFLIGHT_COMMANDS_PER_CONNECTION | 1,000 |
max_inflight_bytes_global | SERVER__MAX_INFLIGHT_BYTES_GLOBAL | 536,870,912 |
max_inflight_bytes_per_connection | SERVER__MAX_INFLIGHT_BYTES_PER_CONNECTION | 67,108,864 |
max_client_buffer_bytes | SERVER__MAX_CLIENT_BUFFER_BYTES | 67,108,864 |
max_buffered_client_bytes_global | SERVER__MAX_BUFFERED_CLIENT_BYTES_GLOBAL | 536,870,912 |
client_idle_timeout_secs | SERVER__CLIENT_IDLE_TIMEOUT_SECS | 300 |
client_write_timeout_secs | SERVER__CLIENT_WRITE_TIMEOUT_SECS | 30 |
max_concurrent_reads_per_connection | SERVER__MAX_CONCURRENT_READS_PER_CONNECTION | 16 |
max_buffered_response_bytes_per_connection | SERVER__MAX_BUFFERED_RESPONSE_BYTES_PER_CONNECTION | 67,108,864 |
max_buffered_response_bytes_global | SERVER__MAX_BUFFERED_RESPONSE_BYTES_GLOBAL | 536,870,912 |
TLS
Prefix every suffix with NEXIR__. Each surface accepts mode=disabled|require; require needs readable, matching PEM files.
| Field | Environment suffix | Default |
|---|---|---|
server.tls.client.mode | SERVER__TLS__CLIENT__MODE | disabled |
server.tls.client.cert_file | SERVER__TLS__CLIENT__CERT_FILE | empty |
server.tls.client.key_file | SERVER__TLS__CLIENT__KEY_FILE | empty |
server.tls.client.ca_bundle | SERVER__TLS__CLIENT__CA_BUNDLE | empty |
server.tls.cluster.mode | SERVER__TLS__CLUSTER__MODE | disabled |
server.tls.cluster.cert_file | SERVER__TLS__CLUSTER__CERT_FILE | empty |
server.tls.cluster.key_file | SERVER__TLS__CLUSTER__KEY_FILE | empty |
server.tls.cluster.ca_bundle | SERVER__TLS__CLUSTER__CA_BUNDLE | empty |
Storage
| Field | Environment suffix | Default |
|---|---|---|
path | STORAGE__PATH | ./data/nexir |
block_cache_size_mb | STORAGE__BLOCK_CACHE_SIZE_MB | 0 (derived: 50% of the process target P; one block cache shared by the whole node) |
write_buffer_size_mb | STORAGE__WRITE_BUFFER_SIZE_MB | 128 |
max_write_buffers | STORAGE__MAX_WRITE_BUFFERS | 4 |
enable_bloom_filters | STORAGE__ENABLE_BLOOM_FILTERS | true |
read_io_threads | STORAGE__READ_IO_THREADS | 0 (auto: cores clamped 4–64) |
read_io_queue_depth | STORAGE__READ_IO_QUEUE_DEPTH | 0 (auto: threads × 256) |
read_inline_cache_fast_path | STORAGE__READ_INLINE_CACHE_FAST_PATH | false |
write_io_threads | STORAGE__WRITE_IO_THREADS | 2 |
write_io_queue_depth | STORAGE__WRITE_IO_QUEUE_DEPTH | 0 (auto: threads × 64) |
cleanup_io_threads | STORAGE__CLEANUP_IO_THREADS | 1 |
cleanup_io_queue_depth | STORAGE__CLEANUP_IO_QUEUE_DEPTH | 1 |
max_read_reply_bytes | STORAGE__MAX_READ_REPLY_BYTES | 0 (resolves to 67,108,864) |
max_reader_pin_ms | STORAGE__MAX_READER_PIN_MS | 300,000 |
max_snapshot_files | STORAGE__MAX_SNAPSHOT_FILES | 10,000 |
max_snapshot_size_bytes | STORAGE__MAX_SNAPSHOT_SIZE_BYTES | 68,719,476,736 (64 GiB; must match across nodes) |
max_archive_bytes | STORAGE__MAX_ARCHIVE_BYTES | 68,719,476,736 (64 GiB; must match across nodes) |
level0_file_num_compaction_trigger | STORAGE__LEVEL0_FILE_NUM_COMPACTION_TRIGGER | 4 (RocksDB compaction and write-admission tuning, both databases, every column family; validation requires trigger < slowdown < stop) |
level0_slowdown_writes_trigger | STORAGE__LEVEL0_SLOWDOWN_WRITES_TRIGGER | 20 |
level0_stop_writes_trigger | STORAGE__LEVEL0_STOP_WRITES_TRIGGER | 36 |
soft_pending_compaction_bytes_limit | STORAGE__SOFT_PENDING_COMPACTION_BYTES_LIMIT | 68,719,476,736 (64 GiB; below the hard limit) |
hard_pending_compaction_bytes_limit | STORAGE__HARD_PENDING_COMPACTION_BYTES_LIMIT | 274,877,906,944 (256 GiB) |
max_background_jobs | STORAGE__MAX_BACKGROUND_JOBS | 4 (at least 2; measured on i4i-class instances — re-measure on smaller hosts) |
max_subcompactions | STORAGE__MAX_SUBCOMPACTIONS | 2 |
max_concurrent_snapshot_receives | STORAGE__MAX_CONCURRENT_SNAPSHOT_RECEIVES | 2 |
max_retained_snapshot_bytes | STORAGE__MAX_RETAINED_SNAPSHOT_BYTES | 274,877,906,944 (256 GiB; at least max_archive_bytes) |
min_free_disk_bytes | STORAGE__MIN_FREE_DISK_BYTES | 1,073,741,824 |
Raft
| Field | Environment suffix | Default |
|---|---|---|
node_id | RAFT__NODE_ID | 1 |
install_snapshot_timeout_ms | RAFT__INSTALL_SNAPSHOT_TIMEOUT_MS | 60,000 |
snapshot_install_margin_ms | RAFT__SNAPSHOT_INSTALL_MARGIN_MS | 10,000 |
snapshot_max_chunk_size_bytes | RAFT__SNAPSHOT_MAX_CHUNK_SIZE_BYTES | 4,194,304 |
snapshot_policy_logs | RAFT__SNAPSHOT_POLICY_LOGS | 100,000 |
max_in_snapshot_log_to_keep | RAFT__MAX_IN_SNAPSHOT_LOG_TO_KEEP | 100,000 (the baseline below which catch-up retention never purges) |
log_retention_budget_bytes | RAFT__LOG_RETENTION_BUDGET_BYTES | 34,359,738,368 (32 GiB; must be positive; lower it on disks well below 200 GiB) |
log_retention_retry_spacing_secs | RAFT__LOG_RETENTION_RETRY_SPACING_SECS | 15 (must be positive and below the episode limit) |
log_retention_episode_max_secs | RAFT__LOG_RETENTION_EPISODE_MAX_SECS | 1,800 (must be positive) |
log_retention_cooldown_secs | RAFT__LOG_RETENTION_COOLDOWN_SECS | 1,800 (must be positive) |
max_payload_entries | RAFT__MAX_PAYLOAD_ENTRIES | 300 |
max_pending_write_tasks | RAFT__MAX_PENDING_WRITE_TASKS | 10,000 |
max_pending_write_bytes | RAFT__MAX_PENDING_WRITE_BYTES | 268,435,456 |
reserved_system_write_tasks | RAFT__RESERVED_SYSTEM_WRITE_TASKS | 64 |
reserved_system_write_bytes | RAFT__RESERVED_SYSTEM_WRITE_BYTES | 8,388,608 |
max_inflight_proposals | RAFT__MAX_INFLIGHT_PROPOSALS | 512 |
reserved_system_inflight_proposals | RAFT__RESERVED_SYSTEM_INFLIGHT_PROPOSALS | 1 |
raft_log_append_batch_max_entries | RAFT__RAFT_LOG_APPEND_BATCH_MAX_ENTRIES | 256 |
raft_log_group_commit_enabled | RAFT__RAFT_LOG_GROUP_COMMIT_ENABLED | true |
raft_log_group_commit_max_entries | RAFT__RAFT_LOG_GROUP_COMMIT_MAX_ENTRIES | 256 |
raft_log_group_commit_max_bytes | RAFT__RAFT_LOG_GROUP_COMMIT_MAX_BYTES | 4,194,304 |
raft_log_group_commit_max_delay_micros | RAFT__RAFT_LOG_GROUP_COMMIT_MAX_DELAY_MICROS | 1,000 |
max_inflight_read_barriers | RAFT__MAX_INFLIGHT_READ_BARRIERS | 10 |
max_queued_linearizable_reads | RAFT__MAX_QUEUED_LINEARIZABLE_READS | 100,000 |
linearizable_read_batch_linger_micros | RAFT__LINEARIZABLE_READ_BATCH_LINGER_MICROS | 100 |
membership_preflight_timeout_ms | RAFT__MEMBERSHIP_PREFLIGHT_TIMEOUT_MS | 3,000 |
membership_change_timeout_ms | RAFT__MEMBERSHIP_CHANGE_TIMEOUT_MS | 30,000 |
add_learner_catchup_timeout_ms | RAFT__ADD_LEARNER_CATCHUP_TIMEOUT_MS | 300,000 |
transfer_leader_timeout_ms | RAFT__TRANSFER_LEADER_TIMEOUT_MS | 10,000 |
heartbeat_interval_ms | RAFT__HEARTBEAT_INTERVAL_MS | 1,000 |
election_timeout_min_ms | RAFT__ELECTION_TIMEOUT_MIN_MS | 3,000 |
election_timeout_max_ms | RAFT__ELECTION_TIMEOUT_MAX_MS | 5,000 |
Memory
A node plans its memory once at startup from T, the smaller of the host's memory and any memory-cgroup limit that applies. Every value is in bytes and 0 means derived. These are planned targets and capacities, not hard ceilings on resident memory. A plan that cannot fit stops the node before any database opens, with a message that begins memory budget: and names the setting to change.
| Field | Environment suffix | Default |
|---|---|---|
memory.process_target_bytes | MEMORY__PROCESS_TARGET_BYTES | 0 (derived: 75% of T; never above T) |
memory.state_memtable_bytes | MEMORY__STATE_MEMTABLE_BYTES | 0 (derived: 75% of the smaller of P/8 and 2 GiB) |
memory.log_memtable_bytes | MEMORY__LOG_MEMTABLE_BYTES | 0 (derived: the remaining quarter of that share) |
memory.reserved_headroom_bytes | MEMORY__RESERVED_HEADROOM_BYTES | 0 (derived: what remains of P after the cache and memtables; must be above 0) |
With the other defaults, the client response allowance needs a process target of about 4.4 GB (host memory of about 5.9 GB). A 4 GiB node stops at startup until server.max_connections, server.max_inflight_commands_global or server.max_buffered_response_bytes_global is lowered. Under memory pressure a leader refuses new writes with -TRYAGAIN memory pressure; request not submitted; a refused write has no effect and can be retried.
Top level, Prometheus, and logging
Top-level accept_terms (default false) is a noninteractive acceptance mechanism for the Nexir Binary License and Use Terms in Official Binaries; NEXIR_ACCEPT_TERMS=1 is the usual container and automation equivalent. prometheus.bind / NEXIR__PROMETHEUS__BIND defaults to 127.0.0.1:9090. NEXIR__PROMETHEUS__PORT is deprecated. RUST_LOG controls tracing and defaults to info.
The client response budget
Before a node allocates memory for a reply, it reserves that memory from one node-wide budget, server.max_buffered_response_bytes_global (512 MiB by default). Reads, the previous value returned by SET … GET, and large operational replies all draw on it. When there is no room the request is refused at once: a read gets -ERR read refused: response memory not available, SET … GET gets -ERR Server overloaded, nothing is changed, and the client can retry. Startup requires the budget to hold one maximum-size value (191,890,432 bytes) and the whole response allowance to fit in half of the reserved headroom. max_buffered_response_bytes_per_connection still paces one connection's writes. The budget's state is exported as nexir_client_response_budget_bytes, nexir_client_response_reserved_bytes and nexir_client_response_refused_total{path}.