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.
Highlights
- New egui_mcp crate based on eguis new inspection protocol
- Set classes on your
Uis to modify widget behavior based on surrounding context - Improved IME
Egui inspection and egui_mcp
This release includes a new inspection protocol for egui. It allows reading the accesskit tree of a running app, as well
as sending events to control it. It's implemented via a new InspectionPlugin in the egui_inspection crate.
Eframe includes a new inspection feature. When enabled, you can enable inspection by launching the app with
EGUI_INSPECTION=1. This will cause the app to listen on port 5719.
The first inspection protocol consumer is egui_mcp.
It's a mcp server that allows your agent to see and use
egui apps. It can be used to have the agent use the app, reproduce bugs and verify its changes.
Install it via cargo install --git https://github.com/rerun-io/kittest_inspector egui_mcp and then add it to your
agent via claude mcp add egui egui-mcp.
There is also a plan of adding a general inspection gui using the same protocol, that can e.g. be used to step through
kittest tests frame by frame.
Here is claude using the mcp to try some of the egui demos (sped up by a lot, claude is slow):
Screen.Recording.2026-06-25.at.19.58.20.15s.mov
- Add
egui_inspectionprotocol and plugin #8234 by @lucasmerlin
Classes
As part of css like styling, we've added classes to egui. You can already
use them to e.g. modify widget behavior or styling based on surrounding context.
Add classes to the container:
ui.scope_builder(UiBuilder::new().with_class("my_container"), |ui| {
...
}); In your widget, check if we're in my_container, to e.g. change sizes or colors:
let in_container = ui.stack().iter().any(|s| s.classes.has("my_container")); Today this only works for custom widgets and ui code, but the next step will be a styling system that allows you to modify built
in widget styling based on these classes.
- Add
ClassestoUiBuilderand some Widgets #7843 by @AdrienZianne
Better IME composition
IME visuals received an overhaul, they are now indicated by an underline and properly show the cursor during composition:
After-macOS-CMN-small.mp4
⭐ Added
- Add
ClassestoUiBuilderand some Widgets #7843 by @AdrienZianne - Drag-to-close panels #8182 by @emilk
- Add
AtomKind::Layout, for nestingAtomLayout#8219 by @lucasmerlin - Add
AtomLayout::direction#8221 by @lucasmerlin - Make the size of tabs and thin space configurable #8070 by @emilk
- Add
subpixel_binningtoTextOptionsandFontTweak#8072 by @emilk - Allow
AtomsinUi::small_button#8159 by @lucasmerlin - Atom support for
egui::WindowTitlebar #8154 by @lucasmerlin - Add
AsIdandIdSalt#8184 by @emilk - Add Context::set_cursor_image for OS-level custom cursors #8155 by @all3f0r1
- Add
ViewportBuilder::with_monitor+ViewportCommand::SetMonitor#8140 by @Le-Syl21 - Add modifier keys to
egui::Key#8127 by @Le-Syl21 - Expose interactive rects from the last pass #8211 by @psyche314
- Add
AtomLayout::selectablefor opt-in text selection #8224 by @akagifreeez - Add
LayoutJob::format_at_byte#8244 by @emilk - Add
atoms()helpers to getAtomsfrom widgets #8128 by @Nashvill375
🔧 Changed
- Improve IME handling, add public method
owns_ime_eventsonMemory#7983 by @umajho - Use
harfrustfor better kerning and ligatures #8031 by @gcailly - Rework
Windowmargins and setclip_rect_marginto zero #7725 by @emilk - Slide panels when animating them #8175 by @emilk
- Slow down animation time from 0.1s to 0.2s #8176 by @emilk
- Smoother CollapsingHeader animation #8177 by @emilk
- Drag-to-scroll: now only on touch screens #8181 by @emilk
Window: move only by dragging title bar #8183 by @emilk- Rename
Panelmethods #8192 by @emilk - Panels: double-click resize edge to toggle #8193 by @emilk
- Rename
AlphaFromCoveragetoFontColorTransferFunction#8201 by @emilk - Smoother collapsed-panel animation #8202 by @emilk
- Improve
Debug-formatting ofIdin debug-builds #8190 by @emilk - Use strongly typed
CharIndexandByteIndex+ bug fixes #8245 by @emilk - Allow downscaling image in
GetScreenshotinspection request #8248 by @lucasmerlin - Announce pressed state of selectable buttons to screen readers #8130 by @antoinecellerier
- Pre-populate font variation axes in the
FontTweakUI #8258 by @emilk - Make font hinting target configurable via
FontTweak#8262 by @emilk
🔥 Removed
- Remove everything that was marked
#[deprecated]#8105 by @emilk - Remove 64-bit atomics in main crate #8037 by @kay-lambdadelta
- Remove
impl Into<f32>arguments #8194 by @emilk
🐛 Fixed
- Don't hide whitespaces in centered and right aligned text edits #8102 by @lucasmerlin
- Don't allow resizing past minimum content size #8152 by @lucasmerlin
- Fix resizing of
Grid#8170 by @lucasmerlin - Fix glyph caching on font variations #8189 by @emilk
Panel: never overflow available width, normax_width#8198 by @emilk- Fixes color picker hue drift at low alpha values #8208 by @aedm
- Fix: ScrollArea layout jitter with floating bars and zoom levels #7944 by @rustbasic
- Fix #2142 - lost_focus not firing after a mid-frame focus transfer #8210 by @ufoscout
- Fix label selection in deferred viewports #8242 by @yay
