Releases: crmne/fastframe
Release list
fastframe 0.1.7
fastframe 0.1.7 gathers everything since 0.1.0: theme changes that reveal their new colours the way Omarchy does, shared palettes people can open and edit, apps that move off a legacy name as they update, and Arabic on Windows drawn at a readable size. 0.1.1 to 0.1.6 were tagged without release notes; this release covers them all.
Upgrade by moving the tag:
fastframe-theme = { git = "https://github.com/crmne/fastframe", tag = "v0.1.7" }New
- Theme changes reveal their new colours instead of snapping to them.
fastframe_theme::Transitionkeeps a picture of the old colours and opens the new ones from the middle of the window, with Omarchy's own slanted band by default, or a soft-edged circle throughTransition::new(Reveal::Circle). A window that cannot take a screenshot switches after a quarter of a second, without the reveal. - The shared palettes are ordinary files in the themes folder. With presets on, each shared palette is installed once into the app's themes directory, where people can read it, change it, copy it or delete it. Edits last, a deleted palette stays deleted, and a palette added in a later version is installed once, never over an existing file.
- Theme names read without
.json.display_nameshows "Nord" and "Rose Pine Dawn" rather than their file names. - Omarchy templates and hooks upgrade with the app. A packaged template or hook the user never changed is replaced when the app ships a new one, so improvements such as ZapFast's higher contrast colours reach people who installed an earlier version. Edited files stay as they are.
- Renamed apps move onto their new name as they update. An app still running under a legacy executable, portable file or macOS bundle name is moved onto its slug by the next update, and launchers that point at the old path (
.desktopfiles, links in~/.local/bin, Start menu, desktop and taskbar shortcuts) are repointed. A failed start rolls back under the old name. - Logs name the face drawn for each script. At info level, every platform now logs each fallback script's font family, file, scale and baseline, so a bug report shows which face was picked.
Fixed
- Windows updates no longer roll back after an installer stopped shipping the legacy executable. The update helper relaunched a file that was gone and rolled back; it now starts the executable the installer put in place (crmne/spotifast#582, reported by @G2Poti).
- Arabic on Windows is drawn with Segoe UI at a readable size. Print and calligraphy faces such as Arabic Typesetting were picked over the system's interface face, so Arabic came out about two thirds the size of the Latin beside it. Hebrew, Indic and Thai also land on Windows' own interface faces now (crmne/zapfast#72, reported by @BruceUK).
Upgrading
fastframe_theme::DesktopThemes has a new field, omarchy_previous_templates, listing the templates the app shipped before. Add it to the struct literal, as &[] if the app's template never changed.
Thanks
- @G2Poti for reporting the Windows update rollback (crmne/spotifast#582)
- @BruceUK for reporting the small Arabic text (crmne/zapfast#72)
Full changelog: v0.1.0...v0.1.7
fastframe 0.1.0
fastframe is egui on rails: the shared foundation of five native apps, ZapFast, Spotifast, RekordFlash, TonePush and Chat with Work. 0.1.0 is its first tagged version. Nothing in it was designed up front: every crate was extracted from code that already ships in at least two of those apps, and the apps now depend on it instead of carrying their own copies. ZapFast and Spotifast each dropped about 5,000 lines in the move.
What's inside
- fastframe-text follows the desktop's font rendering, so egui text looks like the rest of your apps: the hinting and antialiasing from the desktop portal or fontconfig, the same text weight as GTK in dark themes, changes applied live, and a helper that keeps hand-placed text on whole pixels at fractional scales such as 133%.
- fastframe-fonts bundles Inter at the weights an app picks, with tabular numbers, and adds the installed fonts for every other script, on Linux, macOS (CoreText) and Windows.
- fastframe-icons embeds SVG icon sets through one
icons!block, with the Lucide icons the apps share and their licences. - fastframe-theme loads JSON palettes, scans a themes folder off the interface thread, ships shared palettes and follows Omarchy theme changes live.
- fastframe-i18n compiles gettext catalogs at build time and follows the system language.
- fastframe-log writes a log file fit for bug reports, keeps private data out, and records panics without their message, or with a redacted one if the app prefers.
- fastframe-tray is a tray item with the app's own menu: StatusNotifier on Linux, the notification area on Windows, the menu bar on macOS, where it keeps answering while the app runs without a window.
- fastframe-shell keeps an app running without a window, recreates the window on demand, starts hidden, and brings back windows restored off-screen.
- fastframe-macos puts the traffic lights in the app's own title bar and follows the system's title-bar double-click setting.
- fastframe-update updates an app from its GitHub releases: it checks, detects package-manager installs that must not update themselves, verifies checksums against a publisher signature, hands off to a helper and rolls back if the new version fails to start. It supports rotating the signing key, a prerelease channel for alpha builds, portable archives whose app is not named after the slug, and Apple silicon only releases.
Using it
Depend on the crates by tag until the API settles:
fastframe-text = { git = "https://github.com/crmne/fastframe", tag = "v0.1.0" }fastframe builds against stock egui 0.36. Apps that patch egui and winit, as all five do, keep their [patch.crates-io] block, which applies inside fastframe too. MIGRATION.md lists, app by app, what each crate replaces.
Upstream
Some of what these apps need belongs in egui and winit, and is proposed there: emilk/egui#8631 keeps eframe from freezing on Wayland when the compositor stops sending frames, and rust-windowing/winit#4709 with its 0.30 backport #4710 reports the xdg-shell suspended state as Occluded. Until they are released, the apps pin forks that carry them.
Thanks
fastframe is mostly other people's work, moved to where every app can use it.
- @TnZzZHlp for the Windows tray click behaviour (crmne/spotifast#310)
- @marijnbent for keeping the macOS window reachable from the Dock (crmne/spotifast#67)
- @OnCloud125252 for drawing each script with the face macOS uses (crmne/spotifast#334)
- @kevin9327 for choosing the Han font from the Windows display language (crmne/spotifast#314)
- @AndrewMason7 for the emoji and symbol fallbacks (crmne/spotifast#97)
- @jdubba1 for local palettes and live Omarchy theme updates (crmne/spotifast#392)
- @mdevils for letting the macOS updater accept a renamed executable (crmne/spotifast#538)
- @tobymarks for running the macOS update helper from a copy of the bundle (crmne/zapfast#129) and the tray menu on Windows (crmne/zapfast#54)
- @fabiomotta0311 for system-language localization with gettext (crmne/zapfast#141)
- @ThatOneCalculator for the Rosé Pine themes (crmne/zapfast#74)
And everyone who reported the problems these crates now solve for five apps at once.