Development

Build and contribute to Runebender.

StatusAlpha
StabilityCheck the repository's AGENTS.md and CI for current requirements

Source and Build

runebender contains the editor and its font engine in the root Cargo package. The repository pins its Rust toolchain. Start with its AGENTS.md, then use Code Layout and the architecture guide to find the right module.

git clone https://github.com/fontgarden/runebender
cd runebender
cargo run --profile fast --locked -- path/to/Font.designspace

The fast profile is intended for local UI development. Cargo builds when needed, then launches the editor; the executable is target/fast/runebender. This profile keeps release’s optimization level and disabled debug assertions, while disabling LTO and enabling incremental compilation with 16 code-generation units to favor shorter rebuilds. The first build fills a separate cache. Runtime performance may differ from release, so use cargo run --release --locked -- path/to/Font.designspace for release performance comparisons. The --locked flag keeps dependency versions fixed to the committed Cargo.lock.

Checks

Use focused checks while iterating and run broader checks relevant to the change before finishing. The full native CI suite is:

cargo fmt --all --check
bash .github/scripts/copyright.sh
cargo clippy --workspace --all-targets --locked -- -D warnings
cargo doc --workspace --no-deps --locked
cargo test --workspace --locked -- --test-threads=1
cargo build --workspace --release --locked
cargo deny --locked check advisories

The root toolchain is pinned in rust-toolchain.toml. CI runs on Linux and macOS with warnings denied. Windows has a diagnostic workflow; see Known limitations. Some tests need the adjacent Virtua Grotesk checkout or RUNEBENDER_TEST_FONTS pointing to a source directory. Do not count ignored model tests as passing model coverage.

Interface Work

Read the design principles and themes before changing a view. Use headless captures in Gray and Light for visual checks, then perform native interaction checks when the change needs pointer, keyboard, IME, accessibility, or GPU evidence. The browser reuses the desktop widget tree; changes that affect it need the checks in the repository’s web/README.md.

License

Apache-2.0 or MIT.