Interface design principles
Keep the glyph primary and the application state legible.
| Status | Current design guidance |
|---|---|
| Stability | Apply with judgment to the current interface |
Runebender is a dense working tool for type design. Controls should remain stable while values change, and decoration should never obscure the active glyph. Other editors are references to evaluate, not feature lists to copy.
Use named roles
Colors come from installed .theme.toml files and are resolved through src/application/view/theme.rs.
The theme guide names the Base UI and Rainbow palettes.
Spacing, sizes, radii, strokes, and type come from src/application/view/design.rs.
Repeated controls belong in src/application/view/recipes.rs.
A new color needs a named role in every built-in theme.
Keep the interface steady
- Align controls to shared sizes and keep sibling spacing in one place.
- Do not make panels jump or reorder under the pointer as content changes.
- Keep canvas marks thin and relevant to the active edit.
- Let chrome describe application state without covering the drawing.
- Use sentence case; commands are verbs and labels are nouns.
- Error text says what failed and what the user can do next.
Check the actual result
For ordinary interface changes, inspect only the default theme (currently Gray).
Check other themes at the same size when working on themes or when explicitly requested.
A headless capture shows the rendered widget tree but does not prove pointer, keyboard, IME, accessibility, or GPU behavior.
Run a native interaction check when the change affects those paths.
The repository’s AGENTS.md and CI define the current code checks.