Skip to main content

Default configuration

The following is the default configuration. It does not include all possible configuration options, since some can be conflicting. Take a look at the configuration reference below for a full list of options. Note that configuration defaults might change across server releases, if you want to make sure you use stable values, use an explicit configuration file an pass the path via --config-path=<PATH> as described above.
restate.toml
roles = [
    "worker",
    "admin",
    "metadata-server",
    "log-server",
    "http-ingress",
]
cluster-name = "localcluster"
auto-provision = true
advertised-address = "http://127.0.0.1:5122/"
default-num-partitions = 24
default-replication = 1
shutdown-timeout = "1m"
tracing-filter = "info"
log-filter = "warn,restate=info"
log-format = "pretty"
log-disable-ansi-codes = false
tokio-console-bind-address = "0.0.0.0:6669"
no-proxy = []
connect-timeout = "10s"
request-compression-threshold = "4.0 MiB"
disable-prometheus = false
rocksdb-total-memory-size = "6.0 GiB"
rocksdb-total-memtables-ratio = 0.5
rocksdb-high-priority-bg-threads = 2
rocksdb-write-stall-threshold = "3s"
rocksdb-enable-stall-on-memory-limit = false
rocksdb-perf-level = "enable-count"
metadata-update-interval = "10s"
metadata-fetch-from-peer-timeout = "3s"
initialization-timeout = "5m"
disable-telemetry = false
gossip-tick-interval = "100ms"
gossip-failure-threshold = 10
gossip-num-peers = 2
gossip-fd-stability-threshold = 3
gossip-suspect-interval = "5s"
gossip-loneliness-threshold = 30
gossip-extras-exchange-frequency = 10
gossip-time-skew-threshold = "1s"
default-journal-retention = "1d"

[metadata-client]
type = "replicated"
addresses = ["http://127.0.0.1:5122/"]
connect-timeout = "3s"
keep-alive-interval = "5s"
keep-alive-timeout = "5s"

[metadata-client.backoff-policy]
type = "exponential"
initial-interval = "100ms"
factor = 1.399999976158142
max-attempts = 10
max-interval = "1s"

[http-keep-alive-options]
interval = "40s"
timeout = "20s"

[network-error-retry-policy]
type = "exponential"
initial-interval = "10ms"
factor = 2.0
max-attempts = 15
max-interval = "5s"

[worker]
internal-queue-length = 1000
cleanup-interval = "1h"
max-command-batch-size = 32

[worker.storage]
rocksdb-disable-wal = true
rocksdb-memory-ratio = 0.49000000953674316

[worker.invoker]
inactivity-timeout = "1m"
abort-timeout = "1m"
message-size-warning = "10.0 MiB"
in-memory-queue-length-limit = 66049
concurrent-invocations-limit = 1000

[worker.invoker.retry-policy]
type = "exponential"
initial-interval = "50ms"
factor = 2.0
max-interval = "10s"

[worker.snapshots.object-store-retry-policy]
type = "exponential"
initial-interval = "100ms"
factor = 2.0
max-attempts = 10
max-interval = "10s"

[admin]
bind-address = "0.0.0.0:9070"
heartbeat-interval = "1s 500ms"
log-trim-check-interval = "1h"
disable-web-ui = false
disable-cluster-controller = false

[admin.query-engine]
memory-size = "4.0 GiB"

[ingress]
bind-address = "0.0.0.0:8080"
kafka-clusters = []

[bifrost]
default-provider = "replicated"
seal-retry-interval = "2s"
auto-recovery-interval = "15s"
append-retry-min-interval = "10ms"
append-retry-max-interval = "1s"
record-cache-memory-size = "250.0 MiB"
disable-auto-improvement = false

[bifrost.local]
rocksdb-disable-wal = false
rocksdb-memory-ratio = 0.5
rocksdb-disable-wal-fsync = false
writer-batch-commit-count = 5000
writer-batch-commit-duration = "0s"

[bifrost.replicated-loglet]
maximum-inflight-records = 1000
sequencer-inactivity-timeout = "15s"
log-server-rpc-timeout = "2s"
readahead-records = 20
read-batch-size = "32.0 KiB"
readahead-trigger-ratio = 0.5

