Releases: ocornut/imgui
v1.92.5
v1.92.5 🪩
❤️ Last year 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
- Language Bindings & Engine 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 ❤️
Thanks to new sponsors:
And:
- Asobo Studio !
- BeamNG !
- G3Dvu !
- Gravity Well !
- Lucid Games !
- MachineGames !
- Mobigame !
- OTOY !
- Planestate Software !
- Riot Games !
- SCS Software !
- Scorewarrior !
- Sebastian Schöner !
- Sofistik !
- Supercell !
- Tanius Technology !
- Valve !
- Vector Unit !
- and maybe some anonymous ones.
❤️ And many individuals ❤️
Thanks to Adam B, Daniel C, Geoffrey E, Israelle W, Jean-Sebastien R, Jonathan G, Karl H, Liam W, Lucas G, Martin G, Mathieu W, Minh D L, Nicholas C, Peter R, Simon V B ! Also thanks to @GamingMinds-DanielC, @pthom, & more for their help with GitHub answers!
🎤 Embarrassment time 🎤
Wookash Podcast had me recently, if you think you can handle two hours of me rambling confusedly!
https://www.youtube.com/watch?v=2KPUMvyUMzM.
New/Recent Useful Third-Party Extensions
- ImReflect: Reflection-based ImGui wrapper: https://github.com/Sven-vh/ImReflect
- ImHTML: Render HTML in ImGui: https://github.com/BigJk/ImHTML
- imgui-module: C++20 module binding for ImGui. https://github.com/stripe2933/imgui-module
Also check the Useful Extensions/Widgets page for a full list.
Changes (since v1.92.4)
🆘 Need help updating your custom rendering backend to support ImGuiBackendFlags_RendererHasTextures introduced in v1.92.0 ? You can read the recently improved docs/BACKENDS.md.
TL;DR;
- Single-axis auto-sizing fixes.
- Tables fixes.
- InputText fixes.
- Keyboard navigation fixes.
- WebGPU backend/examples up to date with latest Emscripten, native DAWN, native WGPU changes.
- & much more.
Breaking Changes
- Keys: commented out legacy names which were obsoleted in 1.89.0 (August 2022).
ImGuiKey_ModCtrl-->ImGuiMod_Ctrl,ImGuiKey_ModShift-->ImGuiMod_Shift,ImGuiKey_ModAlt-->ImGuiMod_Alt,ImGuiKey_ModSuper-->ImGuiMod_Super.
- IO: commented out legacy
io.ClearInputCharacters()obsoleted in 1.89.8 (Aug 2023). Usingio.ClearInputKeys()is enough. - BeginChild: commented out legacy names which were obsoleted in 1.90.0 (Nov 2023), 1.90.9 (July 2024), 1.91.1 (August 2024). (#462, #7687)
ImGuiChildFlags_Border-->ImGuiChildFlags_BordersImGuiWindowFlags_NavFlattened-->ImGuiChildFlags_NavFlattened(moved toImGuiChildFlags!).ImGuiWindowFlags_AlwaysUseWindowPadding-->ImGuiChildFlags_AlwaysUseWindowPadding(moved toImGuiChildFlags!).
- So TL;DR;
BeginChild(name, size, 0, ImGuiWindowFlags_NavFlattened)-->BeginChild(name, size, ImGuiChildFlags_NavFlattened, 0)BeginChild(name, size, 0, ImGuiWindowFlags_AlwaysUseWindowPadding)-->BeginChild(name, size, ImGuiChildFlags_AlwaysUseWindowPadding, 0)
- Commented out legacy
SetItemAllowOverlap()obsoleted in 1.89.7: this never worked right. UseSetNextItemAllowOverlap()before item instead.
Other Changes
- Windows:
- Config flag
io.ConfigWindowsMoveFromTitleBarOnlyis now latched duringBegin(), effectively allowing to change the value on a per-window basis (although there is a better internal mechanism for it). - Fixed single-axis auto-sizing (via double-clicking a border or passing 0.0f on one axis of
SetNextWindowSize()call) to take account of remaining scrollbar on the other axis. (#9060) - Fixed an issue where repeated calls to
SetNextWindowSize()using 0.0f to auto-size on a given axis would keep marking ini settings as dirty.
- Config flag
- Tables:
- Fixed a bug where nesting
BeginTable()->Begin()->BeginTable()would result in temporarily incorrect state, which would lead to bugs to side effects in various locations, e.g.GetContentRegionAvail()calls or using clipper.EndTable()was mistakenly restoring a wrong current table. (#9005) - Angled headers: fixed an auto-resize feedback loop that could affect tables with empty non-resizing columns using angled headers, making them typically flicker back and forth between +0 and +1 pixels.
- Fixed a bug where nesting
- Disabled: fixed a bug when a previously enabled item that got nav focus and then turns disabled could still be activated using keyboard. (#9036)
- InputText:
- When buffer is not resizable, trying to paste contents that cannot fit will now truncate text to nearest UTF-8 codepoint boundaries, instead of completely ignoring the paste. (#9029)
- Avoid continuously overwriting ownership of
ImGuiKey_Enter/ImGuiKey_KeypadEnterkeys in order to allow e.g. external Shortcut override behavior. (#9004) - When using a callback to reduce/manipulate the value of
BufTextLen, we do not require anymore thatCursorPosbe clamped by user code. (#9029) - Fixed an assert when using
ImGuiInputTextFlags_ReadOnlyand making underlying contents shorter while text is selected. (#9069, #3237) (regression from 1.92.3) - InputTextMultiline: fixed a crash when using
ImGuiInputTextFlags_WordWrapand resizing the parent window while keeping the multi-line field active (which is most typically achieved when resizing programmatically or via a docking layout reacting to a platform window resize). (#3237, #9007) [@anton-kl, @ocornut]
- Nav:
- Reworked PageUp/PageDown logic to pick same-page top/bottom page based on inner rectangle rather than clipping rectangle, ensuring consistent (but occasionally less practical) navigation result when a window is partially out of screen. (#787)
- Improved/clarified behavior when requesting PageUp/PageDown from a focused item which is outside of visible boundaries: now ends up one page away from focused item. (#9079)
- Clipper: fixed an issue when using up/down from an item outside of visible bound and using the clipper. (#9079)
- Fonts:
- Calling
ImFontAtlas::Clear()mid-frame without re-adding a font will lead to a more explicit crash.
- Calling
- Textures:
- Fixed an issue preventing multi-contexts from using each others' fonts if context 2 runs after context 1's Render() function. (#9039)
- MultiSelect: added
ImGuiMultiSelectFlags_NoSelectOnRightClickto disable default right-click processing, which selects item on mouse down and is designed for context-menus. (#8200, #9015) - Groups: fixed an issue reporting
IsItemEdited()signal afterEndGroup()when triggered by some widgets e.g. Checkbox(), Selectable() and many others, which cleared ActiveId at the same time as editing. Note thatIsItemDeactivatedAfterEdit()was not affected, onlyIsItemEdited(). (#9028) - Misc: standardized casing of keyboard mods in comments and demo, showing as e.g.
"Ctrl"instead of"CTRL". - CI: Added Dear ImGui Test Suite to CI builds. [@rokups]
- Drag and Drop:
- Added
ImGuiDragDropFlags_AcceptDrawAsHoveredto make accepting item render as hovered, which can allow using e.g. Button() as drop target. (#8632) - Pressing Escape while carrying a payload automatically cancel the active drag and drop. (#9071)
- Style: added
ImGuiCol_DragDropTargetBg,style.DragDropTargetRounding,style.DragDropTargetBorderSizeandstyle.DragDropTargetPaddingto configure the drop target highlight. (#9056) [@aaronkirkham]
- Added
- Demo: About Box: emit infos to convey when IM_ASSERT() macro is disabled, (1) so users don't miss out on programming errors being repor...
v1.92.4
v1.92.4 ~
❤️ Last year 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 ❤️
New studio enters!
- Thatgamecompany ! 🌻
And usual supporters:
- Asobo Studio !
- BeamNG !
- G3Dvu !
- Gravity Well !
- Lucid Games !
- MachineGames !
- Mobigame !
- OTOY !
- Planestate Software !
- Riot Games !
- SCS Software !
- Scorewarrior !
- Sebastian Schöner !
- Sofistik !
- Supercell !
- Tanius Technology !
- Valve !
- Vector Unit !
- and maybe some anonymous ones.
❤️ And many individuals ❤️
Thanks to Adam B, Daniel C, Geoffrey E, Israelle W, Jean-Sebastien R, Jonathan G, Karl H, Liam W, Lucas G, Martin G, Mathieu W, Minh D L, Nicholas C, Peter R, Simon V B ! Also thanks to @pthom, @GamingMinds-DanielC, @PathogenDavid & more for their help with GitHub answers!
Changes (since v1.92.3)
🆘 Need help updating your custom rendering backend to support ImGuiBackendFlags_RendererHasTextures introduced in v1.92.0 ?
You can read the newly improved docs/BACKENDS.md.
Breaking Changes
- Backends:
- TreeNode, Selectable, Clipper: commented out legacy names obsoleted in 1.89.7 (July 2023) and 1.89.9 (Sept 2023):
ImGuiTreeNodeFlags_AllowItemOverlap-->ImGuiTreeNodeFlags_AllowOverlap
ImGuiSelectableFlags_AllowItemOverlap-->ImGuiSelectableFlags_AllowOverlap
ImGuiListClipper::IncludeRangeByIndices()-->ImGuiListClipper::IncludeItemsByIndex() - Vulkan: moved some fields in
ImGui_ImplVulkan_InitInfo:
init_info.RenderPass-->init_info.PipelineInfoMain.RenderPass
init_info.Subpass-->init_info.PipelineInfoMain.Subpass
init_info.MSAASamples-->init_info.PipelineInfoMain.MSAASamples
init_info.PipelineRenderingCreateInfo-->init_info.PipelineInfoMain.PipelineRenderingCreateInfo
It makes things more consistent and was desirable to introduce new settings for secondary viewports. (#8946, #8110, #8111, #8686) [@ocornut, @SuperRonan, @sylmroz] - Vulkan: renamed
ImGui_ImplVulkan_MainPipelineCreateInfo-->ImGui_ImplVulkan_PipelineInfo(introduced very recently and only used byImGui_ImplVulkan_CreateMainPipeline()so it should not affect many users). (#8110, #8111) - Vulkan: helper
ImGui_ImplVulkanH_CreateOrResizeWindow()added aVkImageUsageFlags image_usageargument. It was previously hardcoded toVK_IMAGE_USAGE_COLOR_ATTACHMENT_BITand defaults to that when the value is 0. In theory the function is an internal helper but since it's used by our examples some may have used it. (#8946, #8111, #8686)
- TreeNode, Selectable, Clipper: commented out legacy names obsoleted in 1.89.7 (July 2023) and 1.89.9 (Sept 2023):
Other Changes
- Windows: added lower-right resize grip on child windows using both
ImGuiChildFlags_ResizeXandImGuiChildFlags_ResizeYflags. (#8501) [@aleksijuvani] The grip is not visible before hovering to reduce clutter. - Style: added
ImGuiCol_UnsavedMarker, color of the unsaved document marker when usingImGuiWindowFlags_UnsavedDocument/ImGuiTabItemFlags_UnsavedDocument. (#8983) - IO: added
ImGuiPlatformIO::ClearPlatformHandlers(),ClearRendererHandlers()helpers to null all handlers. (#8945, #2769) - Inputs:
- Shortcuts: added support for combining
ImGuiInputFlags_RouteFocused(which is the default route) withImGuiInputFlags_RouteOverActive, allowing to steal shortcuts from active item without using global routing. (#9004)
- Shortcuts: added support for combining
- InputText:
- Fixed single-line
InputText()not applying fine character clipping properly (regression in 1.92.3). (#8967) [@Cyphall] - Fixed an infinite loop error happening if a custom input text callback modifies/clear
BufTextLenbefore callingInsertChars().
(regression from 1.92.3). Note that this never really worked correctly, but previously it would only temporary wreck cursor position, and since 1.92.3 it would go in an infinite loop. (#8994, #3237)
- Fixed single-line
- Textures:
- Fixed a crash if texture status is set to
ImTextureStatus_WantDestroyby a backend after it had already been destroyed. This would typically happen when callingImGui_ImplXXXX_InvalidateDeviceObjects()helpers twice in a row. (#8977, #8811) - Allowed backend to destroy texture while inside the
NewFrame/EndFramescope. Basically if a backend decide to destroy a texture that we didn't request to destroy (for e.g. freeing resources) the texture is immediately set to aImTextureStatus_WantCreatestatus again. (#8811) - Fixed an issue preventing multi-contexts sharing a
ImFontAtlasfrom being possible to destroy in any order. - Fixed not updating
ImTextureData'sRefCountwhen destroying a context using a sharedImFontAtlas, leading standard backends to not properly free texture resources. (#8975) [@icrashstuff]
- Fixed a crash if texture status is set to
- Demo: fixed layout issue in
"Layout & Scrolling -> Scrolling"section. - Misc: Relaxed internal assert in
MarkItemEdited()to allow for more use cases. (#8997) - Misc: Debuggers: added type formatters for the LLDB debuggers (e.g. Xcode, Android Studio & more) to provide nicer display for ImVec2, ImVec4, ImVector etc. See misc/debuggers/ for details. (#8950) [@mentlerd]
- CI: updated Windows CI scripts to generate/use VulkanSDK. (#8925, #8778) [@yaz0r]
- Docs: updated FAQ with new "What is the difference between Dear ImGui and traditional UI toolkits?" entry. (#8862)
- Backends:
- All backends call
ImGuiPlatformIO::ClearPlatformHandlers()andClearRendererHandlers()on shutdown, so as not to leave function pointers which may be dangling when using backend in e.g. DLL. (#8945, #2769) - DirectX12: reuse a command list and allocator for texture uploads instead of recreating them each time. (#8963, #8465) [@RT2Code]
- DirectX12: Rework synchronization logic. (#8961) [@RT2Code] (presumably fixes old hard-to-repro crash issues such as #3463, #5018).
- DirectX12: Reuse texture upload buffer and grow it only when necessary. (#9002) [@RT2Code]
- DirectX12: Enable swapchain tearing if available. (#8965) [@RT2Code]
- OpenGL3: fixed GL loader to work on Haiku OS which does not support
RTLD_NOLOAD. (#8952) [@Xottab-DUTY, @threedeyes] - GLFW: fixed build on platform that are neither Windows, macOS or known Unixes (Regression in 1.92.3). (#8969, #8920, #8921) [@oktonion]
- SDL2,SDL3: avoid using the
SDL_GetGlobalMouseState()path when one of our window is hovered, as the event data is reliable and enough in this case. - Win32: minor optimization not submitting gamepad io again if XInput's
dwPacketNumberhas not changed. (#8556) [@MidTerm-CN] - Vulkan: added a way to specify custom shaders by filling init fields
CustomShaderVertCreateInfoandCustomShaderFragCreateInfo. (#8585, #8271) [@johan0A] - DX9,DX10,DX11,DX12,Metal,Vulkan,WGPU,SDLRenderer2,SDLRenderer3: ensure that a texture in
ImTextureStatus_WantDestroystate always turn to ImTextureStatus_Destroyed even if your underlying graphics data was already destroyed. (#8977)
- All backends call
- Examples:
Changes from 1.92.3 to 1.92.4 ...
v1.92.3
v1.92.3: Autumn is looming ~
❤️ Last year 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 ❤️
- Aras P !
- Asobo Studio !
- BeamNG !
- FUTO !
- G3Dvu !
- Gravity Well !
- id Software !
- Lucid Games !
- MachineGames !
- Mobigame !
- OTOY !
- Planestate Software !
- Riot Games !
- SCS Software !
- Scorewarrior !
- Sebastian Schöner !
- Sofistik
- Supercell !
- Tanius Technology !
- Valve !
- Vector Unit
❤️ And many individuals ❤️
Thanks to @pthom, @GamingMinds-DanielC, @PathogenDavid & more for their help with GitHub answers!
Changes (since v1.92.2)
🆘 Need help updating your custom rendering backend to support ImGuiBackendFlags_RendererHasTextures introduced in v1.92.0 ?
You can read the newly improved docs/BACKENDS.md.
Changes
- Fonts: fixed merging a font and specifying a font target in DstFont that's not the last added font (regression in 1.92). (#8912)
- Fonts: fixed an assertion failure when a rectangle entry has been reused 1024 times (e.g. due to constant change of font size). (#8906) [@cfillion]
- Clipper, Tables: added
ImGuiListClipperFlags_NoSetTableRowCountersas a way to disable the assumption that 1 clipper item == 1 table row, which breaks when e.g. using clipper with ItemsHeight=1 in order to clip in pixel units. (#8886) - Scrollbar, Style: added configurable
style.ScrollbarPaddingvalue and correspondingImGuiStyleVar_ScrollbarPaddingenum, instead of an hard-coded computed default. (#8895) - Nav: fixed Ctrl+Tab window appearing as empty when the sole active and focused window has the
ImGuiWindowFlags_NoNavFocusflag. (#8914) - Nav: fixed a crash that could occur when opening a popup following the processing of a global shortcut while no windows were focused.
- Bullet: fixed tessellation which looked out of place in very large sizes.
- InputText: added
ImGuiInputTextFlags_WordWrapflag to word-wrap multi-line buffers. (#3237, #952, #1062, #7363). Current caveats:- This is marked as beta because not being tested enough. Please report any incorrect cursor movement, selection behavior etc. bug to #3237.
- Wrapping style is not ideal. Wrapping of long words/sections (e.g. words larger than total available width) may be particularly unpleasing.
- Wrapping width needs to always account for the possibility of a vertical scrollbar.
- It is currently much slower than regular text fields:
- Ballpark estimate of cost on my 2019 desktop PC: For a 100 KB text buffer: +~0.3 ms/+~1.0 ms (Optimized vs Debug builds).
- The CPU cost is very roughly proportional to text length, so a 10 KB buffer should cost about ten times less.
- InputText, InputInt, InputFloat: fixed an issue where using Escape to revert would not write back the reverted value during the
IsItemDeactivatedAfterEdit()frame if the provided input buffer doesn't store temporary edits. (regression in 1.91.7) (#8915, #8273) - InputText: fixed an issue where using Escape with
ImGuiInputTextFlags_EscapeClearsAllwould not write back the cleared value during theIsItemDeactivatedAfterEdit()frame if the provided input buffer doesn't store temporary edits. (#8915, #8273) - InputText: allow passing an empty string with
buf_size==0. In theory the buffer size should always account for a zero-terminator, but idioms such as usingInputTextMultiline()withImGuiInputTextFlags_ReadOnlyto display a text blob are facilitated by allowing this. (#8907) - InputText: refactored internals to simplify and optimizing rendering of selection. Very large selection (e.g. 1 MB) now take less overhead.
- InputText: revert a change in 1.79 where pressing Down or PageDown on the last line of a multi-line buffer without a trailing carriage return would keep the cursor unmoved. We revert back to move to the end of line in this situation.
- InputText: fixed pressing End (without Shift) in a multi-line selection from mistakenly moving cursor based on selection start.
- Focus, InputText: fixed an issue where
SetKeyboardFocusHere()did not work onInputTextMultiline()fields withImGuiInputTextFlags_AllowTabInput, since they normally inhibit activation to allow tabbing through multiple items. (#8928) - Selectable: added
ImGuiSelectableFlags_SelectOnNavto auto-select an item when moved into, unless Ctrl is held. (automatic when in a BeginMultiSelect() block). - TabBar: fixed an issue were forcefully selecting a tab using internal API would be ignored on first/appearing frame before tabs are submitted (#8929, #6681)
- DrawList: fixed
ImDrawList::CloneOutput()unnecessarily taking a copy of theImDrawListSharedDatapointer, which could to issue when deleting the cloned list. (#8894, #1860) - DrawList: made
AddCallback()assert when passing a null callback. - Debug Tools: ID Stack Tool: fixed using fixed-size buffers preventing long identifiers from being displayed in the tool. (#8905, #4631)
- Debug Tools: ID Stack Tool: when ### is used, noncontributing prefix before the ### is now skipped. (#8904, #4631)
- Debug Tools: ID Stack Tool: added option to hex-encode non-ASCII characters in output path. (#8904, #4631)
- Debug Tools: ID Stack Tool: fixed a crash when using
PushOverrideID(0)during a query. (#8937, #4631) - Debug Tools: Fixed assertion failure when opening a combo box while using
io.ConfigDebugBeginReturnValueOnce/io.ConfigDebugBeginReturnValueLoop. (#8931) [@harrymander] - Demo: tweaked
ShowFontSelector()andShowStyleSelector()to update selection while navigating. - CI: Updates Windows CI to use a more recent VulkanSDK. (#8925, #8778) [@yaz0r]
- Examples: Android: Android+OpenGL3: update Gradle project (#8888, #8878) [@scribam]
- Examples: GLFW+OpenGL2, GLFW+Vulkan, GLFW+Metal, Win32+Vulkan: Fixed not applying content scale consistently with other examples. (#8921, #8756)
- Backends: GLFW: distinguish X11 vs Wayland to fix various scaling issues. (#8920, #8921) [@TheBrokenRail, @pthom, @ocornut]
- Window/monitor content scales are always reported as 1.0 on Wayland.
- Framebuffer scales are always reported as 1.0 on X11.
- Backends: SDL2: window/monitor content scales are always reported as 1.0 on Wayland. (#8920, #8921) [@TheBrokenRail, @pthom, @ocornut]
- Backends: SDL3: use
SDL_GetWindowDisplayScale()on Mac to obtainDisplayFrameBufferScale, fixing incorrect values during resolution changes e.g. going fullscreen. (#8703, #4414) [@jclounge] - Backends: SDL_GPU: Added
ImGui_ImplSDLGPU3_InitInfo::SwapchainCompositionandPresentModeto configure how secondary viewports are created. Currently only used multi-viewport mode. (#8892) [@PTSVU] - Backends: Vulkan: added
ImGui_ImplVulkan_CreateMainPipeline()to recreate pipeline without reinitializing backend. (#8110, #8111) [@SuperRonan]
Changes from 1.92.2 to 1.92.3 specific to the Docking+Multi-Viewports branch:
- DPI: fixed
io.ConfigDpiScaleFontsfrom ever working since 1.92 (the irony being that it is when it started to make sense!). As a reminder, the option automatically copy the current viewport's DpiScale tostyle.FontScaleDpi. This is why we separated thestyle.FontScaleMainandstyle.FontScaleDpiscaling factor, as the later is meant to be overwritten. (#8832, #8465) - DPI: Fixed obsoleted
ImGuiConfigFlags_DpiEnableScaleFonts/_DpiEnableScaleViewportsnames from setting the equivalent `io.ConfigDpiScaleFo...
v1.92.2b
v1.92.2b: Hotfix for 1.92.2
Changes (since v1.92.2)
This is a hot fix for v1.92.2 which has issues with using IsItemHovered() on disabled items or items with no identifier while clicking on them.
- Fixed
IsItemHovered()failing on disabled items and items that have no identifier (e.g. Text() calls) when holding mouse button. (Regression in 1.92.2). (#8877, #8883) - Made
IsItemHovered()on holding mouse button down on disabled items not leak between items when the window cannot be moved. - Backends: Allegro5: Fixed texture format setup which didn't work on all setups/drivers. (#8770, #8465)
- Backends: Allegro5: Added
ImGui_ImplAllegro5_SetDisplay()function to change current ALLEGRO_DISPLAY, as Allegro applications often need to do that. - Backends: Allegro5: Fixed missing support for
ImGuiKey_PrintScreenunder Windows, as raw Allegro 5 does not receive it.
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.
❤️ Previous 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.
v1.92.2
v1.92.2: Summer 2025
❤️ Previous 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 ❤️
- BeamNG !
- G3Dvu !
- OTOY !
- Riot Games ! 🆕 👍 Welcome!
- Scorewarrior ! 🆕 👍 Welcome!
- Supercell !
- Tanius Technology !
- Valve !
- Aras P !
- Asobo Studio !
- FUTO !
- Gravity Well !
- id Software !
- Lucid Games !
- MachineGames !
- Mobigame !
- Planestate Software !
- SCS Software !
- Sofistik
- Sebastian Schöner !
- Vector Unit 🆕 👍 Welcome!
❤️ And many individuals ❤️
Thanks to @GamingMinds-DanielC, @cfillion, @PathogenDavid & more for their help with GitHub answers!
Changes (since v1.92.1)
This is a general maintenance release addressing some issues discovered in 1.92.0.
Read v1.92.0 Changelog for details and links on larger changes.
🆘 Need help updating your custom rendering backend to support ImGuiBackendFlags_RendererHasTextures ?
You can read the newly improved docs/BACKENDS.md.
TL;DR;
- New tab bar resizing logic (combining shrinking and scrolling) and configuration options.
- Fixed Vulkan backend on some setup (following 1.92.0) changes.
- SDL_GPU backend changes
ImTextureIDto beSDL_GPUTexture*(!). - Keyboard/navigation fixes, table fixes, font fixes, new SDL3+Metal example & many more.
Breaking Changes
- Tabs: Renamed
ImGuiTabBarFlags_FittingPolicyResizeDowntoImGuiTabBarFlags_FittingPolicyShrink. Kept inline redirection enum (will obsolete). (#261, #351) - Backends: SDL_GPU3: changed
ImTextureIDtype fromSDL_GPUTextureSamplerBinding*toSDL_GPUTexture*, which is more natural and easier for user to manage. If you need to change the current sampler, you can access theImGui_ImplSDLGPU3_RenderStatestruct. (#8866, #8163, #7998, #7988)
Other Changes
- Fixed an old inconsistency between
IsItemHovered()and internal hovering check, whereIsItemHovered()would return true to mouse was first clicked on the background of a non-moveable window then moved over the item or button. Note that while it is consistent with other logic, there is a possibility that some third-party code may accidentally relied on this. One can always useImGuiHoveredFlags_AllowWhenBlockedByActiveItemto bypass the active id check. (#8877) [@achabense, @ocornut] - Fonts: fixed an issue when a font using
MergeModehas a reference size specified but the target font doesn't. Usually either all fonts should have a reference size (only required when specifying e.g.GlyphOffset), or none should have a reference size. - Fonts: fixed a crash when changing texture format when using a legacy backend. Most commonly would happen when calling
GetTexDataAsRGBA32()then immediately callingGetTexDataAsAlpha8(). (#8824) - Windows: fixed an issue where resizable child windows would emit border logic when hidden/non-visible (e.g. when in a docked window that is not selected), impacting code not checking for
BeginChild()return value. (#8815) - Textures: Fixed support for
#define ImTextureID_Invalidto non-zero value:ImFontAtlas()was incorrectly cleared with zeroes. (#8860, #8745) [@cfillion] - Tables: fixed
TableGetRowIndex()which never correctly worked when using a clipper (it exists for consistency but is almost never used, as it is often more convenient to use index in caller-code, whereasTableGetRowIndex()includes header rows). - Tables: fixed imgui_internal.h's
TableGetHoveredRow()the same way. (#7350, #6588, #6250) - Tabs: added new fitting policy
ImGuiTabBarFlags_FittingPolicyMixedand made it the default. This policy shrink tab width down to a given amount, and then beyond that it enable scrolling buttons. (#3421, #8800) - Tabs: added
style.TabMinWidthShrink,ImGuiStyleVar_TabMinWidthShrinkto control the width to shrink to inImGuiTabBarFlags_FittingPolicyMixedmode. (#3421, #8800). - Tabs: when scrolling is enabled, track selected tabs when resizing down parent container. This does not prevent to horizontally scroll it out of view during normal operations. (#3421, #8800)
- Tabs: added
style.TabMinWidthBase,ImGuiStyleVar_TabMinWidthBaseto control the base minimum width of a tab (default to 1.0f). This is the size before any potential shrinking is applied. - Tabs: fixed tab bar underline not drawing below scroll buttons, when they are enabled (minor regression from 1.90). (#6820, #4859, #5022, #5239)
- Tabs: made scrolling buttons never keyboard/gamepad navigation candidates.
- Nav, Tables: fixed navigation within scrolling tables when item boundaries goes beyond columns limits. The fix done in 1.89.6 didn't work correctly on scrolling windows. (#8816, #2221)
- Nav: fixed a bug where
ImGuiKey_NavGamepadMenu(==ImGuiKey_GamepadFaceLeft) button couldn't toggle between main and menu layers while navigating a Modal window. (#8834) - Error Handling: minor improvements to error handling for
TableGetSortSpecs()andTableSetBgColor()calls. (#1651, #8499) - Misc: fixed building with
IMGUI_DISABLE_DEBUG_TOOLSonly. (#8796) - Misc: fixed building with
IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATIONsince 1.92.0. (#8794) - Misc: removed more redundant inline static linkage from imgui_internal.h to facilitate using in C++ modules. (#8813, #8682, #8358) [@stripe2933]
- Misc: ImVector: skip
memcpy()inoperator=ifDataisn't initialized in order to play nice with-fsanitize=undefined. (#8874) [@i25e] - CI: Added SDL3 builds to MacOS and Windows. (#8819, #8778) [@scribam]
- CI: Updated Windows CI to use a more recent SDL2. (#8819, #8778) [@scribam]
- Examples: SDL3+Metal: added SDL3+Metal example. (#8827, #8825) [@shi-yan]
- Examples: SDL3+SDL_GPU: use
SDL_WaitAndAcquireGPUSwapchainTexture()instead ofSDL_AcquireGPUSwapchainTexture(). (#8830) [@itsdanott] - Examples: SDL3+SDL_GPU: use SDL_GPU_PRESENTMODE_VSYNC present mode.
- Backends: OpenGL3: add and call embedded loader shutdown in
ImGui_ImplOpenGL3_Shutdown()to facilitate multiple init/shutdown cycles in same process. (#8792) [@tim-rex] - Backends: OpenGL2, OpenGL3: set
GL_UNPACK_ALIGNMENTto 1 before updating textures. (#8802) [@Daandelange] - Backends: SDL_GPU3: expose current
SDL_GPUSampler*in theImGui_ImplSDLGPU3_RenderStatestruct. (#8866, #8163, #7998, #7988) - Backends: Vulkan: Fixed texture update corruption introduced in 1.92.0, affecting some drivers/setups. (#8801, #8755, #8840) [@Retro52, @Miolith]
- Backends: Vulkan: Avoid calling
vkCmdBindDescriptorSets()when texture has not changed. (#8666) [@micb25]
Changes from 1.92.1 to 1.92.2 specific to the Docking+Multi-Viewports branch:
- Windows, Viewport: fixed an issue where interrupting a viewport move with e.g. a
ClearActiveID()call would leave the dragged viewport with the normally temporaryImGuiViewportFlags_NoInputsflag, preventing further interactions with the viewport. (#5324) (thanks @MdeLaharpe) - Viewports: added
io.ConfigViewportPlatformFocusSetsImGuiFocusto opt-out of focusing imgui windows When a platform window is focused (e.g. using Alt+Tab, clicking Platform Title Bar). In principle this is better enabled but we provide an opt-out because some Linux window managers tend to eagerly focus windows (on e.g. mouse hover, or even on a simple window pos/size change). (#6299, #6462)
Gallery
@JCox06: _"Recently I have been working on a molecular editor with the main user interface wri...
v1.92.1
v1.92.1: Maintenance release
❤️ Previous 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 ❤️
- BeamNG !
- G3Dvu !
- OTOY !
- Riot Games ! 🆕 👍 Welcome!
- Scorewarrior ! 🆕 👍 Welcome!
- Supercell !
- Tanius Technology !
- Valve !
- Aras P !
- Asobo Studio !
- FUTO !
- Gravity Well !
- id Software !
- Lucid Games !
- MachineGames !
- Mobigame !
- Planestate Software !
- SCS Software !
- Sebastian Schöner !
- Vector Unit 🆕 👍 Welcome!
❤️ And many individuals ❤️
Thanks to @GamingMinds-DanielC, @PathogenDavid & more for their help with GitHub answers!
Changes (since v1.92.0)
This is a general maintenance release addressing some issues discovered in 1.92.0.
Read v1.92.0 Changelog for details and links on main changes.
🆘 Need help updating your custom rendering backend to support ImGuiBackendFlags_RendererHasTextures ?
You can read the newly improved docs/BACKENDS.md.
Changes
- Fonts: added
ImFontAtlas::SetFontLoader()to dynamically change font loader at runtime without using internal API. (#8752, #8465) - Fonts: fixed a bug where dynamically changing font loader would lose the Fallback and Ellipsis glyphs under some circumstance. (#8763)
- Fonts: for large size fonts, layout/size calculation only load glyphs metrics. Actual glyphs are renderer+packed when used by drawing functions. (#8758, #8465)
- Fonts: set a maximum font size of 512.0f at ImGui:: API level to reduce edge cases (e.g. out of memory errors).
ImDrawList::API doesn't have the constraint. (#8758) - Fonts: restore
ImFontConfig::FontNobeing a 32-bits value as this is needed to pass full range of information into e.g. FreeType's face_index, as higher bits are used from FreeType 2.6.1. (#8775) [@Valakor] (the field has been erroneously reduced from 32-bits to 8-bit in 1.92.0) - Textures: Fixed support for
#define ImTextureID_Invalidto non-zero value:ImTextureDatawas incorrectly cleared with zeroes. (#8745) [@rachit7645] - Demo: Added
"Text -> Font Size"demo section. (#8738) [@Demonese] - CI: Fixed dllimport/dllexport tests. (#8757) [@AidanSun05]
- CI: Updated to use latest Windows image + VS2022.
- Debug Tools: added
IMGUI_DEBUG_HIGHLIGHT_ALL_ID_CONFLICTSto detect id conflicts before hovering. This is very slow and should only be used temporarily. (#8651, #7961, #7669) - Examples: GLFW+OpenGL3, GLFW+WGPU: Emscripten Makefiles uses GLFW port
contrib.glfw3which offers better HiDPI support. (#8742) [@pthom] - Backends: GLFW, SDL2 made
ImGui_ImplGLFW_GetContentScaleXXX()andImGui_ImplSDL2_GetContentScaleXXXX()helpers return 1.0f on Emscripten and Android platforms, matching macOS logic. (#8742, #8733) [@pthom] - Backends: SDL3: avoid calling
SDL_StartTextInput()again if already active. (fixes e.g.: an issue on iOS where the keyboard animation will popup every time the user types a key + probably other things) (#8727) [@morrazzzz] - Backends: OSX: added
ImGuiMouseCursor_WaitandImGuiMouseCursor_Progressmouse cursor support. (#8739) [@cfillion] - Backends: Allegro5: fixed texture update broken on some platforms where
ALLEGRO_LOCK_WRITEONLYneeded all texels to be rewritten. (#8770) - Backends: Vulkan: use
nonCoherentAtomSizeto align upload_size, fixing validation error on some setups. (#8743, #8744) [@tquante] - Backends: Vulkan: fixed texture synchronization issue introduced in 1.92.0, leading to validation layers being grumpy. (#8772) [@Majora320]
Changes from 1.92.0 to 1.92.1 specific to the Docking+Multi-Viewports branch:
Gallery
From REAC 2025 conference:
https://enginearchitecture.org/2025.htm
In Warhammer 40000: Space Marine 2. talk

In Anvil Rendering Architecture. talk (Assassin's Creed games & more)


Feedback from Ralf:
"Here at @vectorunit I recently converted all of our tools/editors from Qt to imgui and it's been a great quality of life improvement: it has made our tools UI much more readable, maintainable, and easier to add new features."
https://www.vectorunit.com/

@pthom:
Dear ImGui Bundle now runs in the browser, in pure Python. Thanks to Pyodide support (added in v1.92.0), you can now build and run Dear ImGui apps on the Web, using Python only and zero boilerplate: no HTML/CSS/JavaScript, no client-server synchronization issues
An online playground will enable you to run and edit ImGui applications in the browser without any setup.

See relevant annoucement in the Dear ImGui Bundle repository.
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.
❤️ Previous 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.
v1.92.0
v1.92.0: Scaling fonts & many more (big release)
❤️ Previous 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 ❤️
- BeamNG !
- G3Dvu !
- OTOY !
- Riot Games !
- Scorewarrior !
- Supercell !
- Tanius Technology !
- Valve !
- Aras P !
- Asobo Studio !
- FUTO !
- Gravity Well !
- id Software !
- Lucid Games !
- MachineGames !
- Mobigame !
- Planestate Software !
- SCS Software !
- Sebastian Schöner !
❤️ And many individuals ❤️
Thanks to @GamingMinds-DanielC, @PathogenDavid & more for their help with GitHub answers!
TL;DR;
- Added protocol for backends to create, update, destroy textures.
- Fonts may be rendered at any size. Glyphs are loaded and rasterized dynamically. No need to specify ranges, prebake etc. (*)
- Fonts may be added, removed, reconfigured at any time. Easier to e.g. live compare FreeType features. (*)
- Many fonts related changes (but more will come: actually tried to keep those to a minimum for 1.92.0).
- Much easier to pack and manipulate custom data in the dynamic atlas.
- Retina screen rendering works by default (with conforming backend) by updating rasterizer density.
- Updated 13 standard backends to support the new
ImGuiBackendFlags_RendererHasTexturesfeature. - Other stuff: Tree can draw hierarchy outlines. Better Child window resizing. InputText fixes. Tables fixes. Keyboard/Gamepad Nav fixes. Error Handling improvements, Backends improvements/fixes.
- Submitted PR/fixes for various popular extensions such as ImPlot to work fine with this.
(*) with an updated backend.
This is generally "old school" tech but written conscientiously to be highly portable and efficient, to serve the need of real-time internal tooling and to allow a decent transition with the countless codebases and millions lines of code written using Dear ImGui. We still don't support RTL, bi-directional editing, and text shaping.
2025-01-27.font.resize.mp4
(old video but presently I can't be bothered to make a fancier one)
Using a Custom Backend?
🆘 Need help updating your custom rendering backend to support ImGuiBackendFlags_RendererHasTextures ?
You can read the newly improved docs/BACKENDS.md.
Here are the main changes done to all backends:
- Allegro5: ee8941e (+35 lines)
- DirectX9: 75efba7 (+48 lines)
- DirectX10: 2d2b1bc (+40 lines)
- DirectX11: 372fd27 (+40 lines)
- DirectX12: eefe5d5 (+87 lines)
- Metal: 26c017d (+55 lines)
- OpenGL Legacy: 0430c55 (+25 lines)
- OpenGL3/WebGL/ES: dbb91a5 (+47 lines)
- SDL_Renderer2: 9fa65cd (+20 lines)
- SDL_Renderer3: e538883 (+19 lines)
- SDL_GPU: 16fe666 (+41 lines)
- Vulkan: abe294b (+33 lines)
- WGPU: 571dae9 (+30 lines)
Changes (since v1.91.9b)
📣 THIS VERSION CONTAINS THE LARGEST AMOUNT OF BREAKING CHANGES SINCE 2015! I TRIED REALLY HARD TO KEEP THEM TO A MINIMUM, REDUCE THE AMOUNT OF INTERFERENCE, BUT INEVITABLY SOME USERS OR THIRD-PARTY EXTENSIONS WILL BE AFFECTED.
📣 IN ORDER TO HELP US IMPROVE THE TRANSITION PROCESS, INCL. DOCUMENTATION AND COMMENTS, PLEASE REPORT ANY DOUBT, CONFUSION, QUESTIONS, YOU CAN SKIM #8465 AND THEN PLEASE OPEN A NEW ISSUE.
📣 If you are using custom widgets, internals or third-party extension that are somehow breaking and aren't obvious how to solve, please post in Issues so we can gather data and share solutions that may help others.
📣 As part of the plan to reduce impact of API breaking changes, several unfinished changes/features/refactors related to font and text systems and scaling will be part of subsequent releases (1.92.1+).
📣 If you are updating from an old version, and expecting a massive or difficult update, consider first updating to 1.91.9 to reduce the amount of changes.
Breaking Changes:
- Fonts: IMPORTANT: if your app was solving the OSX/iOS Retina screen specific logical vs display scale problem by setting
io.DisplayFramebufferScale(e.g. to 2.0f) + settingio.FontGlobalScale(e.g. to 1.0f/2.0f) + loading fonts at scaled sizes (e.g. size X * 2.0f):- This WILL NOT map correctly to the new system! Because font will rasterize as requested size.
- With a legacy backend (< 1.92):
- Instead of setting
io.FontGlobalScale = 1.0f/N, setImFontCfg::RasterizerDensity = N. - This already worked before, but is now pretty much required.
- Instead of setting
- With a new backend (1.92+),
- This should be all automatic.
FramebufferScaleis automatically used to set current fontRasterizerDensity.FramebufferScaleis a per-viewport property provided by backend through thePlatform_GetWindowFramebufferScale()handler in 'docking' branch.
- Fonts: IMPORTANT on Font Sizing:
- Before 1.92, fonts were of a single size. They can now be dynamically sized.
PushFont()API now has a REQUIRED size parameter.
void PushFont(ImFont* font)-->void PushFont(ImFont* font, float size)PushFont(font, 0.0f) // Change font and keep current sizePushFont(NULL, 20.0f) // Keep font and change current sizePushFont(font, 20.0f) // Change font and set size to 20.0fPushFont(font, style.FontSizeBase * 2.0f) // Change font and set size to be twice bigger than current size.PushFont(font, font->LegacySize) // Change font and set size to size passed to AddFontXXX() function. Same as pre-1.92 behavior, for fixed size fonts.
- To use old behavior use
ImGui::PushFont(font, font->LegacySize)at call site. We intentionally didn't add a default parameter because it would make the long-term transition more difficult. - Kept inline redirection font. Will obsolete.
- Global scale factors may be applied over the provided size. This is why it is called
FontSizeBasein the style structure. - Global scale factors are:
style.FontScaleMain,style.FontScaleDpiand maybe more. ImFont::FontSizewas removed and does not make sense anymore.ImFont::LegacySizeis the size passed toAddFont().- Removed support for old
PushFont(NULL)which was a shortcut for "revert to default font". - Renamed/moved
io.FontGlobalScaletostyle.FontScaleMain.
- Fonts: IMPORTANT on Font Merging:
- When searching for a glyph in multiple merged fonts: font inputs are now scanned in order for the first font input which the desired glyph. This is technically a different behavior than before!
- e.g. If you are merging fonts you may have glyphs that you expected to load from Font Source 2 which exists in Font Source 1. After the update and when using a new backend, those glyphs may now loaded from Font Source 1!
- You can use
Metrics/Debugger->Fonts->Font->Input Glyphs Overlap Detection Toolto see list of glyphs available in multiple font sources. This can facilitate understanding which font input is providing which glyph. - You can use
ImFontConfig::GlyphExcludeRanges[]to specify ranges to ignore in given Input:
// Add Font Source 1 but ignore ICON_MIN_FA..ICON_MAX_FA range
static ImWchar exclude_ranges[] = { ICON_MIN_FA, ICON_MAX_FA, 0 };
ImFontConfig cfg1;
cfg1.GlyphExcludeRanges = exclude_ranges;
io.Fonts->AddFontFromFileTTF("segoeui.ttf", 0.0f, &cfg1);
// Add Font Source 2, which expects to use the range above
ImFontConfig cfg2;
cfg2.MergeMode = true;
io.Fonts->AddFontFromFileTTF("FontAwesome4.ttf", 0.0f, &cfg2);- Textures:
...
v1.91.9b
v1.91.9b: hotfix
1.91.9 has an assert/crashing bug related to loading table settings in certain instances.
Changes (since v1.91.9)
- Tables: Fixed assert when loading .ini settings with reordered columns. (#8496, #7934)
- Tables: Fixed issues when loading .ini settings for a table with columns using
ImGuiTableColumnFlags_DefaultHideorImGuiTableColumnFlags_DefaultSort. (#8496, #7934)
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.
v1.91.9
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_colandborder_colparameter 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_colhad misleading side-effect on layout,bg_colwas missing, parameter order couldn't be consistent withImageButton(). - New behavior always use
ImGuiCol_Bordercolor +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_colis specified. - Added
ImageWithBg()function which has bothbg_col(which was missing and most useful) andtint_col. It was impossible to addbg_colto Image() with a parameter order consistent with other functions, so we decided to removetint_coland introduceImageWithBg().
- Old function signature:
- Renamed
ImFontConfig::GlyphExtraSpacing.xoption toGlyphExtraAdvanceX. (#242) - Renamed
style.TabMinWidthForCloseButtontostyle.TabCloseButtonMinWidthUnselected. - Backends: Vulkan: Added
uint32_t api_versionargument toImGui_ImplVulkan_LoadFunctions(). Note that it was also added toImGui_ImplVulkan_InitInfo()but for the later it is optional. (#8326, #8365, #8400) - Internals: Fonts: ImFontAtlas::ConfigData[] has been renamed to ImFontAtlas::Sources[],
- Internals: Fonts: ImFont::ConfigData[], ConfigDataCount has been renamed to Sources[], SourcesCount.
- 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 theSkipItemsflag, resulting in missing coarse clipping opportunities for code not checking theBeginChild()return value. - Windows, Style: Added
style.WindowBorderHoverPaddingsetting 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_AlwaysHorizontalScrollbaror (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.0fand 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/TabCloseButtonMinWidthUnselectedsettings 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.PlatformOpenInShellFnhandler 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_WaitandImGuiMouseCursor_Progressmouse 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_CALLBACKSfeature. (#8455) - IO: Added
ImGuiKey_Oem102to ImGuiKey enum. (#7136, #7201, #7206, #7306, #8468) - Backends: reworked key handlers to use/prioritize untranslated ...
v1.91.8
v1.91.8
❤️ 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 the things Dear ImGui has to offer, and maybe 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 recently joining sponsors: MachineGames, id Software!, SCS Software! ! ! ❤️
❤️ Thanks to our sponsors incl Supercell! Valve!, G3Dvu! OTOY! Adobe! Lucid Games! Planestate Software! Aras P! Gravity Well! FUTO! & many individuals ❤️
Thanks to @GamingMinds-DanielC, @PathogenDavid & more for their help with github answers!
Recently released third-party extensions include:
-
ImOGuizmo by @fknfilewalker: a simple C++11 header only interactive orientation gizmo: github/fknfilewalker/imoguizmo

-
ImPlot3d by @brenocq https://github.com/brenocq/implot3d
ImPlot3D is an extension of Dear ImGui for easy-to-use 3D plotting. Inspired by ImPlot, it supports lines, scatter, surfaces, meshes, and more, with interactive controls like rotation, zoom, and pan.
See more extensions in our wiki page Useful Extensions.
Changes (since v1.91.7)
Breaking Changes:
- ColorEdit, ColorPicker: redesigned how alpha is displayed in the preview square. (#8335, #1578, #346)
- Removed
ImGuiColorEditFlags_AlphaPreview(made value 0): it is now the default behavior. - Prior to 1.91.8: alpha was made opaque in the preview by default unless using
ImGuiColorEditFlags_AlphaPreview. - We now display the preview as transparent by default. You can use
ImGuiColorEditFlags_AlphaOpaqueto use old behavior. - The new flags may be combined better and allow finer controls:
ImGuiColorEditFlags_AlphaOpaque: disable alpha in the preview, but alpha value still editable.ImGuiColorEditFlags_AlphaNoBg: disable rendering a checkerboard background behind transparent color.ImGuiColorEditFlags_AlphaPreviewHalf: display half opaque / half transparent preview.
- Removed
- Backends: SDLGPU3: Renamed
ImGui_ImplSDLGPU3_InitInfo::GpuDevicetoDevicefor consistency. (#8163, #7998, #7988)
Other changes:
- imgui_freetype: fixed issue where glyph advances would incorrectly be snapped to pixels. Effectively it would only be noticeable when hinting is disabled with
ImGuiFreeTypeBuilderFlags_NoHinting, as hinting itself snaps glyph advances. - Inputs: added
IsMouseReleasedWithDelay()helper. (#8337, #8320). Use if you absolutely need to distinguish single-click from double-clicks by introducing a delay. This is a very rarely used UI idiom, but some apps use this: e.g. MS Explorer single-click on an icon triggers a rename. Generally use withdelay >= io.MouseDoubleClickTime+ combine with aGetMouseClickedCount() == 1check. - Windows: legacy
SetWindowFontScale()is properly inherited by nested child windows. Note that an upcoming major release should make this obsolete, but in the meanwhile it works better now. (#2701, #8138, #1018) - Windows, Style: Fixed small rendering issues with menu bar, resize grip and scrollbar when using thick border sizes. (#8267, #7887)
- Windows: Fixed
IsItemXXXX()functions not working on append-version ofEndChild(). (#8350) Also made some of the fields accessible afterBeginChild()to matchBegin()logic. - Error Handling: Recovery from missing
EndMenuBar()call. (#1651) - Tables, Menus: Fixed using
BeginTable()in menu layer (any menu bar). (#8355) It previously overrode the current layer back to main layer, which caused an issue with MainMenuBar attempted to release focus when leaving the menu layer. - Tables, Menus: Fixed tables or child windows submitted inside
BeginMainMenuBar()being unable to save their settings, as the main menu bar usesImGuiWindowFlags_NoSavedSettings. (#8356) - ColorEdit, ColorPicker: Fixed alpha preview broken in 1.91.7. (#8336, #8241). [@PathogenDavid]
- Tabs, Style: reworked selected overline rendering to better accommodate for rounded tabs. Reduced default thickness (
style.TabBarOverlineSize), increased default rounding (style.TabRounding). (#8334) [@Kian738, @ocornut] - Debug Tools: Tweaked font preview.
- ImDrawList: texture baked storage for thick line reduced from ~64x64 to ~32x32. (#3245)
- Fonts:
IndexLookup[]table hold 16-bit values even in ImWchar32 mode, as it accounts for number of glyphs in same font. This is favorable toCalcTextSize()calls touching less memory. - Fonts:
OversampleH/OversampleVdefaults to 0 for automatic selection.OversampleH == 0--> use 1 or 2 depending on font size and use of PixelSnapH.OversampleV == 0--> always use 1.
- ImFontAtlas: made calling
ClearFonts()callClearInputData(), as calling one without the other is never correct. (#8174, #6556, #6336, #4723) - Examples: DirectX12: Reduced number of frame in flight from 3 to 2 in provided example, to reduce latency.
- Examples: Vulkan: better handle
VK_SUBOPTIMAL_KHRbeing returned byvkAcquireNextImageKHR()orvkQueuePresentKHR(). (#7825, #7831) [@NostraMagister] - Backends: SDL2: removed assert preventing using
ImGui_ImplSDL2_SetGamepadMode()withImGui_ImplSDL2_GamepadMode_Manualand an empty array. (#8329) - Backends: SDL3: removed assert preventing using
ImGui_ImplSDL3_SetGamepadMode()withImGui_ImplSDL3_GamepadMode_Manualand an empty array. (#8329) - Backends: SDLGPU3: Exposed
ImGui_ImplSDLGPU3_CreateDeviceObjects()/_DestroyDeviceObjects().
Removed return value fromImGui_ImplSDLGPU3_CreateFontsTexture(). (#8163, #7998, #7988) - Backends: SDL_Renderer2/3: Use endian-dependent RGBA32 texture format, to match
SDL_Color. (#8327) [@dkosmari] - Backends: DirectX12: Texture upload use the command queue provided in
ImGui_ImplDX12_InitInfoinstead of creating its own. - Backends: OSX: Removed notification observer when shutting down. (#8331) [@jrachele]
Changes from 1.91.7 to 1.91.8 specific to the Docking+Multi-Viewports branch:
- Docking: Fixed an issue in 1.91.7 where using legacy
ImGuiWindowFlags_NavFlattenedflag (instead ofImGuiChildFlags_NavFlattened) in docking branch would conflict with internal docking flags. (#8357) [@DanielGibson] - Backends: SDL3: new viewport windows are created with the
SDL_WINDOW_HIDDENflag before callingSDL_ShowWindow(). (#8328) [@PathogenDavid]
Gallery
"Autonomous dry stone: On-site planning and assembly of stone walls with a robotic excavator"
https://www.researchgate.net/publication/345902778_Autonomous_dry_stone_On-site_planning_and_assembly_of_stone_walls_with_a_robotic_excavator
"Screen capture of geometric planning software. a Imgui Interface, b active environment with search space, solutions, and placed stones, c available scanned stones in inventory, d selected stone viewer with VSA faces"
@CosmoCortney: _"3D Mini Maps in my game enhancement tool, ...






