Skip to main content

Node Configuration Options

Here are the available node configuration options, along with their default values and descriptions:

Application-level config

NameDefault ValueDescription
config-fileLoads configuration from a TOML file (cmd-line parameters take precedence)
protected-topicnewSeq[ProtectedTopic](0)Topics and its public key to be used for message validation, topic:pubkey. Argument may be repeated

Log config

NameDefault ValueDescription
log-levellogging.LogLevel.INFOSets the log level for process. Supported levels: TRACE, DEBUG, INFO, NOTICE, WARN, ERROR or FATAL
log-formatlogging.LogFormat.TEXTSpecifies what kind of logs should be written to stdout. Supported formats: TEXT, JSON

General node config

NameDefault ValueDescription
cluster-id0Cluster id that the node is running in. Node in a different cluster id is disconnected
agent-stringnwakuNode agent string which is used as identifier in network
nodekeyP2P node private key as 64-char hex string
listen-addressdefaultListenAddress()Listening address for LibP2P (and Discovery v5, if enabled) traffic
tcp-port60000TCP listening port
ports-shift0Add a shift to all port numbers
natanySpecify method to use for determining public address. Must be one of: any, none, upnp, pmp, extip:<IP>
ext-multiaddrExternal multiaddresses to advertise to the network. Argument may be repeated
ext-multiaddr-onlyfalseOnly announce external multiaddresses
max-connections50Maximum allowed number of libp2p connections
max-relay-peersMaximum allowed number of relay peers
peer-store-capacityMaximum stored peers in the peerstore
peer-persistencefalseEnable peer persistence

DNS addrs config

NameDefault ValueDescription
dns-addrstrueEnable resolution of dnsaddr, dns4 or dns6 multiaddrs
dns-addrs-name-server["1.1.1.1", "1.0.0.1"]DNS name server IPs to query for DNS multiaddrs resolution. Argument may be repeated
dns4-domain-nameThe domain name resolving to the node's public IPv4 address

Relay config

