Changelog History
Page 2
-
v0.32.0 Changes
July 10, 2025๐ 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::Atomis 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
Atomis anenumthat can be eitherWidgetText,Image, orCustom.The new
AtomLayoutcan be used within widgets to do basic layout.
The initial implementation is as minimal as possible, doing just enough to implement whatButtoncould do before.
There is a newIntoAtomstrait that works with tuples ofAtoms. Each atom can be customized with theAtomExttrait
which works on everything that implementsInto<Atom>, so e.g.RichTextorImage.
So to create aButtonwith text and image you can now do:letimage =include\_image!("my\_icon.png").atom\_size(Vec2::splat(12.0));ui.button((image,"Click me!"));๐ Anywhere you see
impl IntoAtomsyou can add any number of images and text, in any order.As of 0.32, we have ported the
Button,Checkbox,RadioButtonto use atoms
๐ (meaning they support adding Atoms and are built on top ofAtomLayout).
TheButtonimplementation 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:pubstructALButton\<'a\>{al:AtomLayout\<'a\>,}impl\<'a\>ALButton\<'a\>{pubfnnew(content:implIntoAtoms\<'a\>)->Self{Self{al:AtomLayout::new(content.into\_atoms()).sense(Sense::click()),}}}impl\<'a\>WidgetforALButton\<'a\>{fnui(mutself,ui:&mutUi)->Response{letSelf{al}=self;letresponse = ui.ctx().read\_response(ui.next\_auto\_id());letvisuals = response.map\_or(&ui.style().visuals.widgets.inactive,|response|{ui.style().interact(&response)});letal = 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::customto add custom content to Widgets. Here is a button in a button:Screen.Recording.2025-07-10.at.13.10.52.mov
letcustom_button_id =Id::new("custom\_button");letresponse =Button::new((Atom::custom(custom_button_id,Vec2::splat(18.0)),"Look at my mini button!",)).atom\_ui(ui);ifletSome(rect)= response.rect(custom_button_id){ui.put(rect,Button::new("๐").frame\_when\_inactive(false));}Currently, you need to use
atom_uito get aAtomResponsewhich will have theRectto use, but in the future
this could be streamlined, e.g. by adding aAtomKind::Callbackor by passing the Rects back withegui::Response.Basing our widgets on
AtomLayoutalso allowed us to improveResponse::intrinsic_size, which will now report the
correct size even if widgets are truncated.intrinsic_sizeis 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::Popupapi. Checkout the new demo on https://egui.rs:Screen.Recording.2025-07-10.at.11.47.22.mov
0๏ธโฃ We introduced a new
RectAlignhelper to align a rect relative to an other rect. ThePopupwill by default try to find the bestRectAlignbased 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
๐
Tooltipandmenuhave been rewritten based on the newPopupapi. They are now compatible with each other, meaning you can just show aui.menu_button()in anyPopupto get a sub menu. There are now customizableMenuButtonandSubMenuButtonstructs, to help with customizing your menu buttons. This means menus now also supportPopupCloseBehaviorso you can remove yourclose_menucalls 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_buttonetc now open the new menu, if you can't update to the new one immediately you can use the old buttons from the deprecatedegui::menumenu.๐ป We also introduced
ui.close()which closes the nearest container. So you can now conveniently closeWindows,Collapsibles,Modals andPopups from within. To use this for your own containers, callUiBuilder::closableand then check for closing within that ui viaui.should_close().Details
- โ Add
PopupandTooltip, unifying the previous behaviours #5713 by @lucasmerlin - โ Add
Ui::closeandResponse::should_close#5729 by @lucasmerlin - โ โ ๏ธ Improved menu based on
egui::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 if
Memory::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 thesvgfeature enabled and a call toinstall_image_loaders).๐ป Previously this would sometimes result in a blurry SVG, epecially if the
Imagewas set to be dynamically scale based on the size of theUithat 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
0๏ธโฃ 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
-
v0.31.1 Changes
March 05, 2025๐ 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
- ๐ Fix sizing bug in
-
v0.31.0 Changes
February 04, 2025๐ 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
Scenecontainer to egui. It is a pannable, zoomable canvas that can containWidgets and childUis.
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 whatCornerRadius(previouslyRounding) 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,Shadowsize reductionIn order to pave the path for more complex and customizable styling solutions, we've reduced the size of
CornerRadius,MarginandShadowvalues toi8andu8.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
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
- โ Remove
egui::special_emojis::TWITTER#5622 by @emilk - โ Remove
StrokeKind::default#5658 by @emilk
๐ ๐ 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
- โ Add a
-
v0.30.0 Changes
December 16, 2024๐ 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_kittestis 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_kittestis built usingkittest, which is a general GUI testing framework that aims to work with any Rust GUI (not just egui!).
โkittestuses the accessibility libraryAccessKitfor automatation and to query the widget tree.โ
kittestandegui_kittestare written by @lucasmerlin.โ Here's a quick example of how to use
egui_kittestto test a checkbox:useegui::accesskit::Toggled;useegui_kittest::{Harness,kittest::Queryable};fnmain(){letmutchecked =false;letapp = |ui:&mutegui::Ui|{ui.checkbox(&mutchecked,"Check me!");};letmutharness = egui_kittest::Harness::new\_ui(app);letcheckbox = harness.get\_by\_label("Check me!");assert\_eq!(checkbox.toggled(),Some(Toggled::False));checkbox.click();harness.run();letcheckbox = 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
waylandand/orx11features 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
- โ Add
-
v0.19.0 Changes
August 20, 2022โ Added โญ
- ๐ Added
*_released&*_clickedmethods forPointerState(#1582). - โ Added
PointerButton::Extra1andPointerButton::Extra2(#1592). - โ Added
egui::hex_color!to createColor32's from hex strings under thecolor-hexfeature (#1596). - โก๏ธ Optimized painting of filled circles (e.g. for scatter plots) by 10x or more (#1616).
- โ Added opt-in feature
deadlock_detectionto detect double-lock of mutexes on the same thread (#1619). - โ Added
InputState::stable_dt: a more stable estimate for the delta-time in reactive mode (#1625). - You can now specify a texture filter for your textures (#1636).
- โ Added functions keys in
egui::Key(#1665). - โ Added support for using
PaintCallbackshapes with the WGPU backend (#1684). - Added
Contex::request_repaint_after(#1694). ctrl-hnow acts like backspace inTextEdit(#1812).- โ Added
custom_formattermethod forSliderandDragValue(#1851). - โ Added
RawInput::has_focuswhich backends can set to indicate whether the UI as a whole has the keyboard focus (#1859). - Added
PointerState::button_double_clicked()andPointerState::button_triple_clicked()(#1906). - โ Added
custom_formatter,binary,octal, andhexadecimaltoDragValueandSlider(#1953)
๐ Changed ๐ง
- ๐ MSRV (Minimum Supported Rust Version) is now
1.61.0(#1846). PaintCallbackshapes now require the whole callback to be put in anArc<dyn Any>with the value being a backend-specific callback type (#1684).- Replaced
needs_repaintinFullOutputwithrepaint_after. Used to force repaint after the set duration in reactive mode (#1694). Layout::left_to_rightandLayout::right_to_leftnow takes the vertical align as an argument. Previous default wasAlign::Center.- ๐ Improved ergonomics of adding plot items. All plot items that take a series of 2D coordinates can now be created directly from
Vec<[f64; 2]>. TheValueandValuestypes were removed in favor ofPlotPointandPlotPointsrespectively (#1816). TextBufferno longer needs to implementAsRef<str>(#1824).
๐ Fixed ๐
- ๐ Fixed
Response::changedforui.toggle_value(#1573). - ๐ Fixed
ImageButton's changing background padding on hover (#1595). - ๐ Fixed
Plotauto-bounds bug (#1599). - ๐ Fixed dead-lock when alt-tabbing while also showing a tooltip (#1618).
- ๐ Fixed
ScrollAreascrolling when editing an unrelatedTextEdit(#1779). - ๐ Fixed
Slidernot always generating events on change (#1854). - ๐ Fixed jitter of anchored windows for the first frame (#1856).
- ๐ Fixed focus behavior when pressing Tab in a UI with no focused widget (#1861).
- ๐ Fixed automatic plot bounds (#1865).
- ๐ Added
-
v0.18.1 Changes
May 01, 2022- ๐ Change
Shape::Callbackfrom&dyn Anyto&mut dyn Anyto support more backends.
- ๐ Change
-
v0.18.0 Changes
April 30, 2022โ Added โญ
- Added
Shape::Callbackfor backend-specific painting, with an example (#1351). - โ Added
Frame::canvas(#1362). - ๐ป
Context::request_repaintwill now wake up UI thread, if integrations has calledContext::set_request_repaint_callback(#1366). - Added
Plot::allow_scroll,Plot::allow_zoomno longer affects scrolling (#1382). - โ Added
Ui::push_idto resolve id clashes (#1374). - โ Added
ComboBox::icon(#1405). - Added
Ui::scroll_with_delta. - โ Added
Frame::outer_margin. - โ Added
Painter::hlineandPainter::vline. - โ Added
Linkandui.link(#1506). - โ Added triple-click support; triple-clicking a TextEdit field will select the whole paragraph (#1512).
- Added
Plot::x_grid_spacerandPlot::y_grid_spacerfor custom grid spacing (#1180). - โ Added
Ui::spinner()shortcut method (#1494). - โ Added
CursorIcons for resizing columns, rows, and the eight cardinal directions. - โ Added
Ui::toggle_value. - โ Added ability to add any widgets to the header of a collapsing region (#1538).
๐ Changed ๐ง
- ๐ MSRV (Minimum Supported Rust Version) is now
1.60.0(#1467). ClippedMeshhas been replaced withClippedPrimitive(#1351).- ๐ Renamed
Frame::margintoFrame::inner_margin. - ๐ Renamed
AlphaImagetoFontImageto discourage any other use for it (#1412). - โ Warnings will be painted on screen when there is an
Idclash forGrid,PlotorScrollArea(#1452). CheckboxandRadioButtonwith an empty label ("") will now take up much less space (#1456).- Replaced
Memory::top_most_layerwith more flexibleMemory::layer_ids. - ๐ Renamed the feature
convert_bytemucktobytemuck(#1467). - ๐ Renamed the feature
serializetoserde(#1467). - Renamed
Painter::sub_regiontoPainter::with_clip_rect.
๐ Fixed ๐
- ๐ Fixed
ComboBoxes always being rendered left-aligned (#1304). - ๐ Fixed ui code that could lead to a deadlock (#1380).
- Text is darker and more readable in bright mode (#1412).
- ๐ Fixed a lot of broken/missing doclinks (#1419).
- ๐ Fixed
Ui::add_visiblesometimes leaving theUiin a disabled state (#1436). - โ Added line breaking rules for Japanese text (#1498).
๐ Deprecated โข๏ธ
- ๐ Deprecated
CollapsingHeader::selectable(#1538).
โ Removed ๐ฅ
- Removed the
single_threaded/multi_threadedflags - egui is now always thread-safe (#1390).
Contributors ๐
- Added
-
v0.17.0 Changes
February 22, 2022โ Added โญ
- Much improved font selection (#1154):
- You can now select any font size and family using
RichText::sizeamdRichText::familyand the newFontId. - Easily change text styles with
Style::text_styles. - Added
Ui::text_style_height. - Added
TextStyle::resolve. - Made the v-align and scale of user fonts tweakable (#1241).
- You can now select any font size and family using
- Plot:
- Added
Plot::x_axis_formatterandPlot::y_axis_formatterfor custom axis labels (#1130). - Added
Plot::allow_boxed_zoom(),Plot::boxed_zoom_pointer()for boxed zooming on plots (#1188). - Added plot pointer coordinates with
Plot::coordinates_formatter. (#1235). - Added linked axis support for plots via
plot::LinkedAxisGroup(#1184).
- Added
- ๐ป
Context::load_textureto convert an image into a texture which can be displayed using e.g.ui.image(texture, size)(#1110). - ๐
Ui::input_mutto modify how subsequent widgets see theInputStateand a convenience methodInputState::consume_keyfor shortcuts or hotkeys (#1212). - ๐ป Added
Ui::add_visibleandUi::add_visible_ui. - โ Added
CollapsingHeader::iconto override the default open/close icon using a custom function. (1147). - โ Added
ui.data(),ctx.data(),ctx.options()andctx.tessellation_options()(#1175). - Added
Response::on_hover_text_at_pointeras a convenience akin toResponse::on_hover_text(1179). - โ Opt-in dependency on
tracingcrate for logging warnings (#1192). - โ Added
ui.weak(text). - โ Added
Slider::step_by(1225). - Added
Context::move_to_topandContext::top_most_layerfor managing the layer on the top (#1242). - ๐ Support a subset of macOS' emacs input field keybindings in
TextEdit(#1243). - โ Added ability to scroll an UI into view without specifying an alignment (1247).
- Added
Ui::scroll_to_rect(1252).
๐ Changed ๐ง
- ๐ โ ๏ธ
Context::inputandUi::inputnow locks a mutex. This can lead to a dead-lock is used in anif letbinding!if let Some(pos) = ui.input().pointer.latest_pos()and similar must now be rewritten on two lines.- Search for this problem in your code using the regex
if let .*input.
- ๐ Better contrast in the default light mode style (#1238).
- ๐ Renamed
CtxReftoContext(#1050). - ๐ฏ
Contextcan now be cloned and stored between frames (#1050). - ๐ป Renamed
Ui::visibletoUi::is_visible. - Split
Event::TextintoEvent::TextandEvent::Paste(#1058). - Replaced
Style::body_text_stylewith more genericStyle::text_styles(#1154). - ๐
TextStyleis no longerCopy(#1154). - ๐
Replaced
TextEdit::text_stylewithTextEdit::font(#1154). Plot::highlightnow takes aboolargument (#1159).ScrollArea::shownow returns aScrollAreaOutput, so you might need to add.innerafter the call to it (#1166).- Replaced
corner_radius: f32withrounding: Rounding, allowing per-corner rounding settings (#1206). - Replaced Frame's
margin: Vec2withmargin: Margin, allowing for different margins on opposing sides (#1219). - Renamed
Plot::custom_label_functoPlot::label_formatter(#1235). Areas::layer_id_atignores non-interatable layers (i.e. Tooltips) (#1240).ScrollArea:s will not shrink below a certain minimum size, set bymin_scrolled_width/min_scrolled_height(1255).- For integrations:
Outputhas now been renamedPlatformOutputandContext::runnow returns the newFullOutput(#1292).FontImagehas been replaced byTexturesDelta(found inFullOutput), describing what textures were loaded and freed each frame (#1110).- The painter must support partial texture updates (#1149).
- Added
RawInput::max_texture_sidewhich should be filled in with e.g.GL_MAX_TEXTURE_SIZE(#1154).
๐ Fixed ๐
- Plot
Orientationwas not public, although fields using this type were (#1130). - Context menus now respects the theme (#1043).
- Calling
Context::set_pixels_per_pointbefore the first frame will now work. - Tooltips that don't fit the window don't flicker anymore (#1240).
- Scroll areas now follow text cursor (#1252).
- Slider: correctly respond with drag and focus events when interacting with the value directly (1270).
Contributors ๐
- Much improved font selection (#1154):
-
v0.16.1 Changes
December 31, 2021โ Added โญ
- Added back
CtxRef::begin_frame,end_frameas an alternative toCtxRef::run.
- Added back
-
v0.16.0 Changes
December 29, 2021โ Added โญ
- Added context menus: See
Ui::menu_buttonandResponse::context_menu(#543). - ๐ Most widgets containing text (
Label,Buttonetc) now supports rich text (#855). - Plots:
- You can now read and write the cursor of a
TextEdit(#848). - When using a custom font you can now specify a font index (#873).
- โ Added vertical sliders with
Slider::new(โฆ).vertical()(#875). - Added
Button::image_and_text(#832). - โ Added
CollapsingHeader::opento control if it is open or collapsed (#1006). - Added
egui::widgets::color_picker::color_picker_color32to show the color picker.
๐ Changed ๐ง
- ๐ MSRV (Minimum Supported Rust Version) is now
1.56.0. - ๐ป
ui.add(Button::new("โฆ").text_color(โฆ))is nowui.button(RichText::new("โฆ").color(โฆ))(same forLabel)(#855). - Plots now provide a
showmethod that has to be used to add items to and show the plot (#766). - ๐ป
menu::menu(ui, ...)is nowui.menu_button(...)(#543) - Replaced
CtxRef::begin_frameandend_framewithCtxRef::run(#872). - Replaced
scroll_deltaandzoom_deltainRawInputwithEvent::ScrollandEvent::Zoom. - Unified the four
Memorydata buckets (data,data_temp,id_dataandid_data_temp) into a singleMemory::data, with a new interface (#836). - โ
Replaced
Ui::__testwithegui::__run_test_ui(#872).
๐ Fixed ๐
- ๐ Fixed
ComboBoxand other popups getting clipped to parent window (#885). - ๐ The color picker is now better at keeping the same hue even when saturation goes to zero (#886).
โ Removed ๐ฅ
- โ Removed
egui::math(useegui::emathinstead). - โ Removed
egui::paint(useegui::epaintinstead).
Contributors ๐
- Added context menus: See