[bifrost.replicated-loglet.sequencer-retry-policy]
type = "exponential"
initial-interval = "250ms"
factor = 2.0
max-interval = "5s"

[bifrost.replicated-loglet.log-server-retry-policy]
type = "exponential"
initial-interval = "250ms"
factor = 2.0
max-attempts = 3
max-interval = "2s"

[bifrost.read-retry-policy]
type = "exponential"
initial-interval = "50ms"
factor = 2.0
max-attempts = 50
max-interval = "1s"

[metadata-server]
request-queue-length = 32
rocksdb-memory-ratio = 0.009999999776482582
rocksdb-disable-wal = false
raft-election-tick = 10
raft-heartbeat-tick = 2
raft-tick-interval = "100ms"
status-update-interval = "5s"
log-trim-threshold = 1000
auto-join = true

[networking]
connect-timeout = "3s"
handshake-timeout = "3s"
http2-keep-alive-interval = "1s"
http2-keep-alive-timeout = "3s"
http2-adaptive-window = true
disable-compression = false
data-stream-window-size = "2.0 MiB"

[networking.connect-retry-policy]
type = "exponential"
initial-interval = "250ms"
factor = 2.0
max-attempts = 10
max-interval = "3s"

[log-server]
rocksdb-disable-wal = false
rocksdb-memory-ratio = 0.5
rocksdb-disable-wal-fsync = false
rocksdb-max-sub-compactions = 0
writer-batch-commit-count = 5000
incoming-network-queue-length = 1000

Configuration Reference

worker
object
Worker options:
admin
object
Admin server options:
ingress
object
Ingress options:
bifrost
object
Bifrost options:
metadata-server
object
Metadata store options:
networking
object
Networking options: Common network configuration options for communicating with Restate cluster nodes. Note that similar keys are present in other config sections, such as in Service Client options.
log-server
object
Log server options: Configuration is only used on nodes running with log-server role.
roles
array
default=["worker","admin","metadata-server","log-server","http-ingress"]
Defines the roles which this Restate node should run, by default the node starts with all roles.
node-name
string | null
default=null
Node Name: Unique name for this node in the cluster. The node must not change unless it’s started with empty local store. It defaults to the node’s hostname.
location
string
Node Location: [PREVIEW FEATURE] Setting the location allows Restate to form a tree-like cluster topology. The value is written in the format of “region[.zone]” to assign this node to a specific region, or to a zone within a region.The value of region and zone is arbitrary but whitespace and . are disallowed.NOTE: It’s strongly recommended to not change the node’s location string after its initial registration. Changing the location may result in data loss or data inconsistency if log-server is enabled on this node.When this value is not set, the node is considered to be in the default location. The default location means that the node is not assigned to any specific region or zone.Examples - us-west — the node is in the us-west region. - us-west.a1 — the node is in the us-west region and in the a1 zone. - “ — [default] the node is in the default location
force-node-id
integer | null
default=null
format: uint32
If set, the node insists on acquiring this node ID.
cluster-name
string
default="localcluster"
Cluster name: A unique identifier for the cluster. All nodes in the same cluster should have the same.
auto-provision
boolean
default=true
Auto cluster provisioning: If true, then this node is allowed to automatically provision as a new cluster. This node must have an admin role and a new nodes configuration will be created that includes this node.auto-provision is allowed by default in development mode and is disabled if restate-server runs with --production flag to prevent cluster nodes from forming their own clusters, rather than forming a single cluster.Use restatectl to provision the cluster/node if automatic provisioning is disabled.This can also be explicitly disabled by setting this value to false.Default: true
base-dir
string | null
default=null
The working directory which this Restate node should use for relative paths. The default is restate-data under the current working directory.
metadata-client
object
Metadata client options: The metadata client type to store metadata
bind-address
string
Address to bind for the Node server. Derived from the advertised address, defaulting to 0.0.0.0:$PORT (where the port will be inferred from the URL scheme).
advertised-address
string
default="http://127.0.0.1:5122/"
Address that other nodes will use to connect to this node. Default is http://127.0.0.1:5122/
default-num-partitions
integer
default=24
format: uint16
Partitions: Number of partitions that will be provisioned during initial cluster provisioning. partitions are the logical shards used to process messages.Cannot be higher than 65535 (You should almost never need as many partitions anyway)NOTE 1: This config entry only impacts the initial number of partitions, the value of this entry is ignored for provisioned nodes/clusters.NOTE 2: This will be renamed to default-num-partitions by default as of v1.3+Default: 24
default-replication
string
default=1
Default replication factor: Configures the global default replication factor to be used by the the system.Note that this value only impacts the cluster initial provisioning and will not be respected after the cluster has been provisioned.To update existing clusters use the restatectl utility.
shutdown-timeout
string
default="1m"
minLength: 1
Shutdown grace timeout: This timeout is used when shutting down the various Restate components to drain all the internal queues.Examples: “10 hours” or “5 days” or “5d” or “1h 4m” or “P40D”
default-thread-pool-size
integer | null
default=null
format: uint
Default async runtime thread pool: Size of the default thread pool used to perform internal tasks. If not set, it defaults to the number of CPU cores.
log-filter
string
default="warn,restate=info"
Logging Filter: Log filter configuration. Can be overridden by the RUST_LOG environment variable. Check the RUST_LOG documentation for more details how to configure it.
log-format
default="pretty"
Logging format: Format to use when logging.
  • "pretty" : Enables verbose logging. Not recommended in production.
  • "compact" : Enables compact logging.
  • "json" : Enables json logging. You can use a json log collector to ingest these logs and further process them.
