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
# 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
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
# 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.
- Language overview — the core model in ten minutes
- Channels & concurrency — send, receive, join, peek
- Contracts & state — patterns, mutable cells, CRUD
- System channels — I/O, crypto, registry, vaults, AI
- The full reference — all nineteen chapters + examples
- Runnable guard & metering examples — small, compiled, covered by tests; change the guard and watch what does and doesn't get consumed
- f1r3lang for the Working Software Developer — the full developer note, readable on this site