Skip to main content

Overview

To develop on IOTA, you’ll need to install:
  • Rust - Required for building and running the IOTA CLI and smart contracts
  • IOTA CLI - Command-line tool for managing networks, keys, and transactions
  • TypeScript SDK (optional) - For building applications with JavaScript/TypeScript
Choose your installation path based on your development needs. Smart contract developers need Rust and the CLI, while application developers may only need the TypeScript SDK.

Install Rust

The IOTA CLI and Move smart contracts require Rust to build and run.
1

Install Rust using rustup

The recommended way to install Rust is through rustup:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Follow the on-screen instructions to complete the installation.
2

Configure your shell

Add Rust to your PATH by running:
source $HOME/.cargo/env
Or restart your terminal to apply the changes.
3

Verify the installation

Check that Rust is installed correctly:
rustc --version
cargo --version
You should see version information for both commands.
4

Install the nightly toolchain

IOTA uses some nightly Rust features for formatting. Install the nightly toolchain:
rustup toolchain install nightly --component rustfmt --allow-downgrade
This is only required if you plan to contribute to IOTA or format the codebase.

Install the IOTA CLI

The IOTA CLI provides tools for interacting with the IOTA network, managing keys, and developing Move smart contracts.
1

Clone the IOTA repository

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

Build the IOTA CLI

Build the CLI from source using Cargo:
cargo build --release --bin iota
This will compile the IOTA binary and place it in target/release/iota.
The first build may take 10-20 minutes depending on your system. Subsequent builds will be faster.
3

Add to PATH (optional)

To use the iota command from anywhere, add it to your PATH:
# Add to ~/.bashrc, ~/.zshrc, or equivalent
export PATH="$HOME/path/to/iota/target/release:$PATH"
Or create a symlink:
sudo ln -s $(pwd)/target/release/iota /usr/local/bin/iota
4

Verify the installation

Check that the IOTA CLI is working:
iota --version
You should see version information for the IOTA CLI.

Install the TypeScript SDK

For building applications with JavaScript or TypeScript, install the IOTA SDK from npm.
1

Check Node.js version

The IOTA TypeScript SDK requires Node.js v20 or higher:
node --version
If you need to upgrade, use nvm or download from nodejs.org.
2

Install the SDK

Install the IOTA TypeScript SDK in your project:
npm install @iota/iota-sdk
The SDK is published to npm with a bi-weekly release cycle aligned with the Devnet validators.
3

For local development (optional)

If developing against a local network, use the experimental tag:
npm install @iota/iota-sdk@experimental
The experimental tag contains the latest changes from the main branch.
4

Verify the installation

Create a test file to verify the SDK works:
test.js
const { getFullnodeUrl, IotaClient } = require('@iota/iota-sdk/client');

const client = new IotaClient({ url: getFullnodeUrl('devnet') });

client.getChainIdentifier().then(id => {
    console.log('Connected to IOTA chain:', id);
});
Run it:
node test.js

Additional development tools

Install pnpm (for monorepo development)

If you’re working with the IOTA monorepo, you’ll need pnpm:
npm install -g pnpm
The IOTA workspace requires pnpm version 9.6.0 to 9.15.9.

Install dprint (for TOML formatting)

For formatting TOML configuration files:
cargo install dprint
Run formatting with:
dprint fmt

IDE configuration

For the best development experience, configure your IDE:

VS Code

Add to your .vscode/settings.json:
{
  "[rust]": {
    "editor.formatOnSave": true,
  },
  "rust-analyzer.rustfmt.extraArgs": [
    "+nightly"
  ]
}
Recommended extensions:

Run a local network

For development and testing, run a local IOTA network:
1

Start the local network

iota start --with-faucet --force-regenesis
This starts:
  • A local validator
  • A fullnode RPC server on http://127.0.0.1:9000
  • A faucet server for requesting test tokens
The --force-regenesis flag creates a fresh network state. Remove it to persist data between restarts.
2

Optional: Enable indexer and GraphQL

For advanced features, start with indexer and GraphQL support:
cargo build --bin iota --features indexer --profile dev
./target/debug/iota start --with-faucet --force-regenesis --with-indexer --with-graphql
3

Connect to localnet

Use localnet in your applications:
import { getFullnodeUrl, IotaClient } from '@iota/iota-sdk/client';
import { getFaucetHost } from '@iota/iota-sdk/faucet';

const client = new IotaClient({ url: getFullnodeUrl('localnet') });
const faucet = getFaucetHost('localnet');

Verify your installation

Test that everything is working correctly:
# Check versions
rustc --version
cargo --version
iota --version

# Test CLI
iota client --help

Platform-specific notes

macOS

  • If you encounter issues with OpenSSL, install it via Homebrew:
    brew install openssl
    
  • For Apple Silicon (M1/M2), Rust should automatically detect and use the correct architecture.

Linux

  • You may need to install build dependencies:
    # Ubuntu/Debian
    sudo apt-get update
    sudo apt-get install build-essential pkg-config libssl-dev
    
    # Fedora/RHEL
    sudo dnf install gcc gcc-c++ openssl-devel
    

Windows

  • Install Visual Studio Build Tools with C++ development tools
  • Use PowerShell or Windows Terminal for the best experience
  • Some Rust crates may require additional configuration

Next steps

Quickstart

Execute your first transaction and learn the basics

Move language

Learn Move to write smart contracts

TypeScript SDK

Explore the complete SDK documentation

Local network guide

Advanced local network configuration

Troubleshooting

Build fails with linker errors

Ensure you have the required build tools installed for your platform (see Platform-specific notes above).

cargo build is very slow

The first build compiles many dependencies and can take 10-20 minutes. Subsequent builds are much faster. Consider:
  • Using cargo build (debug mode) instead of cargo build --release during development
  • Enabling parallel compilation with more CPU cores

”command not found: iota”

Either:
  • Use the full path: ./target/release/iota
  • Add the binary to your PATH
  • Create a symlink as shown in the installation steps

SDK version mismatches

When using a local network, install the experimental SDK version that matches your local build:
npm install @iota/iota-sdk@experimental

Getting help

Build docs developers (and LLMs) love