log-disable-ansi-codes
boolean
default=false
Disable ANSI in log output: Disable ANSI terminal codes for logs. This is useful when the log collector doesn’t support processing ANSI terminal codes.
tokio-console-bind-address
string
Address to bind for the tokio-console tracing subscriber. If unset and restate-server is built with tokio-console support, it’ll listen on 0.0.0.0:6669.
disable-prometheus
boolean
default=false
Disable prometheus metric recording and reporting. Default is false.
storage-high-priority-bg-threads
integer | null
format: uint
minimum: 1
Storage high priority thread poolThis configures the restate-managed storage thread pool for performing high-priority or latency-sensitive storage tasks when the IO operation cannot be performed on in-memory caches.
storage-low-priority-bg-threads
integer | null
format: uint
minimum: 1
Storage low priority thread poolThis configures the restate-managed storage thread pool for performing low-priority or latency-insensitive storage tasks.
rocksdb-total-memory-size
string
default="6.0 GiB"
format: non-zero human-bytes
minimum: 1
minLength: 1
Non-zero human-readable bytes
rocksdb-total-memtables-ratio
number
default=0.5
format: float
Rocksdb total memtable size ratio: The memory size used across all memtables (ratio between 0 to 1.0). This limits how much memory memtables can eat up from the value in rocksdb-total-memory-limit. When set to 0, memtables can take all available memory up to the value specified in rocksdb-total-memory-limit. This value will be sanitized to 1.0 if outside the valid bounds.
rocksdb-bg-threads
integer | null
format: uint32
minimum: 1
Rocksdb Background Threads: The number of threads to reserve to Rocksdb background tasks. Defaults to the number of cores on the machine.
rocksdb-high-priority-bg-threads
integer
default=2
format: uint32
minimum: 1
Rocksdb High Priority Background Threads: The number of threads to reserve to high priority Rocksdb background tasks.
rocksdb-write-stall-threshold
string
default="3s"
minLength: 1
Rocksdb stall detection threshold: This defines the duration after which a write is to be considered in “stall” state. For every write that meets this threshold, the system will increment the restate.rocksdb_stall_flare gauge, if the write is unstalled, the guage will be updated accordingly.Examples: “10 hours” or “5 days” or “5d” or “1h 4m” or “P40D”
rocksdb-enable-stall-on-memory-limit
boolean
default=false
Allow rocksdb writes to stall if memory limit is reached: Note if automatic memory budgeting is enabled, it should be safe to allow rocksdb to stall if it hits the limit. However, if rocksdb stall kicked in, it’s unlikely that the system will recover from this without intervention.
rocksdb-perf-level
default="enable-count"
Rocksdb performance statistics level: Defines the level of PerfContext used internally by rocksdb. Default is enable-count which should be sufficient for most users. Note that higher levels incur a CPU cost and might slow down the critical path.
  • "disable" : Disable perf stats
  • "enable-count" : Enables only count stats
  • "enable-time-except-for-mutex" : Count stats and enable time stats except for mutexes
  • "enable-time-and-c-p-u-time-except-for-mutex" : Other than time, also measure CPU time counters. Still don’t measure time (neither wall time nor CPU time) for mutexes
  • "enable-time" : Enables count and time stats
