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).
git clone https://github.com/calimero-network/corecd corecargo build --locked --release -p merod -p meroctl# or put them on PATH:cargo install --locked --path crates/merodcargo install --locked --path crates/meroctlThe binaries land in target/release/. On macOS, install only meroctl and
run merod in Docker.
The root Dockerfile builds both binaries into a Debian image whose entrypoint
is merod, running as an unprivileged user, with CALIMERO_HOME=/data and
/data a volume:
docker build -t merod .docker run --rm merod --helpArguments after the image name go to merod.
First run on Linux: a local cluster
Section titled “First run on Linux: a local cluster”-
Start three nodes in one process:
Terminal window merod localThey listen on
http://127.0.0.1:2501/to2503, with mock attestation and a development storage key, and keep state in.merod-local/(--freshstarts over). It prints the ops token and themeroctlcommands to connect. -
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-mockmeroctl login --dev-passkey ./dev-passkey.json --name ada -
Check it:
Terminal window meroctl network status # node, release, system leadermeroctl whoamimeroctl --ops-token <printed token> ops status
Then deploy an app: Quickstart.
First run on macOS: a node in Docker
Section titled “First run on macOS: a node in Docker”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:
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--devgives mock attestation, a development storage key and raw WASM uploads.- One node is a cluster of one: every app gets one replica.
--public-urlis what the node calls itself;127.0.0.1:2528works because the node reaches itself inside the container and you reach it through the published port.- State is in the
merod-devvolume, under/data/dev/data.
Then, from the host:
meroctl node add docker http://127.0.0.1:2528/ --allow-mockmeroctl login --dev-passkey ./dev-passkey.json --name adameroctl network statusFor 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.
Next steps
Section titled “Next steps”- Quickstart: install, create and call an app.
- merod and meroctl: every command.
- Production deployment: a TDX cluster.