Skip to content

Releases: OffchainLabs/nitro

v3.9.9-rc.3

16 Apr 15:44
3a38667

Choose a tag to compare

v3.9.9-rc.3 Pre-release
Pre-release

v3.9.9 is not a required upgrade

Release candidates should not be run in general

This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:TBD
This Docker image specifies default flags in its entrypoint which should be replicated if you're overriding the entrypoint: /usr/local/bin/nitro --validation.wasm.allowed-wasm-module-roots /home/user/nitro-legacy/machines,/home/user/target/machines

Important for any chains still on ArbOS40:

  • If you're running a validator without a split validation server (this will be true of most validators), you should instead use the image offchainlabs/nitro-node:TBD-validator which has the extra script /usr/local/bin/split-val-entry.sh as the default entrypoint (no need to override the default entrypoint). This will run both v3.9.9 and v3.7.6 validator workers for you.
  • If you are using a split validator, you do not want to use -validator image, you need to run a validator worker on v3.7.6 as well as a worker for v3.9.9
  • Arbitrum Chain SDK v0.25.2 (along with consensus_v51.1) is required for ArbOS51

Important for any chains that previously upgraded to ArbOS51 with consensus_v51

  • Validator should use configuration option --node.block-validator.pending-upgrade-module-root="" to avoid performing unnecessary work trying to validate consensus_v51.1.

Internal Highlights

  • Do not set init.empty to true when init.genesis-json-file is set: #4650

Full Changelog: v3.9.9-rc.2...v3.9.9-rc.3

v3.9.9-rc.2

15 Apr 20:19
17c3d9e

Choose a tag to compare

v3.9.9-rc.2 Pre-release
Pre-release

v3.9.9 is not a required upgrade

Release candidates should not be run in general

This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.9.9-rc.2-17c3d9e
This Docker image specifies default flags in its entrypoint which should be replicated if you're overriding the entrypoint: /usr/local/bin/nitro --validation.wasm.allowed-wasm-module-roots /home/user/nitro-legacy/machines,/home/user/target/machines

Important for any chains still on ArbOS40:

  • If you're running a validator without a split validation server (this will be true of most validators), you should instead use the image offchainlabs/nitro-node:v3.9.9-rc.2-17c3d9e-validator which has the extra script /usr/local/bin/split-val-entry.sh as the default entrypoint (no need to override the default entrypoint). This will run both v3.9.8 and v3.7.6 validator workers for you.
  • If you are using a split validator, you do not want to use -validator image, you need to run a validator worker on v3.7.6 as well as a worker for v3.9.8
  • Arbitrum Chain SDK v0.25.2 (along with consensus_v51.1) is required for ArbOS51

Important for any chains that previously upgraded to ArbOS51 with consensus_v51

  • Validator should use configuration option --node.block-validator.pending-upgrade-module-root="" to avoid performing unnecessary work trying to validate consensus_v51.1.

Internal Highlights

  • Regenerate gen_genesis.go: #4644

Full Changelog: v3.9.9-rc.1...v3.9.9-rc.2

v3.9.9-rc.1

15 Apr 01:52
b41dd94

Choose a tag to compare

v3.9.9-rc.1 Pre-release
Pre-release

v3.9.9 is not a required upgrade

This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:TBD
This Docker image specifies default flags in its entrypoint which should be replicated if you're overriding the entrypoint: /usr/local/bin/nitro --validation.wasm.allowed-wasm-module-roots /home/user/nitro-legacy/machines,/home/user/target/machines

Important for any chains still on ArbOS40:

  • If you're running a validator without a split validation server (this will be true of most validators), you should instead use the image offchainlabs/nitro-node:TBD-validator which has the extra script /usr/local/bin/split-val-entry.sh as the default entrypoint (no need to override the default entrypoint). This will run both v3.9.8 and v3.7.6 validator workers for you.
  • If you are using a split validator, you do not want to use -validator image, you need to run a validator worker on v3.7.6 as well as a worker for v3.9.8
  • Arbitrum Chain SDK v0.25.2 (along with consensus_v51.1) is required for ArbOS51

Important for any chains that previously upgraded to ArbOS51 with consensus_v51

  • Validator should use configuration option --node.block-validator.pending-upgrade-module-root="" to avoid performing unnecessary work trying to validate consensus_v51.1.

