Prerequisites
Java 21
Required at runtime. Enforced at build time — Kryo serialization depends on Java 21 reflection.
SBT
Required to compile and assemble JARs from source.
Docker
Required for the Docker-based approach and the
just test environment.Node types
Tessellation runs four distinct node types in a hierarchical consensus model:| Node | Module | Default ports | Role |
|---|---|---|---|
Global L0 (gl0) | dag-l0 | 9000 / 9001 / 9002 | Global consensus — aggregates all metagraph state channels into global snapshots |
DAG L1 (gl1) | dag-l1 | 9010 / 9011 / 9012 | Metagraph block creation; sends L1 blocks to Global L0 |
Currency L0 (ml0) | currency-l0 | 9020 / 9021 / 9022 | Currency metagraph L0; aggregates Currency L1 blocks into currency snapshots |
Currency L1 (cl1 / dl1) | currency-l1 | 9030+ / 9031+ / 9032+ | Currency metagraph L1; handles end-user transactions |
Docker-based approach (recommended)
Install just
Install the
just command runner. On macOS: brew install just. On Linux: see casey/just.Configure your keystore
Each node requires a PKCS12 keystore (Place the keystore at
key.p12). Generate one using the keytool CLI:./key.p12 (the default mount path) or set CL_KEYSTORE_MOUNT_PATH to a different path.Start the environment
docker/bin/compose-runner.sh --up and starts the configured node containers. To use pre-built JARs from a specific release instead of compiling from source:Verify node health
Each node exposes a health endpoint on its public port:A healthy node returns HTTP 200.
SBT-based approach
Build JARs from source and run them directly withjava -jar.
Add Java 21 module flags
Kryo serialization requires additional JVM flags for Java 21 module access:
Environment variables reference
| Variable | Default | Description |
|---|---|---|
CL_KEYSTORE | — | Path to PKCS12 keystore inside the container |
CL_PASSWORD | — | Keystore password (sets both store and key password) |
CL_PUBLIC_HTTP_PORT | 9000 | Public HTTP API port |
CL_P2P_HTTP_PORT | 9001 | Peer-to-peer HTTP port |
CL_CLI_HTTP_PORT | 9002 | CLI/cluster management port |
CL_EXTERNAL_IP | Auto-detected | Public IP announced to peers |
CL_COLLATERAL | — | Node collateral amount |
CL_L0_PEER_HTTP_HOST | gl0 | Hostname of the L0 peer to connect to |
CL_L0_PEER_HTTP_PORT | 9000 | Port of the L0 peer |
CL_L0_PEER_ID | — | Node ID of the L0 peer |
CL_DOCKER_GENESIS | false | Boot in genesis mode |
CL_DOCKER_ROLLBACK | false | Rollback to a previous snapshot hash |
CL_DOCKER_ROLLBACK_HASH | — | Hash of the snapshot to roll back to |
Health check endpoints
internal-health-check.sh which calls GET /node/health on the node’s configured public port.