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@b75b5ca.

Keys may differ in other Maru releases.

maru

Main Maru configuration.

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

api

Maru JSON-RPC API settings.

KeyDescriptionTypeRequiredDefaultStatus
api.portPort serving the Maru JSON-RPC API.UIntno5060active

defaults

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

KeyDescriptionTypeRequiredDefaultStatus
defaults.l2-eth-endpoint.endpointEngine API endpoint URL of the execution-layer node. Example: http://el-node:8551.URLyes-active
defaults.l2-eth-endpoint.jwt-secret-pathOptional path to the JWT secret file used for authenticated Engine API calls. Omit to disable JWT authentication. Example: /jwt.hex.String?no-active
defaults.l2-eth-endpoint.timeoutOverall timeout for a single request to this endpoint.DurationnoPT1Mactive

fork-transition

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

KeyDescriptionTypeRequiredDefaultStatus
fork-transition.l2-eth-api-endpoint.endpointEngine API endpoint URL of the execution-layer node. Example: http://el-node:8551.URLyes-active
fork-transition.l2-eth-api-endpoint.jwt-secret-pathOptional path to the JWT secret file used for authenticated Engine API calls. Omit to disable JWT authentication. Example: /jwt.hex.String?no-active
fork-transition.l2-eth-api-endpoint.timeoutOverall timeout for a single request to this endpoint.DurationnoPT1Mactive
fork-transition.protocol-transition-polling-intervalInterval between polls for the protocol fork transition.DurationnoPT1Sactive

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.

KeyDescriptionTypeRequiredDefaultStatus
linea.contract-addressAddress of the Linea rollup contract on L1 (20-byte hex). Example: 0x0000000000000000000000000000000000000000.ByteArrayyes-active
linea.l1-eth-api-endpoint.endpointEngine API endpoint URL of the execution-layer node. Example: http://el-node:8551.URLyes-active
linea.l1-eth-api-endpoint.jwt-secret-pathOptional path to the JWT secret file used for authenticated Engine API calls. Omit to disable JWT authentication. Example: /jwt.hex.String?no-active
linea.l1-eth-api-endpoint.timeoutOverall timeout for a single request to this endpoint.DurationnoPT1Mactive
linea.l1-eth-api.endpointEngine API endpoint URL of the execution-layer node. Example: http://el-node:8551.URLyes-deprecated
linea.l1-eth-api.jwt-secret-pathOptional path to the JWT secret file used for authenticated Engine API calls. Omit to disable JWT authentication. Example: /jwt.hex.String?no-deprecated
linea.l1-eth-api.timeoutOverall timeout for a single request to this endpoint.DurationnoPT1Mdeprecated
linea.l1-highest-block-tagL1 block tag treated as the highest finalized block (e.g. finalized, safe, latest).Stringnofinalizedactive
linea.l1-polling-intervalInterval between L1 polls for rollup contract events.DurationnoPT6Sactive
linea.l2-eth-api-endpoint.endpointEngine API endpoint URL of the execution-layer node. Example: http://el-node:8551.URLyes-active
linea.l2-eth-api-endpoint.jwt-secret-pathOptional path to the JWT secret file used for authenticated Engine API calls. Omit to disable JWT authentication. Example: /jwt.hex.String?no-active
linea.l2-eth-api-endpoint.timeoutOverall timeout for a single request to this endpoint.DurationnoPT1Mactive

observability

Observability (metrics, health) settings.

KeyDescriptionTypeRequiredDefaultStatus
observability.jvm-metrics-enabledWhether JVM-level metrics are exposed in addition to application metrics.Booleannotrueactive
observability.portPort serving observability endpoints (metrics, health).UIntno9545active
observability.prometheus-metrics-enabledWhether Prometheus metrics are exposed on the observability port.Booleannotrueactive

p2p

P2P networking settings. Omit to disable P2P.

