Dev Setup
Prerequisites
- Rust toolchain — stable channel with the
wasm32-unknown-unknowntarget, as defined inrust-toolchain.toml - mise — task runner for all dev commands
- Nix (optional) —
flake.nixprovides a reproducible dev shell with all dependencies
For screenshot capture only (not needed for web development):
- Wayland compositor with GPU access
grimfor screenshots- kitty and/or wezterm installed
Quick Start
# Start the web app (Dioxus dev server, port 8883)
mise run dev
# Start with local screenshot serving (port 8884 for images, 8883 for app)
mise run dev-screenshots
# Build for production
mise run build-web
Development Workflow
Bacon Diagnostics
The recommended workflow uses bacon for continuous compilation feedback:
- Start bacon in a terminal pane:
mise run bacon-claude-diagnostics - Edit code
- Bacon watches for changes and writes diagnostics to
.bacon-claude-diagnostics - Read that file for errors with exact file/line/column locations
Each line uses a pipe-delimited format:
level|:|file|:|line_start|:|line_end|:|message|:|rendered
This is faster than running cargo check (bacon is already watching) and machine-parseable.
Useful mise Tasks
| Task | Description |
|---|---|
dev | Start Dioxus dev server (port 8883) |
dev-screenshots | Local screenshot server + web app |
build-web | Build WASM release |
build-cli | Build CLI release |
check | cargo check across workspace |
fmt | Format with cargo fmt |
docs-serve | Serve mdbook with live reload (port 8882) |
docs-build | Build static docs |
capture-kitty | Capture all kitty screenshots |
capture-wezterm | Capture all wezterm screenshots |
screenshots-deploy | Build manifest + sync to R2 |
Work Tracking
Litmus uses beans, a file-based issue tracker. Beans are Markdown files with YAML frontmatter, managed via the beans CLI. Work is organized into milestones with parent/child and blocking relationships.
beans list --ready # see what's available to work on
beans show <id> # read a bean's full spec
beans create "Title" -t task -d "Description"
beans update <id> -s in-progress