Internal Highlights

  • Fix CI for 3.9.x-release branch: #4638
  • port: Replace genesis.config with serialized chain config: #4637

Full Changelog: v3.9.8...v3.9.9-rc.1

v3.10.0-rc.7

10 Apr 21:27
57d9bf1

Choose a tag to compare

v3.10.0-rc.7 Pre-release
Pre-release

NOTE: Release candidates should not be run in general

This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:TBD
This Docker image specifies default flags in its entrypoint which should be replicated if you're overriding the entrypoint: /usr/local/bin/nitro --validation.wasm.allowed-wasm-module-roots /home/user/nitro-legacy/machines,/home/user/target/machines

v3.10.0-rc.7 - 2026-04-10

Configuration

  • Add --execution.disable-arbowner-ethcall flag to disable ArbOwner precompile calls outside on-chain execution. [PR]
  • Add --stylus-target.native-stack-size config to set the initial Wasmer coroutine stack size for Stylus execution. [PR]

Changed

  • Poll parent chain's eth_config RPC (EIP-7910) to dynamically fetch blob schedule configuration. [PR]
  • Log submitted express lane transactions like eth_sendRawTransaction. [PR]
  • Update Stylus SDK to v0.10.3. [PR]
  • Force net.Dialer to use "tcp4" instead of falling back to "tcp6". [PR]
  • Update Go to 1.25.9 in Dockerfile. [PR]

Fixed

  • Execution RPC client correctly handles ResultNotFound error. [PR]
  • Fix Wasmer stack pool reusing stale smaller stacks after a stack size change. [PR]
  • Automatically detect native stack overflow during Stylus execution and recover. [PR]

Internal

  • Introduce rustfmt.toml. [PR]
  • Extract C-FFI related code from prover crate to prover-ffi. [PR]
  • Added additional tests for stylus contracts redeems. [PR]
  • Tx pre-checker uses gas estimation dry-run to detect filtered addresses before forwarding. [PR]
  • Replace TransactionFiltererAPI mutex with channel-based sequential processing and simplify Filter to not return a transaction hash. [PR]
  • ValidationInputsAt debug API now includes an ExpectedEndState field in the returned JSON, allowing the arbitrator and JIT provers to verify their computed end state when run from the command line with --json-inputs. [PR]
  • Nitro metrics for MEL and L3 system test. [PR]
  • Added support for id-set-filter for address filter reporting. [PR]
  • Linter for checking defer usage inside for loops. [PR]
  • Update the L2 msgs accumulation from merkle tree to a hash-chain based accumulation and implement extracting of message from the accumulator using preimages. [PR]
  • Update the delayed msgs accumulation from merkle tree to a hash-chain based accumulation (Inbox-Outbox) and implement recording of their preimages and subsequently reading them using preimages. [PR]
  • Change hashing algorithm for address filtering feature to match the provider specs. [PR]
  • Preallocate slice capacity across codebase to reduce memory allocations. [PR]
  • Replace InboxReader and InboxTracker implementation with Message extractor code. [PR]
    • Fixed flakiness in TestRetryableFilteringStylusSandwichRollback. [PR]
  • Add some micro-optimization to hashing of address filter implementation. [PR]
  • Fix deadlock in StopWaiterSafe.stopAndWaitImpl by releasing RLock before blocking on waitChan. [PR]
  • Re-enable erc20 test. [PR]

v3.10.0-rc.6

27 Mar 21:40
0973192

Choose a tag to compare

v3.10.0-rc.6 Pre-release
Pre-release

NOTE: Release candidates should not be run in general

This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:TBD
This Docker image specifies default flags in its entrypoint which should be replicated if you're overriding the entrypoint: /usr/local/bin/nitro --validation.wasm.allowed-wasm-module-roots /home/user/nitro-legacy/machines,/home/user/target/machines

v3.10.0-rc.6 - 2026-03-27

Configuration

  • Add --execution.stylus-target.allow-fallback flag: if true, fall back to an alternative compiler when compilation of a Stylus program fails (default: true). [PR]