NameDefault ValueDescription
relaytrueEnable relay protocol: true|false
relay-peer-exchangefalseEnable gossipsub peer exchange in relay protocol: true|false
rln-relayfalseEnable spam protection through rln-relay: true|false
rln-relay-cred-pathThe path for persisting rln-relay credential
rln-relay-membership-indexThe index of the onchain commitment to use
rln-relay-dynamicfalseEnable waku-rln-relay with on-chain dynamic group management: true|false
rln-relay-id-keyRln relay identity secret key as a Hex string
rln-relay-id-commitment-keyRln relay identity commitment key as a Hex string
rln-relay-eth-client-addressws://localhost:8540/WebSocket address of an Ethereum testnet client e.g., ws://localhost:8540/
rln-relay-eth-contract-addressAddress of membership contract on an Ethereum testnet
rln-relay-eth-private-keyPrivate key for broadcasting transactions
executefalseRuns the registration function on-chain. By default, a dry-run will occur
rln-relay-cred-passwordPassword for encrypting RLN credentials
rln-relay-tree-pathPath to the RLN merkle tree sled db (https://github.com/spacejam/sled)
rln-relay-bandwidth-threshold0 # to maintain backwards compatibilityMessage rate in bytes/sec after which verification of proofs should happen
staticnodePeer multiaddr to directly connect with. Argument may be repeated
keep-alivefalseEnable keep-alive for idle connections: true|false
pubsub-topicDefault pubsub topic to subscribe to. Argument may be repeated. Deprecated! Please use shard and/or content-topic instead
shardShard to subscribe to. Argument may be repeated
content-topicDefault content topic to subscribe to. Argument may be repeated
reliabilityfalseEnable experimental reliability protocol true|false

Store and message store config

NameDefault ValueDescription
storefalseEnable/disable waku store protocol
storenodePeer multiaddress to query for storage
store-message-retention-policytime:172800Message store retention policy. Time retention policy: time:<seconds>. Capacity retention policy: capacity:<count>. Size retention policy: size:<xMB/xGB>. Set to none to disable
store-message-db-urlsqlite://store.sqlite3The database connection URL for persistent storage
store-message-db-vacuumfalseEnable database vacuuming at start. Only supported by SQLite database engine
store-message-db-migrationtrueEnable database migration at start

Filter config

NameDefault ValueDescription
filterfalseEnable filter protocol: true|false
filternodePeer multiaddr to request content filtering of messages
filter-subscription-timeout300 # 5 minutesTimeout for filter subscription without ping or refresh it, in seconds. Only for v2 filter protocol
filter-max-peers-to-serve1000Maximum number of peers to serve at a time. Only for v2 filter protocol
filter-max-criteria1000Maximum number of pubsub and content topic combinations per peer at a time. Only for v2 filter protocol

Light push config

NameDefault ValueDescription
lightpushfalseEnable lightpush protocol: true|false
lightpushnodePeer multiaddr to request lightpush of published messages

REST HTTP config

NameDefault ValueDescription
restfalseEnable Waku REST HTTP server: true|false
rest-address127.0.0.1Listening address of the REST HTTP server
rest-port8645Listening port of the REST HTTP server
rest-relay-cache-capacity30Capacity of the Relay REST API message cache
rest-adminfalseEnable access to REST HTTP Admin API: true|false
rest-allow-originAllow cross-origin requests from the specified origin. When using the REST API in a browser, specify the origin host to get a valid response from the node REST HTTP server. This option may be repeated and can contain wildcards (?,*) for defining URLs and ports such as localhost:*, 127.0.0.1:8080, or allow any website with *

Metrics config

NameDefault ValueDescription
metrics-serverfalseEnable the metrics server: true|false
metrics-server-address127.0.0.1Listening address of the metrics server
metrics-server-port8008Listening HTTP port of the metrics server
metrics-loggingtrueEnable metrics logging: true|false

DNS discovery config

NameDefault ValueDescription
dns-discoveryfalseEnable discovering nodes via DNS
dns-discovery-urlURL for DNS node list in format 'enrtree://<key>@<fqdn>'
dns-discovery-name-server["1.1.1.1", "1.0.0.1"]DNS name server IPs to query. Argument may be repeated

Discv5 config

NameDefault ValueDescription
discv5-discoveryfalseEnable discovering nodes via Node Discovery v5
discv5-udp-port9000Listening UDP port for Node Discovery v5
discv5-bootstrap-nodeText-encoded ENR for bootstrap node. Used when connecting to the network. Argument may be repeated
discv5-enr-auto-updatefalseDiscovery can automatically update its ENR with the IP address
discv5-table-ip-limit10Maximum amount of nodes with the same IP in discv5 routing tables
discv5-bucket-ip-limit2Maximum amount of nodes with the same IP in discv5 routing table buckets
discv5-bits-per-hop1Kademlia's b variable, increase for less hops per lookup

Waku peer exchange config

NameDefault ValueDescription
peer-exchangefalseEnable waku peer exchange protocol (responder side): true|false
peer-exchange-nodePeer multiaddr to send peer exchange requests to. (enables peer exchange protocol requester side)

WebSocket config

NameDefault ValueDescription
websocket-supportfalseEnable websocket: true|false
websocket-port8000WebSocket listening port
websocket-secure-supportfalseEnable secure websocket: true|false
websocket-secure-key-pathSecure websocket key path: '/path/to/key.txt'
websocket-secure-cert-pathSecure websocket Certificate path: '/path/to/cert.txt'

Non-relay, request-response protocol DOS protection configuration

NameDefault ValueDescription
rate-limitThis is a repeatable option. Each can describe a specific rate limit configuration for a particular protocol.
Formatted as:<protocol>:volume/period<time-unit>
- if protocol is not given, settings will be taken as default for un-set protocols. Ex: 80/2s
-Supported protocols are: lightpush|filter|px|store|storev2|storev3
-volume must be an integer value, representing number of requests over the period of time allowed.
-period\<time-unit> must be an integer with defined unit as one of h|m|s|ms
- storev2 and storev3 takes precedence over store which can easy set both store protocols at once.
- In case of multiple set of the same protocol limit, last one will take place.
- if config is not set, - which is the default - means unlimited requests are allowed.
-filter has a bit different approach. It has a default setting applied if not overridden. Rate limit setting for filter will be applied per subscriber-peers, not globally - it must be considered when changing the setting.

Examples:
--rate-limit="100/1s" - default for all protocols if not set otherwise.
--rate-limit="lightpush:0/0s" - lightpush protocol will not be rate-limited.
--rate-limit="store:130/1500ms" - both store-v3 and store-v2 will apply 130 request per each 1500ms separately.
--rate-limit="px:10/1h" PeerExchange will serve only 10 requests every hour.
--rate-limit="filter:8/5m" - will allow 8 subs/unsubs/ping requests for each subscriber within every 5 min.
tip

To configure your node using the provided configuration options, have a look at the Node Configuration Methods guide.