Skip to main content

How to run an Archive node

An Arbitrum archive node is a full node that maintains an archive of historical chain states. This how-to walks you through the process of configuring an archive node on your local machine so that you can query both pre-Nitro and post-Nitro state data.

⚠️ Note that most users won't need to configure an archive node. This type of node is great for a small number of use-cases - for example, if you need to process historical data.

Before we begin

Before the Nitro upgrade happened, Arbitrum One was running on the Classic stack for about one year (before block height 22207817). Although the Nitro chain uses the latest snapshot of the Classic chain's state as its genesis state (see state migration), the Nitro stack can't serve archive requests for pre-Nitro blocks.

Running an Arbitrum One full node in archive mode lets you access both pre-Nitro and post-Nitro blocks, but it requires you to run both Classic and Nitro nodes together. You may not need to do this, depending on your use case:

Use caseRequired node type(s)Docs
Access the Arbitrum network without running your own nodeFully managed by third-parties, exposed via RPC endpointsNode Providers
Run an archive node for Arbitrum Goerli (testnet) or Arbitrum NovaFull node (Nitro)How to run a full node (Nitro)
Send post-Nitro archive requestsFull node (Nitro)How to run a full node (Nitro)
Send pre-Nitro archive requestsFull node (Classic)How to run a full node (Classic, pre-Nitro)
Send post-Nitro and pre-Nitro archive requestsFull node (Nitro) and full node (Classic)That's what this how-to is for; you're in the right place.

System requirements


The minimum storage requirements will change over time as the Nitro chain grows at a rate of approximately 128GB per week (Arbitrum One chain). We recommend exceeding the minimum requirements as much as you can to minimize risk and maintenance overhead.

  1. RAM: 16GB+ for Nitro and 32GB+ for Classic
  2. CPU: 4+ core CPU
  3. Storage: Minimum 2TB SSD (make sure it is extendable)
  4. Docker images: We'll specify these in the below commands; you don't need to manually download them.
    • Latest Docker image for Arbitrum One: offchainlabs/nitro-node:v2.0.14-2baa834
    • Latest Docker image for Arbitrum Classic: offchainlabs/arb-node:v1.4.5-e97c1a4
  5. Database snapshots:
    • Arbitrum One Nitro genesis database snapshot
      • Use the parameter --init.url="" on first startup to initialize the Nitro database
    • Arbitrum One Classic database snapshot
      • Download the latest Arbitrum One Classic database snapshot "" to the mounted point directory.
    • For other chains' snapshots:

Note that other chains don't have Classic blocks, and thus don't require an initial genesis database.

Review and configure ports

  • RPC: 8547
  • Sequencer Feed: 9642
  • WebSocket: 8548

Review and configure parameters

--l1.url=<Layer 1 Ethereum RPC URL>Provide an standard L1 node RPC endpoint that you run yourself or from a third-party node provider (see Node Providers)
--l2.chain-id=<L2 Chain ID>See public chains for a list of Arbitrum chains and the respective L2 chain IDs
--node.caching.archiveRequired for running an Arbitrum One archival node and retains past block state
--node.cache.allow-slow-lookupRequired for running an Arbitrum Classic archival node. When this option is present, will load old blocks from disk if not in memory cache.
--core.checkpoint-gas-frequency=156250000Required for running an Arbitrum Classic archival node.

Run the Docker image(s)

When running a Docker image, an external volume should be mounted to persist the database across restarts. The mount point should be /home/user/.arbitrum/mainnet.

To run both Arbitrum One and Arbitrum Classic in archive mode, follow one of the below examples:

  • Arbitrum One archive node:
    docker run --rm -it -v /some/local/dir/arbitrum:/home/user/.arbitrum -p -p offchainlabs/nitro-node:v2.0.14-2baa834 --l1.url https://l1-node:8545 --l2.chain-id= --http.api=net,web3,eth,debug --http.corsdomain=* --http.addr= --http.vhosts=* --node.caching.archive
  • Arbitrum One archive node:
    docker run --rm -it -v /some/local/dir/arbitrum:/home/user/.arbitrum -p -p offchainlabs/nitro-node:v2.0.14-2baa834 --l1.url https://l1-node:8545 --l2.chain-id=42161 --node.rpc.classic-redirect=<classic node RPC> --http.api=net,web3,eth,debug --http.corsdomain=* --http.addr= --http.vhosts=* --node.caching.archive
  • Arbitrum Classic archive node:
    docker run --rm -it -v /some/local/dir/arbitrum-mainnet/:/home/user/.arbitrum/mainnet -p -p offchainlabs/arb-node:v1.4.5-e97c1a4 --l1.url=https://l1-node:8545/ --node.chain-id=42161 --l2.disable-upstream --node.cache.allow-slow-lookup --core.checkpoint-gas-frequency=156250000

Note that the above commands both map to port 8547 on their hosts. If you want to run both on the same host, you should edit those mapping to different ports, and specify your Classic node RPC url as <classic node RPC> in your Nitro start command. To verify the connection health of your node(s), see Docker network between containers - Docker Networking Example.

A note on permissions

The Docker image is configured to run as non-root UID 1000. If you're running in Linux and you're getting permission errors when trying to run the Docker image, run this command to allow all users to update the persistent folders, replacing arbitrum-mainnet as needed:

mkdir /some/local/dir/arbitrum-mainnet
chmod -fR 777 /some/local/dir/arbitrum-mainnet


If you run into any issues, visit the Node-running Troubleshooting guide.