Skip to main content

Maru configuration reference

Advanced options

Some configuration keys are operational or environment-specific and are included for completeness. Their presence does not indicate that changing them is recommended or supported for every deployment. Verify their applicability against the relevant release and deployment guidance.

Defaults

Defaults are values defined in the Maru Kotlin config data classes (@ConfigDoc(default = ...)). They are not recommended production settings and may be overridden by deployment configuration. Sample *.toml files are never used as the source of defaults.

This reference lists Maru TOML configuration keys, grouped by section. Descriptions come from @ConfigDoc/@ConfigSection annotations on the config data classes; defaults are shown in the Default column.

Generated from LFDT-Lineth/lineth-monorepo@4e6baea.

Keys may differ in other Maru releases.

maru

Main Maru configuration.

KeyTypeRequiredDefaultStatusDescription
allow-empty-blocksBooleannofalseactiveWhether empty blocks are allowed when proposing and when validating blocks (needed in multi-validator networks).
follower-engine-apisMap<String, ApiEndpointDto>?no-activeNamed map of follower execution-layer endpoints. Each entry maps a follower name to its engine API endpoint settings.

api

Maru JSON-RPC API settings.

KeyTypeRequiredDefaultStatusDescription
api.portUIntno5060activePort serving the Maru JSON-RPC API.

defaults

Shared defaults reused by linea and fork-transition; currently provides the L2 endpoint.

KeyTypeRequiredDefaultStatusDescription
defaults.l2-eth-endpoint.endpointURLyes-activeEngine API endpoint URL of the execution-layer node. Example: http://el-node:8551.
defaults.l2-eth-endpoint.jwt-secret-pathString?no-activeOptional path to the JWT secret file used for authenticated Engine API calls. Omit to disable JWT authentication. Example: /jwt.hex.
defaults.l2-eth-endpoint.timeoutDurationnoPT1MactiveOverall timeout for a single request to this endpoint.

fork-transition

Protocol fork transition monitoring settings. Has defaults so the section may be omitted.

KeyTypeRequiredDefaultStatusDescription
fork-transition.l2-eth-api-endpoint.endpointURLyes-activeEngine API endpoint URL of the execution-layer node. Example: http://el-node:8551.
fork-transition.l2-eth-api-endpoint.jwt-secret-pathString?no-activeOptional path to the JWT secret file used for authenticated Engine API calls. Omit to disable JWT authentication. Example: /jwt.hex.
fork-transition.l2-eth-api-endpoint.timeoutDurationnoPT1MactiveOverall timeout for a single request to this endpoint.
fork-transition.protocol-transition-polling-intervalDurationnoPT1SactiveInterval between polls for the protocol fork transition.

linea

Linea-specific settings (L1/L2 endpoints, contract address). Omit on non-Linea networks. l1-eth-api is a deprecated alias of l1-eth-api-endpoint; set one of the two. l2-eth-api-endpoint falls back to defaults.l2-eth-endpoint when omitted.

KeyTypeRequiredDefaultStatusDescription
linea.contract-addressByteArrayyes-activeAddress of the Linea rollup contract on L1 (20-byte hex). Example: 0x0000000000000000000000000000000000000000.
linea.l1-eth-api-endpoint.endpointURLyes-activeEngine API endpoint URL of the execution-layer node. Example: http://el-node:8551.
linea.l1-eth-api-endpoint.jwt-secret-pathString?no-activeOptional path to the JWT secret file used for authenticated Engine API calls. Omit to disable JWT authentication. Example: /jwt.hex.
linea.l1-eth-api-endpoint.timeoutDurationnoPT1MactiveOverall timeout for a single request to this endpoint.
linea.l1-eth-api.endpointURLyes-deprecatedEngine API endpoint URL of the execution-layer node. Example: http://el-node:8551.
linea.l1-eth-api.jwt-secret-pathString?no-deprecatedOptional path to the JWT secret file used for authenticated Engine API calls. Omit to disable JWT authentication. Example: /jwt.hex.
linea.l1-eth-api.timeoutDurationnoPT1MdeprecatedOverall timeout for a single request to this endpoint.
linea.l1-highest-block-tagStringnofinalizedactiveL1 block tag treated as the highest finalized block (e.g. finalized, safe, latest).
linea.l1-polling-intervalDurationnoPT6SactiveInterval between L1 polls for rollup contract events.
linea.l2-eth-api-endpoint.endpointURLyes-activeEngine API endpoint URL of the execution-layer node. Example: http://el-node:8551.
linea.l2-eth-api-endpoint.jwt-secret-pathString?no-activeOptional path to the JWT secret file used for authenticated Engine API calls. Omit to disable JWT authentication. Example: /jwt.hex.
linea.l2-eth-api-endpoint.timeoutDurationnoPT1MactiveOverall timeout for a single request to this endpoint.

