eframe
egui framework - write GUI apps that compiles to web and/or natively
0.36.1
17M downloads/mo
#2297 most downloaded on crates.io
emilk/egui
What this package is like to depend on
Last release 16 days ago
07 Aug 2026
Release timing varies
gaps range from 3 weeks to 4 months
Nearly every release is documented
notes for 52 of 52 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
54 releases · first in 2021
12 releases in the last 12 months
see the full history below
Release timeline
54 releases · Jan 2021 to Aug 2026Releases
latest 54-
0.36.107 Aug 2026Release notes
Open source →
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.
- Fix
Sense::dragdetecting drags when clicking widget above it #8396 by @lucasmerlin
Release notes
Open source →- Fix
Sense::dragdetecting drags when clicking widget above it #8396 by @lucasmerlin
- Fix
-
0.36.005 Aug 2026Release notes
Open source →
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 ✨
Improved mobile keyboard support
Autocomplete, autocorrect and IMEs now work correctly on iOS and android (on eframe web)!
ScreenRecording_08-05-2026.11-48-49_1.MP4- via #8045 by @umajho (and @rustbasic who helped a lot with testing)
Drag to reopen panels
You can now reopen closed panels by dragging the handle:
Screen.Recording.2026-08-05.at.11.45.10.movWindow decoration theme is now synced with app theme
Previously, when switching themes, the window chrome (OS titlebar), stayed in the OS theme. Now, it syncs with the app theme:
Screen.Recording.2026-08-05.at.11.45.47.mov⭐ Added
- Add
BoxedWidget: dynamically dispatched widgets #8378 by @emilk - Add
WidgetText::size#8377 by @emilk - Add
LayoutJob::clear#8376 by @emilk - Sync window theme with egui theme #8299 by @lucasmerlin
- Add
egui::Window::title_frame#8353 by @Its-Just-Nans - Add
extra_text_line_spacingto control vertical spacing between text lines #8040 by @rustbasic - Add drag-to-open for collapsible panels #8363 by @emilk
🔧 Changed
- Rerun
sizing_passwhen reopening popup #8315 by @yay - Update MSRV from 1.92 to 1.95 #8348 by @emilk
- Treat a press that leaves a widget as a drag #8365 by @emilk
🔥 Removed
- Remove
ModifiersfromRawInputand make it aegui::Event#8336 by @lucasmerlin - Remove
clip_rect_margin#8366 by @emilk
🐛 Fixed
- Improve backtrace trimming for cranelift #8294 by @emilk
- Prevent accidentally dropping
TexturesDelta#8356 by @lucasmerlin - Make non-interactive tooltips not interactable #8362 by @lucasmerlin
- Panels: Take separator line width into account #8367 by @emilk
- Fix TextEdit hint text not following horizontal_align/vertical_align #8332 by @thedavidweng
- Fix ScrollArea failure by handling horizontal and vertical scrolling separately in the missing place #8275 by @rustbasic
- Fix window with a
Gridbeing widenable but not shrinkable again #8386 by @emilk
Release notes
Open source →Highlights ✨
This release drastically improves the mobile keyboard experience (when using eframe web). It also adds drag-to-open panels, window chrome theme sync and a lot of small bug fixes and improvements!
Improved mobile keyboard support
Autocomplete, autocorrect and IMEs now work correctly on iOS and android (on eframe web)!
https://github.com/user-attachments/assets/b0aa1084-0755-4e47-a0b3-0ce6890aca85
- via #8045 by @umajho (and @rustbasic who helped a lot with testing)
Drag to reopen panels
You can now reopen closed panels by dragging the handle:
https://github.com/user-attachments/assets/e02895c4-248e-4e22-9694-bdfcd9839bfd
Window decoration theme is now synced with app theme
Previously, when switching themes, the window chrome (OS titlebar) stayed in the OS theme. Now, it syncs with the app theme:
https://github.com/user-attachments/assets/6b393057-fdfc-431b-b997-744bc183a8ac
⭐ Added
- Add
BoxedWidget: dynamically dispatched widgets #8378 by @emilk - Add
WidgetText::size#8377 by @emilk - Add
LayoutJob::clear#8376 by @emilk - Sync window theme with egui theme #8299 by @lucasmerlin
- Add
egui::Window::title_frame#8353 by @Its-Just-Nans - Add
extra_text_line_spacingto control vertical spacing between text lines #8040 by @rustbasic - Add drag-to-open for collapsible panels #8363 by @emilk
🔧 Changed
- Rerun
sizing_passwhen reopening popup #8315 by @yay - Update MSRV from 1.92 to 1.95 #8348 by @emilk
- Treat a press that leaves a widget as a drag #8365 by @emilk
🔥 Removed
- Remove
ModifiersfromRawInputand make it aegui::Event#8336 by @lucasmerlin - Remove
clip_rect_margin#8366 by @emilk
🐛 Fixed
- Improve backtrace trimming for cranelift #8294 by @emilk
- Prevent accidentally dropping
TexturesDelta#8356 by @lucasmerlin - Make non-interactive tooltips not interactable #8362 by @lucasmerlin
- Panels: Take separator line width into account #8367 by @emilk
- Fix TextEdit hint text not following horizontal_align/vertical_align #8332 by @thedavidweng
- Fix ScrollArea failure by handling horizontal and vertical scrolling separately in the missing place #8275 by @rustbasic
- Fix window with a
Gridbeing widenable but not shrinkable again #8386 by @emilk
Release notes
Open source →🔧 Changed
- Improve robustness of text input handling for
eframe/web#8045 by @umajho - Eframe: make webbrowser dependency optional #8372 by @wyvernbw
- Store
web_sys::Fileinside ofDroppedFile#8354 by @grtlr
🐛 Fixed
- Web: don't scroll host page when text agent or canvas grabs focus #8296 by @emilk
- Fix missing modifier events on eframe web, handle physical keys #8345 by @lucasmerlin
- Web: Avoid panic from lost texture updates when loaded on a background tab #8313 by @kevinmehall
- Web: anchor the text agent to the canvas #8297 by @emilk
- Never run an egui pass when nothing will be shown #8387 by @emilk
-
0.35.025 Jun 2026Release notes
Open source →
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 newInspectionPluginin theegui_inspectioncrate.
Eframe includes a newinspectionfeature. 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 viacargo install --git https://github.com/rerun-io/kittest_inspector egui_mcpand then add it to your
agent viaclaude 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
Release notes
Open source →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
InspectionPluginin theegui_inspectioncrate. Eframe includes a newinspectionfeature. When enabled, you can enable inspection by launching the app withEGUI_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_mcpand then add it to your agent viaclaude 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):
https://github.com/user-attachments/assets/c3dd0456-acfc-428c-8efe-f4a244c9e3ba
- 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:
https://github.com/user-attachments/assets/487c7e7c-ef6d-4a86-8dbc-8c71871b4470
⭐ 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
Release notes
Open source →⭐ Added
- Add Context::set_cursor_image for OS-level custom cursors #8155 by @all3f0r1
- Feat: add
remove_string()to storage trait #8264 by @mikesk8r
🔧 Changed
- Delegate handling of IME interruptions to integrations to fix virtual keyboard flickering on web #8078 by @umajho
- Wgpu: Allow configuring VSync and frame latency at runtime #8114 by @emilk
- Group
glowconfig in astruct#8108 by @TapGhoul - Choose restored window monitor by overlap #8191 by @YelovSK
- Configure wgpu to be low-latency by default #8203 by @lucasmerlin
🔥 Removed
🐛 Fixed
- Prevent entire page from scrolling out of view in Chrome (WASM) #7888 by @rustbasic
- Fix crash when parent viewport is hidden #8226 by @kpouer
- Fix "drunk text" bug #8250 by @emilk
- Call
logiceven while browser tab is in background #8257 by @lucasmerlin - Fix macOS wgpu live resize with low-latency surfaces #8229 by @yay
-
0.34.327 May 2026Release notes
Open source →
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.
⭐ Added
🐛 Fixed
- Fix random hangs by improving
wgpu::Surfacelifecycle handling #8171 by @grtlr - Fix
ScrollArea::scroll_to_*calls whenstick_to_bottomis Active #8033 by @AmmarAbouZor
🔧 Changed
Release notes
Open source →- Fix
ScrollArea::scroll_to_*calls whenstick_to_bottomis Active #8033 by @AmmarAbouZor
- Fix random hangs by improving
-
0.34.204 May 2026Release notes
Open source →
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.
⭐ Added
🐛 Fixed
- Fix wrong color of last glyph of selected text #8075 by @emilk
- Fix text selection of centered and right-aligned text #8076 by @emilk
- Fix
Context::is_pointer_over_eguiandContext::egui_wants_pointer_input#8081 by @emilk - Fix centered & right aligned
TextEdit#8082 by @lucasmerlin
🚀 Performance
- Optimize text selection performance for large documents #7917 by @rustbasic
Release notes
Open source →⭐ Added
🐛 Fixed
- Fix wrong color of last glyph of selected text #8075 by @emilk
- Fix text selection of centered and right-aligned text #8076 by @emilk
- Fix
Context::is_pointer_over_eguiandContext::egui_wants_pointer_input#8081 by @emilk - Fix centered & right aligned
TextEdit#8082 by @lucasmerlin
🚀 Performance
- Optimize text selection performance for large documents #7917 by @rustbasic
-
0.34.127 Mar 2026Release notes
Open source →
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.
eframe 0.34.1 changelog
-
0.34.026 Mar 2026Release notes
Open source →
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.34.0 changelog
Highlights from this release
- Sharper text unlocked by switching font rendering crate to
skrifa - Fade out edges of
ScrollAreas - Use
Uias the main entrypoint
Skrifa and font hinting
The font rendering backend was switched from
ab_glyphtoskrifa+vello_cpu. This enabled us support
font hinting and variations. It also paves the way for more font improvements in the future, like support for color
emojis and adding helpers for variations likeRichText::bold.Font hinting makes text more clear (look at the =):
Screen.Recording.2026-03-26.at.10.49.43.movWe now support setting variable font parameters:
Screen.Recording.2026-03-26.at.11.37.21.mp4(Unfortunately there is currently a bug with variations, meaning changing them live like this won't work in practise.
There is a draft PR to fix it, but it didn't make the release)- Replace ab_glyph with Skrifa + vello_cpu; enable font hinting #7694 by @valadaptive
- Add font variations API #7859 by @valadaptive
More
Ui, lessContextegui has long had a confusing overlap in responsibilities between
ContextandUi.
In particular, you could add panels to either one (or both!).
In this release, we switch from havingContextbe the main entrypoint, and instead provide whole-appUi.
In egui we've replacedContext::runwithContext::run_ui, and changed viewports to be given a&mut Uiinstead ofContext.
Ineframewe've deprecatedApp::updatereplaced it withApp::ui(which provides a&mut Uiinstead of a&Context).In addition to this,
Uinow derefs toContext, so all code likeui.ctx().input(…)can now be writtenui.input(…).
This means you are much less likely to have to use nakedContexts.
Contextcan still be useful though, since they implementCloneand can be sent to other threads so you can call.request_repainton them.- Add
Context::run_ui#7736 by @emilk - Add
Deref<Target = Context>forUi#7770 by @emilk - Replace
App::updatewithfn logicandfn ui#7775 by @emilk - Rename
Context::styletoglobal_style; avoid confusion w/Ui::style#7772 by @emilk - Rename functions in
Contextto avoid confusion #7773 by @emilk - Viewports: give the caller a
Uiinstead ofContext#7779 by @emilk
Changed panel API
As part of the above work, we have unified the panel API.
SidePanelandTopBottomPanelare deprecated, replaced by a singlePanel.
Furthermore, it is now deprecated to use panels directly onContext. Use theshow_insidefunctions instead, acting onUis.This unification and simplification will make it easier to maintain and improve panels going forward.
- Add
Panelto replaceSidePanelandTopBottomPanel#5659 by @sharky98 - Deprecate using
Paneldirectly on aContext#7781 by @emilk - Deprecate
CentralPanel::show#7783 by @emilk - Deprecate
Context::used_sizeandContext::available_rect#7788 by @emilk
⭐ Added
- Add
is_scrolling/is_smooth_scrollingutil, checking for active scroll action #7669 by @IsseW - Allow multiple atoms in
Button::shortcut_textandright_text#7696 by @emilk - Add
ScrollArea::content_margin#7722 by @emilk - Per-widget style #7667 by @AdrienZianne
- Plugin: export
TypedPluginGuardandTypedPluginHandle#7780 by @apekros - Add
ViewportInfo::occludedandvisible#7948 by @emilk - Add
Atomprefix/suffix support toDragValue#7949 by @lucasmerlin - ⚠️ Atom improvements:
Atom::id,align,closure,max_size#7958 by @lucasmerlin - Add
DebugOptions::warn_if_rect_changes_id#7984 by @emilk TextEditAtomprefix/suffix #7587 by @lucasmerlin- Add
Button::left_text#7955 by @rustbasic - Add
Response::parent_id#8010 by @lucasmerlin - Add
Context::text_edit_focused#8014 by @emilk - Add
Context::time#8017 by @emilk - Add
Ui::is_tooltip#8016 by @emilk - Add
UiStack::bg_color#8020 by @emilk - Make
egui::IdSetpublic #8019 by @lucasmerlin - Add raw key methods to TypeIdMap #8007 by @AlexanderSchuetz97
🔧 Changed
- Remove
accesskitfeature and always depend onaccesskit#7701 by @emilk - Update MSRV from 1.88 to 1.92 #7793 by @JasperBRiedel
- Improve modifier handling when scrolling #7678 by @emilk
- Apply preferred font weight when loading variable fonts #7790 by @pmnxis
- Make scroll bars and resize splitters visible to accesskit #7804 by @emilk
- Allow moving existing widgets to the top of interaction stack #7805 by @emilk
- Slightly change interact behavior around thin splitters #7806 by @emilk
- Move window resize interaction to be over contents #7807 by @emilk
- Don't expand widgets on hover #7808 by @emilk
- Make
FrameCache::getreturn a reference instead of cloning the cached value #7834 by @KonaeAkira - Update selected dependencies #7920 by @oscargus
- Make
Galley::pos_from_layout_cursorpub#7864 by @dionb - Update accesskit to 0.24.0 (and related deps) #7850 by @delan
- Quit on Ctrl-Q #7985 by @emilk
- Fade out the edges of
ScrollAreas#8018 by @emilk
🔥 Removed
🐛 Fixed
- Fix: ensure
CentralPanel::show_insideallocates space in parent #7778 by @emilk - Heed constrain rect when auto-positioning windows #7786 by @emilk
- Fix jitter when hovering edge of scroll area close to resize splitter #7803 by @emilk
- Don't focus Areas, Windows and ScrollAreas #7827 by @lucasmerlin
- Fix backspacing leaving last character in IME prediction not removed on macOS native and Safari #7810 by @umajho
- Implemented distance threshold for double/triple clicks #7817 by @bl4ze4447
- Fix
CentralPanel::show_inside_dynto roundpanel_rect#7868 by @ripopov - Stop ctrl+arrow etc from moving focus #7897 by @emilk
- Fix scroll area not consuming scroll events #7904 by @lucasmerlin
- Pass in an explicit id in
UiBuilder, to avoid wrapping passed in ids with Id::new() #7925 by @lucasmerlin - Fix crash when dragging a DragValue through small floats #7939 by @Fyrecean
- Fix emoji icon font #7940 by @Jhynjhiruu
- Fixes the overly aggressive overflow elision in
truncate()and similar for os scaling other than 100% #7867 by @RndUsr123 - Fix text color when selecting newline character #7951 by @emilk
- Fix: repaint on drag-and-drop files #7953 by @emilk
- Fix instable IDs following animated panels #7994 by @emilk
- Enables every combination of
TextEditandLayoutJobalignments #7831 by @RndUsr123 - Fix
horizontal_wrappingrow height after usingtext_edit_multiline#8000 by @optozorax - Fix menu keyboard toggle for open submenus #7957 by @fjkorf
- Fix:
Visuals::interact_cursorsupport inButton#7986 by @mango766
🚀 Performance
Release notes
Open source →Highlights from this release
- Sharper text unlocked by switching font rendering crate to
skrifa - Fade out edges of
ScrollAreas - Use
Uias the main entrypoint
Skrifa and font hinting
The font rendering backend was switched from
ab_glyphtoskrifa+vello_cpu. This enabled us support font hinting and variations. It also paves the way for more font improvements in the future, like support for color emojis and adding helpers for variations likeRichText::bold.Font hinting makes text more clear (look at the =):
https://github.com/user-attachments/assets/ea9151ec-869f-4c05-ab59-836114683417
We now support setting variable font parameters:
https://github.com/user-attachments/assets/0febde1c-ebf6-4d85-8f96-86ec0f934ecf
(Unfortunately there is currently a bug with variations, meaning changing them live like this won't work in practise. There is a draft PR to fix it, but it didn't make the release)
- Replace ab_glyph with Skrifa + vello_cpu; enable font hinting #7694 by @valadaptive
- Add font variations API #7859 by @valadaptive
More
Ui, lessContextegui has long had a confusing overlap in responsibilities between
ContextandUi. In particular, you could add panels to either one (or both!). In this release, we switch from havingContextbe the main entrypoint, and instead provide whole-appUi. In egui we've replacedContext::runwithContext::run_ui, and changed viewports to be given a&mut Uiinstead ofContext. Ineframewe've deprecatedApp::updatereplaced it withApp::ui(which provides a&mut Uiinstead of a&Context).In addition to this,
Uinow derefs toContext, so all code likeui.ctx().input(…)can now be writtenui.input(…). This means you are much less likely to have to use nakedContexts.Contextcan still be useful though, since they implementCloneand can be sent to other threads so you can call.request_repainton them.- Add
Context::run_ui#7736 by @emilk - Add
Deref<Target = Context>forUi#7770 by @emilk - Replace
App::updatewithfn logicandfn ui#7775 by @emilk - Rename
Context::styletoglobal_style; avoid confusion w/Ui::style#7772 by @emilk - Rename functions in
Contextto avoid confusion #7773 by @emilk - Viewports: give the caller a
Uiinstead ofContext#7779 by @emilk
Changed panel API
As part of the above work, we have unified the panel API.
SidePanelandTopBottomPanelare deprecated, replaced by a singlePanel. Furthermore, it is now deprecated to use panels directly onContext. Use theshow_insidefunctions instead, acting onUis.This unification and simplification will make it easier to maintain and improve panels going forward.
- Add
Panelto replaceSidePanelandTopBottomPanel#5659 by @sharky98 - Deprecate using
Paneldirectly on aContext#7781 by @emilk - Deprecate
CentralPanel::show#7783 by @emilk - Deprecate
Context::used_sizeandContext::available_rect#7788 by @emilk
⭐ Added
- Add
is_scrolling/is_smooth_scrollingutil, checking for active scroll action #7669 by @IsseW - Allow multiple atoms in
Button::shortcut_textandright_text#7696 by @emilk - Add
ScrollArea::content_margin#7722 by @emilk - Per-widget style #7667 by @AdrienZianne
- Plugin: export
TypedPluginGuardandTypedPluginHandle#7780 by @apekros - Add
ViewportInfo::occludedandvisible#7948 by @emilk - Add
Atomprefix/suffix support toDragValue#7949 by @lucasmerlin - ⚠️ Atom improvements:
Atom::id,align,closure,max_size#7958 by @lucasmerlin - Add
DebugOptions::warn_if_rect_changes_id#7984 by @emilk TextEditAtomprefix/suffix #7587 by @lucasmerlin- Add
Button::left_text#7955 by @rustbasic - Add
Response::parent_id#8010 by @lucasmerlin - Add
Context::text_edit_focused#8014 by @emilk - Add
Context::time#8017 by @emilk - Add
Ui::is_tooltip#8016 by @emilk - Add
UiStack::bg_color#8020 by @emilk - Make
egui::IdSetpublic #8019 by @lucasmerlin - Add raw key methods to TypeIdMap #8007 by @AlexanderSchuetz97
🔧 Changed
- Remove
accesskitfeature and always depend onaccesskit#7701 by @emilk - Update MSRV from 1.88 to 1.92 #7793 by @JasperBRiedel
- Improve modifier handling when scrolling #7678 by @emilk
- Apply preferred font weight when loading variable fonts #7790 by @pmnxis
- Make scroll bars and resize splitters visible to accesskit #7804 by @emilk
- Allow moving existing widgets to the top of interaction stack #7805 by @emilk
- Slightly change interact behavior around thin splitters #7806 by @emilk
- Move window resize interaction to be over contents #7807 by @emilk
- Don't expand widgets on hover #7808 by @emilk
- Make
FrameCache::getreturn a reference instead of cloning the cached value #7834 by @KonaeAkira - Update selected dependencies #7920 by @oscargus
- Make
Galley::pos_from_layout_cursorpub#7864 by @dionb - Update accesskit to 0.24.0 (and related deps) #7850 by @delan
- Quit on Ctrl-Q #7985 by @emilk
- Fade out the edges of
ScrollAreas#8018 by @emilk
🔥 Removed
🐛 Fixed
- Fix: ensure
CentralPanel::show_insideallocates space in parent #7778 by @emilk - Heed constrain rect when auto-positioning windows #7786 by @emilk
- Fix jitter when hovering edge of scroll area close to resize splitter #7803 by @emilk
- Don't focus Areas, Windows and ScrollAreas #7827 by @lucasmerlin
- Fix backspacing leaving last character in IME prediction not removed on macOS native and Safari #7810 by @umajho
- Implemented distance threshold for double/triple clicks #7817 by @bl4ze4447
- Fix
CentralPanel::show_inside_dynto roundpanel_rect#7868 by @ripopov - Stop ctrl+arrow etc from moving focus #7897 by @emilk
- Fix scroll area not consuming scroll events #7904 by @lucasmerlin
- Pass in an explicit id in
UiBuilder, to avoid wrapping passed in ids with Id::new() #7925 by @lucasmerlin - Fix crash when dragging a DragValue through small floats #7939 by @Fyrecean
- Fix emoji icon font #7940 by @Jhynjhiruu
- Fixes the overly aggressive overflow elision in
truncate()and similar for os scaling other than 100% #7867 by @RndUsr123 - Fix text color when selecting newline character #7951 by @emilk
- Fix: repaint on drag-and-drop files #7953 by @emilk
- Fix instable IDs following animated panels #7994 by @emilk
- Enables every combination of
TextEditandLayoutJobalignments #7831 by @RndUsr123 - Fix
horizontal_wrappingrow height after usingtext_edit_multiline#8000 by @optozorax - Fix menu keyboard toggle for open submenus #7957 by @fjkorf
- Fix:
Visuals::interact_cursorsupport inButton#7986 by @mango766
🚀 Performance
Release notes
Open source →⭐ Added
- Add feature
wgpu_no_default_features#7700 by @emilk - Add
ViewportInfo::occludedandvisible#7948 by @emilk - Add
eframe::WindowChromeMetrics(macOS only) #8015 by @emilk
🔧 Changed
- Replace
App::updatewithfn logicandfn ui#7775 by @emilk - Make
wgputhe default renderer foreframeand egui.rs #7615 by @emilk - Roll out new egui icon and logo #7995 by @emilk
- Update wasm-bindgen to 0.2.108, and ehttp to 0.7.1 #7996 by @emilk
- Update to
wgpu29 #7990 by @cwfitzgerald - Allow fallback from smithay to arboard when getting clipboard #7976 by @wizzeh
🐛 Fixed
- Fix: update get_proc_address to use Arc for better ownership management #7922 by @Wybxc
- Much improved IME #7967 by @umajho
- Improve behavior of invisible windows #7905 by @gcailly
🚀 Performance
- Sharper text unlocked by switching font rendering crate to
-
0.33.311 Dec 2025Release notes
Open source →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
- Treat
.as a word-splitter in text navigation #7741 by @emilk - Change text color of selected text #7691 by @emilk
egui_kittest changelog
- Enforce consistent snapshot updates #7744 by @lucasmerlin
kittest: add drag-and-drop helpers #7690 by @emilk
egui_extras changelog
- Bump
ehttpto 0.6.0 #7757 by @jprochazk
- Treat
-
0.33.213 Nov 2025Release notes
Open source →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
Release notes
Open source →⭐ 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
Release notes
Open source →- 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
- Add
-
0.33.009 Oct 2025Release notes
Open source →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:
egui::PlugintraitWe've added a new trait-based plugin api, meant to replace
Context::on_begin_passandContext::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 toon_begin_passandon_end_pass, thePlugintrait now has ainput_hookandoutput_hookwhich you can use to inspect / modify theRawInput/FullOutput.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/kitdiffHere is a video showing the kerning changes in kitdiff (try it yourself):
https://github.com/user-attachments/assets/74640af1-09ba-435a-9d0c-2cbeee140c8f
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
Release notes
Open source →⭐ Added
- Add an option to limit the repaint rate in the web runner #7482 by @s-nie
- Add rotation gesture support for trackpad sources #7453 by @thatcomputerguy0101
- Add support for the safe area on iOS #7578 by @irh
🔧 Changed
- Replace
winapiwithwindows-syscrate #7416 by @unlimitedsola - Prevent default action on command-comma in eframe web #7547 by @emilk
- Warn if
DYLD_LIBRARY_PATHis set and we find no wgpu adapter #7572 by @emilk - Update MSRV from 1.86 to 1.88 #7579 by @Wumpf
🐛 Fixed
-
0.32.312 Sep 2025Release notes
Open source →- Preserve text format in truncated label tooltip #7514 #7535 by @lucasmerlin
- Fix
TextEdit's in RTL layouts #5547 by @zakarumych
-
0.32.204 Sep 2025Release notes
Open source →- 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
- Add
Ui::place, to place widgets without changing the cursor #7359 by @lucasmerlin - Fix: prevent calendar popup from closing on dropdown change #7409 by @AStrizh
- Fix:
-
0.32.115 Aug 2025Release notes
Open source →⭐ 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
Release notes
Open source →- 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
- Add
-
0.32.010 Jul 2025Release notes
Open source →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 blocks of egui (hence their name). AnAtomis 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:let image = 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: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::customto add custom content to Widgets. Here is a button in a button:https://github.com/user-attachments/assets/8c649784-dcc5-4979-85f8-e735b9cdd090
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_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:https://github.com/user-attachments/assets/74e45243-7d05-4fc3-b446-2387e1412c05
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):https://github.com/user-attachments/assets/0c5adb6b-8310-4e0a-b936-646bb4ec02f7
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:
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 since they are obsolete - if the menu should stay open on clicks, change the
PopupCloseBehavior:
You can also change the behavior only for a single SubMenu by using// Change this ui.menu_button("Text", |ui| { /* Menu Content */ }); // To this: MenuButton::new("Text").config( MenuConfig::default().close_behavior(PopupCloseBehavior::CloseOnClickOutside), ).ui(ui, |ui| { /* Menu Content */ });SubMenuButton, but by default it should be passed to any submenus when usingMenuButton.
- remove the
Memory::is_popup_openapi now requires calls toMemory::keep_popup_open- The popup will immediately close if
keep_popup_openis not called. - It's recommended to use the new
Popupapi which handles this for you. - If you can't switch to the new api for some reason, update the code to call
keep_popup_open:if ui.memory(|mem| mem.is_popup_open(popup_id)) { ui.memory_mut(|mem| mem.keep_popup_open(popup_id)); // <- add this line let area_response = Area::new(popup_id).show(...) }
⭐ Other improvements
- Add
Label::show_tooltip_when_elided#5710 by @bryceberger - Deprecate
Ui::allocate_new_uiin favor ofUi::scope_builder#5764 by @lucasmerlin - Add
expand_bgto customize size of text background #5365 by @MeGaGiGaGon - Add assert messages and print bad argument values in asserts #5216 by @bircni
- Use
TextBufferforlayouterinTextEditinstead of&str#5712 by @kernelkind - Add a
Slider::update_while_editing(bool)API #5978 by @mbernat - Add
Scene::drag_pan_buttonsoption. Allows specifying which pointer buttons pan the scene by dragging #5892 by @mitchmindtree - Add
Scene::senseto customize howSceneresponds to user input #5893 by @mitchmindtree - Rework
TextEditarrow navigation to handle Unicode graphemes #5812 by @MStarha ScrollAreaimprovements for user configurability #5443 by @MStarha- Add
Response::clicked_with_open_in_background#7093 by @emilk - Add
Modifiers::matches_any#7123 by @emilk - Add
Context::format_modifiers#7125 by @emilk - Add
OperatingSystem::is_mac#7122 by @emilk - Support vertical-only scrolling by holding down Alt #7124 by @emilk
- Support for back-button on Android #7073 by @ardocrat
- Select all text in DragValue when gaining focus via keyboard #7107 by @Azkellas
- Add
Context::current_pass_index#7276 by @emilk - Add
Context::cumulative_frame_nr#7278 by @emilk - Add
Visuals::text_edit_bg_color#7283 by @emilk - Add
Visuals::weak_text_alphaandweak_text_color#7285 by @emilk - Add support for scrolling via accesskit / kittest #7286 by @lucasmerlin
- Update area struct to allow force resizing #7114 by @blackberryfloat
- Add
egui::Sidesshrink_left/shrink_right#7295 by @lucasmerlin - Set intrinsic size for Label #7328 by @lucasmerlin
🔧 Changed
- Raise MSRV to 1.85 #6848 by @torokati44, #7279 by @emilk
- Set
hint_textinWidgetInfo#5724 by @bircni - Implement
DefaultforThemePreference#5702 by @MichaelGrupp - Align
available_rectdocs with the new reality after #4590 #5701 by @podusowski - Clarify platform-specific details for
Viewportpositioning #5715 by @aspiringLich - Simplify the text cursor API #5785 by @valadaptive
- Bump accesskit to 0.19 #7040 by @valadaptive
- Better define the meaning of
SizeHint#7079 by @emilk - Move all input-related options into
InputOptions#7121 by @emilk Buttoninherits thealt_textof theImagein it, if any #7136 by @emilk- Change API of
Tooltipslightly #7151 by @emilk - Use Rust edition 2024 #7280 by @emilk
- Change
ui.disable()to modify opacity #7282 by @emilk - Make the font atlas use a color image #7298 by @valadaptive
- Implement
BitOrandBitOrAssignforRect#7319 by @lucasmerlin
🔥 Removed
- Remove things that have been deprecated for over a year #7099 by @emilk
- Remove
SelectableLabel#7277 by @lucasmerlin
🐛 Fixed
Scene: makescene_rectfull size on reset #5801 by @graydenshandScene:TextEditselection when placed in aScene#5791 by @karhuScene: Set transform layer before calling user content #5884 by @mitchmindtree- Fix: transform
TextShapeunderline width #5865 by @emilk - Fix missing repaint after
consume_key#7134 by @lucasmerlin - Update
emoji-icon-fontwith fix for fullwidth latin characters #7067 by @emilk - Mark all keys as released if the app loses focus #5743 by @emilk
- Fix scroll handle extending outside of
ScrollArea#5286 by @gilbertoalexsantos - Fix
Response::clicked_elsewherenot returningtruesometimes #5798 by @lucasmerlin - Fix kinetic scrolling on touch devices #5778 by @lucasmerlin
- Fix
DragValueexpansion when editing #5809 by @MStarha - Fix disabled
DragValueeating focus, causing focus to reset #5826 by @KonaeAkira - Fix semi-transparent colors appearing too bright #5824 by @emilk
- Improve drag-to-select text (add margins) #5797 by @hankjordan
- Fix bug in pointer movement detection #5329 by @rustbasic
- Protect against NaN in hit-test code #6851 by @Skgland
- Fix image button panicking with tiny
available_space#6900 by @lucasmerlin - Fix links and text selection in horizontal_wrapped layout #6905 by @lucasmerlin
- Fix
leading_spacesometimes being ignored during paragraph splitting #7031 by @afishhh - Fix typo in deprecation message for
ComboBox::from_id_source#7055 by @aelmizeb - Bug fix: make sure
end_passis called for all loaders #7072 by @emilk - Report image alt text as text if widget contains no other text #7142 by @lucasmerlin
- Slider: move by at least the next increment when using fixed_decimals #7066 by @0x53A
- Fix crash when using infinite widgets #7296 by @emilk
- Fix
debug_asserttriggered bymenu/intersect_ray#7299 by @emilk - Change
Rect::areato return zero for negative rectangles #7305 by @emilk
🚀 Performance
- Optimize editing long text by caching each paragraph #5411 by @afishhh
- Make
WidgetTextsmaller and faster #6903 by @lucasmerlin
Release notes
Open source →⭐ Added
- Add pointer events and focus handling for apps run in a Shadow DOM #5627 by @xxvvii
- MacOS: Add
movable_by_window_backgroundoption to viewport #5412 by @jim-ec - Add macOS-specific
has_shadowandwith_has_shadowto ViewportBuilder #6850 by @gaelanmcmillan - Add external eventloop support #6750 by @wpbrown
🔧 Changed
- Update MSRV to 1.85 #7279 by @emilk
- Use Rust edition 2024 #7280 by @emilk
- Rename
should_propagate_eventand addshould_prevent_default#5779 by @th0rex - Clarify platform-specific details for
Viewportpositioning #5715 by @aspiringLich - Enhance stability on Windows #5723 by @rustbasic
- Set
web-sysmin version to0.3.73#5862 by @wareya - Bump
ronto0.10.1#6861 by @torokati44 - Disallow
accesskiton Android NativeActivity, makinghello_androidworking again #6855 by @podusowski - Respect and detect
prefers-color-scheme: no-preference#7293 by @emilk
🐛 Fixed
- Mark all keys as up if the app loses focus #5743 by @emilk
- Fix text input on Android #5759 by @StratusFearMe21
- Fix text distortion on mobile devices/browsers with
glowbackend #6893 by @wareya - Workaround libpng crash on macOS by not creating
NSImagefrom png data #7252 by @Wumpf - Fix incorrect window sizes for non-resizable windows on Wayland #7103 by @GoldsteinE
- Web: only consume copy/cut events if the canvas has focus #7270 by @emilk
-
0.31.105 Mar 2025 -
0.31.004 Feb 2025Release notes
Open source →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 what
CornerRadius(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:
https://github.com/user-attachments/assets/adf55e3b-fb48-4df0-aaa2-150ee3163684
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
- 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
Release notes
Open source →- Web: Fix incorrect scale when moving to screen with new DPI #5631 by @emilk
- Re-enable IME support on Linux #5198 by @YgorSouza
- Serialize window maximized state in
WindowSettings#5554 by @landaire - Save state on suspend on Android and iOS #5601 by @Pandicon
- Eframe web: forward cmd-S/O to egui app (stop default browser action) #5655 by @emilk
- Add a
-
0.30.016 Dec 2024Release notes
Open source →✨ 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)
egui_kittestThis 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: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"); }⭐ 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
Release notes
Open source →NOTE: you now need to enable the
waylandorx11features 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
-
0.29.101 Oct 2024 -
0.29.026 Sep 2024Release notes
Open source →✨ Highlights
This release adds initial support for multi-pass layout, which is a tool to circumvent a common limitation of immediate mode. You can use the new
UiBuilder::sizing_pass(#4969) to instruct theUiand widgets to shrink to their minimum size, then store that size. Then call the newContext::request_discard(#5059) to discard the visual output and do another pass immediately after the current finishes. Together, this allows more advanced layouts that is normally not possible in immediate mode. So far this is only used byegui::Gridto hide the "first-frame jitters" that would sometimes happen before, but 3rd party libraries can also use it to do much more advanced things.There is also a new
UiBuilderfor more flexible construction ofUis (#4969). By specifying asensefor theUiyou can make it respond to clicks and drags, reading the result with the newUi::response(#5054). Among other things, you can use this to create buttons that contain arbitrary widgets.0.29 also adds improve support for automatic switching between light and dark mode. You can now set up a custom
Stylefor both dark and light mode, and have egui follow the system preference (#4744 #4860).There also has been several small improvements to the look of egui:
- Fix vertical centering of text (e.g. in buttons) (#5117)
- Sharper rendering of lines and outlines (#4943)
- Nicer looking text selection, especially in light mode (#5017)
The new text selection
<img width="198" alt="New text selection in light mode" src="https://github.com/user-attachments/assets/bd342946-299c-44ab-bc2d-2aa8ddbca8eb"> <img width="187" alt="New text selection in dark mode" src="https://github.com/user-attachments/assets/352bed32-5150-49b9-a9f9-c7679a0d30b2">
What text selection used to look like
<img width="143" alt="Old text selection in light mode" src="https://github.com/user-attachments/assets/f3cbd798-cfed-4ad4-aa3a-d7480efcfa3c"> <img width="143" alt="Old text selection in dark mode" src="https://github.com/user-attachments/assets/9925d18d-da82-4a44-8a98-ea6857ecc14f">
🧳 Migration
id_sourceis now calledid_salteverywhere (#5025)Ui::newnow takes aUiBuilder(#4969)- Deprecated (replaced with
UiBuilder):ui.add_visible_uiui.allocate_ui_at_rectui.child_uiui.child_ui_with_id_sourceui.push_stack_info
⭐ Added
- Create a
UiBuilderfor buildingUis #4969 by @emilk - Add
egui::Sidesfor adding UI on left and right sides #5036 by @emilk - Make light & dark visuals customizable when following the system theme #4744 #4860 by @bash
- Interactive
Ui:s: addUiBuilder::senseandUi::response#5054 by @lucasmerlin - Add a menu button with text and image #4748 by @NicolasBircksZR
- Add
Ui::columns_const()#4764 by @v0x0g - Add
Slider::max_decimals_opt#4953 by @bircni - Add
Label::halign#4975 by @rustbasic - Add
ui.shrink_clip_rect#5068 by @emilk - Add
ScrollArea::scroll_bar_rect#5070 by @emilk - Add
Options::input_optionsfor click-delay etc #4942 by @girtsf - Add
WidgetType::RadioGroup#5081 by @bash - Add return value to
with_accessibility_parent#5083 by @bash - Add
Ui::with_visual_transform#5055 by @lucasmerlin - Make
SliderandDragValuecompatible withNonZeroUsizeetc #5105 by @emilk - Add
Context::request_discardfor multi-pass layouts #5059 by @emilk - Add UI to modify
FontTweaklive #5125 by @emilk - Add
Response::intrinsic_sizeto enable better layout in 3rd party crates #5082 by @lucasmerlin - Add support for mipmap textures #5146 by @nolanderc
- Add
DebugOptions::show_unaligned#5165 by @emilk - Add
Slider::clampingfor precise clamp control #5119 by @emilk
🚀 Performance
- Optimize
Color32::from_rgba_unmultipliedwith LUT #5088 by @YgorSouza
🔧 Changed
- Rename
id_sourcetoid_salt#5025 by @bircni - Avoid some
Idclashes by seeding auto-ids with child id #4840 by @ironpeak - Nicer looking text selection, especially in light mode #5017 by @emilk
- Fix blurry lines by aligning to pixel grid #4943 by @juancampa
- Center-align all text vertically #5117 by @emilk
- Clamp margin values in
Margin::ui#4873 by @rustbasic - Make
scroll_to_*animations configurable #4305 by @lucasmerlin - Update
Buttonto correctly align contained image #4891 by @PrimmR - Deprecate
ahashre-exports #4979 by @oscargus - Fix: Ensures correct IME behavior when the text input area gains or loses focus #4896 by @rustbasic
- Enable rustdoc
generate-link-to-definitionfeature on docs.rs #5030 by @GuillaumeGomez - Make some
Memorymethods public #5046 by @bircni - Deprecate
ui.set_sizing_pass#5074 by @emilk - Export module
egui::frame#5087 by @simgt - Use
logcrate instead ofeprintln& remove some unwraps #5010 by @bircni - Fix:
Event::CopyandEvent::Cutbehave as if they select the entire text when there is no selection #5115 by @rustbasic
🐛 Fixed
- Prevent text shrinking in tooltips; round wrap-width to integer #5161 by @emilk
- Fix bug causing tooltips with dynamic content to shrink #5168 by @emilk
- Remove some debug asserts #4826 by @emilk
- Handle the IME event first in
TextEditto fix some bugs #4794 by @rustbasic - Slider: round to decimals after applying
step_by#4822 by @AurevoirXavier - Fix: hint text follows the alignment set on the
TextEdit#4889 by @PrimmR - Request focus on a
TextEditwhen clicked #4991 by @Zoxc - Fix
Idclash inFramestyling widget #4967 by @YgorSouza - Prevent
ScrollAreacontents from exceeding the container size #5006 by @DouglasDwyer - Fix bug in size calculation of truncated text #5076 by @emilk
- Fix: Make sure
RawInput::takeclears all events, like it says it does #5104 by @emilk - Fix
DragValuerange clamping #5118 by @emilk - Fix: panic when dragging window between monitors of different pixels_per_point #4868 by @rustbasic
Release notes
Open source →✨ Highlights
🧳 Migration
WebRunner::startnow expects aHtmlCanvasElementrather than the id of it (#4780)NativeOptions::follow_system_themeanddefault_themeis gone, and is now inegui::Optionsinstead (#4860 by @bash)
⭐ Added
- Conditionally propagate web events using a filter in WebOptions #5056 by @liamrosenfeld
🔧 Changed
- Pass
HtmlCanvasElementelement directly inWebRunner::start#4780 by @jprochazk - Upgrade winit to 0.30.2 #4849 #4939 by @ArthurBrussee
- Allow non-
staticeframe::Applifetime #5060 by @timstr - Improve
glowcontext switching #4814 by @rustbasic - Ignore viewport size/position on iOS #4922 by @frederik-uni
- Update
web-sys&wasm-bindgen#4980 by @bircni - Remove the need for setting
web_sys_unstable_apis#5000 by @emilk - Remove the
directoriesdependency #4904 by @YgorSouza
🐛 Fixed
- Fix: call
savewhen hiding web tab, andupdatewhen focusing it #5114 by @emilk - Force canvas/text input focus on touch for iOS web browsers #4848 by @BKSalman
- Fix virtual keyboard on (mobile) web #4855 by @micmonay
- Fix: Backspace not working after IME input #4912 by @rustbasic
- Fix iOS build, and add iOS step to CI #4898 by @lucasmerlin
- Fix iOS compilation of eframe #4851 by @ardocrat
- Fix crash when changing viewport settings #4862 by @pm100
- Fix eframe centering on multiple monitor systems #4919 by @VinTarZ
- Fix viewport not working when minimized #5042 by @rustbasic
- Clarified
eframe::run_simple_native()persistence #4846 by @tpstevens
-
0.28.105 Jul 2024Release notes
Open source →⭐ Added
- Add
Image::uri()#4720 by @rustbasic
🔧 Changed
- Better documentation for
Event::Zoom#4778 by @emilk - Hide tooltips when scrolling #4784 by @emilk
- Smoother animations #4787 by @emilk
- Hide tooltip on click #4789 by @emilk
🐛 Fixed
Release notes
Open source →- Web: only capture clicks/touches when actually over canvas #4775 by @lucasmerlin
- Add
-
0.28.003 Jul 2024Release notes
Open source →✨ Highlights
- Automatic sizing of menus/popups/tooltips with no jittering, using new sizing pass #4557, #4579 by @emilk
- Support interactive widgets in tooltips #4596 by @emilk
- Add a
ui.stack()with info about all ancestorUis, with optional tags #4588 by @abey79, #4617 by @emilk - GIF support #4620 by @JustFrederik
- Blinking text cursor in
TextEdit#4279 by @emilk
🧳 Migration
- Update MSRV to 1.76 (#4411)
- The
wrap/truncatefunctions onLabel/Button/ComboBoxno longer take bools as arguments. Use.wrap_mode(…)instead for more fine control (#4556) Style::wraphas been deprecated in favor ofStyle::wrap_mode(#4556)Ui::newandui.child_uinow takes a new parameter for theUiStack(#4588)- The
extra_assertsandextra_debug_assertsfeature flags have been removed (#4478) - Remove
Event::Scrolland handle it in egui. UseEvent::MouseWheelinstead (#4524) Event::Zoomis no longer emitted on ctrl+scroll. UseInputState::smooth_scroll_deltainstead (#4524)ui.set_enabledandset_visiblehave been deprecated (#4614)DragValue::clamp_rangerenamed torange((#4728)
⭐ Added
- Overload operators for
Rect + Margin,Rect - Marginetc #4277 by @emilk - Add
Window::order#4301 by @alexparlett - Add a way to specify Undoer settings and construct Undoers more easily #4357 by @valadaptive
- Add xtask crate #4293 by @YgorSouza
- Add
ViewportCommand::RequestCut,RequestCopyandRequestPasteto trigger clipboard actions #4035 by @bu5hm4nn - Added ability to define colors at UV coordinates along a path #4353 by @murl-digital
- Add a
Displayimpl forVec2,Pos2, andRect#4428 by @tgross35 - Easing functions #4630 by @emilk
- Add
Options::line_scroll_speedandscroll_zoom_speed#4532 by @emilk - Add
TextEdit::hint_text_font#4517 by @zaaarf - Add
Options::reduce_texture_memoryto free up RAM #4431 by @varphone - Add support for text truncation to
egui::Style#4556 by @abey79 - Add
Response::show_tooltip_uiandshow_tooltip_text#4580 by @emilk - Add
opacityandmultiply_opacityfunctions toUiandPainter#4586 by @emilk - Add
Key::Quote#4683 by @mkeeter - Improve backtraces when hovering widgets with modifiers pressed #4696 by @emilk
- Add
PopupCloseBehavior#4636 by @Umatriz - Add basic test for egui accesskit output #4716 by @Wcubed
- Add
clamp_to_rangeoption to DragValue, renameclamp_rangetorange(deprecating the former) #4728 by @Wumpf - Add
Style::number_formatteras the default used byDragValue#4740 by @emilk
🔧 Changed
- Improve the UI for changing the egui theme #4257 by @emilk
- Change the resize cursor when you reach the resize limit #4275 by @emilk
- Make
TextEditan atomic widget #4276 by @emilk - Rename
fn scroll2tofn scroll#4282 by @emilk - Change
Frame::multiply_with_opacityto multiply in gamma space #4283 by @emilk - Use parent
Uis style for popups #4325 by @alexparlett - Take
roundinginto account when usingSlider::trailing_fill#4308 by @rustbasic - Allow users to create viewports larger than monitor on Windows & macOS #4337 by @lopo12123
- Improve
ViewportBuilder::with_icon()documentation #4408 by @roccoblues include_image!now accepts expressions #4521 by @YgorSouza- Remove scroll latency for smooth trackpads #4526 by @emilk
- Smooth out zooming with discreet scroll wheel #4530 by @emilk
- Make
TextEdit::return_keyoptional #4543 by @doonv - Better spacing and sizes for (menu) buttons #4558 by @emilk
ComboBox: fix justified layout of popup if wider than parent button #4570 by @emilk- Make
Areastate public #4576 by @emilk - Don't persist
Areasize #4749 by @emilk - Round text galley sizes to nearest UI point size #4578 by @emilk
- Once you have waited for a tooltip to show, show the next one right away #4585 by @emilk
- Fade in windows, tooltips, popups, etc #4587 by @emilk
- Make
egu::menutypes public #4544 by @sor-ca - The default constrain rect for
Area/Windowis nowctx.screen_rect#4590 by @emilk - Constrain
Areas to screen by default #4591 by @emilk Grid: set thesizing_passflag during the initial sizing pass #4612 by @emilk- Remove special case for 0 in DragValue default formatter #4639 by @YgorSouza
- Abort drags when pressing escape key #4678 by @emilk
- Allow setting a layer as a sublayer of another #4690 by @YgorSouza
- Close context menus with Escape #4711 by @emilk
- Cancel DragValue edit if Escape is pressed #4713 by @YgorSouza
- The default parser for
DragValueandSlidernow ignores whitespace #4739 by @emilk - Disabled widgets are now also disabled in the accesskit output #4750 by @Wcubed
- Make it easier to grab the handle of a floating scroll bar #4754 by @emilk
- When debugging widget rects on hover, show width and height #4762 by @emilk
- Make sure all tooltips close if you open a menu in the same layer #4766 by @emilk
🐛 Fixed
- Fix wrong replacement function in deprecation notice of
drag_released*#4314 by @sornas - Consider layer transform when positioning text agent #4319 by @juancampa
- Fix incorrect line breaks #4377 by @juancampa
- Fix
hex_color!macro by re-exportingcolor_hexcrate fromecolor#4372 by @dataphract - Change
Ui::allocate_painterto inherit properties fromUi#4343 by @varphone - Fix
Panelincorrect size #4351 by @zhatuokun - Improve IME support with new
Event::Ime#4358 by @rustbasic - Disable interaction for
ScrollAreaandPlotwhen UI is disabled #4457 by @varphone - Don't panic when replacement glyph is not found #4542 by @RyanBluth
- Fix
Ui::scroll_with_deltaonly scrolling if theScrollAreais focused #4303 by @lucasmerlin - Handle tooltips so large that they cover the widget #4623 by @emilk
- ScrollArea: Prevent drag interaction outside the area #4611 by @s-nie
- Fix buggy interaction with widgets outside of clip rect #4675 by @emilk
- Make sure contents of a panel don't overflow #4676 by @emilk
- Fix:
Response::hover_posreturns incorrect positions with layer transforms #4679 by @Creative0708 - Fix: Menu popups and tooltips don't respect layer transforms #4708 by @Creative0708
- Bug fix: report latest area size in
Area::showresponse #4710 by @emilk - Ensure
Windowscroll bars are at the window edges #4733 by @emilk - Prevent
TextEditwidgets from sending fake primary clicks #4751 by @Aliremu - Fix text selection when there's multiple viewports #4760 by @emilk
- Use correct cursor icons when resizing panels too wide or narrow #4769 by @emilk
Release notes
Open source →✨ Highlights
The eframe web canvas now works properly when its a small part of a larger web page. Previously this caused a lot of weird bugs, such as the eframe canvas stealing focus, and resizing the canvas in annoying ways. Now it should all work seamlessly to have an eframe canvas as part of a web page, including having multiple different eframe apps next to each other. As part of that the eframe canvas can now be focused (or not), just like an
<input>HTML element.We've also implemented a better method for sizing and positioning the canvas so that it yields pixel-perfect rendering on all known browsers except for Desktop Safari. What this means is that text is much less likely to be blurry on web for users (#4536 by @jprochazk).
⭐ Added
- Add
register_native_textureineframe::Frame#4246 by @Chaojimengnan - Add
NativeOptions::persistence_path#4423 by @lucasmerlin - Make sure to call
raw_input_hookon web #4646 by @owen-d
🔧 Changed
- Early-out from context switching the
glowbackend #4284, #4296 by @emilk - Allow users to create viewports larger than monitor on Windows & macOS #4337 by @lopo12123
- Use
objc2and its framework crates #4395 by @madsmtm - Emit physical key presses when a non-Latin layout is active #4461 by @TicClick
- Clamp window size to monitor size by default on all platforms #4410 by @rustbasic
- Ignore synthetic key presses #4514 by @hut
- Use
ResizeObserverinstead ofresizeevent #4536 by @jprochazk - Make pinch-to-zoom more responsive on web #4621 by @emilk
- Move first
request_animation_frameinto resize observer #4628 by @jprochazk - Replace
directories-nextdependency withdirectories#4661 by @crumblingstatue eframe::Resultis now short foreframe::Result<()>#4706 by @emilk- Ignore keyboard events unless canvas has focus #4718 by @emilk
🐛 Fixed
- Fix
ViewportCommand::InnerSizenot resizing viewport on Wayland (#4211) #4211 by @rustbasic - Improve IME support with new
Event::Ime#4358 by @rustbasic - IME for chinese #4436 by @rustbasic
- Fix: Window position creeps between executions on scaled monitors #4443 by @avery-radmacher
- Fix: still track mouse when dragging outside web canvas #4522 by @emilk
- Fix: Don't
.forget()RAF closure #4551 by @jprochazk - Improve web text agent #4561 by @jprochazk
- Fix broken mouse coordinates when there's padding on the canvas element #4729 by @emilk
- Only repaint on cursor movements of area, or if dragging outside #4730 by @emilk
- Fix drag-and-drop file preview/hover #4732 by @emilk
- Fix stuck keys after pressing ctrl+C, cmd+A, etc #4731 by @emilk
🧳 Migration
Wrap app creator in a
ResultApplications can now return an error during the app creation (#4565 by @emilk), so you now need to wrap your
Box<dyn App>in aResultlike so:- eframe::run_native("My App", options, Box::new(|cc| Box::new(MyApp::new(cc)))); + eframe::run_native("My App", options, Box::new(|cc| Ok(Box::new(MyApp::new(cc)))));Change web CSS
To make the eframe canvas fill the entire web browser, set its CSS to:
top: 0; left: 0; width: 100%; height: 100%;See
index.htmland #4536 for details.Web canvas focus
If you are using eframe for a fullscreen app, you should call
.focus()on your canvas during startup:document.getElementById("the_canvas_id").focus(); -
0.27.202 Apr 2024Release notes
Open source →🐛 Fixed
- Fix tooltips for non-interactive widgets #4291
- Fix problem clicking the edge of a
TextEdit#4272 - Fix:
Response::clicked_elsewheretakes clip rect into account #4274 - Fix incorrect
Response::interact_rectforArea/Window#4273
⭐ Added
- Allow disabling animations on a
ScrollArea#4309 (thanks @lucasmerlin!)
Release notes
Open source →Desktop/Native
- Fix continuous repaint on Wayland when TextEdit is focused or IME output is set #4269 (thanks @white-axe!)
- Remove a bunch of
unwrap()#4285
Web
-
0.27.129 Mar 2024Release notes
Open source →🐛 Fixed
- Fix visual glitch on the right side of highly rounded rectangles #4244
- Prevent visual glitch when shadow blur width is very high #4245
- Fix
InputState::any_touchesand addInputState::has_touch_screen#4247 - Fix
Context::repaint_causesreturning no causes #4248 - Fix touch-and-hold to open context menu #4249
- Hide shortcut text on zoom buttons if
zoom_with_keyboardis false #4262
🔧 Changed
- Don't apply a clip rect to the contents of an
AreaorWindow#4258
Release notes
Open source →- Web: repaint if the
#hashin the URL changes #4261 - Add web support for
zoom_factor#4260 (thanks @justusdieckmann!)
-
0.27.026 Mar 2024Release notes
Open source →The hit test logic (what is the user clicking on?) has been completely rewritten, and should now be much more accurate and helpful. The hit test and interaction logic is run at the start of the frame, using the widgets rects from the previous frame, but the latest mouse coordinates. It enabled getting a
Responsefor a widget before creating it usingContext::read_response. This will in the future unlock more powerful widget styling options. The new hit test also allows clicking slightly outside a button and still hit it, improving the support for touch screens.The menus have also been improved so that they both act and feel better, with no change in API. Included in this is much nicer looking shadows, supporting an offset.
<img width="580" alt="Screenshot 2024-03-26 at 17 00 23" src="https://github.com/emilk/egui/assets/1148717/f1eea39f-17a7-41ca-a983-ee142b04ef26">
⚠️ BREAKING
Response::clicked*andResponse::dragged*may lock theContext, so don't call it from aContext-locking closure.Response::clicked_bywill no longer be true if clicked with keyboard. UseResponse::clickedinstead.Memory::focushas been renamedMemory::focusedArea::newnow takes anIdby argument #4115- Change the definition of
clicked_by#4192
☰ Menu related improvements
- Add some distance between parent menu and submenu #4230
- Add
Area::senseand improve hit-testing of buttons in menus #4234 - Improve logic for when submenus are kept open #4166
- Better align menus with the button that opened them #4233
- Hide hover UI when showing the context menu #4138 (thanks @abey79!)
- CSS-like
Shadowwith offset, spread, and blur #4232 - On touch screens, press-and-hold equals a secondary click #4195
⭐ Added
- Add with_taskbar to viewport builder #3958 (thanks @AnotherNathan!)
- Add F21 to F35 key bindings #4004 (thanks @oscargus!)
- Add
Options::debug_paint_interactive_widgets#4018 - Add
Ui::set_opacity#3965 (thanks @YgorSouza!) - Add
Response::paint_debug_info()to make it easy to visualize a widget's id and state #4056 (thanks @abey79!) - Add layer transforms, interaction in layer #3906 (thanks @Tweoss!)
- Add
ColorImage::from_gray_iter#3536 (thanks @wangxiaochuTHU!) - Add API for raw mouse motion #4063 (thanks @GiantBlargg!)
- Add accessibility to
ProgressBarandSpinner#4139 (thanks @DataTriny!) - Add x11 window type settings to viewport builder #4175 (thanks @psethwick!)
- Add an API for customizing the return key in TextEdit #4085 (thanks @lemon-sh!)
- Convenience
const fnforMargin,RoundingandShadow#4080 (thanks @0Qwel!) - Serde feature: add serde derives to input related structs #4100 (thanks @gweisert!)
- Give each menu
Areaan id distinct from the id of what was clicked #4114 epaint: AddedShape::{scale,translate}wrappers #4090 (thanks @varphone!)- A
Windowcan now be resizable in only one direction #4155 - Add
EllipseShape#4122 (thanks @TheTacBanana!) - Adjustable Slider rail height #4092 (thanks @rustbasic!)
- Expose state override for
HeaderResponse#4200 (thanks @Zeenobit!)
🔧 Changed
TextEdit: Changemarginproperty toegui::Margintype #3993 (thanks @bu5hm4nn!)- New widget interaction logic #4026
ui.dnd_drop_zone()now returnsInnerResponse. #4079 (thanks @sowbug!)- Support interacting with the background of a
Ui#4074 - Quickly animate scroll when calling
ui.scroll_to_cursoretc #4119 - Don't clear modifier state on focus change #4157 (thanks @ming08108!)
- Prevent
egui::Windowfrom becoming larger than viewport #4199 (thanks @rustbasic!) - Don't show URLs when hovering hyperlinks #4218
🐛 Fixed
- Fix incorrect handling of item spacing in
Windowtitle bar #3995 (thanks @varphone!) - Make
on_disabled_hover_uirespecttooltip_delay#4012 (thanks @YgorSouza!) - Fix
TextEditbeing too short whenever there is horizontal margin #4005 (thanks @gweisert!) - Fix
Response::interactandUi:interact_with_hovered#4013 - Fix:
Response.interact_pointer_posisSomeon click and drag released #4014 - Fix custom
WindowFrames #4009 (thanks @varphone!) - Fix: images with background color now respects rounding #4029 (thanks @vincent-sparks!)
- Fixed the incorrect display of the
Windowframe with a wide border or large rounding #4032 (thanks @varphone!) - TextEdit: fix crash when hitting SHIFT + TAB around non-ASCII text #3984 (thanks @rustbasic!)
- Fix two
ScrollAreabugs: leaking scroll target and broken animation to target offset #4174 (thanks @abey79!) - Fix bug in
Context::parent_viewport_id#4190 (thanks @rustbasic!) - Remove unnecessary allocation in
RepaintCause::new#4146 (thanks @valsteen!)
Release notes
Open source →- Update to document-features 0.2.8 #4003
- Added
App::raw_input_hookallows for the manipulation or filtering of raw input events #4008 (thanks @varphone!)
Desktop/Native
- Add with_taskbar to viewport builder #3958 (thanks @AnotherNathan!)
- Add
winuserfeature towinapito fix unresolved import #4037 (thanks @varphone!) - Add
get_proc_addressin CreationContext #4145 (thanks @Chaojimengnan!) - Don't clear modifier state on focus change #4157 (thanks @ming08108!)
- Add x11 window type settings to viewport builder #4175 (thanks @psethwick!)
Web
- Add
webgpufeature by default to wgpu #4124 (thanks @ctaggart!) - Update kb modifiers from web mouse events #4156 (thanks @ming08108!)
- Fix crash on
request_animation_framewhen destroying web runner #4169 (thanks @jprochazk!) - Fix bug parsing url query with escaped & or = #4172
Location::query_map: support repeated key #4183
-
0.26.214 Feb 2024Release notes
Open source → -
0.26.111 Feb 2024Release notes
Open source →- Fix
Windowtitle bar incorrect handling spacing #3995 (thanks @varphone!) - Make
on_disabled_hover_uirespecttooltip_delay#4012 (thanks @YgorSouza!) - Fix
TextEditbeing too short whenever there is horizontal margin #4005 (thanks @gweisert!) - Fix
Response::interactandUi:interact_with_hovered#4013 - Fix:
Response.interact_pointer_posisSomeon click and drag released #4014 - Fix custom
WindowFrames #4009 (thanks @varphone!)
Release notes
Open source →- Fix high CPU usage on Windows when app is minimized #3985 (thanks @rustbasic!)
- Update to document-features 0.2.8 #4003
- Fix
-
0.26.005 Feb 2024Release notes
Open source →⚠️ BREAKING
- Always set
response.hoveredto false when dragging another widget #3860 InputState::scroll_deltahas been replaced byInputState::raw_scroll_deltaandInputState::smooth_scroll_delta#3884- Improve
Response.dragged,drag_startedandclicked#3888
⭐ Added
- Selectable text in Labels #3814 #3870
- Add some drag-and-drop-related APIs in
ResponseandMemory#3876 (thanks @abey79!) - Add drag-and-drop APIs with payloads storage #3887
ComboBox: add builder method for height #3001 (thanks @hinto-janai!)- Add keys
?,/,|#3820 - Add
Response::contains_pointer#3859 - Add
Align2::anchor_size#3863 - Add
Context::debug_text#3864 - Allow read access to shapes added to painter this frame #3866 (thanks @brunizzl!)
- Register callbacks with
Context::on_begin_frameandon_end_frame#3886 - Improve
FrameAPI to allow picking color until after adding content #3889 - Add opacity factor to
TextShape#3916 (thanks @StratusFearMe21!) Context::repaint_causes:file:lineof what caused a repaint #3949- Add
TextureOptions::wrap_mode#3954 (thanks @CodedNil!) - Add
Spacing::menu_width#3973
🔧 Changed
- Move text selection logic to own module #3843
- Smooth scrolling #3884
- Turn off text wrapping by default in combo-box popups #3912
Response.context_menunow returns the response of the context menu, if open #3904 (thanks @AufarZakiev!)- Update to puffin 0.19 #3940
- Wait with showing tooltip until mouse has been still for 300ms #3977
🐛 Fixed
- Fix: dragging to above/below a
TextEditorLabelwill select text to begin/end #3858 - Fix clickable widgets blocking scrolling on touch screens #3815 (thanks @lucasmerlin!)
- Fix
stable_dt#3832 - Bug Fix :
Response::is_pointer_button_down_onis now false the frame the button is released #3833 (thanks @rustbasic!) - Use runtime knowledge of OS for OS-specific text editing #3840
- Fix calling
request_repaint_afterevery frame causing immediate repaint #3978
🚀 Performance
Release notes
Open source →- Update
wgputo 0.19 #3824 - Disable the default features of
wgpu#3875 - Much more accurate
cpu_usagetiming #3913 - Update to puffin 0.19 #3940
Desktop/Native
- Keep
ViewportInfo::maximizedandminimizedup-to-date on Windows #3831 (thanks @rustbasic!) - Handle
IconData::default()without crashing #3842 - Fix Android crash on resume #3847 #3867 (thanks @Garoven!)
- Add
WgpuConfiguration::desired_maximum_frame_latency#3874 - Don't call
App::updateon minimized windows #3877 (thanks @rustbasic!)
Web
- Always set
-
0.26.0-alpha.201 Feb 2024 pre-releaseNothing published for this version
-
0.26.0-alpha.101 Feb 2024 pre-releaseNothing published for this version
-
0.25.008 Jan 2024Release notes
Open source →⚠️ BREAKING
- Ignore extra SHIFT and ALT when matching modifiers #3769
- Replace
Key::PlusEqualswithKey::PlusandKey::Equals#3769 - Removed
WidgetTextGalley,WidgetTextJob,RichText::into_text_job,WidgetText::into_text_job#3727 - Rename
TextBuffer::replacetoreplace_with#3751
⭐ Added
- Replace a special
Color32::PLACEHOLDERwith widget fallback color #3727 - Add
Keys forCutCopyPaste[],\:.;+=#3725 #3373 #3649 #3769 (thanks @MarijnS95 and @mkrueger!) - Add
Key::from_name,Key::ALL#3649 - Add
Event::Key::physical_key#3649 - Add indeterminate state to checkbox #3605 (thanks @YgorSouza!)
- Add
Color32::from_hexandColor32::to_hex#3570 #3777 (thanks @YgorSouza!) - Add
DragValues for RGB(A) in the color picker #2734 (thanks @IVAN-MK7!) - Add option to customize progress bar rounding #2881 (thanks @YgorSouza!)
- Add methods to load/store
TextEditStateundoer #3479 (thanks @LoganDark!) ScrollArea: Add option to always scroll the only enabled direction #3710 (thanks @untbu!)
🔧 Changed
Gridnow followsstyle.visuals.stripedif not explicitly overwritten #3723 (thanks @Wcubed!)- Allow arrow keys to move away focus from a Slider #3641 (thanks @fornwall!)
- Keep submenus open until another one is hovered #3055 (thanks @DannyStoll1!)
- Highlight the header of the topmost
Window, controlled byVisuals.window_highlight_topmost#3515 (thanks @GuillaumeSchmid!)
🐛 Fixed
- Derive
serdeSerializeandDeserializeforKeyboardShortcut#3694 (thanks @zeozeozeo!) - Fix
Windowpositioning bug when badpivotis stored in app data #3721 (thanks @abey79!) - Impl
CloneforFonts#3737 - Add missing
ResizeDirection::East#3749 (thanks @dbuch!) - Fix: don't open context menu on drag #3767
- Fix IME input of
CompositionEndwithout aCompositionStart#3768 (thanks @FrankLeeC!) - Fix: allow using the full Private Use Area for custom fonts #3509 (thanks @varphone!)
- Fix: apply edited
DragValuewhen it looses focus #3776 - Fix: Non-resizable
Areas now ignore mouse input outside their bounds #3039 (thanks @fleabitdev!) - Highlight submenu buttons when hovered and open #3780
- Invalidate font atlas on any change to
pixels_per_point, not matter how small #3698 (thanks @StarStarJ!) - Fix zoom-in shortcut (
Cmd +) on non-English keyboards #3769
Release notes
Open source →- If both
glowandwgpufeatures are enabled, default towgpu#3717
Desktop/Native
- Update to winit 0.29 #3649 (thanks @fornwall!)
- Make glow
Send + Syncagain #3646 (thanks @surban!) - Bug fix: framebuffer clear when using glow with multi-viewports #3713
- Fix: Let
accesskitprocess window events #3733 (thanks @DataTriny!)
Web
- Fix building the
wasm32docs fordocs.rs#3757
-
0.24.130 Nov 2023Release notes
Open source →- Fix buggy text with multiple viewports on monitors with different scales #3666
Release notes
Open source →Desktop/Native
- Fix window flashing white on launch #3631 (thanks @zeozeozeo!)
- Fix windowing problems when using the
x11feature on Linux #3643 - Fix bugs when there are multiple monitors with different scales #3663
glowbackend: clear framebuffer color before callingApp::update#3665
Web
-
0.24.023 Nov 2023Release notes
Open source →✨ Highlights
You can now spawn multiple native windows on supported backends (e.g.
eframe), using the newviewportAPI (#3172).You can easily zoom any egui app using Cmd+Plus, Cmd+Minus or Cmd+0, just like in a browser (#3608).
Scrollbars are now hidden by default until you hover the
ScrollArea(#3539).⭐ Added
- Multiple viewports/windows #3172 (thanks @konkitoman!)
- Introduce global
zoom_factor#3608 - Floating scroll bars #3539
- Add redo support to
Undoer#3478 (thanks @LoganDark!) - Add
egui::Vec2b#3543 - Add max
Windowsize & other size helpers #3537 (thanks @arduano!) - Allow changing shape of slider handle #3429 (thanks @YgorSouza!)
RawInput::viewportscontains a list of all viewports. Access the current one withctx.input(|i| i.viewport())
🔧 Changed
🐛 Fixed
- Fix upside down slider in the vertical orientation #3424 (thanks @YgorSouza!)
- Make slider step account for range start #3488 (thanks @YgorSouza!)
- Fix rounding of
ImageButton#3531 (thanks @chriscate!) - Fix naming:
constraint_to->constrain_to#3438 (thanks @rinde!) - Fix Shift+Tab behavior when no widget is focused #3498 (thanks @DataTriny!)
- Fix scroll not sticking when scrollbar is hidden #3434 (thanks @LoganDark!)
- Add
#[inline]to all builder-pattern functions #3557 - Properly reverse bool animation if value changes before it's finished #3577 (thanks @YgorSouza!)
⚠️ BREAKING
egui::gui_zoom::zoom_with_keyboard_shortcutsis gone, replaced withOptions::zoom_with_keyboard, which istrueby defaultSpacing::scroll_bar_Xhas been moved toSpacing::scroll_bar.XContext::set_pixels_per_pointnow callsContext::set_zoom_level, and it may make sense for you to call that directly instead- If you are using
eframe, check out the breaking changes in theeframechangelog
For integrations
There are several changes relevant to integrations.
- Added
crate::RawInput::viewportswith information about all active viewports - The repaint callback set by
Context::set_request_repaint_callbacknow points to which viewport should be repainted Context::runnow returns a list ofViewportOutputinFullOutputwhich should result in their own independent windows- There is a new
Context::set_immediate_viewport_rendererfor setting up the immediate viewport integration - If you support viewports, you need to call
Context::set_embed_viewports(false), or all new viewports will be embedded (the default behavior)
Release notes
Open source →- Multiple viewports/windows #3172 (thanks @konkitoman!)
- Replace
eframe::Framecommands andWindowInfowith egui #3564 - Use
egui::ViewportBuilderineframe::NativeOptions#3572 - Remove warm-starting #3574
- Fix copy and cut on Safari #3513 (thanks @lunixbochs!)
- Update puffin to 0.18 #3600
- Update MSRV to Rust 1.72 #3595
Breaking changes:
Most settings in
NativeOptionshave been moved toNativeOptions::viewport, which uses the newegui::ViewportBuilder:let native_options = eframe::nativeOptions { - initial_window_size: Some(egui::vec2(320.0, 240.0)), - drag_and_drop_support: true, + viewport: egui::ViewportBuilder::default() + .with_inner_size([320.0, 240.0]) + .with_drag_and_drop(true), ..Default::default() };NativeOptions::fullsize_contenthas been replaced with four settings:ViewportBuilder::with_fullsize_content_view,with_title_shown,with_titlebar_shown,with_titlebar_buttons_shownframe.info().window_infois gone, replaced withctx.input(|i| i.viewport()).frame.info().native_pixels_per_pointis replaced withctx.input(|i| i.raw.native_pixels_per_point).Most commands in
eframe::Framehas been replaced withegui::ViewportCommand, so Soframe.close()becomesctx.send_viewport_cmd(ViewportCommand::Close), etc.App::on_close_eventhas been replaced withctx.input(|i| i.viewport().close_requested())andctx.send_viewport_cmd(ViewportCommand::CancelClose).eframe::IconDatais nowegui::IconData.eframe::IconData::try_from_png_bytesis noweframe::icon_data::from_png_bytes.App::post_renderingis gone. Screenshots are taken withctx.send_viewport_cmd(ViewportCommand::Screenshots)and are returned inegui::Eventwhich you can check with:ui.input(|i| { for event in &i.raw.events { if let egui::Event::Screenshot { viewport_id, image } = event { // handle it here } } }); -
0.23.028 Sep 2023Release notes
Open source →This release contains a simple and powerful image API:
// Load from web: ui.image("https://www.example.com/some_image.png"); // Include image in the binary using `include_bytes`: ui.image(egui::include_image!("../assets/ferris.svg")); // With options: ui.add( egui::Image::new("file://path/to/image.jpg") .max_width(200.0) .rounding(10.0), );The API is based on a plugin-system, where you can tell
eguihow to load the images, and from where.egui_extrascomes with loaders for you, so all you need to do is add the following to yourCargo.toml:egui_extras = { version = "0.23", features = ["all_loaders"] } image = { version = "0.24", features = ["jpeg", "png"] } # Add the types you want support forAnd this to your code:
egui_extras::install_image_loaders(egui_ctx);⚠️ BREAKING
⭐ Added
- A new image API #3297 #3315 #3328 #3338 #3342 #3343 #3402 (thanks @jprochazk!)
- Add option to truncate text at some width #3244
- Add control of line height and letter spacing #3302
- Support images with rounded corners #3257
- Change focused widget with arrow keys #3272 (thanks @TimonPost!)
- Add opt-in
puffinfeature to egui #3298 - Add debug-option to show a callstack to the widget under the mouse and removed the
trace!macro as this is more useful #3391 - Add
Context::open_urlandContext::copy_text#3380 - Add
Area::constrain_toandWindow::constrain_to#3396 - Add
Memory::area_rect#3161 (thanks @tosti007!) - Add
Margin::expand_rectandshrink_rect#3214 - Provide
into_inner()foregui::mutex::{Mutex, RwLock}#3110 (thanks @KmolYuan!) - Support multi-threaded Wasm #3236
- Change touch force to be
Option<f32>instead off32#3240 (thanks @lucasmerlin!) - Add option to always open hyperlink in a new browser tab #3242 (thanks @FreddyFunk!)
- Add
Window::drag_to_scroll#3118 (thanks @KYovchevski!) - Add
CollapsingState::removeto clear stored state #3252 (thanks @dmackdev!) - Add tooltip_delay option #3245 (thanks @YgorSouza!)
- Added
Context::is_context_menu_open()#3267 (thanks @dmlary!) - Add
mimefield toDroppedFile#3273 (thanks @abey79!) - Allow setting the progress bar height #3183 (thanks @s-nie!)
- Add
scroll_area::State::velocity#3300 (thanks @Barugon!) - Add
Visuals::interact_cursor#3312 (thanks @zkldi!) - Add method to
RichTextmaking it easier to construct layout jobs #3319 (thanks @OmegaJak!) - Add
Context::style_mut#3359 std::borrow::Cow<'_, str>now implementsTextBuffer#3164 (thanks @burtonageo!)
🔧 Changed
- Separate text cursor from selection visuals #3181 (thanks @lampsitter!)
DragValue: update value on each key press by default #2880 (thanks @Barugon!)- Replace uses of
RangeInclusive<f32>withemath::Rangef#3221 - Implement
Send + SyncforColorPickerFnandUi(#3148) #3233 (thanks @idanarye!) - Use the minus character instead of "dash" #3271
- Changing
menu_image_buttonto useImageButtonbuilder #3288 (thanks @v-kat!) - Prune old egui memory data when reaching some limit #3299
🐛 Fixed
- Fix TextEdit's character limit #3173 (thanks @Serverator!)
- Set the correct unicode character for "ctrl" shortcuts #3186 (thanks @abey79!)
- Fix crash in
DragValuewhen only settingmin_decimals#3231 - Fix clipping issued with
ScrollArea#2860 (thanks @Barugon!) - Fix moving slider with arrow keys #3354
- Fix problems with tabs in text #3355
- Fix interaction with moved color-picker #3395
Release notes
Open source →- Update MSRV to Rust 1.70.0 #3310
- Update to puffin 0.16 #3144
- Update to
wgpu0.17.0 #3170 (thanks @Aaron1011!) - Improved wgpu callbacks #3253 (thanks @Wumpf!)
- Improve documentation of
eframe, especially for wasm32 #3295 eframe::Frame::inforeturns a reference #3301 (thanks @Barugon!)- Move
App::persist_windowtoNativeOptionsandApp::max_size_pointstoWebOptions#3397
Desktop/Native
- Only show on-screen-keyboard and IME when editing text #3362 (thanks @Barugon!)
- Add
eframe::storage_dir#3286 - Add
NativeOptions::window_builderfor more customization #3390 (thanks @twop!) - Better restore Window position on Mac when on secondary monitor #3239
- Fix iOS support in
eframe#3241 (thanks @lucasmerlin!) - Speed up
eframestate storage #3353 (thanks @sebbert!) - Allow users to opt-out of default
winitfeatures #3228 - Expose Raw Window and Display Handles #3073 (thanks @bash!)
- Use window title as fallback when app_id is not set #3107 (thanks @jacekpoz!)
- Sleep a bit only when minimized #3139 (thanks @icedrocket!)
- Prevent text from being cleared when selected due to winit IME #3376 (thanks @YgorSouza!)
- Fix android app quit on resume with glow backend #3080 (thanks @tkkcc!)
- Fix panic with persistence without window #3167 (thanks @sagebind!)
- Only call
run_returntwice on Windows #3053 (thanks @pan93412!) - Gracefully catch error saving state to disk #3230
- Recognize numpad enter/plus/minus #3285
- Add more puffin profile scopes to
eframe#3330 #3332
Web
-
0.22.023 May 2023Release notes
Open source →⭐ Added
- Scroll bar visibility options #2729 (thanks @IVAN-MK7!)
- Add
Grid::with_row_color#2519 (thanks @imgurbot12!) - Add raw mouse wheel event #2782 (thanks @YgorSouza!)
- Improved plot groups and bounds handling #2410 (thanks @s-nie!)
- Return plot transforms #2935
- Add
Pointer::is_decidedly_draggingandcould_any_button_be_click#2979 - Plot widget - allow disabling zoom and drag for x and y separately #2901 (thanks @OmegaJak!)
- Add character limit to
TextEdit#2816 (thanks @wzid!) - Add
egui::Modifiers::contains#2989 (thanks @Wumpf!)
🔧 Changed
- Improve vertical alignment of fonts #2724 (thanks @lictex!)
- Transpose the value/satuation panel of the color picker #2727 (thanks @IVAN-MK7!)
- Replace
ComboBox::show_indexStringwithInto<TextWidget>#2790 (thanks @tosti007!) - Replace
tracingwithlog#2928 - Only show id clash warnings in debug builds by default #2930
- ⚠️ BREAKING:
Plot::link_axisandPlot::link_cursornow take the name of the group #2410
🐛 Fixed
- Clear all keys and modifies on focus change, fixing "stuck keys" #2933
- Fix deadlock when using
show_blocking_widget#2753 (thanks @YgorSouza!) - Fix the OS check for windows #2832 (thanks @jleibs!)
- Fix scroll bars not appearing (#2826) #2827 (thanks @lunixbochs!)
- Fix UI
data()read mutability #2742 (thanks @IS2511!) - Menu State rect now uses menu frame rect instead of contents rect #2886 (thanks @hats-np!)
- Hide
Response::triple_clickedin docs #2867 (thanks @ccaven!) request_repaint_afterworks even when called from background thread #2939- Show alt key on Mac as
"Option", not"Alt"#2981 (thanks @Wumpf!) - Mention
storeinTextEditStatedoc comment #2988 (thanks @fxdave!) - Fix typos #2866 (thanks @fezjo!)
✨ Examples
- Fix resizable columns option in the table demo #2780 (thanks @Bobo1239!)
- Update serial window example #2756 (thanks @c-git!)
- Demo app: use
enuminstead of strings for demo-selector anchor #2781 (thanks @XyLyXyRR!) - Use
env_loggerin all examples #2934 - Rename
examples/user_attention/README.mgtoREADME.md#2948 (thanks @MAlba124!) - egui_demo_app: add some native window info b5c24d6
Release notes
Open source →- Fix:
request_repaint_afterworks even when called from background thread #2939 - Clear all keys and modifies on focus change #2857 #2933
- Remove dark-light dependency #2929
- Replace
tracingwithlog#2928 - Update accesskit to 0.11 #3012
Desktop/Native
- Automatically change theme when system dark/light mode changes #2750 (thanks @bash!)
- Enabled wayland feature for winit when running native #2751 (thanks @ItsEthra!)
- Fix eframe window position bug (pixels vs points) #2763 (thanks @get200!)
- Add
Frame::request_screenshotandFrame::screenshotto communicate to the backend that a screenshot of the current frame should be exposed byFrameduringApp::post_rendering(#2676). - Add
eframe::run_simple_native* a simple API for simple apps (#2453). - Add
NativeOptions::app_idwhich allows to set the Wayland application ID under Linux (#1600). - Add
NativeOptions::active#2813 (thanks @Dixeran!) - Remove
android-activitydependency + addActivitybackend features #2863 (thanks @rib!) - Fix bug where the eframe window is never destroyed on Linux when using
run_and_return(#2892) - Fix state persisting when exiting on Linux #2895 (thanks @flukejones!)
- Allow for requesting the user's attention to the window #2905 (thanks @TicClick!)
- Read and request window focus #2900 (thanks @TicClick!)
- Set app icon on Mac and Windows #2940
- Set a default icon for all eframe apps: a white
eon black background #2996 - Add
NativeOptions::app_idfor the persistence location #3014 and for Wayland #3007 (thanks @thomaskrause!) - capture a screenshot using
Frame::request_screenshot870264b
Web
- ⚠️ BREAKING:
eframe::start_webhas been replaced witheframe::WebRunner, which also installs a nice panic hook (no need forconsole_error_panic_hook). - ⚠️ BREAKING: WebGPU is now the default web renderer when using the
wgpufeature ofeframe. To use WebGL withwgpu, you need to addwgpu = { version = "0.16.0", features = ["webgl"] }to your ownCargo.toml. (#2945) - Add
eframe::WebLoggerfor redirectinglogcalls to the web console (console.log). - Prefer the client width/height for the canvas parent #2804 (thanks @samitbasu!)
- eframe web: Persist app state to local storage when leaving site #2927
- Better panic handling #2942 #2992
- Update wasm-bindgen to 0.2.86 #2995
- Properly unsubscribe from events on destroy 4d360f6
-
0.21.315 Feb 2023 -
0.21.212 Feb 2023 -
0.21.112 Feb 2023Release notes
Open source →- Fixed crash when native window position is in an invalid state, which could happen e.g. due to changes in monitor size or DPI (#2722).
-
0.21.008 Feb 2023Release notes
Open source →- ⚠️ BREAKING:
egui::Contextnow use closures for locking (#2625):ctx.input().key_pressed(Key::A)->ctx.input(|i| i.key_pressed(Key::A))ui.memory().toggle_popup(popup_id)->ui.memory_mut(|mem| mem.toggle_popup(popup_id))
⭐ Added
- Add
Response::drag_started_byandResponse::drag_released_byfor convenience, similar todraggedanddragged_by(#2507). - Add
PointerState::*_pressedto check if the given button was pressed in this frame (#2507). Event::Keynow has arepeatfield that is set totrueif the event was the result of a key-repeat (#2435).- Add
Slider::drag_value_speed, which lets you ask for finer precision when dragging the slider value rather than the actual slider. - Add
Memory::any_popup_open, which returns true if any popup is currently open (#2464). - Add
Plot::clamp_gridto only show grid where there is data (#2480). - Add
ScrollArea::drag_to_scrollif you want to turn off that feature. - Add
Response::on_hover_and_drag_cursor. - Add
Window::default_open(#2539). - Add
ProgressBar::fillif you want to set the fill color manually. (#2618). - Add
Button::roundingto enable round buttons (#2616). - Add
WidgetVisuals::optional_bg_color- set it toColor32::TRANSPARENTto hide button backgrounds (#2621). - Add
Context::screen_rectandContext::set_cursor_icon(#2625). - You can turn off the vertical line left of indented regions with
Visuals::indent_has_left_vline(#2636). - Add
Response.highlightto highlight a widget (#2632). - Add
Separator::growandSeparator::shrink(#2665). - Add
Slider::trailing_fillfor trailing color behind the circle like aProgressBar(#2660).
🔧 Changed
- Improved plot grid appearance (#2412).
- Improved the algorithm for picking the number of decimals to show when hovering values in the
Plot. - Default
ComboBoxis now controlled withSpacing::combo_width(#2621). DragValueandSlidernow use the proportional font (#2638).ScrollAreais less aggressive about clipping its contents (#2665).- Updated to be compatible with a major breaking change in AccessKit that drastically reduces memory usage when accessibility is enabled (#2678).
- Improve
DragValuebehavior (#2649, #2650, #2688, #2638).
🐛 Fixed
- Trigger
PointerEvent::Releasedfor drags (#2507). - Expose
TextEdit's multiline flag to AccessKit (#2448). - Don't render
\r(Carriage Return) (#2452). - The
button_paddingstyle option works closer as expected with image+text buttons now (#2510). - Menus are now moved to fit on the screen.
- Fix
Window::pivotcausing windows to move around (#2694).
Release notes
Open source →- ⚠️ BREAKING:
App::clear_colornow expects you to return a raw float array (#2666). - The
screen_readerfeature has now been renamedweb_screen_readerand only work on web. On other platforms, use theaccesskitfeature flag instead (#2669).
Desktop/Native
eframe::run_nativenow returns aResult(#2433).- Update to
winit0.28, adding support for mac trackpad zoom (#2654). - Fix bug where the cursor could get stuck using the wrong icon.
NativeOptions::transparentnow works with the wgpu backend (#2684).- Add
Frame::set_minimizedandset_maximized(#2292, #2672). - Fixed persistence of native window position on Windows OS (#2583).
Web
- Prevent ctrl-P/cmd-P from opening the print dialog (#2598).
- ⚠️ BREAKING:
-
0.20.111 Dec 2022Release notes
Open source →🔧 Changed
InputState: all press functions again include key repeats (like in egui 0.19) (#2429).- Improve the look of thin white lines (#2437).
🐛 Fixed
- Fix key-repeats for
TextEdit,Sliders, etc (#2429).
-
0.20.008 Dec 2022Release notes
Open source →- MSRV (Minimum Supported Rust Version) is now
1.65.0(#2314). - ⚠️ BREAKING: egui now expects integrations to do all color blending in gamma space (#2071).
- ⚠️ BREAKING: if you have overlapping interactive widgets, only the top widget (last added) will be interactive (#2244).
⭐ Added
- Added helper functions for animating panels that collapse/expand (#2190).
- Added
Context::os/Context::set_osto query/set what operating system egui believes it is running on (#2202). - Added
Button::shortcut_textfor showing keyboard shortcuts in menu buttons (#2202). - Added
egui::KeyboardShortcutfor showing keyboard shortcuts in menu buttons (#2202). - Texture loading now takes a
TextureOptionswith minification and magnification filters (#2224). - Added
Key::MinusandKey::Equals(#2239). - Added
egui::gui_zoommodule with helpers for scaling the whole GUI of an app (#2239). - You can now put one interactive widget on top of another, and only one will get interaction at a time (#2244).
- Added
spacing.menu_marginfor customizing menu spacing (#2036) - Added possibility to enable text wrap for the selected text of
egui::ComboBox(#2272) - Added
Area::constrainandWindow::constrainwhich constrains area to the screen bounds (#2270). - Added
Area::pivotandWindow::pivotwhich controls what part of the window to position (#2303). - Added support for thin space.
- Added optional integration with AccessKit for implementing platform accessibility APIs (#2294).
- Added
panel_fill,window_fillandwindow_stroketoVisualsfor your theming pleasure (#2406). - Plots:
🔧 Changed
- Panels always have a separator line, but no stroke on other sides. Their spacing has also changed slightly (#2261).
- Tooltips are only shown when mouse pointer is still (#2263).
- Make it slightly easier to click buttons (#2304).
egui::colorhas been renamedegui::ecolor(#2399).
🐛 Fixed
- ⚠️ BREAKING: Fix text being too small (#2069).
- Improve mixed CJK/Latin line-breaking (#1986).
- Improved text rendering (#2071).
- Constrain menu popups to the screen (#2191).
- Less jitter when calling
Context::set_pixels_per_point(#2239). - Fixed popups and color edit going outside the screen.
- Fixed keyboard support in
DragValue(#2342). - If you nest
ScrollAreasinside each other, the inner area will now move its scroll bar so it is always visible (#2371). - Ignore key-repeats for
input.key_pressed(#2334, #2389). - Fixed issue with calling
set_pixels_per_pointeach frame (#2352). - Fix bug in
ScrollArea::show_rows(#2258). - Fix bug in
plot::Line::fill(#2275). - Only emit
changedevents inradio_valueandselectable_valueif the value actually changed (#2343). - Fixed sizing bug in
Grid(#2384). ComboBox::widthnow correctly sets the outer width (#2406).
Release notes
Open source →- MSRV (Minimum Supported Rust Version) is now
1.65.0(#2314). - Allow empty textures with the glow renderer.
Desktop/Native
- Don't repaint when just moving window (#1980).
- Added
NativeOptions::event_loop_builderhook for apps to change platform specific event loop options (#1952). - Enabled deferred render state initialization to support Android (#1952).
- Added
shader_versiontoNativeOptionsfor cross compiling support on different target OpenGL | ES versions (on nativeglowrenderer only) (#1993). - Fix: app state is now saved when user presses Cmd-Q on Mac (#2013).
- Added
centertoNativeOptionsandmonitor_sizetoWindowInfoon desktop (#2035). - Improve IME support (#2046).
- Added mouse-passthrough option (#2080).
- Added
NativeOptions::fullsize_contentoption on Mac to build titlebar-less windows with floating window controls (#2049). - Wgpu device/adapter/surface creation has now various configuration options exposed via
NativeOptions/WebOptions::wgpu_options(#2207). - Fix: Make sure that
native_pixels_per_pointis updated (#2256). - Added optional, but enabled by default, integration with AccessKit for implementing platform accessibility APIs (#2294).
- Fix: Less flickering on resize on Windows (#2280).
Web
- ⚠️ BREAKING:
start_webis a nowasync(#2107). - Web: You can now use WebGL on top of
wgpuby enabling thewgpufeature (and disablingglowvia disabling default features) (#2107). - Web: Add
WebInfo::user_agent(#2202). - Web: you can access your application from JS using
AppRunner::app_mut. Seecrates/egui_demo_app/src/lib.rs(#1886).
- MSRV (Minimum Supported Rust Version) is now
-
0.19.020 Aug 2022Release notes
Open source →⭐ 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
Context::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).
Release notes
Open source →- MSRV (Minimum Supported Rust Version) is now
1.61.0(#1846). - Added
wgpurendering backed (#1564):- Added features
wgpuandglow. - Added
NativeOptions::rendererto switch between the rendering backends.
- Added features
egui_glow: remove calls togl.get_errorin release builds to speed up rendering (#1583).- Added
App::post_renderingfor e.g. reading the framebuffer (#1591). - Use
Arcforglow::Contextinstead ofRc(#1640). - Fixed bug where the result returned from
App::on_exit_eventwould sometimes be ignored (#1696). - Added
NativeOptions::follow_system_themeandNativeOptions::default_theme(#1726). - Selectively expose parts of the API based on target arch (
wasm32or not) (#1867).
Desktop/Native
- Fixed clipboard on Wayland (#1613).
- Added ability to read window position and size with
frame.info().window_info(#1617). - Allow running on native without hardware accelerated rendering. Change with
NativeOptions::hardware_acceleration(#1681, #1693). - Fixed window position persistence (#1745).
- Fixed mouse cursor change on Linux (#1747).
- Added
Frame::set_visible(#1808). - Added fullscreen support (#1866).
- You can now continue execution after closing the native desktop window (#1889).
Frame::quithas been renamed toFrame::closeandApp::on_exit_eventis nowApp::on_close_event(#1943).
Web
- Added
-
0.18.030 Apr 2022Release notes
Open source →⭐ 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 🙏
Release notes
Open source →- MSRV (Minimum Supported Rust Version) is now
1.60.0(#1467). - Removed
eframe::epi- everything is now ineframe(eframe::App,eframe::Frameetc) (#1545). - Removed
Frame::request_repaint- just callegui::Context::request_repaintfor the same effect (#1366). - Changed app creation/setup (#1363):
- Removed
App::setupandApp::name. - Provide
CreationContextwhen creating app with egui context, storage, integration info and glow context. - Change interface of
run_nativeandstart_web.
- Removed
- Added
Frame::storage()andFrame::storage_mut()(#1418).- You can now load/save state in
App::update - Changed
App::updateto take&mut Frameinstead of&Frame. Frameis no longerCloneorSync.
- You can now load/save state in
- Added
glow(OpenGL) context toFrame(#1425).
Desktop/Native
- Remove the
egui_gliumfeature.eframewill now always useegui_glowas the native backend (#1357). - Change default for
NativeOptions::drag_and_drop_supporttotrue(#1329). - Added new
NativeOptions:vsync,multisampling,depth_buffer,stencil_buffer. dark-light(dark mode detection) is now an opt-in feature (#1437).- Fixed potential scale bug when DPI scaling changes (e.g. when dragging a window between different displays) (#1441).
- Added new feature
puffinto addpuffin profilerscopes (#1483). - Moved app persistence to a background thread, allowing for smoother frame rates (on native).
- Added
Frame::set_window_pos(#1505).
Web
- Added
-
0.17.022 Feb 2022Release notes
Open source →⭐ 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 a 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).ScrollAreas 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 🙏
Release notes
Open source →- Removed
Frame::alloc_texture. Useegui::Context::load_textureinstead (#1110). - Shift-scroll will now result in horizontal scrolling on all platforms (#1136).
- Log using the
tracingcrate. Log to stdout by addingtracing_subscriber::fmt::init();to yourmain(#1192).
Desktop/Native
- The default native backend is now
egui_glow(instead ofegui_glium) (#1020). - Automatically detect and apply dark or light mode from system (#1045).
- Fixed horizontal scrolling direction on Linux.
- Added
App::on_exit_event(#1038) - Added
NativeOptions::initial_window_pos. - Fixed
enable_dragfor Windows OS (#1108).
Web
- Much improved font selection (#1154):
-
0.16.029 Dec 2021Release notes
Open source →⭐ 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 🙏
Release notes
Open source →Framecan now be cloned, saved, and passed to background threads (#999).- Added
Frame::request_repaintto replacerepaint_signal(#999). - Added
Frame::alloc_texture/free_textureto replacetex_allocator(#999).
Web
- Fixed dark rendering in WebKitGTK (#888).
- Added feature
glowto switch to aglowbased painter (#868).
- Added context menus: See
-
0.15.024 Oct 2021Release notes
Open source →<img src="media/egui-0.15-code-editor.gif">
⭐ Added
- Added horizontal scrolling support to
ScrollAreaandWindow(opt-in). TextEdit::layouter: Add custom text layout for e.g. syntax highlighting or WYSIWYG.Fonts::layout_job: New text layout engine allowing mixing fonts, colors and styles, with underlining and strikethrough.- Added
ui.add_enabled(bool, widget)to easily add a possibly disabled widget. - Added
ui.add_enabled_ui(bool, |ui| …)to create a possibly disabled UI section. - Added feature
"serialize"separately from"persistence". - Added
egui::widgets::global_dark_light_mode_buttonsto easily add buttons for switching the egui theme. TextEditcan now be used to show text which can be selected and copied, but not edited.- Added
Memory::cachesfor caching things from one frame to the next.
🔧 Changed
- Change the default monospace font to Hack.
- Label text will now be centered, right-aligned and/or justified based on the layout of the
Uiit is in. Hyperlinkwill now word-wrap just like aLabel.- All
Uis must now have a finitemax_rect.- Deprecated:
max_rect_finite,available_size_before_wrap_finiteandavailable_rect_before_wrap_finite.
- Deprecated:
Painter/Fonts: text layout now expect a color when creating aGalley. You may override that color withPainter::galley_with_color.- MSRV (Minimum Supported Rust Version) is now
1.54.0. - By default,
DragValues no longer show a tooltip when hovered. Change withStyle::explanation_tooltips. - Smaller and nicer color picker.
ScrollAreawill auto-shrink to content size unless told otherwise usingScrollArea::auto_shrink.- By default,
Slider'sclamp_to_rangeis set to true. - Renamed
TextEdit::enabledtoTextEdit::interactive. ui.label(and friends) now takeimpl ToStringas argument instead ofimpl Into<Label>.
🐛 Fixed
- Fixed wrongly sized multiline
TextEditin justified layouts. - Fixed clip rectangle of windows that don't fit the central area.
- Show tooltips above widgets on touch screens.
- Fixed popups sometimes getting clipped by panels.
🔥 Removed
- Replace
Button::enabledwithui.add_enabled.
Contributors 🙏
Release notes
Open source →Framenow providesset_window_titleto set window title dynamically (#828).Framenow providesset_decorationsto set whether to show window decorations.- Remove "http" feature (use https://github.com/emilk/ehttp instead!).
- Added
App::persist_native_windowandApp::persist_egui_memoryto control what gets persisted.
Desktop/Native
- Increase native scroll speed.
- Added new backend
egui_glowas an alternative toegui_glium. Enable withdefault-features = false, features = ["default_fonts", "egui_glow"].
Web
- Implement
eframe::NativeTexturetrait for the WebGL painter. - Deprecate `Painter::register_webgl_texture.
- Fixed multiline paste.
- Fixed painting with non-opaque backgrounds.
- Improve text input on mobile and for IME.
- Added horizontal scrolling support to
-
0.14.024 Aug 2021Release notes
Open source →⭐ Added
- Panels can now be added to any
Ui. - Plot:
- Line styles.
- Added
show_backgroundandshow_axesmethods toPlot.
- Progress bar.
Grid::num_columns: allow the last column to take up the rest of the space of the parentUi.- Added an API for dropping files into egui (see
RawInput). CollapsingHeadercan now optionally be selectable.
🔧 Changed
- A single-line
TextEditwill now clip text that doesn't fit in it, and scroll. - Return closure return value from
Area::show,ComboBox::show_ui,ComboBox::combo_box_with_label,Window::show,popup::*,menu::menu. - Only move/resize windows with primary mouse button.
- Tooltips are now moved to not cover the widget they are attached to.
🐛 Fixed
- Fixed custom font definitions getting replaced when
pixels_per_pointis changed. - Fixed
lost_focusforTextEdit. - Clicking the edge of a menu button will now properly open the menu.
- Fixed hover detection close to an
Area. - Fixed case where
Plot'smin_auto_boundscould be ignored after the first call toPlot::ui. - Fixed slow startup when using large font files.
Contributors 🙏
Release notes
Open source →- Added dragging and dropping files into egui.
- Improve http fetch API.
run_nativenow returns when the app is closed.- Web: Made text thicker and less pixelated.
- Panels can now be added to any
-
0.13.124 Jun 2021Release notes
Open source →⭐ Added
- Plot: you can now set the stroke of a
HLine/VLine.
🔧 Changed
Plot::newnow takes anid_source: impl Hashinstead of aname: impl ToString. Functionally it is the same.
- Plot: you can now set the stroke of a
-
0.13.024 Jun 2021Release notes
Open source →⭐ Added
- Plot:
- Panels:
- Added right and bottom panels (
SidePanel::rightandPanel::bottom). - Panels can now be resized.
- Added an option to overwrite frame of a
Panel.
- Added right and bottom panels (
- Improve accessibility / screen reader.
- Added
ScrollArea::show_rowsfor efficient scrolling of huge UI:s. - Added
ScrollArea::enable_scrollingto allow freezing scrolling when editing TextEdit widgets within it - Added
Ui::set_visibleas a way to hide widgets. - Added
Style::override_text_styleto easily change the text style of everything in aUi(or globally). - You can now change
TextStyleon checkboxes, radio buttons andSelectableLabel. - Added support for cint under
cintfeature. - Added features
extra_assertsandextra_debug_assertsto enable additional checks. TextEditnow supports edits on a generic buffer usingTextBuffer.- Added
Context::set_debug_on_hoverandegui::trace!(ui)
🔧 Changed
- Minimum Rust version is now 1.51 (used to be 1.52)
- Tweaked the default visuals style.
- Plot: Renamed
CurvetoLine. TopPanel::topis nowTopBottomPanel::top.SidePanel::leftno longer takes the default width by argument, but by a builder call.SidePanel::leftis resizable by default.
🐛 Fixed
- Fixed uneven lettering on non-integral device scales ("extortion lettering").
- Fixed invisible scroll bar when native window is too narrow for egui.
Release notes
Open source →App::setupnow takes aFrameandStorageby argument.App::loadhas been removed. ImplementApp::setupinstead.- Web: Default to light visuals unless the system reports a preference for dark mode.
- Web: Improve alpha blending, making fonts look much better (especially in light mode)
- Web: Fix double-paste bug
-
0.12.010 May 2021Release notes
Open source →⭐ Added
- Added anchors to windows and areas so you can put a window in e.g. the top right corner.
- Make labels interactive with
Label::sense(Sense::click()). - Added
Response::request_focusandResponse::surrender_focus. - Added
TextEdit::code_editor(VERY basic). - Pan and zoom plots.
- Add plot legends.
- Users can now store custom state in
egui::Memory. - Added
Response::on_disabled_hover_textto show tooltip for disabled widgets. - Zoom input: ctrl-scroll and (on
eframeweb) trackpad-pinch gesture. - Support for raw multi touch events,
enabling zoom, rotate, and more. Works with
eframeweb on mobile devices, and should work withegui_gliumfor certain touch devices/screens. - Added (optional) compatibility with mint.
🔧 Changed
- Make
Memory::has_focuspublic (again). Plotmust now be given a name that is unique within its scope.- Tab only selects labels if the
screen_readeroption is turned on. - Renamed
ui.wraptoui.scope.
🐛 Fixed
- Fixed defocus-bug on touch screens.
- Fixed bug with the layout of wide
DragValues.
🔥 Removed
- Moved experimental markup language to
egui_demo_lib
Release notes
Open source →- Moved options out of
trait Appinto newNativeOptions. - Added option for
always_on_top. - Web: Scroll faster when scrolling with mouse wheel.
-
0.11.005 Apr 2021Release notes
Open source →⭐ Added
- You can now give focus to any clickable widget with tab/shift-tab.
- Use space or enter to click the selected widget.
- Use arrow keys to adjust sliders and
DragValues.
- egui will now output events when widgets gain keyboard focus.
- This can be hooked up to a screen reader to aid the visually impaired
- Added the option to restrict the dragging bounds of
WindowandAreato a specified area usingdrag_bounds(rect). - Added support for small and raised text.
- Added
ui.set_row_height. - Added
DebugOptions::show_widgetsto debug layouting by hovering widgets. - Added
ComboBoxto more easily customize combo boxes. - Added
Slider::newandDragValue::newto replace old type-specific constructors. - Added
TextEdit::passwordto hide input characters.
🔧 Changed
ui.advance_cursoris now calledui.add_space.kb_focusis now just calledfocus.
🐛 Fixed
- Fixed some bugs related to centered layouts.
- Fixed secondary-click to open a menu.
- Fix panic for zero-range sliders and zero-speed drag values.
- Fixed false id clash error for wrapping text.
- Fixed bug that would close a popup (e.g. the color picker) when clicking inside of it.
☢️ Deprecated
- Deprecated
combo_box_with_labelin favor of newComboBox. - Deprecated type-specific constructors for
SliderandDragValue(Slider::f32,DragValue::usizeetc).
Release notes
Open source →- You can now turn your window transparent with the
App::transparentoption. - You can now disable window decorations with the
App::decoratedoption. - Web: Fix mobile and IME text input
- Web: Hold down a modifier key when clicking a link to open it in a new tab.
Contributors: n2
- You can now give focus to any clickable widget with tab/shift-tab.
-
0.10.028 Feb 2021Release notes
Open source →<img src="media/egui-0.10-plot.gif" width="50%">
⭐ Added
- Added
egui::plot::Plotto plot some 2D data. - Added
Ui::hyperlink_to(label, url). - Sliders can now have a value prefix and suffix (e.g. the suffix
"°"works like a unit). Context::set_pixels_per_pointto control the scale of the UI.- Added
Response::changed()to query if e.g. a slider was dragged, text was entered or a checkbox was clicked. - Added support for all integers in
DragValueandSlider(except 128-bit).
🔧 Changed
- Improve the positioning of tooltips.
- Only show tooltips if mouse is still.
Sliderwill now show the value display by default, unless turned off with.show_value(false).- The
Slidervalue is now aDragValuewhich when dragged can pick values outside of the slider range (unlessclamp_to_rangeis set).
Release notes
Open source →- You can now set your own app icons.
- You can control the initial size of the native window with
App::initial_window_size. - You can control the maximum egui web canvas size with
App::max_size_points. Frame::tex_allocator()no longer returns anOption(there is always a texture allocator).
- Added
-
0.9.007 Feb 2021Release notes
Open source →<img src="media/0.9.0-disabled.gif" width="50%">
⭐ Added
- Added support for secondary and middle mouse buttons.
- Added
Labelmethods for code, strong, strikethrough, underline and italics. - Added
ui.group(|ui| { … })to visually group some widgets within a frame. - Added
Uihelpers for doing manual layout (ui.put,ui.allocate_ui_at_rectand more). - Added
ui.set_enabled(false)to disable all widgets in aUi(grayed out and non-interactive). - Added
TextEdit::hint_textfor showing a weak hint text when empty. egui::popup::popup_below_widget: show a popup area below another widget.- Added
Slider::clamp_to_range(bool): if set, clamp the incoming and outgoing values to the slider range. - Add:
ui.spacing(),ui.spacing_mut(),ui.visuals(),ui.visuals_mut(). - Add:
ctx.set_visuals(). - You can now control text wrapping with
Style::wrap. - Added
Grid::max_col_width.
🔧 Changed
- Text will now wrap at newlines, spaces, dashes, punctuation or in the middle of a words if necessary, in that order of priority.
- Widgets will now always line break at
\ncharacters. - Widgets will now more intelligently choose whether or not to wrap text.
mousehas been renamedpointereverywhere (to make it clear it includes touches too).- Most parts of
Responseare now methods, soif ui.button("…").clicked {is nowif ui.button("…").clicked() {. Response::activeis now gone. You can useresponse.dragged()orresponse.clicked()instead.- Backend: pointer (mouse/touch) position and buttons are now passed to egui in the event stream.
DragValue::rangeis now calledclamp_rangeand also clamps incoming values.- Renamed
TrianglestoMesh. - The tessellator now wraps the clip rectangle and mesh in
struct ClippedMesh(Rect, Mesh). Mesh::split_to_u16now returns a 16-bit indexedMesh16.
🐛 Fixed
- It is now possible to click widgets even when FPS is very low.
- Tessellator: handle sharp path corners better (switch to bevel instead of miter joints for > 90°).
Release notes
Open source →- Added support for HTTP body.
- Web: Right-clicks will no longer open browser context menu.
- Web: Fix a bug where one couldn't select items in a combo box on a touch screen.
-
0.8.017 Jan 2021Release notes
Open source →<img src="media/widget_gallery_0.8.0.gif" width="50%">
⭐ Added
- Added a simple grid layout (
Grid). - Added
ui.allocate_at_leastandui.allocate_exact_size. - Added function
InputState::key_down. - Added
Window::current_posto position a window.
🔧 Changed
- New simpler and sleeker look!
- Renamed
PaintCmdtoShape. - Replace tuple
(Rect, Shape)with tuple-structClippedShape. - Renamed feature
"serde"to"persistence". - Break out the modules
mathandpaintinto separate cratesemathandepaint.
🐛 Fixed
- Fixed a bug that would sometimes trigger a "Mismatching panels" panic in debug builds.
ImageandImageButtonwill no longer stretch to fill a justified layout.
Release notes
Open source →- Simplify
TextureAllocatorinterface. - WebGL2 is now supported, with improved texture sampler. WebGL1 will be used as a fallback.
- Web: Slightly improved alpha-blending (work-around for non-existing linear-space blending).
- Web: Call
prevent_defaultfor arrow keys when entering text
- Added a simple grid layout (
-
0.7.004 Jan 2021Release notes
Open source →⭐ Added
- Added
ui.scroll_to_cursorandresponse.scroll_to_me(#81 by lucaspoffo). - Added
window.id(…)andarea.id(…)for overriding the defaultId.
🔧 Changed
- Renamed
SrgbatoColor32. - All color constructors now starts with
from_, e.g.Color32::from_rgb. - Renamed
FontFamily::VariableWidthtoFontFamily::Proportional. - Removed
pixels_per_pointfromFontDefinitions.
🐛 Fixed
RepaintSignalnow implementsSyncso it can be sent to a background thread.TextEditwidgets are now slightly larger to accommodate their frames.
☢️ Deprecated
- Deprecated
color::srgba.
- Added