Releases: emilk/egui
0.33.2
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 changelog
⭐ Added
- Add
Plugin::on_widget_under_pointerto support widget inspector #7652 by @juancampa - Add
Response::total_drag_deltaandPointerState::total_drag_delta#7708 by @emilk
🔧 Changed
- Improve accessibility and testability of
ComboBox#7658 by @lucasmerlin
🐛 Fixed
- Fix
profiling::scopecompile error when profiling usingtracingbackend #7646 by @PPakalns - Fix edge cases in "smart aiming" in sliders #7680 by @emilk
- Hide scroll bars when dragging other things #7689 by @emilk
- Prevent widgets sometimes appearing to move relative to each other #7710 by @emilk
- Fix
ui.response().interact(Sense::click())being flakey #7713 by @lucasmerlin
eframe changelog
- Fix jittering during window resize on MacOS for WGPU/Metal #7641 by @aspcartman
- Make sure
native_pixels_per_pointis set during app creation #7683 by @emilk
0.33.0 - `egui::Plugin`, better kerning, kitdiff viewer
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::Plugina 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 gitwill 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::Mutexnow has a timeout as a simple deadlock detection- If you use a
egui::Mutexin 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_rectis deprecated- In order to support safe areas, egui now has
viewport_rectandcontent_rect. - Update all usages of
screen_recttocontent_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_scopeandUiBuilder::id#7372 by @Icekey - Add
emath::fast_midpoint#7435 by @emilk - Make the
hex_colormacroconst#7444 by @YgorSouza - Add
SurrenderFocusOnoption #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::WindowLeveland dependents #7432 by @lkdm - Deprecated
ImageButtonand 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_detectionfeature #7497 by @lucasmerlin - Remove deprecated fields from
PlatformOutput#7523 by @emilk - Remove
logfeature #7583 by @emilk
🐛 Fixed
- Enable
clippy::iter_over_hash_typelint #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
0.32.3 - Fix tooltips for ellided text
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
- Preserve text format in truncated label tooltip #7514 #7535 by @lucasmerlin
- Fix
TextEdit's in RTL layouts #5547 by @zakarumych - Optimize
Mesh::add_rect_with_uv#7511 by @valadaptive
egui_extras
0.32.2 - Ui::place, Harness::mask and more bug fixes
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.
Add Ui::place
Ui::place is similar to Ui::put, but it doesn't update the current Uis cursor. This is very useful when using the new Atoms or making badge-like widgets.
The following breaks with Ui::put but works just fine with Ui::place:
Add Harness::mask
Harness::mask allows for simple masking of Rects you don't want to be visible in snapshot test images. The rect will be masked with a ugly color to make it obvious whats going on:
egui
- Add
Ui::place, to place widgets without changing the cursor #7359 by @lucasmerlin - Fix:
SubMenushould not display when ui is disabled #7428 by @ozwaldorf - Remove line breaks when pasting into single line TextEdit #7441 by @YgorSouza
- Panic mutexes that can't lock for 30 seconds, in debug builds #7468 by @emilk
- Fix: prevent calendar popup from closing on dropdown change #7409 by @AStrizh
egui_extras
- Fix memory leak when
forget_imageis called while loading #7380 by @Vanadiae - Fix deadlock in
ImageLoader,FileLoader,EhttpLoader#7494 by @lucasmerlin
egui_kittest
- Allow masking widgets in kittest snapshots #7467 by @lucasmerlin
epaint
- Panic mutexes that can't lock for 30 seconds, in debug builds #7468 by @emilk
- Skip zero-length layout job sections #7430 by @HactarCE
Unsorted commits
- Add track_caller to Mutex and RwLock for deadlock_detection b17d716
0.32.1 - Misc bug fixes
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 changelog
⭐ Added
- Add
ComboBox::popup_style#7360 by @lucasmerlin
🐛 Fixed
- Fix glyph rendering: clamp coverage to [0, 1] #7415 by @emilk
- Fix manual
Popupnot closing #7383 by @lucasmerlin - Fix
WidgetText::Textignoring fallback font and overrides #7361 by @lucasmerlin - Fix
override_text_colorpriority #7439 by @YgorSouza - Fix debug-panic in ScrollArea if contents fit without scrolling #7440 by @YgorSouza
eframe changelog
- Enable wgpu default features in eframe / egui_wgpu default features #7344 by @lucasmerlin
- Request a redraw when the url change through the
popstateevent listener #7403 by @irevoire
egui_kittest changelog
0.32.0 - Atoms, popups, and better SVG support
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.32.0 changelog
This is a big egui release, with several exciting new features!
- Atoms are new layout primitives in egui, for text and images
- Popups, tooltips and menus have undergone a complete rewrite
- Much improved SVG support
- Crisper graphics (especially text!)
Let's dive in!
⚛️ Atoms
egui::Atom is the new, indivisible building block of egui (hence the name).
It lets you mix images and text in many places where you would previously only be able to add text.
Atoms is the first step towards a more powerful layout engine in egui - more to come!
Right now an Atom is an enum that can be either WidgetText, Image, or Custom.
The new AtomLayout can be used within widgets to do basic layout.
The initial implementation is as minimal as possible, doing just enough to implement what Button could do before.
There is a new IntoAtoms trait that works with tuples of Atoms. Each atom can be customized with the AtomExt trait
which works on everything that implements Into<Atom>, so e.g. RichText or Image.
So to create a Button with text and image you can now do:
let image = include_image!("my_icon.png").atom_size(Vec2::splat(12.0));
ui.button((image, "Click me!"));Anywhere you see impl IntoAtoms you can add any number of images and text, in any order.
As of 0.32, we have ported the Button, Checkbox, RadioButton to use atoms
(meaning they support adding Atoms and are built on top of AtomLayout).
The Button implementation is not only more powerful now, but also much simpler, removing ~130 lines of layout math.
In combination with ui.read_response, custom widgets are really simple now, here is a minimal button implementation:
pub struct ALButton<'a> {
al: AtomLayout<'a>,
}
impl<'a> ALButton<'a> {
pub fn new(content: impl IntoAtoms<'a>) -> Self {
Self {
al: AtomLayout::new(content.into_atoms()).sense(Sense::click()),
}
}
}
impl<'a> Widget for ALButton<'a> {
fn ui(mut self, ui: &mut Ui) -> Response {
let Self { al } = self;
let response = ui.ctx().read_response(ui.next_auto_id());
let visuals = response.map_or(&ui.style().visuals.widgets.inactive, |response| {
ui.style().interact(&response)
});
let al = al.frame(
Frame::new()
.inner_margin(ui.style().spacing.button_padding)
.fill(visuals.bg_fill)
.stroke(visuals.bg_stroke)
.corner_radius(visuals.corner_radius),
);
al.show(ui).response
}
}You can even use Atom::custom to add custom content to Widgets. Here is a button in a button:
Screen.Recording.2025-07-10.at.13.10.52.mov
let custom_button_id = Id::new("custom_button");
let response = Button::new((
Atom::custom(custom_button_id, Vec2::splat(18.0)),
"Look at my mini button!",
))
.atom_ui(ui);
if let Some(rect) = response.rect(custom_button_id) {
ui.put(rect, Button::new("🔎").frame_when_inactive(false));
}Currently, you need to use atom_ui to get a AtomResponse which will have the Rect to use, but in the future
this could be streamlined, e.g. by adding a AtomKind::Callback or by passing the Rects back with egui::Response.
Basing our widgets on AtomLayout also allowed us to improve Response::intrinsic_size, which will now report the
correct size even if widgets are truncated. intrinsic_size is the size that a non-wrapped, non-truncated,
non-justified version of the widget would have, and can be useful in advanced layout
calculations like egui_flex.
Details
- Add
AtomLayout, abstracting layouting within widgets #5830 by @lucasmerlin - Add
Galley::intrinsic_sizeand use it inAtomLayout#7146 by @lucasmerlin
❕ Improved popups, tooltips, and menus
Introduces a new egui::Popup api. Checkout the new demo on https://egui.rs:
Screen.Recording.2025-07-10.at.11.47.22.mov
We introduced a new RectAlign helper to align a rect relative to an other rect. The Popup will by default try to find the best RectAlign based on the source widgets position (previously submenus would annoyingly overlap if at the edge of the window):
Screen.Recording.2025-07-10.at.11.36.29.mov
Tooltip and menu have been rewritten based on the new Popup api. They are now compatible with each other, meaning you can just show a ui.menu_button() in any Popup to get a sub menu. There are now customizable MenuButton and SubMenuButton structs, to help with customizing your menu buttons. This means menus now also support PopupCloseBehavior so you can remove your close_menu calls from your click handlers!
The old tooltip and popup apis have been ported to the new api so there should be very little breaking changes. The old menu is still around but deprecated. ui.menu_button etc now open the new menu, if you can't update to the new one immediately you can use the old buttons from the deprecated egui::menu menu.
We also introduced ui.close() which closes the nearest container. So you can now conveniently close Windows, Collapsibles, Modals and Popups from within. To use this for your own containers, call UiBuilder::closable and then check for closing within that ui via ui.should_close().
Details
- Add
PopupandTooltip, unifying the previous behaviours #5713 by @lucasmerlin - Add
Ui::closeandResponse::should_close#5729 by @lucasmerlin ⚠️ Improved menu based onegui::Popup#5716 by @lucasmerlin- Add a toggle for the compact menu style #5777 by @s-nie
- Use the new
PopupAPI for the color picker button #7137 by @lucasmerlin ⚠️ Close popup ifMemory::keep_popup_openisn't called #5814 by @juancampa- Fix tooltips sometimes changing position each frame #7304 by @emilk
- Change popup memory to be per-viewport #6753 by @mkalte666
- Deprecate
Memory::popupAPI in favor of newPopupAPI #7317 by @emilk
▲ Improved SVG support
You can render SVG in egui with
ui.add(egui::Image::new(egui::include_image!("icon.svg"));(Requires the use of egui_extras, with the svg feature enabled and a call to install_image_loaders).
Previously this would sometimes result in a blurry SVG, epecially if the Image was set to be dynamically scale based on the size of the Ui that contained it. Now SVG:s are always pixel-perfect, for truly scalable graphics.
Details
- Support text in SVGs #5979 by @cernec1999
- Fix sometimes blurry SVGs #7071 by @emilk
- Fix incorrect color fringe colors on SVG:s #7069 by @emilk
- Make
Image::paint_atpixel-perfect crisp for SVG images #7078 by @emilk
✨ Crisper graphics
Non-SVG icons are also rendered better, and text sharpness has been improved, especially in light mode.
Details
- Improve text sharpness #5838 by @emilk
- Improve text rendering in light mode #7290 by @emilk
- Improve texture filtering by doing it in gamma space #7311 by @emilk
- Make text underline and strikethrough pixel perfect crisp #5857 by @emilk
Migration guide
We have some silently breaking changes (code compiles fine but behavior changed) that require special care:
wgpu backend features
- wgpu 25 made the gles and vulkan backends optional
- We missed this, so for now you need to manually opt in to those backends. Add the following to you Cargo.toml
wgpu = "25" # enables the wgpu default features so we get the default backends
- We missed this, so for now you need to manually opt in to those backends. Add the following to you Cargo.toml
Menus close on click by default
- Previously menus would only close on click outside
- Either
- Remove the
ui.close_menu()calls from button click handlers sinc...
- Remove the
0.31.1 - TextEdit and egui_kittest fixes
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
- Fix sizing bug in
TextEdit::singleline#5640 by @IaVashik - Fix panic when rendering thin textured rectangles #5692 by @PPakalns
egui_extras
- Fix image_loader for animated image types #5688 by @BSteffaniak
egui_kittest
- Fix modifiers not working in kittest #5693 by @lucasmerlin
- Enable all features for egui_kittest docs #5711 by @YgorSouza
- Run a frame per queued event in egui_kittest #5704 by @lucasmerlin
- Add guidelines for image comparison tests #5714 by @Wumpf
epaint
0.31.0 - Scene container, improved rendering quality
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 ✨
Scene container
This release adds the Scene container to egui. It is a pannable, zoomable canvas that can contain Widgets and child Uis.
This will make it easier to e.g. implement a graph editor.
Clearer, pixel perfect rendering
The tessellator has been updated for improved rendering quality and better performance. It will produce fewer vertices
and shapes will have less overdraw. We've also defined what CornerRadius (previously Rounding) means.
We've also added a tessellator test to the demo app, where you can play around with different
values to see what's produced:
tessellator-test.mp4
Check the PR for more details.
CornerRadius, Margin, Shadow size reduction
In order to pave the path for more complex and customizable styling solutions, we've reduced the size of
CornerRadius, Margin and Shadow values to i8 and u8.
Migration guide
- Add a
StrokeKindto all yourPainter::rectcalls #5648 StrokeKind::defaultwas removed, since the 'normal' value depends on the context #5658- You probably want to use
StrokeKind::Insidewhen drawing rectangles - You probably want to use
StrokeKind::Middlewhen drawing open paths
- You probably want to use
- Rename
RoundingtoCornerRadius#5673 CornerRadius,MarginandShadowhave been updated to usei8andu8#5563, #5567, #5568- Remove the .0 from your values
- Cast dynamic values with
as i8/as u8oras _if you want Rust to infer the type- Rust will do a 'saturating' cast, so if your
f32value is bigger than127it will be clamped to127
- Rust will do a 'saturating' cast, so if your
RectShapeparameters changed #5565- Prefer to use the builder methods to create it instead of initializing it directly
Framenow takes theStrokewidth into account for its sizing, so check all views of your app to make sure they still look right.
Read the PR for more info.
⭐ Added
- Add
egui::Scenefor panning/zooming aUi#5505 by @grtlr - Animated WebP support #5470 by @Aely0
- Improve tessellation quality #5669 by @emilk
- Add
OutputCommandfor copying text and opening URL:s #5532 by @emilk - Add
Context::copy_image#5533 by @emilk - Add
WidgetType::ImageandImage::alt_text#5534 by @lucasmerlin - Add
epaint::Brushfor controllingRectShapetexturing #5565 by @emilk - Implement
nohash_hasher::IsEnabledforId#5628 by @emilk - Add keys for
!,{,}#5548 by @Its-Just-Nans - Add
RectShape::stroke_kindto control if stroke is inside/outside/centered #5647 by @emilk
🔧 Changed
⚠️ Framenow includes stroke width as part of padding #5575 by @emilk- Rename
RoundingtoCornerRadius#5673 by @emilk - Require a
StrokeKindwhen painting rectangles with strokes #5648 by @emilk - Round widget coordinates to even multiple of 1/32 #5517 by @emilk
- Make all lines and rectangles crisp #5518 by @emilk
- Tweak window resize handles #5524 by @emilk
🔥 Removed
🐛 Fixed
- Use correct minimum version of
profilingcrate #5494 by @lucasmerlin - Fix interactive widgets sometimes being incorrectly marked as hovered #5523 by @emilk
- Fix panic due to non-total ordering in
Area::compare_order()#5569 by @HactarCE - Fix hovering through custom menu button #5555 by @M4tthewDE
🚀 Performance
- Use
u8inCornerRadius, and introduceCornerRadiusF32#5563 by @emilk - Store
Marginusingi8to reduce its size #5567 by @emilk - Shrink size of
Shadowby usingi8/u8instead off32#5568 by @emilk - Avoid allocations for loader cache lookup #5584 by @mineichen
- Use bitfield instead of bools in
ResponseandSense#5556 by @polwel
0.30.0 - egui_kittest and modals
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_kittest
This release welcomes a new crate to the family: egui_kittest.
egui_kittest is a testing framework for egui, allowing you to test both automation (simulated clicks and other events),
and also do screenshot testing (useful for regression tests).
egui_kittest is built using kittest, which is a general GUI testing framework that aims to work with any Rust GUI (not just egui!).
kittest uses the accessibility library AccessKit for automatation and to query the widget tree.
kittest and egui_kittest are written by @lucasmerlin.
Here's a quick example of how to use egui_kittest to test a checkbox:
use egui::accesskit::Toggled;
use egui_kittest::{Harness, kittest::Queryable};
fn main() {
let mut checked = false;
let app = |ui: &mut egui::Ui| {
ui.checkbox(&mut checked, "Check me!");
};
let mut harness = egui_kittest::Harness::new_ui(app);
let checkbox = harness.get_by_label("Check me!");
assert_eq!(checkbox.toggled(), Some(Toggled::False));
checkbox.click();
harness.run();
let checkbox = harness.get_by_label("Check me!");
assert_eq!(checkbox.toggled(), Some(Toggled::True));
// You can even render the ui and do image snapshot tests
#[cfg(all(feature = "wgpu", feature = "snapshot"))]
harness.wgpu_snapshot("readme_example");
}egui changelog
✨ Highlights
- Add
Modal, a popup that blocks input to the rest of the application (#5358 by @lucasmerlin) - Improved support for transform layers (#5465, #5468, #5429)
⭐ Added
- Add
ModalandMemory::set_modal_layer#5358 by @lucasmerlin - Add
UiBuilder::layer_idand removelayer_idfromUi::new#5195 by @emilk - Allow easier setting of background color for
TextEdit#5203 by @bircni - Set
Response::intrinsic_sizeforTextEdit#5266 by @lucasmerlin - Expose center position in
MultiTouchInfo#5247 by @lucasmerlin Context::add_font#5228 by @frederik-uni- Impl from
Box<str>forWidgetText,RichText#5309 by @dimtpap - Add
Window::scroll_bar_visibility#5231 by @Zeenobit - Add
ComboBox::close_behavior#5305 by @avalsch - Add
painter.line()#5291 by @bircni - Allow attaching custom user data to a screenshot command #5416 by @emilk
- Add
Button::image_tint_follows_text_color#5430 by @emilk - Consume escape keystroke when bailing out from a drag operation #5433 by @abey79
- Add
Context::layer_transform_to_global&layer_transform_from_global#5465 by @emilk
🔧 Changed
- Update MSRV to Rust 1.80 #5421, #5457 by @emilk
- Expand max font atlas size from 8k to 16k #5257 by @rustbasic
- Put font data into
Arcto reduce memory consumption #5276 by @StarStarJ - Move
egui::util::cachetoegui::cache; addFramePublisher#5426 by @emilk - Remove
Order::PanelResizeLine#5455 by @emilk - Drag-and-drop: keep cursor set by user, if any #5467 by @abey79
- Use
profilingcrate to support more profiler backends #5150 by @teddemunnik - Improve hit-test of thin widgets, and widgets across layers #5468 by @emilk
🐛 Fixed
- Update
ScrollAreadrag velocity when drag stopped #5175 by @valadaptive - Fix bug causing wrong-fire of
ViewportCommand::Visible#5244 by @rustbasic - Fix:
Ui::new_childdoes not consider thesizing_passfield ofUiBuilder#5262 by @zhatuokun - Fix Ctrl+Shift+Z redo shortcut #5258 by @YgorSouza
- Fix:
Window::default_posdoes not work #5315 by @rustbasic - Fix:
Sidesdid not apply the layout position correctly #5303 by @zhatuokun - Respect
Style::override_font_idinRichText#5310 by @MStarha - Fix disabled widgets "eating" focus #5370 by @lucasmerlin
- Fix cursor clipping in
TextEditinside aScrollArea#3660 by @juancampa - Make text cursor always appear on click #5420 by @juancampa
- Fix
on_hover_text_at_pointerfor transformed layers #5429 by @emilk - Fix: don't interact with
Areaoutside itsconstrain_rect#5459 by @MScottMcBee - Fix broken images on egui.rs (move from git lfs to normal git) #5480 by @emilk
- Fix:
ui.new_childshould now respectdisabled#5483 by @emilk - Fix zero-width strokes still affecting the feathering color of boxes #5485 by @emilk
eframe changelog
BREAKING: you now need to enable the wayland and/or x11 features to get Linux support, including getting it to work on most CI systems.
⭐ Added
- Support
ViewportCommand::Screenshoton web #5438 by @lucasmerlin
🔧 Changed
- Android support #5318 by @parasyte
- Update MSRV to 1.80 #5457 by @emilk
- Use
profilingcrate to support more profiler backends #5150 by @teddemunnik - Update glow to 0.16 #5395 by @sagudev
- Forward
x11andwaylandfeatures toglutin#5391 by @e00E
🐛 Fixed
- iOS: Support putting UI next to the dynamic island #5211 by @frederik-uni
- Prevent panic when copying text outside of a secure context #5326 by @YgorSouza
- Fix accidental change of
FallbackEgltoPreferEgl#5408 by @e00E
0.29.1 - Bug fixes
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
- Remove debug-assert triggered by
with_layer_id/dnd_drag_source#5191 by @emilk - Fix id clash in
Ui::response#5192 by @emilk - Do not round panel rectangles to pixel grid #5196 by @emilk



