Quick Start
This page describes the shortest repeatable path for the current V3 baseline. The default development entrypoint is just; bun is used for Web/docs tooling, and cargo +esp is used for ESP32-S3 firmware.
Prepare the environment
Firmware builds require the Espressif Rust toolchain:
The local companion, Web app, and docs site also need:
espflash is used behind the isolarail-devd path. It is not the normal direct flashing entrypoint for this project.
Entrypoint rules
Run normal development commands from the repository root through just.
- Firmware checks consistently use the
+esptoolchain andxtensa-esp32s3-none-elftarget. - Companion tools build from the correct
tools/isolarail-companion/context instead of inheriting the root Xtensa target. - Flash, reset, and monitor paths go through
isolarail/isolarail-devdidentity checks before touching hardware.
Avoid these as routine paths:
- raw
espflash flash --monitor - hand-written
cargo --manifest-path tools/isolarail-companion/Cargo.toml ...from the repo root - state-changing commands without an explicit
SELECTOR
Build firmware
Use the repository entrypoints first:
The underlying ESP32-S3 gates are:
Attach one board
Do not auto-select a serial port. List candidates, then bind one physical port to an observed device identity:
Normal flashing and monitoring use the project safety path:
Use just flash-first-time only for new hardware or download-mode recovery. That path requires typed confirmation; do not bypass identity checks with raw espflash flash --monitor.
Minimal one-board HIL sequence
When only one board is on the bench, pin the physical serial path first:
USB_PORT is forwarded to ISOLARAIL_USB_PORT, so scan, JSONL, flash, reset, and monitor paths reject other serial ports.
Use the local control plane
isolarail is the CLI portal. isolarail-devd is the local daemon. The default daemon mode is native IPC:
Common read-only checks:
Run state-changing operations sequentially against one board:
After a state change, leave a short settle window before reading status:
device-reset temporarily drops the USB session. Treat it as a standalone command, wait for re-enumeration, then run discover or status again.
Wi-Fi write boundary
Wi-Fi credentials are stored in M24C64@0x50. Writes and clears must use a USB-backed path:
--url and Wi-Fi/LAN saved hardware stay read-only for Wi-Fi writes. LAN visibility is not a credential-write authority.
Build the docs site
The docs site lives in docs-site/. Local builds default to a root path:
For subpath deployment or GitHub Pages project paths, override DOCS_BASE:
Handwritten links do not depend on a fixed /isolarail/ path.
Local quality gates
If a change only touches the docs site, docs build and Markdown lint are enough. Firmware or companion changes need their own gates.
Read next
- Hardware Topology: current V3 board truth.
- Firmware Runtime: boot self-check, gating, and runtime tasks.
- Control Plane: CLI, daemon, USB JSONL, and Web companion boundaries.
- Front Panel: the 160x50 dashboard layout and states.