Skip to main content
A full node synchronizes with the IOTA network and maintains a complete copy of the blockchain data. Full nodes are essential for network decentralization and can serve as data sources for applications.

Prerequisites

Before running a full node, ensure you have:
  • A machine with at least 8 CPU cores and 32GB RAM
  • 1TB of available disk space (SSD recommended)
  • A stable internet connection
  • Docker installed (optional, for containerized deployment)

Installation Methods

Using Docker

The recommended way to run an IOTA node is using Docker:
1

Pull the Docker image

docker pull iotaledger/iota-node:latest
2

Create data directory

mkdir -p $HOME/iota-data
3

Generate node configuration

Create a node.yaml configuration file. See Configuration for details.
4

Start the node

docker run -d \
  --name iota-node \
  -v $HOME/iota-data:/iota/db \
  -v $HOME/node.yaml:/iota/node.yaml \
  -p 9000:9000 \
  -p 9184:9184 \
  -p 8080:8080 \
  -p 8084:8084 \
  iotaledger/iota-node:latest \
  iota-node --config-path /iota/node.yaml

Building from Source

1

Clone the repository

git clone https://github.com/iotaledger/iota.git
cd iota
2

Install Rust and dependencies

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
apt install -y cmake clang lld protobuf-compiler libpq-dev
3

Build the node binary

cargo build --release --bin iota-node
The compiled binary will be located at target/release/iota-node.
4

Run the node

./target/release/iota-node --config-path /path/to/node.yaml

Command-Line Options

The iota-node binary accepts the following command-line arguments:
FlagDescriptionRequired
--config-pathPath to the node configuration fileYes
--listen-addressOverride network address to listen onNo
--run-with-range-epochProcess up to a specific epoch (debugging)No
--run-with-range-checkpointProcess up to a specific checkpoint (debugging)No

Example Commands

Start with custom configuration:
iota-node --config-path /etc/iota/node.yaml
Override listen address:
iota-node --config-path node.yaml --listen-address "/ip4/0.0.0.0/tcp/8080"
The --run-with-range-* flags are intended for debugging and disaster recovery only. Never use them in normal operations.

Ports and Networking

Ensure the following ports are accessible:
PortProtocolPurpose
8080TCPgRPC network communication
8084TCPP2P networking
9000TCPJSON-RPC API
50051TCPgRPC API (optional, requires enable_grpc_api: true)
9184TCPPrometheus metrics
1337TCPAdmin interface (localhost only)

Verifying Node Operation

After starting your node, verify it’s running correctly:
1

Check node health

curl http://localhost:9000 -X POST \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"iota_getLatestCheckpointSequenceNumber"}'
2

Monitor metrics

Access Prometheus metrics at:
http://localhost:9184/metrics
3

Check logs

For Docker deployments:
docker logs -f iota-node

Next Steps

Build docs developers (and LLMs) love