v1.91.9
❤️ Last summer was the 10th anniversary of v1.00! Read: 10 years of Dear ImGui ! 🎉
✋ Reading the changelog is a good way to keep up to date with what Dear ImGui has to offer, and will give you ideas of some features that you've been ignoring until now!
📣 If you are browsing multiple releases: click version number above to display full release note contents, otherwise it is badly clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A. Also see our Wiki with sections such as..
- Getting Started (~25 lines in an existing app)
- Useful Extensions/Widgets
- Software using Dear ImGui
- Bindings & Backends
- and more! 👌
Dear ImGui is funded by your contributions and absolutely needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Funding page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.
❤️ Thanks to recent years sponsors ❤️
- Adobe !
- Aras P !
- G3Dvu !
- FUTO !
- Gravity Well !
- id Software !
- Lucid Games !
- MachineGames !
- Mobigame !
- Planestate Software !
- OTOY !
- SCS Software !
- Sebastian Schöner !
- Scorewarrior !
- Supercell !
- Tanius Technology !
- Valve !
❤️ And many individuals ❤️
Thanks to @GamingMinds-DanielC, @PathogenDavid & more for their help with GitHub answers!
Changes (since v1.91.8)
Breaking Changes:
- Image: removed
tint_col
andborder_col
parameter fromImage()
function. (#8131, #8238)- Old function signature:
void Image (ImTextureID tex_id, ImVec2 image_size, ImVec2 uv0 = (0,0), ImVec2 uv1 = (1,1), ImVec4 tint_col = (1,1,1,1), ImVec4 border_col = (0,0,0,0));
- New function signatures:
void Image (ImTextureID tex_id, ImVec2 image_size, ImVec2 uv0 = (0,0), ImVec2 uv1 = (1,1));
void ImageWithBg(ImTextureID tex_id, ImVec2 image_size, ImVec2 uv0 = (0,0), ImVec2 uv1 = (1,1), ImVec4 bg_col = (0,0,0,0), ImVec4 tint_col = (1,1,1,1));
- TL;DR:
border_col
had misleading side-effect on layout,bg_col
was missing, parameter order couldn't be consistent withImageButton()
. - New behavior always use
ImGuiCol_Border
color +style.ImageBorderSize
/ImGuiStyleVar_ImageBorderSize
. - Old behavior altered border size (and therefore layout) based on border color's alpha, which caused variety of problems.
- Old behavior used a fixed value of 1.0f for border size which was not tweakable.
- Kept legacy signature (will obsolete), which mimics the old behavior, but uses
Max(1.0f, style.ImageBorderSize)
whenborder_col
is specified. - Added
ImageWithBg()
function which has bothbg_col
(which was missing and most useful) andtint_col
. It was impossible to addbg_col
to Image() with a parameter order consistent with other functions, so we decided to removetint_col
and introduceImageWithBg()
.
- Old function signature:
- Renamed
ImFontConfig::GlyphExtraSpacing.x
option toGlyphExtraAdvanceX
. (#242) - Renamed
style.TabMinWidthForCloseButton
tostyle.TabCloseButtonMinWidthUnselected
. - Backends: Vulkan: Added
uint32_t api_version
argument toImGui_ImplVulkan_LoadFunctions()
. Note that it was also added toImGui_ImplVulkan_InitInfo()
but for the later it is optional. (#8326, #8365, #8400) - Internals: Menus: reworked mangling of menu windows to use
"###Menu_00"
etc. instead of"##Menu_00"
, allowing them to also store the menu name before it. This shouldn't affect code unless directly accessing menu window from their mangled name.
Other changes:
- Fixed
IsItemDeactivatedAfterEdit()
signal being broken forCheckbox()
,RadioButton()
,Selectable()
. Regression from 2025/01/13. (#8370) - Windows: Fixed an issue where
BeginChild()
inside a collapsedBegin()
wouldn't inherit theSkipItems
flag, resulting in missing coarse clipping opportunities for code not checking theBeginChild()
return value. - Windows, Style: Added
style.WindowBorderHoverPadding
setting to configure inner/outer padding applied to hit-testing of windows borders and detection of hovered window. - InputText: Allow CTRL+Shift+Z to redo even outside of OSX. (#8389) [@tanksdude]
- InputText: Pasting a multi-line buffer into a single-line edit replaces carriage return by spaces. (#8459)
- InputTextWithHint(): Fixed buffer-overflow (luckily often with no visible effect) when a user callback modified the buffer contents in a way that altered the visibility of the preview/hint buffer. (#8368) [@m9710797, @ocornut]
- Scrollbar: Rework logic that fades-out scrollbar when it becomes too small, which amusingly made it disappear when using very big font/frame size.
- Scrollbar: Automatically stabilize ScrollbarX visibility when detecting a feedback loop manifesting with ScrollbarX visibility toggling on and off repeatedly. (#8488, #3285, #4539) (feedback loops of this sort can manifest in various situations, but combining horizontal + vertical scrollbar + using a clipper with varying width items is one frequent cause. The better solution is to, either: (1) enforce visibility by using
ImGuiWindowFlags_AlwaysHorizontalScrollbar
or (2) declare stable contents width withSetNextWindowContentSize()
, if you can compute it.) - Tables: fixed calling
SetNextWindowScroll()
on clipped scrolling table to not leak the value into a subsequent window. (#8196) - Tables: fixed an issue where Columns Visible/Width state wouldn't be correctly restored when hot-reloading .ini state. (#7934)
- Tables: tamed some .ini settings optimizations to more accurately allow overwriting/hot-reloading settings in more situations. (#7934)
- Tables, Error Handling: Recovery from invalid index in
TableSetColumnIndex()
. (#1651) - Image: Added
ImageWithBg()
variant with bg color and tint color. (#8131, #8238) - Image, Style: Added
style.ImageBorderSize
,ImGuiStyleVar_ImageBorderSize
. (#8131, #8238) - Selectable: Fixed horizontal label alignment with
SelectableTextAlign.x > 0.0f
and specifying a selectable size. (#8338) - Tabs, Style: made the Close Button of selected tabs always visible by default, without requiring to hover the tab. (#8387)
- Added
style.TabCloseButtonMinWidthSelected
/TabCloseButtonMinWidthUnselected
settings to configure visibility of the Close Button for selected and unselected tabs. (-1: always visible. 0.0f: visible when hovered. >0.0f: visible when hovered if minimum width) - Default for selected tabs:
TabCloseButtonMinWidthSelected == -1.0f
(always visible) - Default for unselected tabs:
TabCloseButtonMinWidthUnselected == 0.0f
(visible when hovered)
- Added
- Tabs: fixed middle-mouse-button to close tab not checking that close button is hovered, merely its visibility. (#8399, #8387) [@nicovanbentum]
- TextLink(), TextLinkOpenURL(): fixed honoring text baseline alignment. (#8451, #7660) [@achabense]
- TextLinkOpenURL(): fixed default Win32
io.PlatformOpenInShellFn
handler to handle UTF-8 regardless of system regional settings. (#7660) [@achabense] - Disabled: Fixed an issue restoring Alpha in
EndDisabled()
when using nestedBeginDisabled()
calls withPushStyleVar(ImGuiStyleVar_DisabledAlpha)
within. (#8454, #7640) - Clipper: Fixed an issue where passing an out of bound index to
clipper.IncludeItemByIndex()
could incorrectly offset the final cursor, even if that index was not iterated through. One case where it would manifest was calling Combo() with an out of range index. (#8450) - Debug Tools: Added
io.ConfigDebugHighlightIdConflictsShowItemPicker
(defaults to true) to allow disabled Item Picker suggestion in user facing builds. (#7961, #7669) - Debug Tools: Tweaked layout of ID Stack Tool and always display full path. (#4631)
- Misc: Various zealous warning fixes for newer version of Clang.
- Misc: Added
ImGuiMouseCursor_Wait
andImGuiMouseCursor_Progress
mouse cursors (busy/wait/hourglass shape, with or without an arrow cursor). - Demo: Reorganized "Widgets" section to be alphabetically ordered and split in more functions.
- Demo: Combos: demonstrate a very simple way to add a filter to a combo, by showing the filter inside the combo contents. (#718)
- Examples: SDL3: Added comments to clarify setup for users of the unfortunate
SDL_MAIN_USE_CALLBACKS
feature. (#8455) - IO: Added
ImGuiKey_Oem102
to ImGuiKey enum. (#7136, #7201, #7206, #7306, #8468) - Backends: reworked key handlers to use/prioritize untranslated scancodes instead of translated keycodes when dealing with OEM keys which are too difficult to find a reliable translated mapping on all systems, backends and keyboard layout. (#7136, #7201, #7206, #7306, #7670, #7672, #8468)
- The affected keys are:
ImGuiKey_Apostrophe
,ImGuiKey_Comma
,ImGuiKey_Minus
,ImGuiKey_Period
,ImGuiKey_Slash
,ImGuiKey_Semicolon
,ImGuiKey_Equal
,ImGuiKey_LeftBracket
,ImGuiKey_RightBracket
,ImGuiKey_Backslash
,ImGuiKey_GraveAccent
, and newly introducedImGuiKey_Oem102
. - This is NOT affecting characters used the text inputs.
- Fixes many cases of keys not emitting a ImGuiKey value with certain keyboard layouts.
- Makes emitted ImGuiKey values more consistent regardless of keyboard mapping, but you may be getting different values as before.
- Win32, SDL2, SDL3: Use scancodes for OEM keys.
- GLFW:
GLFW_KEY_WORLD_1
andGLFW_KEY_WORLD_2
are emittingImGuiKey_Oem102
.
- The affected keys are:
- Backends: GLFW: Fixed clipboard handler assertion when using GLFW <= 3.2.1 compiled with asserts enabled. (#8452)
- Backends: SDL2, SDL3: Using
SDL_OpenURL()
inplatform_io.Platform_OpenInShellFn
handler. (#7660) [@achabense] - Backends: SDL2, SDL3, Win32, Allegro5: Added support for
ImGuiMouseCursor_Wait
andImGuiMouseCursor_Progress
cursors. - Backends: SDL2, SDL3: Avoid calling
SDL_GetGlobalMouseState()
when mouse is in relative mode. (#8425, #8407) [@TheMode] - Backends: SDL2, SDL3: Only start
SDL_CaptureMouse()
when mouse is being dragged, to mitigate issues with e.g. Linux debuggers not claiming capture back on debug break. (#6410, #3650) - Backends: OpenGL3: Lazily reinitialize embedded GL loader for when calling backend from e.g. other DLL boundaries. (#8406)
- Backends: DirectX12: Fixed an issue where pre-1.91.5 legacy
ImGui_ImplDX12_Init()
signature started breaking in 1.91.8 due to missing command queue. (#8429) - Backends: Metal: Fixed a crash on application resources. (#8367, #7419) [@anszom]
- Backends: Vulkan: Added
ApiVersion
field inImGui_ImplVulkan_InitInfo
. Default to header version if unspecified. (#8326, #8365) [@mklefrancois] - Backends: Vulkan: Dynamic rendering path loads
"vkCmdBeginRendering"
/"vkCmdEndRendering"
(without -KHR suffix) on API 1.3. (#8326, #8365) [@mklefrancois] - Backends: WebGPU: Recreate image bind groups during render to allow reuse of
WGPUTextureView
pointers. (#8426, #8046, #7765, #8027) [@pplux, @Jairard] - Backends: WebGPU: Fix for DAWN API change
WGPUProgrammableStageDescriptor
->WGPUComputeState
. [@PhantomCloak] (#8369) - Backends: WebGPU: Fix for webgpu-native API changes. (#8426) [@pplux]
Changes from 1.91.8 to 1.91.9 specific to the Docking+Multi-Viewports branch:
- Docking: Removed legacy assert preventing to call
DockBuilderSplitNode()
on an existing split node. This makes using (technically internal) DockBuilder a little more flexible and bearable! (#8472) [@MegaMech] - Viewports: fixed an issue where in certain cases, a window repositioning leading to a monitor change could have the window incorrectly get clamped within the boundaries of its previous monitor. Would happen e.g. when loading .ini data during runtime. (#8484)
- Viewports: fixed an assert when a window load settings with a position outside monitor bounds, when there are multiple monitors. (#8393, #8385) [@gaborodriguez]
- Viewports + Backends: Win32: Fixed setting title bar text when applicationis compiled without UNICODE. (#7979, #5725) [@lailoken]
- Backends: GLFW, SDL2/SDL3: Update monitors and work areas information every frame, as the later may change regardless of monitor/display changes. (#8415)
- Backends: Win32:
WM_SETTINGCHANGE
'sSPI_SETWORKAREA
message also triggers a refresh of monitor list, as they contain work area information. (#8415) [@PathogenDavid, @lailoken]
Gallery
@drhelius: Geargrafx - A new PC Engine / TurboGrafx-16 emulator I’m currently working on:
https://github.com/drhelius/Geargrafx
@sava41: "Finished my 2d canvas + image editor. Uses ImGui and webgpu so you can try it in your browser"
https://github.com/sava41/miskeenity-canvas
@qbart: "Hi, here is a small contribution to ImGui ecosystem: AnimationCurve based on Cubic Hermite Splines - it splits the AnimationCurve into runtime and its editor in ImGUI. Feel free to copy and adapt it to your needs"
code links
curve.mp4
@howprice "Here's a screenshot of Aira Force, an interactive disassembler, emulator and debugger for classic Amiga software. Thanks a million for Dear Imgui!"
https://howprice.itch.io/aira-force
@zzrat "Hi, here's a screenshot of zzrat, a remote desktop and file transfer tool that I'm currently working on."
https://github.com/zzrat/zzrat
Kickstarter for DeathTower "overclocked roguelite tactical RPG" shows Dear ImGui tooling:
https://www.kickstarter.com/projects/headbangclub/deathtower-the-overclocked-roguelite-tactical-rpg
@philsajdak: "Here is a kernel-level forensics/debugging application I have currently been working on. It works with physical memory directly via memory mapping on processes, drivers, and more."
SatDump: A generic satellite data processing software.
https://github.com/SatDump/SatDump
e.g. video https://x.com/amsatdl/status/1897708906115174537
AMSAT-DL.-.The.moment.IM2.Athena.@Int_Machines.landed.on.the.Moon.Touchdown.17_28_50UTC.2025-03-06.as.received.by.the.20m.Bochum.radio.telescope.@SternwarteBO.1897708437024153600.mp4
@Omar-Chatila: "Motion Files Framework to compare trajectories for motor actions like squats. Part of my bachelor thesis. two motion files are compared and aligned using DTW, Frechet Matchings, Edit Distance (and variations) etc. Plots for cost matrix, alignment path, quality of alignment etc. "
Midnight Murder Club internal tooling by Velan Studios (game released yesterday!)
https://store.steampowered.com/app/2698870/Midnight_Murder_Club/
Also see previous releases details.
Note that GitHub are now clamping release notes sometimes really badly, click on a header/title to read full notes.
❤️ Last summer was the 10th anniversary of v1.00! Read: 10 years of Dear ImGui ! 🎉
💰 🙏 Dear ImGui is funded by your contributions and absolutely needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Funding page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.