metadata-update-interval
string
default="10s"
minLength: 1
Metadata update interval: The idle time after which the node will check for metadata updates from metadata store. This helps the node detect if it has been operating with stale metadata for extended period of time, primarily because it didn’t interact with other peers in the cluster during that period.Examples: “10 hours” or “5 days” or “5d” or “1h 4m” or “P40D”
metadata-fetch-from-peer-timeout
string
default="3s"
minLength: 1
Timeout for metadata peer-to-peer fetching: When a node detects that a new metadata version exists, it’ll attempt to fetch it from its peers. After this timeout duration has passed, the node will attempt to fetch the metadata from metadata store as well. This is to ensure that the nodes converge quickly while reducing the load on the metadata store.Examples: “10 hours” or “5 days” or “5d” or “1h 4m” or “P40D”
network-error-retry-policy
Network error retry policy: The retry policy for network related errors
initialization-timeout
string
default="5m"
minLength: 1
Initialization timeout: The timeout until the node gives up joining a cluster and initializing itself.Examples: “10 hours” or “5 days” or “5d” or “1h 4m” or “P40D”
disable-telemetry
boolean
default=false
Disable telemetry: Restate uses Scarf to collect anonymous usage data to help us understand how the software is being used. You can set this flag to true to disable this collection. It can also be set with the environment variable DO_NOT_TRACK=1.
tracing-endpoint
string | null
Tracing Endpoint: This is a shortcut to set both [Self::tracing_runtime_endpoint], and [Self::tracing_services_endpoint].Specify the tracing endpoint to send runtime traces to. Traces will be exported using OTLP gRPC through opentelemetry_otlp.To configure the sampling, please refer to the opentelemetry autoconfigure docs.
tracing-runtime-endpoint
string | null
Runtime Tracing Endpoint: Overrides [Self::tracing_endpoint] for runtime tracesSpecify the tracing endpoint to send runtime traces to. Traces will be exported using OTLP gRPC through opentelemetry_otlp.To configure the sampling, please refer to the opentelemetry autoconfigure docs.
tracing-services-endpoint
string | null
Services Tracing Endpoint: Overrides [Self::tracing_endpoint] for services tracesSpecify the tracing endpoint to send services traces to. Traces will be exported using OTLP gRPC through opentelemetry_otlp.To configure the sampling, please refer to the opentelemetry autoconfigure docs.
tracing-json-path
string | null
Distributed Tracing JSON Export Path: If set, an exporter will be configured to write traces to files using the Jaeger JSON format. Each trace file will start with the trace prefix.If unset, no traces will be written to file.It can be used to export traces in a structured format without configuring a Jaeger agent.To inspect the traces, open the Jaeger UI and use the Upload JSON feature to load and inspect them.
tracing-filter
string
required
Tracing Filter: Distributed tracing exporter filter. Check the RUST_LOG documentation for more details how to configure it.
tracing-headers
object
Additional tracing headers: Specify additional headers you want the system to send to the tracing endpoint (e.g. authentication headers).
request-identity-private-key-pem-file
string | null
default=null
Request identity private key PEM file: A path to a file, such as “/var/secrets/key.pem”, which contains exactly one ed25519 private key in PEM format. Such a file can be generated with openssl genpkey -algorithm ed25519. If provided, this key will be used to attach JWTs to requests from this client which SDKs may optionally verify, proving that the caller is a particular Restate instance.This file is currently only read on client creation, but this may change in future. Parsed public keys will be logged at INFO level in the same format that SDKs expect.
additional-request-headers
object | null
Additional request headers: Headers that should be applied to all outgoing requests (HTTP and Lambda). Defaults to x-restate-cluster-name: &lt;cluster name&gt;.
http-keep-alive-options
object
HTTP/2 Keep-alive: Configuration for the HTTP/2 keep-alive mechanism, using PING frames. If unset, HTTP/2 keep-alive are disabled.
http-proxy
string | null
default=null
Proxy URI: A URI, such as http://127.0.0.1:10001, of a server to which all invocations should be sent, with the Host header set to the deployment URI. HTTPS proxy URIs are supported, but only HTTP endpoint traffic will be proxied currently. Can be overridden by the HTTP_PROXY environment variable.
no-proxy
array
default=[]
No proxy: HTTP authorities eg localhost, restate.dev, 127.0.0.1 that should not be proxied by the http_proxy. Ports are ignored. Subdomains are also matched. An entry “*” matches all hostnames. Can be overridden by the NO_PROXY environment variable, which supports comma separated values.
connect-timeout
string
default="10s"
minLength: 1
Connect timeout: How long to wait for a TCP connection to be established before considering it a failed attempt.Examples: “10 hours” or “5 days” or “5d” or “1h 4m” or “P40D”
initial-max-send-streams
integer | null
default=null
format: uint
Initial Max Send Streams: Sets the initial maximum of locally initiated (send) streams.This value will be overwritten by the value included in the initial SETTINGS frame received from the peer as part of a [connection preface].Default: NoneNOTE: Setting this value to None (default) users the default recommended value from HTTP2 specs
aws-profile
string | null
default=null
AWS Profile: Name of the AWS profile to select. Defaults to ‘AWS_PROFILE’ env var, or otherwise the default profile.
aws-assume-role-external-id
string | null
default=null
AssumeRole external ID: An external ID to apply to any AssumeRole operations taken by this client. https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html Can be overridden by the AWS_EXTERNAL_ID environment variable.
request-compression-threshold
string | null
default="4.0 MiB"
Request Compression threshold: Request minimum size to enable compression. The request size includes the total of the journal replay and its framing using Restate service protocol, without accounting for the json envelope and the base 64 encoding.Default: 4MB (The default AWS Lambda Limit is 6MB, 4MB roughly accounts for +33% of Base64 and the json envelope).Human-readable bytes
rocksdb-disable-direct-io-for-reads
boolean | null
Disable Direct IO for reads: Files will be opened in “direct I/O” mode which means that data r/w from the disk will not be cached or buffered. The hardware buffer of the devices may however still be used. Memory mapped files are not impacted by these parameters.
rocksdb-disable-direct-io-for-flush-and-compactions
boolean | null
Disable Direct IO for flush and compactions: Use O_DIRECT for writes in background flush and compactions.
rocksdb-disable-wal
boolean | null
Disable WAL: The default depends on the different rocksdb use-cases at Restate.Supports hot-reloading (Partial / Bifrost only)
rocksdb-disable-statistics
boolean | null
Disable rocksdb statistics collectionDefault: False (statistics enabled)
rocksdb-max-background-jobs
integer | null
format: uint32
minimum: 1
RocksDB max background jobs (flushes and compactions): Default: the number of CPU cores on this node.
rocksdb-compaction-readahead-size
string | null
RocksDB compaction readahead size in bytes: If non-zero, we perform bigger reads when doing compaction. If you’re running RocksDB on spinning disks, you should set this to at least 2MB. That way RocksDB’s compaction is doing sequential instead of random reads.Non-zero human-readable bytes
rocksdb-statistics-level
oneOf | null
RocksDB statistics level: StatsLevel can be used to reduce statistics overhead by skipping certain types of stats in the stats collection process.Default: “except-detailed-timers”
  • "disable-all" : Disable all metrics
  • "except-histogram-or-timers" : Disable timer stats, and skip histogram stats
  • "except-timers" : Skip timer stats
  • "except-detailed-timers" : Collect all stats except time inside mutex lock AND time spent on compression.
  • "except-time-for-mutex" : Collect all stats except the counters requiring to get time inside the mutex lock.
  • "all" : Collect all stats, including measuring duration of mutex operations. If getting time is expensive on the platform to run, it can reduce scalability to more threads, especially for writes.