Added

  • Add /liveness and /readiness HTTP health check endpoints to the transaction-filterer service. Readiness reports 503 until the sequencer client is connected. [PR]
  • Prevent MEL node startup if have non-MEL entries in consensus database. [PR]
  • Add tip collection ArbOS state field and precompile to allow the chain owner to enable or disable collecting transaction tips. [PR]
  • ArbOS 60: ArbOwner.setWasmActivationGas / ArbWasm.activationGas — chain owners can set a constant gas charge burned before each Stylus contract activation (default 0). [PR]

Changed

  • Disable cranelift fallback for non-onchain execution modes. [PR]
  • Add recovery to all stopWaiter threads. [PR]
  • Stylus: reject activation of wasm programs using the multi-value extension (functions with multiple return values, or block/loop/if with parameters) starting from ArbOS version 60. [PR]
  • Upgrade to wasmer v7.1.0. [PR]
  • Added consensus v60-rc.1 to Dockerfile. [PR]

Fixed

  • Fix nil-dereference and log format in cmd/nitro/nitro.go when machine locator creation fails; return early instead of falling through to dereference nil locator. [PR]
  • Part 3 of integrating MEL into master. [PR]
  • Re-enable download of previous consensus machine versions (v50, v51, v51.1, v60-alpha.1) in Docker build. [PR]
  • Harden blocks reexecutor with panic recovery for concurrent trie access races. [PR]
  • Do not access state in CollectTips for ArbOS < 60. [PR]

Internal

  • Introduce ValidationInput intermediate data structure with optional rkyv serialization in the validation crate. [PR]
  • Minor refactor in JIT, prover and validator crates. [PR]
  • Moved float-related utilities from arbmath to a new package floatmath. [PR]
  • Add TrackChild/StartAndTrackChild to StopWaiter for automatic LIFO child lifecycle management. [PR]

Full Changelog: v3.10.0-rc.5...v3.10.0-rc.6

consensus-v60-rc.1

27 Mar 17:42
fd2a5b0

Choose a tag to compare

consensus-v60-rc.1 Pre-release
Pre-release

This release signifies a WASM fraud proof consensus version, and is not a good version to run a node on

WAVM Module Root: 0x4a281197d799ef8e0430f5b94ed79fed72ce327311747819a593539f31938c34

This is an alpha consensus release for ArbOS v60 RC 1

Full Changelog: consensus-v51.1...consensus-v60-rc.1

Arbitrum Nitro v3.9.8

24 Mar 19:42
4624977

Choose a tag to compare

This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.9.8-4624977
This Docker image specifies default flags in its entrypoint which should be replicated if you're overriding the entrypoint: /usr/local/bin/nitro --validation.wasm.allowed-wasm-module-roots /home/user/nitro-legacy/machines,/home/user/target/machines

Important for any chains still on ArbOS40:

  • If you're running a validator without a split validation server (this will be true of most validators), you should instead use the image offchainlabs/nitro-node:v3.9.8-4624977-validator which has the extra script /usr/local/bin/split-val-entry.sh as the default entrypoint (no need to override the default entrypoint). This will run both v3.9.8 and v3.7.6 validator workers for you.
  • If you are using a split validator, you do not want to use -validator image, you need to run a validator worker on v3.7.6 as well as a worker for v3.9.8
  • Arbitrum Chain SDK v0.25.2 (along with consensus_v51.1) is required for ArbOS51

Important for any chains that previously upgraded to ArbOS51 with consensus_v51

  • Validator should use configuration option --node.block-validator.pending-upgrade-module-root="" to avoid performing unnecessary work trying to validate consensus_v51.1.

Internal Highlights

  • Add configurable cranelift fallback for Stylus compilation: #4535
  • Add support to timeboost auctioneer for BidFloorAgent: #4512
  • Disable cranelift fallback for non-onchain execution modes: #4543
  • Use defer to unlock createBlocksMutex in sequencerWrapper: #4542
  • Enhance state management in StopWaiterSafe: #4548
  • Use RWLock in StopWaiter: #4552
  • Stopwaiter recover: #4550

Full Changelog: v3.9.7...v3.9.8

v3.9.8-rc.1

23 Mar 21:17
4624977

Choose a tag to compare

v3.9.8-rc.1 Pre-release
Pre-release

NOTE: Release candidates should not be run in general

