egui is an easy-to-use immediate mode GUI for Rust that runs on both web and native.
Try it now: https://www.egui.rs/
egui development is sponsored by Rerun, a startup building an SDK for visualizing streams of multimodal data.
egui 0.33.0 changelog
Highlights from this release:
egui::Plugin
a improved way to create and access egui plugins- kitdiff, a viewer for egui_kittest image snapshots (and a general image diff tool)
- better kerning
Improved kerning
As a step towards using parley for font rendering, @valadaptive has refactored the font loading and rendering code. A result of this (next to the font rendering code being much nicer now) is improved kerning.
Notice how the c moved away from the k:
- More even text kerning #7431 by @valadaptive
egui::Plugin
trait
We've added a new trait-based plugin api, meant to replace Context::on_begin_pass
and Context::on_end_pass
.
This makes it a lot easier to handle state in your plugins. Instead of having to write to egui memory it can live right on your plugin struct.
The trait based api also makes easier to add new hooks that plugins can use. In addition to on_begin_pass
and on_end_pass
, the Plugin
trait now has a input_hook
and output_hook
which you can use to inspect / modify the RawInput
/ FullOutput
.
- New Plugin trait #7385 by @lucasmerlin
kitdiff, a image diff viewer
At rerun we have a ton of snapshots. Some PRs will change most of them (e.g. the one that updated egui and introduced the kerning improvements, ~500 snapshots changed!).
If you really want to look at every changed snapshot it better be as efficient as possible, and the experience on github, fiddeling with the sliders, is kind of frustrating.
In order to fix this, we've made kitdiff.
You can use it locally via
kitdiff files .
will search for .new.png and .diff.png fileskitdiff git
will compare the current files to the default branch (main/master)
Or in the browser via- going to https://rerun-io.github.io/kitdiff/ and pasting a PR or github artifact url
- linking to kitdiff via e.g. a github workflow
https://rerun-io.github.io/kitdiff/?url=<link_to_pr_or_artifact>
To install kitdiff run cargo install --git https://github.com/rerun-io/kitdiff
. You might need to login with your github account for viewing artifacts and to prevent running into rate limits.
Here is a video showing the kerning changes in kitdiff (try it yourself):
Screen.Recording.2025-10-09.at.13.43.19.mp4
Migration guide
egui::Mutex
now has a timeout as a simple deadlock detection- If you use a
egui::Mutex
in some place where it's held for longer than a single frame, you should switch to the std mutex or parking_lot instead (egui mutexes are wrappers around parking lot)
- If you use a
screen_rect
is deprecated- In order to support safe areas, egui now has
viewport_rect
andcontent_rect
. - Update all usages of
screen_rect
tocontent_rect
, unless you are sure that you want to draw outside thesafe area
(which would mean your Ui may be covered by notches, system ui, etc.)
- In order to support safe areas, egui now has
⭐ Added
- New Plugin trait #7385 by @lucasmerlin
- Add
Ui::take_available_space()
helper function, which sets the Ui's minimum size to the available space #7573 by @IsseW - Add support for the safe area on iOS #7578 by @irh
- Add
UiBuilder::global_scope
andUiBuilder::id
#7372 by @Icekey - Add
emath::fast_midpoint
#7435 by @emilk - Make the
hex_color
macroconst
#7444 by @YgorSouza - Add
SurrenderFocusOn
option #7471 by @lucasmerlin - Add
Memory::move_focus
#7476 by @darkwater - Support on hover tooltip that is noninteractable even with interactable content #5543 by @PPakalns
- Add rotation gesture support for trackpad sources #7453 by @thatcomputerguy0101
🔧 Changed
- Document platform compatibility on
viewport::WindowLevel
and dependents #7432 by @lkdm - Deprecated
ImageButton
and removedWidgetType::ImageButton
#7483 by @Stelios-Kourlis - More even text kerning #7431 by @valadaptive
- Increase default text size from 12.5 to 13.0 #7521 by @emilk
- Update accesskit to 0.21.0 #7550 by @fundon
- Update MSRV from 1.86 to 1.88 #7579 by @Wumpf
- Group AccessKit nodes by
Ui
#7386 by @lucasmerlin
🔥 Removed
- Remove the
deadlock_detection
feature #7497 by @lucasmerlin - Remove deprecated fields from
PlatformOutput
#7523 by @emilk - Remove
log
feature #7583 by @emilk
🐛 Fixed
- Enable
clippy::iter_over_hash_type
lint #7421 by @emilk - Fixes sense issues in TextEdit when vertical alignment is used #7436 by @RndUsr123
- Fix stuck menu when submenu vanishes #7589 by @lucasmerlin
- Change Spinner widget to account for width as well as height #7560 by @bryceberger