Skip to content
crmnePublic

About

egui on rails: the shared foundation for native Rust apps built with egui

Topics

Resources

Stars

179 stars

Watchers

1 watching

Forks

Repository files navigation

fastframe logo

fastframe

egui on rails. The desktop essentials around your app.

Documentation · Get started · Releases · Sponsor

Build your interface with egui. Let fastframe handle the parts a desktop app needs around it: native text, themes, tray menus, audio, media keys, sleep and wake, notifications, and updates that can roll back.

Each capability is a small Rust crate. Take the ones you need, keep your own layout and product decisions, and run on Linux, macOS, and Windows. No telemetry or hosted service is required by the crates.

Extracted from ZapFast, Spotifast, Solco, TonePush, and Chat with Work.

See it

Real egui windows from the font specimen, using synthetic text. Interface weights and installed script fallbacks work in both themes. The light specimen uses a validated local font.

Default interface font, dark Local interface font, light
Dark native font specimen with multilingual text Light native font specimen using a local font

Run it with cargo run -p fastframe-fonts --example fonts, or append -- /path/to/font.ttf to try a local face. Installed fallback faces vary by platform.

Start with fonts and text

Requires Rust 1.98+ and egui 0.36.2. fastframe is not on crates.io yet; pin every fastframe crate to the same release tag:

[dependencies]
egui = "0.36.2"
fastframe-fonts = { git = "https://github.com/crmne/fastframe", tag = "v0.13.0" }
fastframe-text = { git = "https://github.com/crmne/fastframe", tag = "v0.13.0" }

At startup, before the first frame:

let mut fonts = fastframe_fonts::FontSetup::default().definitions();
let rendering = fastframe_text::detect();
rendering.apply_to(&mut fonts);
ctx.set_fonts(fonts);
ctx.all_styles_mut(|style| rendering.apply_to_visuals(&mut style.visuals));

Then add only what your app uses. Each crate README has its own setup example. The getting started guide explains integration, and the migration guide shows what the existing apps replaced.

Crates

Crate What it does
fastframe-text Desktop font rendering settings, text scaling, and pixel snapping.
fastframe-fonts Inter, system or validated local interface fonts, with script and regional Han fallbacks.
fastframe-emoji Platform colour emoji, drawn off the UI thread, with a bundled fallback.
fastframe-icons Embedded SVG icon sets, persistent image loading, and shared Lucide icons.
fastframe-theme Editable JSON palettes, system appearance, live Omarchy themes, and colour transitions.
fastframe-i18n Bundled gettext catalogs, plural forms, language detection, and translation tooling.
fastframe-log Per-run logs for bug reports, private-target rewriting, and safe panic logging.
fastframe-tray Native tray icons and menus on Linux, macOS, and Windows.
fastframe-dock macOS Dock icons and visibility, plus desktop unread badges.
fastframe-titlebar Draggable headers, native button layouts, double-click actions, and resize edges.
fastframe-shell Keep running without a window, reopen it, and restore its size, position, and zoom.
fastframe-audio Maintained audio input and output, preallocated output conversion, device changes, and rodio mixing.
fastframe-scroll Platform wheel steps, touchpad momentum, and axis locking.
fastframe-autostart Start at login through each platform, including Flatpak and hidden startup.
fastframe-instance One running copy per user, with a private channel for subsequent launches.
fastframe-now-playing Desktop media controls, artwork, media keys, and playback commands.
fastframe-power Power and network state, sleep hooks and acknowledgements, and keep-awake guards.
fastframe-dirs Platform config, state, and cache directories, including portable Windows installs.
fastframe-file Atomic file replacement and background writing, with private permissions when needed.
fastframe-desktop Desktop identity, portal settings, Flatpak entries, and macOS notification permission.
fastframe-notifications Native notifications with click actions, replacement, withdrawal, and permissions.
fastframe-update Signed updates from GitHub or HTTPS feeds, package detection, rollback, and prerelease channels.

egui and winit forks

fastframe builds against published egui releases. Our apps also use maintained forks for fixes awaiting upstream releases. The getting started guide has the matching revisions, the complete app-root patch block, and the status of each fix. The current egui patch stack is based on 0.36.2.

How the project grows

Code comes from working apps. A piece moves here after it has proved useful and is general enough to share. Small crates, good defaults, and few knobs keep the API manageable. Branding, layout, and product behavior stay in the app. Bugs in egui, winit, and other dependencies are fixed upstream.

The project is young and APIs can change. Read the release notes before upgrading.

Contributing

See AGENTS.md for the complete checks and contribution rules. Behavior changes need focused tests, public API documentation, and support for all three desktop platforms. Tests use injected data instead of live services.

cargo fmt --all --check
cargo clippy --locked --all-targets --all-features -- -D warnings
cargo test --locked --all-targets --all-features
RUSTDOCFLAGS='-D warnings' cargo doc --locked --all-features --no-deps

Found a problem? Open an issue. For questions and ideas, use Discussions.

License

MIT. See LICENSE. Bundled fonts retain their own licenses.

About

egui on rails: the shared foundation for native Rust apps built with egui

Topics

Resources

Stars

179 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages