Get started

From zero to hello world


The fastest path is Docker: one command pulls the production Rust node. From there you have a REPL, an evaluator, and a full local chain to deploy against.

Run a node

terminaldocker
# pull the latest Rust node
docker pull f1r3flyindustries/f1r3fly-rust-node:latest

# start a standalone node for development
docker compose -f docker/standalone.yml up

Compose files live in the f1r3fly repo. A multi-validator network for testing consensus is one file away: docker/shard.yml.

Write a contract

hello.rhof1r3lang
new helloworld, stdout(`rho:io:stdout`) in {
  contract helloworld( world ) = {
    for( @msg <- world ) {
      stdout!(msg)
    }
  } |
  helloworld!("Hello, World!")
}

A contract is a persistent receive: it stays alive and answers every message sent to its channel. This one echoes whatever it's sent.

Evaluate it

terminalrnode
# run a contract against your node
rnode eval hello.rho

# or explore interactively
rnode repl

The interpreter also runs standalone — no chain required — for learning and testing language semantics.

Go deeper

The full developer reference lives in the repo — nineteen chapters from syntax to deployed applications, verified against the production implementation.

Stuck? Ask.