Vermilion is an open-source Rust robotics middleware project. The goal is a graph-driven runtime with zero-copy local communication, automatic network routing, deterministic scheduling, typed messages, and CLI-first workflows.
This repository now contains the core runtime foundation:
vermilion-core: graph definitions, deterministic trigger metadata, a topic registry, and an in-memory transport used for tests and early development.vermilion-cli: command-line entry point for workspace, node, graph, topic, and TUI workflows.vermilion-graph:.vrml/.crln-style graph parsing, validation, and deterministic local execution planning.vermilion-macros: initial#[node]and#[out]procedural macro entry points.vermilion-msg: ROS2-compatible.msgparsing, schema hashing, fixed-size detection, and Rust code generation scaffolding.vermilion-transport: local-first hybrid transport with latest-message network semantics.vermilion-transport-iox2: iceoryx2-facing adapter boundary for local shared-memory transport.vermilion-transport-zenoh: zenoh-facing adapter boundary for network transport.vermilion-log: zero-copy log records, replay cursors, topic metrics, and JSON observability helpers.
Future milestones replace the deterministic adapter internals with production iceoryx2/zenoh sessions, expand macro code generation, add a richer scheduler, and build visualization.
cargo test --workspace
cargo run -p vermilion-cli -- --help
cargo run -p vermilion-cli -- workspace create demo
cargo run -p vermilion-transport --example topic_managerRun the sample graph:
mkdir graphs
copy examples\perception.vrml graphs\perception.vrml
cargo run -p vermilion-cli -- graph run perceptionThe intended developer model is:
- Create a workspace.
- Create Rust node crates.
- Declare typed inputs and outputs.
- Wire nodes in graph files.
- Run the graph.
- Inspect topics, logs, and replay behavior from the CLI.
The transport model is local-first. Local subscribers read Vermilion wire-format bytes from a shared sample. When the topic manager discovers a remote topic request, it also publishes a Protobuf envelope over the network path. Production backend crates expose feature-gated iceoryx2 and zenoh integrations.
$env:LIBCLANG_PATH = "C:\Program Files\LLVM\bin"
$env:Path = "C:\Program Files\LLVM\bin;$env:USERPROFILE\.cargo\bin;$env:Path"
cargo fmt --all -- --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
cargo check --workspace --all-features
cargo build --workspace --release