rocksdb-log-level
string | null
default=null
RocksDB log level: Verbosity of the LOG.Default: “error”Verbosity of the LOG.
rocksdb-log-keep-file-num
integer | null
default=null
format: uint
RocksDB log keep file num: Number of info LOG files to keepDefault: 1
rocksdb-log-max-file-size
string | null
default=null
RocksDB log max file size: Max size of info LOG fileDefault: 64MBNon-zero human-readable bytes
rocksdb-block-size
string | null
RocksDB block size: Uncompressed block sizeDefault: 64KiBNon-zero human-readable bytes
gossip-tick-interval
string
default="100ms"
minLength: 1
Gossip tick interval: The interval at which the failure detector will tick. Decrease this value for faster reaction to node failures. Note, that every tick comes with an overhead.Examples: “10 hours” or “5 days” or “5d” or “1h 4m” or “P40D”
gossip-failure-threshold
integer
default=10
format: uint32
minimum: 1
Gossip failure threshold: Specifies how many gossip intervals of inactivity need to pass before considering a node as dead.
gossip-num-peers
integer
default=2
format: uint32
minimum: 1
Number of peers to gossip: On every gossip interval, how many peers each node attempts to gossip with. The default is optimized for small clusters (less than 5 nodes). On larger clusters, if gossip overhead is noticeable, consider reducing this value to 1.
gossip-fd-stability-threshold
integer
default=3
format: uint32
minimum: 1
Gossips before failure detector is stable:
gossip-suspect-interval
string
default="5s"
minLength: 1
Human-readable duration: Duration string in either jiff human friendly or ISO8601 format. Check https://docs.rs/jiff/latest/jiff/struct.Span.html#parsing-and-printing for more details.Examples: “10 hours” or “5 days” or “5d” or “1h 4m” or “P40D” or “0”
gossip-loneliness-threshold
integer
default=30
format: uint32
minimum: 1
Gossip loneliness threshold: How many intervals need to pass without receiving any gossip messages before considering this node as potentially isolated/dead. This threshold is used in the case where the node can still send gossip messages but did not receive any. This can rarely happen in asymmetric network partitions.In this case, the node will advertise itself as dead in the gossip messages it sends out.Note: this threshold does not apply to a cluster that’s configured with a single node.
gossip-extras-exchange-frequency
integer
default=10
format: uint32
minimum: 1
Gossip extras exchange frequency: In addition to basic health/liveness information, the gossip protocol is used to exchange extra information about the roles hosted by this node. For instance, which partitions are currently running, their configuration versions, and the durable LSN of the corresponding partition databases. This information is sent every Nth gossip message. This setting controls the frequency of this exchange. For instance, 10 means that every 10th gossip message will contain the extra information about.
gossip-time-skew-threshold
string
default="1s"
minLength: 1
Gossips time skew threshold: The time skew is the maximum acceptable time difference between the local node and the time reported by peers via gossip messages. The time skew is also used to ignore gossip messages that are too old.Examples: “10 hours” or “5 days” or “5d” or “1h 4m” or “P40D”
default-journal-retention
string
minLength: 1
Human-readable duration: Duration string in either jiff human friendly or ISO8601 format. Check https://docs.rs/jiff/latest/jiff/struct.Span.html#parsing-and-printing for more details.Examples: “10 hours” or “5 days” or “5d” or “1h 4m” or “P40D” or “0”
max-journal-retention
string | null
Maximum journal retention duration that can be configured. When discovering a service deployment, or when modifying the journal retention using the Admin API, the given value will be clamped.Unset means no limit.Human-readable duration: Duration string in either jiff human friendly or ISO8601 format. Check https://docs.rs/jiff/latest/jiff/struct.Span.html#parsing-and-printing for more details.Examples: “10 hours” or “5 days” or “5d” or “1h 4m” or “P40D” or “0”
default-retry-policy
object | null
Default retry policy: The default retry policy to use for invocations.The retry policy can be customized on a service/handler basis, using the respective SDK APIs.
max-retry-policy-max-attempts
integer | null
format: uint
minimum: 1
Max configurable value for retry policy max attempts: Maximum max attempts configurable in an invocation retry policy. When discovering a service deployment with configured retry policies, or when modifying the invocation retry policy using the Admin API, the given value will be clamped.None means no limit, that is infinite retries is enabled.