Skip to main content

Configuration reference

Every server setting (rushdb serve, rushdb up): command-line flag, environment variable, config.yml key, type, default, and meaning. For how the three sources interact and for common setups, see Configuration.

Conventions​

  • Byte sizes accept a bare integer (bytes) or an integer with one of the suffixes B, KiB, MiB, GiB (for example 256MiB). Other suffixes (KB, MB, GB) are rejected. In config.yml a byte size can be a YAML number or a string.
  • Booleans given as flags take no value (--maintenance). Set the matching environment variable to true to enable it.
  • config.yml keys are kebab-case and live in one of the sections server, tenancy, resources, transactions, or languages. The resources and transactions sections reject unknown keys, so a typo is a startup error rather than a silently ignored setting.
  • A setting marked CLI/env only is never written to config.yml and is read from the command line or environment on every start.
  • 0 means "disabled" or "unbounded" where the description says so.

Server and listeners​

FlagEnvironmentconfig.yml keyTypeDefaultDescription
--port—server.portu163000HTTP port (Protocol v1, /health, /ready, /metrics).
--listenRUSHDB_LISTENserver.listen-addrstring127.0.0.1Bind address for every listener. A non-loopback address requires TLS or --allow-insecure-listen (see Security).
--tls-certRUSHDB_TLS_CERTserver.tls-certpathnonePEM certificate chain for HTTPS. Must be set together with --tls-key.
--tls-keyRUSHDB_TLS_KEYserver.tls-keypathnonePEM private key (PKCS#8) for HTTPS.
--pgwire-port—server.pgwire-portu165432PostgreSQL wire-protocol port. The listener is bound only when the sql language is enabled.
--grpc-port—server.grpc-portu160gRPC port; 0 disables gRPC.
--bolt-port—server.bolt-portu160Bolt (Neo4j wire) port; 0 disables Bolt. Bound only when cypher is enabled.
——server.body-limitbytes16MiBMaximum HTTP request body, gRPC message, and response size. config.yml only.
--allow-insecure-listenRUSHDB_ALLOW_INSECURE_LISTENCLI/env onlyboolfalseAcknowledge binding a non-loopback address without TLS (HTTP) and exposing the cleartext pgwire/gRPC/Bolt listeners. Refused in multitenant mode for pgwire/gRPC/Bolt regardless.
--maintenanceRUSHDB_MAINTENANCEserver.maintenanceboolfalseMaintenance mode: writes are rejected with unavailable, /health and /ready return 503. Reads keep working.
--require-index-warmupRUSHDB_REQUIRE_INDEX_WARMUPserver.require-index-warmupboolfalse/ready returns 503 until every vector index has caught up with its source records. Single-tenant only.
--data-dirRUSHDB_DATA_DIRserver.data-dir (informational)pathnonePersistent data directory. Omit for an in-memory node. The running server always takes it from the CLI or environment.
--request-timeout-msRUSHDB_REQUEST_TIMEOUT_MSCLI/env onlyu640Execution deadline for requests on every transport (a client deadlineMs may only shorten it); exceeded requests fail with cancelled. 0 = no deadline.
--max-concurrent-requests-per-tenantRUSHDB_MAX_CONCURRENT_PER_TENANTCLI/env onlyusize0Per-tenant concurrent request cap in multitenant mode; excess requests fail with unavailable. 0 = unlimited.
--threadsRUSHDB_THREADSresources.threadsusize0Request-scheduler and HTTP runtime worker threads. 0 = the host's available parallelism. Workers are clamped to 2–256; the scheduler queue holds 32 requests per worker, clamped to 64–4096.
--advertised-addressRUSHDB_ADVERTISED_ADDRESSresources.advertised-addressstringbind addressAddress reported to clients in build info.

Security and tenancy​

FlagEnvironmentconfig.yml keyTypeDefaultDescription
--tokenRUSHDB_TOKENCLI/env only (never stored)stringlocal-tokenBoot token: full-access credential on every transport, and the pgwire password. Must not be empty. A non-loopback --listen refuses to start with the default.
--capability-secretRUSHDB_CAPABILITY_SECRETCLI/env only (never stored)hex stringnoneHMAC-SHA256 key (hex, at least 16 bytes after decoding) that enables signed capability tokens on HTTP.
--multitenant—tenancy.mode (single or multitenant)boolfalse (single)Scope-keyed multitenancy. Fixed for the life of a data directory.

Query languages​

FlagEnvironmentconfig.yml keyTypeDefaultDescription
--languages—languages.sql, languages.gql, languages.cypher, languages.gremlin, languages.sql-pgq, languages.mongodbcomma list / boolssql, gremlin, sql-pgq, mongodbStatement languages to enable (a list replaces the default set): sql, gql, cypher, gremlin, sql-pgq, mongodb. The native search query is always enabled; listing searchquery is an error.

Memory and caches​

FlagEnvironmentconfig.yml keyTypeDefaultDescription
--managed-limitRUSHDB_MANAGED_LIMITresources.managed-limitbytes512MiBEnvelope for engine-managed reservations (caches, transaction pool, query phases). Not a process RSS limit.
--storage-cacheRUSHDB_STORAGE_CACHEresources.storage-cachebytes128MiBStorage page cache. At least 64 KiB; storage-cache + transaction-pool must be less than managed-limit.
--transaction-poolRUSHDB_TRANSACTION_POOLresources.transaction-poolbytes128MiBShared pool for staged transaction payloads.
--deployment-limitRUSHDB_DEPLOYMENT_LIMITresources.deployment-limitbytesnoneOptional declared memory cap of the host or container. When set, managed-limit + memory-headroom must fit inside it. Not detected automatically.
--memory-headroomRUSHDB_MEMORY_HEADROOMresources.memory-headroombytes128MiBUntracked allowance reserved inside deployment-limit. Must be positive.
--logical-cache-bytesRUSHDB_LOGICAL_CACHE_BYTESresources.logical-cache-bytesbytes128MiBByte-accounted caches: ANN vector segments, text indexes, planner statistics. 0 disables them.
--planner-stats-bytesRUSHDB_PLANNER_STATS_BYTESresources.planner-stats-bytesbytes32MiBEvictable planner-statistics cache, charged to the logical cache. 0 disables caching.
--planner-stats-idle-secondsRUSHDB_PLANNER_STATS_IDLE_SECONDSresources.planner-stats-idle-secondsu64600Seconds an unused planner-statistics entry stays cached.
--planner-stats-max-age-commitsRUSHDB_PLANNER_STATS_MAX_AGE_COMMITSresources.planner-stats-max-age-commitsu6410000Commits after which a cached statistics entry is recomputed.
--query-memory-maxRUSHDB_QUERY_MEMORY_MAXresources.query-memory-maxbytes256MiBPer-query working-set cap; a query that would materialize more fails with resource_exhausted. 0 = off.
--rss-maxRUSHDB_RSS_MAXresources.rss-maxbytes0Resident-memory watchdog threshold. Above it the server logs a warning and runs best-effort reclamation every 10 s. A policy signal, not an allocation cap. 0 = disabled.
--tenant-idle-secondsRUSHDB_TENANT_IDLE_SECONDSresources.tenant-idle-secondsu64300Seconds an unused tenant's in-memory handles (vector engine, transaction coordinator) stay resident.
--tenant-resident-bytesRUSHDB_TENANT_RESIDENT_BYTESresources.tenant-resident-bytesbytes512MiBBudget for resident tenant handles. Idle tenants are evicted least recently used first; when only active tenants remain, a new tenant gets a retryable 503 (tenant_capacity).
--http-inflight-body-bytesRUSHDB_HTTP_INFLIGHT_BODY_BYTESresources.http-inflight-body-bytesbytes256MiBHTTP request-body bytes that may be in flight across all connections. A request whose declared length does not fit is refused with a retryable 503 before its body is read. Never smaller than server.body-limit.

Write path and durability​

FlagEnvironmentconfig.yml keyTypeDefaultDescription
--durabilityRUSHDB_DURABILITYresources.durabilitylocal | async | memorylocallocal: fsync before acknowledging. async: acknowledge after queuing, persisted by a later local commit or checkpoint, so an acknowledged commit can be lost in a crash. memory: in-memory stores only; rejected with a data directory.
--max-group-countRUSHDB_MAX_GROUP_COUNTresources.max-group-countusize0Maximum commits coalesced into one group commit. 0 = unbounded.
--max-group-bytesRUSHDB_MAX_GROUP_BYTESresources.max-group-bytesusize0Maximum staged bytes coalesced into one group commit. 0 = unbounded.
--max-group-delay-msRUSHDB_MAX_GROUP_DELAY_MSresources.max-group-delay-msu640How long the group-commit publisher waits for more commits before flushing, so concurrent commits share one fsync. 0 = flush immediately.
--lock-timeout-msRUSHDB_LOCK_TIMEOUT_MSresources.lock-timeout-msu640Maximum wait for the write-admission lock before a commit fails with a retryable resource_exhausted. 0 = wait indefinitely.
--max-expanded-commit-bytesRUSHDB_MAX_EXPANDED_COMMIT_BYTESresources.max-expanded-commit-bytesbytes512MiBLargest single commit, measured as its expanded write set. Larger commits fail with a non-retryable resource_exhausted. Commits larger than one 64 MiB WAL record are chained automatically below this limit. Must be positive.
--idempotency-window-secondsRUSHDB_IDEMPOTENCY_WINDOW_SECONDSresources.idempotency-window-secondsu6486400How long retry receipts are kept: a repeated commit key within the window returns the original outcome.
--shardsRUSHDB_SHARDSresources.shardsusize1Physical storage files. Values above 1 (maximum 256) are a Preview and require --experimental-sharding.
--experimental-shardingRUSHDB_EXPERIMENTAL_SHARDINGresources.experimental-shardingboolfalseAcknowledge that multi-shard commit groups are persisted per shard and are not crash-atomic.

Maintenance, retention, and compaction​

FlagEnvironmentconfig.yml keyTypeDefaultDescription
--checkpoint-interval-secondsRUSHDB_CHECKPOINT_INTERVAL_SECONDSresources.checkpoint-interval-secondsu640 (= 5 s)Maintenance tick: MVCC history GC, WAL retention, index builds, durable checkpoint.
--compact-interval-secondsRUSHDB_COMPACT_INTERVAL_SECONDSresources.compact-interval-secondsu64300Idle compaction period and minimum interval between compactions. 0 = disabled.
--compact-quiesce-secondsRUSHDB_COMPACT_QUIESCE_SECONDSresources.compact-quiesce-secondsu6410Quiet period after the last commit before compaction may run.
--compact-growth-percentRUSHDB_COMPACT_GROWTH_PERCENTresources.compact-growth-percentu32150Compact only when the file has grown to at least this percentage of its size after the last compaction (or at least 10,000 keys were purged).
--tx-log-keep-commitsRUSHDB_TX_LOG_KEEP_COMMITSresources.tx-log-keep-commitsu640Commits the WAL keeps even when no consumer or open reader needs them. 0 = keep only what consumers and readers pin. Bounded by the hard caps.
--tx-log-retention-commitsRUSHDB_TX_LOG_RETENTION_COMMITSresources.tx-log-retention-commitsu64100000Hard cap: the WAL never holds more than the last N commits for any consumer.
--tx-log-keep-allRUSHDB_TX_LOG_KEEP_ALLresources.tx-log-keep-allboolfalseRemove the commit-count cap (wins over tx-log-retention-commits).
--tx-log-retention-bytesRUSHDB_TX_LOG_RETENTION_BYTESresources.tx-log-retention-bytesbytes4GiBHard byte cap on the retained WAL; the oldest commits are pruned until it fits. 0 = off.
--retention-consumer-lease-secondsRUSHDB_RETENTION_CONSUMER_LEASE_SECONDSresources.retention-consumer-lease-secondsu6486400How long a retention consumer (backup, WAL archive, replica, cursor) may go without acknowledging before its claim on the WAL expires. 0 = never expire.
--disk-space-threshold-percentRUSHDB_DISK_SPACE_THRESHOLD_PERCENTresources.disk-space-threshold-percentu8 (0–100)10Below this free-disk percentage on the data directory's filesystem, writes on every transport fail with unavailable (HTTP 503) and /ready returns 503. 0 = disabled.

Backup, archive, and replication​

FlagEnvironmentconfig.yml keyTypeDefaultDescription
--wal-archive-dirRUSHDB_WAL_ARCHIVE_DIRresources.wal-archive-dirpathnoneEnable continuous WAL archiving into this directory (every 5 s). Required for point-in-time restore.
--wal-archive-retention-secondsRUSHDB_WAL_ARCHIVE_RETENTION_SECONDSresources.wal-archive-retention-secondsu64604800 (7 days)Point-in-time restore window. Older segments not needed by the base that covers the window's start are deleted.
--wal-archive-retention-bytesRUSHDB_WAL_ARCHIVE_RETENTION_BYTESresources.wal-archive-retention-bytesbytes0Hard byte cap on the archive. Over it the oldest segments are deleted even inside the window (logged as a warning). 0 = none.
--replica-ofRUSHDB_REPLICA_OFresources.replica-ofURLnoneLeader base URL (for example http://leader:3000). The node becomes a read-only follower.
--replica-idRUSHDB_REPLICA_IDresources.replica-idstringdefaultIdentity this follower reports to the leader. Each follower of one leader needs a distinct id.
--replica-tokenRUSHDB_REPLICA_TOKENresources.replica-tokenstringthis node's --tokenToken presented to the leader's replication endpoint; must equal the leader's boot token.
--raft—CLI/env onlyusizenonePreview: run N in-process Raft state machines. Requires --experimental-raft. See Replication.
--experimental-raft—CLI/env onlyboolfalseAcknowledge the Raft Preview's limitations.

Observability​

FlagEnvironmentconfig.yml keyTypeDefaultDescription
--logs-query-threshold-msRUSHDB_LOGS_QUERY_THRESHOLD_MSresources.logs-query-threshold-msu645000HTTP requests at or above this duration log a slow protocol call warning. 0 = disabled.
--metrics-prefixRUSHDB_METRICS_PREFIXresources.metrics-prefixstringnonePrefix prepended to every exported metric name.
--metrics-filterRUSHDB_METRICS_FILTERresources.metrics-filterstringnoneExport only metric families whose name contains this substring.
--metrics-tenant-limitRUSHDB_METRICS_TENANT_LIMITresources.metrics-tenant-limitusize0Emit per-tenant rushdb_records_stored series for at most this many most recently served tenants. 0 = only the tenant="all" total.
—RUST_LOG—filterrushdb_server=info,tower_http=infoLog filter (standard tracing env-filter syntax).

Vector indexes​

FlagEnvironmentconfig.yml keyTypeDefaultDescription
--require-vector-index-nameRUSHDB_REQUIRE_VECTOR_INDEX_NAMEresources.require-vector-index-namebooltrueVector writes and searches must name their index explicitly. Turn it off with --require-vector-index-name false or require-vector-index-name: false in config.yml.
--vector-exact-max-poolRUSHDB_VECTOR_EXACT_MAX_POOLresources.vector-exact-max-poolinteger5000Largest index (vectors) a vector search in auto mode scores exactly; above it, auto uses the ANN graph once resident and builds it in the background meanwhile. See Vector search.
--vector-default-efRUSHDB_VECTOR_DEFAULT_EFresources.vector-default-efinteger64ANN gather breadth when a search does not set ef.

Transactions​

FlagEnvironmentconfig.yml keyTypeDefaultDescription
--tx-max-activeRUSHDB_TX_MAX_ACTIVEtransactions.max-activeusize128Maximum concurrently active transactions.
--tx-max-operationsRUSHDB_TX_MAX_OPERATIONStransactions.max-operationsusize10000Maximum staged operations per transaction.
--tx-max-staged-bytesRUSHDB_TX_MAX_STAGED_BYTEStransactions.max-staged-bytesbytes8MiBMaximum staged payload bytes per transaction.
--tx-max-expired-idsRUSHDB_TX_MAX_EXPIRED_IDStransactions.max-expired-idsusize128Expired transaction ids remembered per sweep (so a late commit reports expired).
--tx-default-ttl-secondsRUSHDB_TX_DEFAULT_TTL_SECONDStransactions.default-ttl-secondsu6460Lifetime of a transaction whose begin omits ttlMs. Must be positive and not exceed max-age-seconds.
--tx-max-age-secondsRUSHDB_TX_MAX_AGE_SECONDStransactions.max-age-secondsu6460Upper bound on any transaction lifetime (and on cursor lifetimes).
--tx-max-staged-bytes-per-tenantRUSHDB_TX_MAX_STAGED_BYTES_PER_TENANTtransactions.max-staged-bytes-per-tenantbytes0Share of the transaction pool one tenant may claim in multitenant mode. 0 = tenants share the pool directly. Must not exceed transaction-pool.

One-shot commands​

These flags perform a task and exit without starting the server. See CLI reference.

FlagArgumentDescription
--print-config—Print the effective config.yml and exit.
--initDATA_DIRWrite and validate an initial config.yml in DATA_DIR, then exit.
--exportPATHWrite a logical graph snapshot of --data-dir to PATH.
--restorePATHRestore a graph snapshot into a fresh --data-dir.
--compact—Compact the store in place (server must be stopped).
--backup-basePATHOffline physical base backup of --data-dir.
--restore-pitrBASE_DIRRestore a base backup plus archived WAL into a new --data-dir.
--to-lsnLSNStop point for --restore-pitr.
--verify—Logical integrity check of --data-dir.
--verify-baseBASE_DIRCheck a base backup's manifest and file CRCs.

Startup validation rules​

rushdb serve refuses to start when:

ConditionMessage (abridged)
--token is emptyserver token must not be empty
Capability secret is not hex, or shorter than 16 bytes--capability-secret must be hex / capability secret must be at least 16 bytes
Only one of tls-cert / tls-key setTLS requires both a certificate and a private key
Non-loopback --listen without TLS or --allow-insecure-listenrefusing to bind HTTP (cleartext) to non-loopback listen address
Non-zero pgwire/gRPC/Bolt port on a non-loopback listen address without --allow-insecure-listenrefusing to bind pgwire/gRPC/Bolt (cleartext) ...
Multitenant mode, non-loopback listen address, and any non-zero pgwire/gRPC/Bolt portrefusing to bind pgwire/gRPC/Bolt on a non-loopback multitenant listener
storage-cache < 64 KiB, or storage-cache + transaction-pool ≥ managed-limitcache must be at least 64 KiB; ...
managed-limit + memory-headroom > deployment-limitmanaged-limit plus memory-headroom exceeds deployment-limit
memory-headroom is 0memory-headroom must be positive
disk-space-threshold-percent > 100disk-space-threshold-percent must be between 0 and 100
shards is 0, above 256, or above 1 without --experimental-shardingshard-count ...
durability: memory with a data directoryMemory durability is for in-memory stores
transactions.default-ttl-seconds is 0 or above max-age-secondstransaction default TTL must be positive and no greater than transaction maximum TTL
transaction-pool too small for transaction metadatatransaction-pool cannot fit coordinator and active transaction metadata
--raft without --experimental-raftexplanation of the Preview, exit code 2
--languages names searchquery or an unknown languageinvalid --languages: ...
Stored tenancy.mode differs from --multitenantdata directory tenancy mismatch
Stored config.yml version is not 1config version mismatch
An explicitly supplied flag or variable disagrees with config.ymlconfig.yml disagrees with explicitly supplied startup flags
A data directory with committed data has no config.ymlexisting data directory has no config.yml

See also​