This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.9.8-rc.1-4624977
This Docker image specifies default flags in its entrypoint which should be replicated if you're overriding the entrypoint: /usr/local/bin/nitro --validation.wasm.allowed-wasm-module-roots /home/user/nitro-legacy/machines,/home/user/target/machines

Important for any chains still on ArbOS40:

  • If you're running a validator without a split validation server (this will be true of most validators), you should instead use the image offchainlabs/nitro-node:v3.9.8-rc.1-4624977-validator which has the extra script /usr/local/bin/split-val-entry.sh as the default entrypoint (no need to override the default entrypoint). This will run both v3.9.5 and v3.7.6 validator workers for you.
  • If you are using a split validator, you do not want to use -validator image, you need to run a validator worker on v3.7.6 as well as a worker for v3.9.5
  • Arbitrum Chain SDK v0.25.2 (along with consensus_v51.1) is required for ArbOS51

Important for any chains that previously upgraded to ArbOS51 with consensus_v51

  • Validator should use configuration option --node.block-validator.pending-upgrade-module-root="" to avoid performing unnecessary work trying to validate consensus_v51.1.

Internal Highlights

  • Add configurable cranelift fallback for Stylus compilation: #4535
  • Add support to timeboost auctioneer for BidFloorAgent: #4512
  • Disable cranelift fallback for non-onchain execution modes: #4543
  • Use defer to unlock createBlocksMutex in sequencerWrapper: #4542
  • Enhance state management in StopWaiterSafe: #4548
  • Use RWLock in StopWaiter: #4552
  • Stopwaiter recover: #4550

Full Changelog: v3.9.7...v3.9.8-rc.1

Arbitrum Nitro v3.10.0-rc.5

18 Mar 23:39
b9d1452

Choose a tag to compare

Pre-release

NOTE: Do not run this version

This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.10.0-rc.5-b9d1452
This Docker image specifies default flags in its entrypoint which should be replicated if you're overriding the entrypoint: /usr/local/bin/nitro --validation.wasm.allowed-wasm-module-roots /home/user/nitro-legacy/machines,/home/user/target/machines

Important for any chains still on ArbOS40:

If you're running a validator without a split validation server (this will be true of most validators), you should instead use the image offchainlabs/nitro-node:v3.10.0-rc.5-b9d1452-validator which has the extra script /usr/local/bin/split-val-entry.sh as the default entrypoint (no need to override the default entrypoint). This will run both v3.10.0 and v3.7.6 validator workers for you.
If you are using a split validator, you do not want to use -validator image, you need to run a validator worker on v3.7.6 as well as a worker for v3.10.0

v3.10.0-rc.5 - 2026-03-18

Added

  • Group rollback for cascading redeem filtering using deferred statedb clone. [PR]

Changed

  • Update Go to 1.25.8 in Dockerfile. [PR]
  • Preflight the worst-case fragment read gas during multi-fragment Stylus activation, then charge the actual EXTCODECOPY-style cost after the fragment code is read. [PR]
  • Enable http communication between block validator and validation server. [PR]
  • Split ResourceKindStorageAccess into ResourceKindStorageAccessRead and ResourceKindStorageAccessWrite for finer-grained multi-dimensional gas metering. [PR]
  • Upgrade to wasmer 7.1.0-rc.2 [PR]

Fixed

  • Part 2 of integrating MEL into master. [PR]
  • Once timeout attempts are exhausted, treat it as any other, possibly fatal failure. [PR]
  • Use proper comparison for attempts. [PR]
  • Fix bold StopWaiter usage: start child structs on their own StopWaiters instead of the parent's. Fix StopAndWait ordering. [PR]
  • Fix multi-gas refunds in retryables (ArbOS60). [PR]
  • Fix StopWaiter lifecycle ordering: stop children before parent in StopAndWait, and pass managed context to children in Start. [PR]
  • Fix MEL feature flag bugs: nil message dereference in delayed sequencer, incorrect waitingForFinalizedBlock domain, and missing BatchPoster+MEL config validation. [PR]
  • Fix ValidationSpawnerRetryWrapper lifecycle: reuse one wrapper per module root instead of creating and leaking one per validation. [PR]
  • Fix BroadcastClients launching coordination goroutine on child Router's StopWaiter instead of its own. [PR]
  • Fix ValidationServer and ExecutionSpawner missing StopAndWait for their children. [PR]
  • Handle too-short AnyTrust certificate data as empty batches instead of crashing. [PR]