observability

Observability (metrics, health) settings.

KeyTypeRequiredDefaultStatusDescription
observability.jvm-metrics-enabledBooleannotrueactiveWhether JVM-level metrics are exposed in addition to application metrics.
observability.portUIntno9545activePort serving observability endpoints (metrics, health).
observability.prometheus-metrics-enabledBooleannotrueactiveWhether Prometheus metrics are exposed on the observability port.

p2p

P2P networking settings. Omit to disable P2P.

KeyTypeRequiredDefaultStatusDescription
p2p.discovery.advertised-ipString?no-activeIP address advertised to peers for discovery. Omit to use the listen IP address.
p2p.discovery.bootnodesList<String>no-activeBootnode addresses (enodes) used to bootstrap discovery.
p2p.discovery.portUIntno9000activeUDP port used for discovery.
p2p.discovery.refresh-intervalDurationyes-activeInterval between discovery table refresh cycles.
p2p.discovery.retry-timeoutDurationnoPT10SactiveTimeout before retrying a failed discovery request.
p2p.discovery.search-intervalDurationnoPT1SactiveInterval between discovery search runs.
p2p.discovery.search-timeoutDurationnoPT30SactiveTimeout for a single discovery search run.
p2p.gossiping.consider-peers-as-directBooleannofalseactiveWhether all peers are scored as direct peers (same as static peers) in gossip peer scoring (libp2p GossipPeerScoreParams.isDirect).
p2p.gossiping.dIntno8activeTarget mesh degree (number of peers each topic is gossiped to).
p2p.gossiping.d-highIntno16activeUpper bound on the mesh degree; peers are pruned when the mesh exceeds this. Defaults to 2 * d.
p2p.gossiping.d-lazyIntno6activeDegree of lazy (non-mesh) peers used for gossip amplification.
p2p.gossiping.d-lowIntno6activeLower bound on the mesh degree; peers are added when the mesh drops below this.
p2p.gossiping.fanout-ttlDurationnoPT1MactiveTime-to-live for gossip fanout messages sent to peers outside the mesh.
p2p.gossiping.flood-publish-max-message-size-thresholdIntno16384activeMaximum message size above which flood publishing is skipped. Defaults to 16KiB.
p2p.gossiping.gossip-factorDoubleno0.25activeFraction of non-mesh peers that receive gossip messages (libp2p gossipFactor).
p2p.gossiping.gossip-sizeIntno3activeNumber of history windows advertised via IHAVE messages (libp2p gossipSize).
p2p.gossiping.heartbeat-intervalDurationnoPT0.7SactiveInterval between gossipsub heartbeat rounds.
p2p.gossiping.historyIntno6activeNumber of gossip history windows retained in the message cache (libp2p gossipHistoryLength).
p2p.gossiping.seen-ttlDurationnoPT780.5SactiveTime-to-live for the seen-message cache. Defaults to 700ms * 1115.
p2p.ip-addressStringno127.0.0.1activeIP address the node listens on for P2P traffic. Defaults to localhost for security.
p2p.max-peersIntno25activeMaximum number of peers the node maintains.
p2p.peering-fork-mismatch-leeway-timeDurationnoPT20SactiveLeeway time during which a peer is tolerated despite a fork mismatch before being penalized.
p2p.portUIntno9000activeTCP port the node listens on for P2P traffic. UDP discovery uses p2p.discovery.port.
p2p.reconnect-delayDurationnoPT5SactiveDelay before reconnecting to a dropped peer.
p2p.reputation.ban-periodDurationnoPT1HactiveDuration a peer is banned after dropping below the disconnect threshold.
p2p.reputation.capacityIntno1024activeMaximum number of peers tracked in the reputation table.
p2p.reputation.cooldown-periodDurationnoPT2MactiveDuration a peer's reputation is held before decaying after a change.
p2p.reputation.disconnect-score-thresholdIntno-10activeReputation score below which a peer is disconnected. Defaults to -large-change.
p2p.reputation.large-changeIntno10activeReputation score delta applied for a large positive/negative event.
p2p.reputation.max-reputationIntno20activeMaximum reputation score a peer can reach. Defaults to 2 * large-change.
p2p.reputation.small-changeIntno3activeReputation score delta applied for a small positive/negative event.
p2p.static-peersList<String>no-activeStatic peer addresses (enodes) the node stays connected to.
p2p.status-update.refresh-intervalDurationnoPT30SactiveInterval between peer status refreshes.
p2p.status-update.refresh-interval-leewayDurationnoPT5SactiveLeeway applied to the peer status refresh interval.
p2p.status-update.timeoutDurationnoPT10SactiveTimeout for a single peer status update request.