KeyDescriptionTypeRequiredDefaultStatus
p2p.discovery.advertised-ipIP address advertised to peers for discovery. Omit to use the listen IP address.String?no-active
p2p.discovery.bootnodesBootnode addresses (enodes) used to bootstrap discovery.List<String>no-active
p2p.discovery.portUDP port used for discovery.UIntno9000active
p2p.discovery.refresh-intervalInterval between discovery table refresh cycles.Durationyes-active
p2p.discovery.retry-timeoutTimeout before retrying a failed discovery request.DurationnoPT10Sactive
p2p.discovery.search-intervalInterval between discovery search runs.DurationnoPT1Sactive
p2p.discovery.search-timeoutTimeout for a single discovery search run.DurationnoPT30Sactive
p2p.gossiping.consider-peers-as-directWhether all peers are scored as direct peers (same as static peers) in gossip peer scoring (libp2p GossipPeerScoreParams.isDirect).Booleannofalseactive
p2p.gossiping.dTarget mesh degree (number of peers each topic is gossiped to).Intno8active
p2p.gossiping.d-highUpper bound on the mesh degree; peers are pruned when the mesh exceeds this. Defaults to 2 * d.Intno16active
p2p.gossiping.d-lazyDegree of lazy (non-mesh) peers used for gossip amplification.Intno6active
p2p.gossiping.d-lowLower bound on the mesh degree; peers are added when the mesh drops below this.Intno6active
p2p.gossiping.fanout-ttlTime-to-live for gossip fanout messages sent to peers outside the mesh.DurationnoPT1Mactive
p2p.gossiping.flood-publish-max-message-size-thresholdMaximum message size above which flood publishing is skipped. Defaults to 16KiB.Intno16384active
p2p.gossiping.gossip-factorFraction of non-mesh peers that receive gossip messages (libp2p gossipFactor).Doubleno0.25active
p2p.gossiping.gossip-sizeNumber of history windows advertised via IHAVE messages (libp2p gossipSize).Intno3active
p2p.gossiping.heartbeat-intervalInterval between gossipsub heartbeat rounds.DurationnoPT0.7Sactive
p2p.gossiping.historyNumber of gossip history windows retained in the message cache (libp2p gossipHistoryLength).Intno6active
p2p.gossiping.seen-ttlTime-to-live for the seen-message cache. Defaults to 700ms * 1115.DurationnoPT780.5Sactive
p2p.ip-addressIP address the node listens on for P2P traffic. Defaults to localhost for security.Stringno127.0.0.1active
p2p.max-peersMaximum number of peers the node maintains.Intno25active
p2p.peering-fork-mismatch-leeway-timeLeeway time during which a peer is tolerated despite a fork mismatch before being penalized.DurationnoPT20Sactive
p2p.portTCP port the node listens on for P2P traffic. UDP discovery uses p2p.discovery.port.UIntno9000active
p2p.reconnect-delayDelay before reconnecting to a dropped peer.DurationnoPT5Sactive
p2p.reputation.ban-periodDuration a peer is banned after dropping below the disconnect threshold.DurationnoPT1Hactive
p2p.reputation.capacityMaximum number of peers tracked in the reputation table.Intno1024active
p2p.reputation.cooldown-periodDuration a peer's reputation is held before decaying after a change.DurationnoPT2Mactive
p2p.reputation.disconnect-score-thresholdReputation score below which a peer is disconnected. Defaults to -large-change.Intno-10active
p2p.reputation.large-changeReputation score delta applied for a large positive/negative event.Intno10active
p2p.reputation.max-reputationMaximum reputation score a peer can reach. Defaults to 2 * large-change.Intno20active
p2p.reputation.small-changeReputation score delta applied for a small positive/negative event.Intno3active
p2p.static-peersStatic peer addresses (enodes) the node stays connected to.List<String>no-active
p2p.status-update.refresh-intervalInterval between peer status refreshes.DurationnoPT30Sactive
p2p.status-update.refresh-interval-leewayLeeway applied to the peer status refresh interval.DurationnoPT5Sactive
p2p.status-update.timeoutTimeout for a single peer status update request.DurationnoPT10Sactive

payload-validator

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

KeyDescriptionTypeRequiredDefaultStatus
payload-validator.engine-api-endpoint.endpointEngine API endpoint URL of the execution-layer node. Example: http://el-node:8551.URLyes-active
payload-validator.engine-api-endpoint.jwt-secret-pathOptional path to the JWT secret file used for authenticated Engine API calls. Omit to disable JWT authentication. Example: /jwt.hex.String?no-active
payload-validator.engine-api-endpoint.timeoutOverall timeout for a single request to this endpoint.DurationnoPT1Mactive
payload-validator.payload-validation-enabledWhether 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.Booleannotrueactive

persistence

Persistent on-disk state settings.

KeyDescriptionTypeRequiredDefaultStatus
persistence.data-pathDirectory where Maru stores its persistent on-disk state (database, keystore). Example: /data/maru.Pathyes-active
persistence.private-key-pathPath to the node private key file. Defaults to a 'private-key' file under data-path.Pathnodata-path/private-keyactive

qbft

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

KeyDescriptionTypeRequiredDefaultStatus
qbft.duplicate-message-limitMaximum number of duplicate QBFT messages kept per round.Intno100active
qbft.fee-recipientFee recipient address for blocks proposed by this validator (20-byte hex). Example: 0x0000000000000000000000000000000000000000.ByteArrayyes-active
qbft.future-message-max-distanceMaximum number of blocks a future-dated QBFT message may be ahead of the current height.Longno10active
qbft.future-messages-limitMaximum number of future-dated QBFT messages queued.Longno1000active
qbft.message-queue-limitMaximum number of QBFT messages queued per round.Intno1000active
qbft.min-block-build-timeMinimum time spent building a block before proposing it.DurationnoPT0.5Sactive
qbft.round-expiryOptional fixed expiry duration for a QBFT round. Omit to derive it from round-expiry-coefficient.Duration?no-active
qbft.round-expiry-coefficientMultiplier used to derive each subsequent round's expiry from the previous one.Doubleno2.0active
qbft.signer-nameLogical signer name passed to the external signer factory when signer-type is 'custom'.String?no-active
qbft.signer-typeValidator signing backend. Use 'local' for the node private key or 'custom' for an external signer.Stringnolocalactive
qbft.target-gas-limitTarget execution block gas limit. Required for block-producing nodes with Amsterdam scheduled.ULong?no-active

syncing

Sync settings used while catching up to the chain head.

KeyDescriptionTypeRequiredDefaultStatus
syncing.desync-toleranceHow far the sync target may be ahead of this node's head before the node is considered desynced.ULongno5active
syncing.download.backoff-delayBackoff delay between download retries.DurationnoPT1Sactive
syncing.download.block-range-request-timeoutTimeout for a single block-range download request.DurationnoPT5Sactive
syncing.download.blocks-batch-sizeNumber of blocks requested in a single download batch.UIntno100active
syncing.download.blocks-parallelismNumber of block-range download requests issued in parallel.UIntno1active
syncing.download.max-retriesMaximum number of retries for a failed download request.UIntno5active
syncing.download.use-unconditional-random-download-peerWhen 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.Booleannofalseactive
syncing.el-sync-status-refresh-intervalOptional interval to refresh the execution-layer sync status. Omit to disable.Duration?no-active
syncing.peer-chain-height-polling-intervalInterval between polls for peer chain height updates.Durationyes-active
syncing.sync-target-selectionSync 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.SyncTargetSelectionyes-active

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?