Internal

  • ArbGasInfo.GetMultiGasPricingConstraints now returns resources in deterministic order. [PR]
  • Move exponent validation in ArbOwner.SetMultiGasPricingConstraints outside the per-constraint loop. [PR]
  • Add JWT authentication support to the Rust validation server. [PR]
  • Move express lane service and tracker from execution/gethexec to the timeboost package. [PR]
  • Block sequencing until address filter rules are loaded. [PR]

Arbitrum Nitro v3.10.0-rc.4

06 Mar 22:07
3a9bb93

Choose a tag to compare

Pre-release

NOTE: It is not recommended to run RC releases.

This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.10.0-rc.4-3a9bb93
This Docker image specifies default flags in its entrypoint which should be replicated if you're overriding the entrypoint: /usr/local/bin/nitro --validation.wasm.allowed-wasm-module-roots /home/user/nitro-legacy/machines,/home/user/target/machines

Important for any chains still on ArbOS40:

If you're running a validator without a split validation server (this will be true of most validators), you should instead use the image offchainlabs/nitro-node:v3.10.0-rc.4-3a9bb93-validator which has the extra script /usr/local/bin/split-val-entry.sh as the default entrypoint (no need to override the default entrypoint). This will run both v3.10.0 and v3.7.6 validator workers for you.
If you are using a split validator, you do not want to use -validator image, you need to run a validator worker on v3.7.6 as well as a worker for v3.10.0

Configuration

  • Adds --execution.sequencer.transaction-filtering.disable-delayed-sequencing-filter to enable/disable filtering when sequencing delayed messages. [PR]
  • Added --node.block-validator.validation-spawning-allowed-timeouts (default 3): maximum number of timeout errors allowed per validation before treating it as fatal. Timeout errors have their own counter, separate from --node.block-validator.validation-spawning-allowed-attempts. [PR]

Added

  • Peform DNS lookups with IPv4 before IPv6. [PR]
  • messageSequencingMode messageRunModes. To be used when filtering transactions in the geth layer. [PR]
  • Fix Message Extraction function to handle cases when number of batch posting reports are not equal to the number of batches. [PR]

Changed

  • Make PruneExecutionDB only depend on executionDB by removing consensusDB dependency. [PR]

Removed

  • Remove aborted snap sync code. [PR]

Fixed

  • Part 1 of improving the MEL runner with latest, tested implementation. [PR]
  • Use defer to release createBlocksMutex in sequencerWrapper to prevent deadlock on panic. [PR]
  • Fix opening classic-msg database. [PR]
  • Fix system test triggered panic in updateFilterMapsHeads. [PR]
  • Fix address filter S3 syncer failing to parse hash list JSON when salt or hash values use 0x/0X hex prefix. Go's encoding/hex.DecodeString does not handle the prefix, so it is now stripped before decoding. [PR]
  • Fix debug_executionWitness endpoint. [PR]
  • Improve block validator error message to suggest enabling staker in watchtower mode when wasmModuleRoot is not set from chain. [PR]
  • If batchFetcher returns error use existing LegacyBatchGasCost value. [PR]
  • Fix rlp: expected List error when fetching transaction receipts for blocks with Arbitrum legacy receipt encoding. [PR]
  • Block validator no longer crashes on timeout errors during validation. Timeout errors are retried separately from other validation failures, up to a configurable limit. [PR]

Internal

  • Make Validator request match clients request format. [PR]
  • Cache precompiled wasm modules for repeated JIT validation. [PR]
  • S3Syncer's context moved out from new to Initialize. [PR]
  • Bytes32's Debug and Display is prefixed with 0x. [PR]
  • Allow validator's JitMachine to find jit path. [PR]
  • Migrate Rust validation server to JSON RPC to match Go client communication. [PR]
  • Move wavmio logic from JIT crate to caller-env (to be reused soon by SP1 validator). [PR]
  • Make ValidationInput.max_user_wasm_size field non-mandatory. [PR]

Full Changelog: v3.10.0-rc.3...v3.10.0-rc.4