payload-validator

Validator execution-layer node settings. Required when qbft is set.

KeyTypeRequiredDefaultStatusDescription
payload-validator.engine-api-endpoint.endpointURLyes-activeEngine API endpoint URL of the execution-layer node. Example: http://el-node:8551.
payload-validator.engine-api-endpoint.jwt-secret-pathString?no-activeOptional path to the JWT secret file used for authenticated Engine API calls. Omit to disable JWT authentication. Example: /jwt.hex.
payload-validator.engine-api-endpoint.timeoutDurationnoPT1MactiveOverall timeout for a single request to this endpoint.
payload-validator.payload-validation-enabledBooleannotrueactiveWhether to validate execution payloads received via the Engine API. Must stay true when the qbft section is set: a validator fails to start with payload validation disabled. Only followers may set it to false.

persistence

Persistent on-disk state settings.

KeyTypeRequiredDefaultStatusDescription
persistence.data-pathPathyes-activeDirectory where Maru stores its persistent on-disk state (database, keystore). Example: /data/maru.
persistence.private-key-pathPathnodata-path/private-keyactivePath to the node private key file. Defaults to a 'private-key' file under data-path.

qbft

QBFT consensus settings. Omit on follower (non-validator) nodes.

KeyTypeRequiredDefaultStatusDescription
qbft.duplicate-message-limitIntno100activeMaximum number of duplicate QBFT messages kept per round.
qbft.fee-recipientByteArrayyes-activeFee recipient address for blocks proposed by this validator (20-byte hex). Example: 0x0000000000000000000000000000000000000000.
qbft.future-message-max-distanceLongno10activeMaximum number of blocks a future-dated QBFT message may be ahead of the current height.
qbft.future-messages-limitLongno1000activeMaximum number of future-dated QBFT messages queued.
qbft.message-queue-limitIntno1000activeMaximum number of QBFT messages queued per round.
qbft.min-block-build-timeDurationnoPT0.5SactiveMinimum time spent building a block before proposing it.
qbft.round-expiryDuration?no-activeOptional fixed expiry duration for a QBFT round. Omit to derive it from round-expiry-coefficient.
qbft.round-expiry-coefficientDoubleno2.0activeMultiplier used to derive each subsequent round's expiry from the previous one.

syncing

Sync settings used while catching up to the chain head.

KeyTypeRequiredDefaultStatusDescription
syncing.desync-toleranceULongno5activeHow far the sync target may be ahead of this node's head before the node is considered desynced.
syncing.download.backoff-delayDurationnoPT1SactiveBackoff delay between download retries.
syncing.download.block-range-request-timeoutDurationnoPT5SactiveTimeout for a single block-range download request.
syncing.download.blocks-batch-sizeUIntno100activeNumber of blocks requested in a single download batch.
syncing.download.blocks-parallelismUIntno1activeNumber of block-range download requests issued in parallel.
syncing.download.max-retriesUIntno5activeMaximum number of retries for a failed download request.
syncing.download.use-unconditional-random-download-peerBooleannofalseactiveWhen false (default), pick a random peer among those whose latest reported block is at least the download range end. When true, skip that end-block filter and pick any peer at random.
syncing.el-sync-status-refresh-intervalDuration?no-activeOptional interval to refresh the execution-layer sync status. Omit to disable.
syncing.peer-chain-height-polling-intervalDurationyes-activeInterval between polls for peer chain height updates.
syncing.sync-target-selectionSyncTargetSelectionyes-activeSync target selection strategy. Use a bare string 'Highest' to sync to the highest peer head, or an inline table { _type = 'MostFrequent', peer-chain-height-granularity = <n> } to sync to the most frequent peer chain height. Sealed-type dispatch is enabled by the loader.

Deprecated Keys

FileKeyReplacementDescription
marulinea.l1-eth-apilinea.l1-eth-api-endpointLegacy L1 endpoint; alias for l1-eth-api-endpoint kept for backwards compatibility. Deprecated, use l1-eth-api-endpoint.
marulinea.l1-eth-api.endpointlinea.l1-eth-api-endpointEngine API endpoint URL of the execution-layer node.
marulinea.l1-eth-api.jwt-secret-pathlinea.l1-eth-api-endpointOptional path to the JWT secret file used for authenticated Engine API calls. Omit to disable JWT authentication.
marulinea.l1-eth-api.timeoutlinea.l1-eth-api-endpointOverall timeout for a single request to this endpoint.

Was this page helpful?