Skip to content

Install & First Run

Both binaries live in this repository: merod (the node) and meroctl (the command line).

Platform merod meroctl
Linux (x86_64, aarch64) native native
macOS in Docker native
Windows not supported not supported

Production nodes run in Intel TDX VMs, which are Linux only; on a laptop you run nodes in development mode (--dev, or merod local), with mock attestation.

The toolchain is pinned in rust-toolchain.toml (Rust 1.98.0); rustup selects it. The build needs clang, libclang-dev, make, pkg-config and libssl-dev (Debian/Ubuntu names).

Terminal window
git clone https://github.com/calimero-network/core
cd core
cargo build --locked --release -p merod -p meroctl
# or put them on PATH:
cargo install --locked --path crates/merod
cargo install --locked --path crates/meroctl

The binaries land in target/release/. On macOS, install only meroctl and run merod in Docker.

  1. Start three nodes in one process:

    Terminal window
    merod local

    They listen on http://127.0.0.1:2501/ to 2503, with mock attestation and a development storage key, and keep state in .merod-local/ (--fresh starts over). It prints the ops token and the meroctl commands to connect.

  2. Save the node and sign up with a file passkey (development clusters only):

    Terminal window
    meroctl node add local http://127.0.0.1:2501/ --allow-mock
    meroctl login --dev-passkey ./dev-passkey.json --name ada
  3. Check it:

    Terminal window
    meroctl network status # node, release, system leader
    meroctl whoami
    meroctl --ops-token <printed token> ops status

Then deploy an app: Quickstart.

merod local binds 127.0.0.1 inside its container, so it is not reachable from the host. Run one development node that listens on all interfaces instead:

Terminal window
docker run --rm -p 2528:2528 -v merod-dev:/data merod \
--node dev run --dev --node-id 1 \
--public-url http://127.0.0.1:2528/ --peers 1=http://127.0.0.1:2528/ --bootstrap \
--ops-token devtoken
  • --dev gives mock attestation, a development storage key and raw WASM uploads.
  • One node is a cluster of one: every app gets one replica.
  • --public-url is what the node calls itself; 127.0.0.1:2528 works because the node reaches itself inside the container and you reach it through the published port.
  • State is in the merod-dev volume, under /data/dev/data.

Then, from the host:

Terminal window
meroctl node add docker http://127.0.0.1:2528/ --allow-mock
meroctl login --dev-passkey ./dev-passkey.json --name ada
meroctl network status

For a three-node cluster in Docker, run three containers on one Docker network, each with its own --node-id and a --public-url the others can reach (the container name), the same --peers list, and --bootstrap on one of them. The process suite starts such a cluster as three merod run --dev processes on one host; see Testing.