# offchainlabs/nitro architecture

> Architecture diagram of the GitHub repository offchainlabs/nitro, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/offchainlabs/nitro
- Repository: https://github.com/offchainlabs/nitro

## Overview

Nitro is a complete Arbitrum optimistic-rollup node stack. Its main workflow accepts L2 transactions, executes them through Geth and ArbOS, sequences them into batches, compresses and posts batch data to Ethereum, and supports validation and fraud proofs when execution is disputed. The graph also captures inbox ingestion, data availability, bridges, and Stylus/WASM execution. The README establishes the high-level product capabilities; sampled source confirms execution, ArbOS storage, and selected persistence behavior, so unsampled subsystem wiring is shown only where the documented workflow supports it.

Main entry points: [`arbnode/batch_poster.go`](https://github.com/offchainlabs/nitro/blob/master/arbnode/batch_poster.go) (Batch poster), [`arbos/tx_processor.go`](https://github.com/offchainlabs/nitro/blob/master/arbos/tx_processor.go) (ArbOS), [`execution/gethexec/executionengine.go`](https://github.com/offchainlabs/nitro/blob/master/execution/gethexec/executionengine.go) (Geth execution), [`arbnode/node.go`](https://github.com/offchainlabs/nitro/blob/master/arbnode/node.go) (Nitro node)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_node["Node and sequencing"]
  node_rpc["Node RPC<br/>[api.go]"]
  node_nitro["Nitro node<br/>[node.go]"]
  node_inbox["Inbox reader<br/>[inbox_reader.go]"]
  node_sequencer["Sequencer<br/>[sequencer_inbox.go]"]
end

subgraph group_execution["L2 execution"]
  node_engine["Geth execution<br/>[executionengine.go]"]
  node_arbos["ArbOS<br/>[tx_processor.go]"]
  node_state[("L2 state<br/>[arbosstate.go]")]
  node_stylus["Stylus WASM<br/>[programs.go]"]
  node_precompiles["System precompiles<br/>[precompile.go]"]
end

subgraph group_data["Batch and availability"]
  node_batch["Batch poster<br/>[batch_poster.go]"]
  node_compression["Batch compression<br/>[compress_common.go]"]
  node_posterstore[("Poster queue<br/>[storage.go]")]
  node_da["Data availability"]
end

subgraph group_proof["Validation and proofs"]
  node_validator["Validator"]
  node_prover["WASM prover<br/>[lib.rs]"]
  node_bold["BOLD assertions<br/>[manager.go]"]
  node_challenge["Challenge protocol<br/>[manager.go]"]
end

subgraph group_protocol["Rollup interfaces"]
  node_bridge["Cross-chain messaging<br/>[incomingmessage.go]"]
  node_api["BOLD API<br/>[server.go]"]
end

node_operator(("Node operator"))
node_ethereum(("Ethereum L1"))

node_operator -->|"submits transactions"| node_rpc
node_rpc -->|"sends requests"| node_nitro
node_nitro -->|"reads L1 messages"| node_inbox
node_nitro -->|"coordinates sequencing"| node_sequencer
node_sequencer -->|"executes transactions"| node_engine
node_inbox -->|"provides messages"| node_engine
node_engine -->|"processes transactions"| node_arbos
node_arbos -->|"reads and writes"| node_state
node_arbos -->|"exposes system calls"| node_precompiles
node_engine -.->|"executes WASM"| node_stylus
node_sequencer -->|"collects L2 data"| node_batch
node_batch -->|"compresses batches"| node_compression
node_batch -->|"persists queued transactions"| node_posterstore
node_batch -->|"publishes data"| node_da
node_batch -->|"posts batches"| node_ethereum
node_da -.->|"supports data availability"| node_ethereum
node_ethereum -->|"provides L1 messages"| node_inbox
node_validator -->|"uses WASM proofs"| node_prover
node_bold -->|"posts assertions"| node_ethereum
node_challenge -->|"manages challenges"| node_ethereum
node_api -->|"serves assertion API"| node_bold
node_arbos -->|"handles L1 messages"| node_bridge

click node_rpc "https://github.com/offchainlabs/nitro/blob/master/arbnode/api.go"
click node_nitro "https://github.com/offchainlabs/nitro/blob/master/arbnode/node.go"
click node_inbox "https://github.com/offchainlabs/nitro/blob/master/arbnode/inbox_reader.go"
click node_sequencer "https://github.com/offchainlabs/nitro/blob/master/arbnode/sequencer_inbox.go"
click node_engine "https://github.com/offchainlabs/nitro/blob/master/execution/gethexec/executionengine.go"
click node_arbos "https://github.com/offchainlabs/nitro/blob/master/arbos/tx_processor.go"
click node_state "https://github.com/offchainlabs/nitro/blob/master/arbos/arbosState/arbosstate.go"
click node_stylus "https://github.com/offchainlabs/nitro/blob/master/arbos/programs/programs.go"
click node_precompiles "https://github.com/offchainlabs/nitro/blob/master/precompiles/precompile.go"
click node_batch "https://github.com/offchainlabs/nitro/blob/master/arbnode/batch_poster.go"
click node_compression "https://github.com/offchainlabs/nitro/blob/master/arbcompress/compress_common.go"
click node_posterstore "https://github.com/offchainlabs/nitro/blob/master/arbnode/dataposter/storage/storage.go"
click node_da "https://github.com/offchainlabs/nitro/blob/master/daprovider/anytrust/provider_factory.go"
click node_validator "https://github.com/offchainlabs/nitro/blob/master/validator/validation_entry.go"
click node_prover "https://github.com/offchainlabs/nitro/blob/master/crates/prover/src/lib.rs"
click node_bold "https://github.com/offchainlabs/nitro/blob/master/bold/assertions/manager.go"
click node_challenge "https://github.com/offchainlabs/nitro/blob/master/bold/challenge/manager.go"
click node_bridge "https://github.com/offchainlabs/nitro/blob/master/arbos/arbostypes/incomingmessage.go"
click node_api "https://github.com/offchainlabs/nitro/blob/master/bold/api/server/server.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_rpc,node_nitro,node_inbox,node_sequencer toneBlue
class node_engine,node_arbos,node_state,node_stylus,node_precompiles toneAmber
class node_batch,node_compression,node_posterstore,node_da toneMint
class node_validator,node_prover,node_bold,node_challenge toneRose
class node_bridge,node_api,node_operator,node_ethereum toneIndigo
```

## Components

### Node and sequencing

- [Node RPC](https://github.com/offchainlabs/nitro/blob/master/arbnode/api.go): `arbnode/api.go`
- [Nitro node](https://github.com/offchainlabs/nitro/blob/master/arbnode/node.go): `arbnode/node.go`
- [Inbox reader](https://github.com/offchainlabs/nitro/blob/master/arbnode/inbox_reader.go): `arbnode/inbox_reader.go`
- [Sequencer](https://github.com/offchainlabs/nitro/blob/master/arbnode/sequencer_inbox.go): `arbnode/sequencer_inbox.go`

### L2 execution

- [Geth execution](https://github.com/offchainlabs/nitro/blob/master/execution/gethexec/executionengine.go): `execution/gethexec/executionengine.go`
- [ArbOS](https://github.com/offchainlabs/nitro/blob/master/arbos/tx_processor.go): `arbos/tx_processor.go`
- [L2 state](https://github.com/offchainlabs/nitro/blob/master/arbos/arbosState/arbosstate.go): `arbos/arbosState/arbosstate.go`
- [Stylus WASM](https://github.com/offchainlabs/nitro/blob/master/arbos/programs/programs.go): `arbos/programs/programs.go`
- [System precompiles](https://github.com/offchainlabs/nitro/blob/master/precompiles/precompile.go): `precompiles/precompile.go`

### Batch and availability

- [Batch poster](https://github.com/offchainlabs/nitro/blob/master/arbnode/batch_poster.go): `arbnode/batch_poster.go`
- [Batch compression](https://github.com/offchainlabs/nitro/blob/master/arbcompress/compress_common.go): `arbcompress/compress_common.go`
- [Poster queue](https://github.com/offchainlabs/nitro/blob/master/arbnode/dataposter/storage/storage.go): `arbnode/dataposter/storage/storage.go`
- [Data availability](https://github.com/offchainlabs/nitro/blob/master/daprovider/anytrust/provider_factory.go): `daprovider/anytrust/provider_factory.go`

### Validation and proofs

- [Validator](https://github.com/offchainlabs/nitro/blob/master/validator/validation_entry.go): `validator/validation_entry.go`
- [WASM prover](https://github.com/offchainlabs/nitro/blob/master/crates/prover/src/lib.rs): `crates/prover/src/lib.rs`
- [BOLD assertions](https://github.com/offchainlabs/nitro/blob/master/bold/assertions/manager.go): `bold/assertions/manager.go`
- [Challenge protocol](https://github.com/offchainlabs/nitro/blob/master/bold/challenge/manager.go): `bold/challenge/manager.go`

### Rollup interfaces

- [Cross-chain messaging](https://github.com/offchainlabs/nitro/blob/master/arbos/arbostypes/incomingmessage.go): `arbos/arbostypes/incomingmessage.go`
- [BOLD API](https://github.com/offchainlabs/nitro/blob/master/bold/api/server/server.go): `bold/api/server/server.go`

### Other components

- **Node operator**
- **Ethereum L1**

## Connections

- Node operator → Node RPC: submits transactions
- Node RPC → Nitro node: sends requests
- Nitro node → Inbox reader: reads L1 messages
- Nitro node → Sequencer: coordinates sequencing
- Sequencer → Geth execution: executes transactions
- Inbox reader → Geth execution: provides messages
- Geth execution → ArbOS: processes transactions
- ArbOS → L2 state: reads and writes
- ArbOS → System precompiles: exposes system calls
- Geth execution → Stylus WASM: executes WASM
- Sequencer → Batch poster: collects L2 data
- Batch poster → Batch compression: compresses batches
- Batch poster → Poster queue: persists queued transactions
- Batch poster → Data availability: publishes data
- Batch poster → Ethereum L1: posts batches
- Data availability → Ethereum L1: supports data availability
- Ethereum L1 → Inbox reader: provides L1 messages
- Validator → WASM prover: uses WASM proofs
- BOLD assertions → Ethereum L1: posts assertions
- Challenge protocol → Ethereum L1: manages challenges
- BOLD API → BOLD assertions: serves assertion API
- ArbOS → Cross-chain messaging: handles L1 messages
