v1.92.9
v1.92.9
View on GitHubView PackagePublished: Jul 25, 2026

Release Notes

Dear ImGui v1.92.9 ๐ŸŒž

โœ‹ 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..

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 past years sponsors โค๏ธ

As well as various paid/corporate licenses to imgui_test_engine supporting the project.t

News about Third-Party Projects

Check the Useful Extensions/Widgets page for many more.


Changes in v1.92.9 (since v1.92.8)

๐Ÿ†˜ 1.92.8 contained a signature change for the trailing optional parameters of ImDrawList::AddRect(), AddPolyline(), PathStroke(). C++ users should be notified at compile-time, but languages without type-checking may only be notified at runtime. Read v1.92.8 if using non a C++ language. Consider enabling IMGUI_DISABLE_OBSOLETE_FUNCTIONS from time to time to get rid of obsolete calls.

๐Ÿ†˜ 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.

Breaking Changes

  • DragXXX, SliderXXX, InputScalar: with ImGuiItemFlags_LiveEditOnInputScalar now defaulting to being disabled: inputting a value with the keyboard doesn't write intermediate values to the backing variable. (#9476)
    • Before: DragFloat() with user typing "123" --> write back 1, then 12, then 123.
    • After: DragFloat() with user typing "123" --> write back 123 when validated/unfocused.
    • You can enable the flag back for a given scope if needed by specific widget/behavior. Read below for details.
  • TreeNode: commented out legacy name ImGuiTreeNodeFlags_SpanTextWidth which was obsoleted in 1.90.7 (May 2024). Use ImGuiTreeNodeFlags_SpanLabelWidth.
  • ColorEdit: obsoleted SetColorEditOptions() function added in 1.51 (June 2017) in favor of directly poking to io.ConfigColorEditFlags. More consistent and easier to discover.
  • Drag and Drop: commented out legacy name ImGuiDragDropFlags_SourceAutoExpirePayload which obsoleted in 1.90.9 (July 2024).
    • Use ImGuiDragDropFlags_PayloadAutoExpire.
  • ImDrawData: marked CmdListsCount as obsolete (technically was obsoleted in 1.89.8).
    • Before: draw_data->CmdListsCount, After: draw_data->CmdLists.Size.

Other Changes

Image

LiveEdit on/off:

  • Added ImGuiItemFlags_LiveEditOnInputText and ImGuiItemFlags_LiveEditOnInputScalar flags to configure the timing of applying edits of backing variables when typing values using a keyboard. (#9476, #701, #3936, #3946, #5904, #6284, #8149, #8065, #8665, #9117, #9299, #700, #1351, #1875, #2060, #2215, #2380, #2550, #3083, #3338, #3556, #4373, #4714, #4885, #5184, #5777, #6707, #6766, #8004, #8303, #8915, #9308)
    • ImGuiItemFlags_LiveEditOnInputText is enabled by default (same as before): The expectation is that for strings/text, enabling LiveEdit is a better default.
    • ImGuiItemFlags_LiveEditOnInputScalar is disabled by default (new behavior): The expectation is that for numeric/scalars values, disabling LiveEdit is a better default.
    • Until now:
      • Edits where always applied immediately to backing variable, which is equivalent to the ImGuiItemFlags_LiveEditXXX flags being enabled.
      • Typing '123' in an integer field would output successively 1, 12 then 123.
      • Most uses of IsItemDeactivatedAfterEdit() or ImGuiInputTextFlags_EnterReturnsTrue were actually workarounds for this issue. Advanced applications would typically use IsItemDeactivatedAfterEdit() to distinguish transactions. Workarounds often required a backing store for scalar values, and there were also a few niggles related to IsItemDeactivatedAfterEdit() when using +/- buttons of an InputInt() widgets.
      • Many of those situations can now be naturally simplified when disabling ImGuiItemFlags_LiveEditOnInputScalar is disabled.
    • The new flags allows disabling this behavior selectively for strings fields such as InputText() vs scalar fields: SliderInt(), InputFloat(), etc.
      • When LiveEdit is disabled, edits are applied when pressing enter, tabbing out, clearing a field or deactivating due to a focus loss.
      • The flag may be altered programmatically, e.g. for the entire frame scope:
        NewFrame();
        PushItemFlag(ImGuiItemFlags_LiveEditOnInputScalar, true); // Enable for scalars for the whole frame
        [...]
        PopItemFlag();
        EndFrame();
        // ..or for a specific widget:
        PushItemFlag(ImGuiItemFlags_LiveEditOnInput, true);       // Enable for one widget
        SliderInt(...);
        PopItemFlag();
  • We intentionally are not adding io.ConfigLiveEditXXX fields to dictate the default value of each ImGuiItemFlags_LiveEditXXX, because this is not expected to be a user preference but a programmer/widget preferences. And we strive to make the toolkit consistent.

Windows:

  • Clicking on a window's empty-space to move/focus a window checks for lack of mouse button ownership. This gives an additional opportunity for user code to bypass it without using a clickable item. (#9382)
  • Clicking on a window's empty-space to move/focus a window checks for lack of queued focus request. (#9382)
  • Fixed double-click collapse toggle not owning the mouse button. If a SetNextWindowPos() with pivot was queued in the same frame, the second click could trigger another item in the same window. (#9439) [@Cleroth]

Popups:

  • Added bool return value to OpenPopup(), OpenPopupOnItemClick() functions to notify when the popup was just opened. (#9429)

InputText:

  • Added style.InputTextCursorSize to configure cursor/caret thickness. (#7031, #9409) It is automatically scaled by style.ScaleAllSizes().
  • Reworked io.ConfigInputTextEnterKeepActive mode so that pressing Ctrl+Enter or Shift+Enter still allows to deactivate. (#9239)

Tables:

  • Redesigned/rewrote code to reconcile columns and settings on topology changes. (#9108)
    • When a column label is passed to TableSetupColumn(), the underlying identifier is used to match live columns data and .ini settings data when changing. This makes it possible to add/remove columns from a table without losing neither live data neither .ini settings data.
      • PS: Note that this is distinct from toggling column visibility or reordering columns, which was always possible. The new matching makes it easier to create tables that are entirely customized by user or code, without losing state.
      • Columns without identifiers or with duplicate identifiers are matched sequentially, matching old behavior.
      • Column ID are stored in .ini file.
      • Code is being tested both for live topology changes and for loading .ini data with mismatched topology.
    • Context Menu: added a "Reset" sub-menu with a "Reset Visibility" option (which is greyed out when using default settings).
    • Headers: fixed label being clipped early to reserve space for a sort marker even when no sort marker is displayed. Auto-fitting a column still accounts for the possible marker, so that sorting after an auto-fit doesn't clip the label.

Multi-Select:

  • Reworked ImGuiMultiSelectFlags_NoAutoSelect as it carried side-effects that were hardcoded/designed to use multi-selection on checkboxes. (#9391) Specifically removed those undocumented behaviors from _NoAutoSelect:
    • Clicking a selected/checked item always unselect/uncheck.
    • Shift+Click inverts targets value and copy to range.
    • Shift+Keyboard copy selection source value to range.
    • Those behaviors are still happening on checkboxes used within multi-selection.

Fonts:

  • Added IMGUI_DISABLE_DEFAULT_FONT_BITMAP/IMGUI_DISABLE_DEFAULT_FONT_VECTOR to disable embedding either fonts separately. (#9407)
  • Tweak CalcTextSize() awkward width rounding/ceiling code to reduce floating-point precision issues altering the result by 1 even at relatively small width. (#791)
  • Better document the fact that ImFontAtlas::Clear() / ClearFonts() functions are unlikely to be useful nowadays. Better recover to an edge case of mistakenly calling ClearFonts() during rendering.
  • Fixed an issue where passing a manually created ImFontAtlas to CreateContext() would incorrectly destroy it in DestroyContext() when ref-count gets back to zero. (#9426)
  • Destroying an ImGui context using a ImFontAtlas checks that the later has no references.

Keyboard/Gamepad Navigation

  • Fixed context menu activation with gamepad erroneously testing for _NavEnableKeyboard instead of _NavEnableGamepad. (#9454, #8803, #9270) [@Clownacy]

TreeNode:

  • Fixed nav cursor rendering with rounding even though tree nodes don't have it. (#7589)

Inputs:

  • Added GetItemClickedCountWithSingleClickDelay() helper for easy disambiguation between single-click and double-click for actions that needs single-click to do something other than selection. (#8337)
    • Returns 1 on single-click but delayed by io.MouseSingleClickDelay.
    • Returns 2 on double-click, and 2+ on subsequent repeated clicks.
    • Added io.MouseSingleClickDelay to configure default delayed single click delay when using GetItemClickedCountWithSingleClickDelay() or IsMouseReleasedWithDelay(). (#8337)
    • Note that io.MouseSingleClickDelay is always > io.MouseDoubleClickTime.

ColorEdit:

  • Added io.ConfigColorEditFlags to read/modify current color edit/picker settings.
  • ColorPicker: added ImGuiColorEditFlags_PickerNoRotate to disable rotation of the S/V triangle when in ImGuiColorEditFlags_PickerHueWheel mode. (#9337) [@SeanTheBuilder1] Likely best passed to style.ColorEditFlags to setup globally and once.
  • ColorButton: small rendering tweak/optimization for the alpha checkerboard.

Style:

  • Added style.MenuItemRounding, ImGuiStyleVar_MenuItemRounding. (#7589, #9375, #9453)
  • Added style.SelectableRounding, ImGuiStyleVar_SelectableRounding. (#7589, #9375, #9453) The use of this is discouraged because it can easily create problems rendering e.g. contiguous selection.
  • Scale the NavCursor border thickness when using large values with ScallAllSizes().
Image

Settings:

  • Windows/Tables settings entries can now record the last used date in YYYYMMDD format, allowing tools to run to e.g. delete entries that haven't been used in X months. (#9460)
  • Added bool io.ConfigIniSettingsSaveLastUsedDate to disable saving that info. (#9460)
  • Added int io.ConfigIniSettingsAutoDiscardMonths to enable a mode where unused settings are automatically discard after xx months. (#9460)
  • Added a trimming tool under Metrics->Settings, along with a yet-unexposed function.
  • The current system date is fed through ImGuiPlatformIO::Platform_SessionDate, which is automatically set by a call to time() done during context creation. (#9460)
  • Added IMGUI_DISABLE_TIME_FUNCTIONS to disable setting platform_io.Platform_SessionDate. A custom backend may still set it manually. (#9460)

DrawList:

  • Minor optimization to AddLine(), AddLineH(), AddLineV() functions. (#4091)
  • Added ImDrawListFlags_TextNoPixelSnap to disable snapping of AddText() coordinates for a given scope. (#3437, #9417, #2291)

Demo:

  • Extract 'Widgets->Tree Nodes->Selectable Nodes' out of the 'Advanced' demo for clarity (manual re-implementation of basic selection).

Debug Tools:

  • Added IM_DEBUG_BREAK() handler for GCC+AArch64/ARM64. [@tom-seddon]

Backends:

  • Android: Clear mouse position on touch release (AMOTION_EVENT_ACTION_UP) to prevent items from staying in hovered state. (#6627, #9474) [@Turtle-PB]
  • Metal4: Added new Metal 4 backend (forked from Metal 3 backend). (#9458, #9451) [@AmelieHeinrich]
  • Metal4: Added Metal-cpp support enabled with IMGUI_IMPL_METAL_CPP define. (#9461) [@MERL10N]
  • OpenGL2: Backup and restore GL_UNPACK_ROW_LENGTH and GL_UNPACK_ALIGNMENT when updating texture to avoid altering caller GL state. (#8802, #9473) [@Turtle-PB]
  • OpenGL3: GLSL version detection assume GLSL 410 when GL context is 4.1. Fixes an issue running on macOS with Wine. [#9427, #6577) [@perminovVS]
  • OpenGL3: Expose selected render state in ImGui_ImplOpenGL3_RenderState, allowing to dynamically select between use of glBindSampler() and glTexParameter(). (#9378)
  • OpenGL3: Backup and restore GL_UNPACK_ROW_LENGTH and GL_UNPACK_ALIGNMENT when updating texture to avoid altering caller GL state. (#8802, #9473) [@Turtle-PB]
  • SDL2: Restore SDL_StartTextInput()/SDL_StopTextInput() in IME handler for on-screen keyboard support on Android. (#7636, #9474) [@Turtle-PB]
  • SDLRenderer3: Fixed sampler change which didn't work on all graphics backends. (#7616, #9470, #9378)
  • SDLRenderer3: Fixed default sampler not being Linear. Regression in 1.92.8. (#7616, #9470, #9378) [@ShiroKSH]
  • Win32: Uses SetProcessDpiAwarenessContext() instead of SetThreadDpiAwarenessContext() when available, fixing OpenGL DPI scaling issues as e.g. NVIDIA drivers tends to spawn multiple-thread to manage OpenGL. (#9403)

Examples:

  • Android: update to AGP 9.2.0 to support Gradle 9.6.0.
  • Apple+Metal4: added new example. (#9465, #9451) [@hoffstadt]
  • OpenGL3+GLFW/SDL2/SDL3: allow Wine compatibility by passing empty GLSL version string to ImGui_ImplOpenGL3_Init() to let backend decide of a GLSL version based on actual GL version obtained. (#9427, #6577) [@perminovVS]
  • OpenGL3+Win32: rework context creation to allow Wine compatibility. (#9427, #6577) [@perminovVS]
  • SDL2/SDL3: use SDL_GetWindowSizeInPixels() to create frame-buffers. Fixes issues with non-fractional framebuffer size on Wayland. (#8761, #9124) [@billtran1632001]
  • SDL3+Metal4: added new example. (#9458, #9451) [@AmelieHeinrich]

Changes from 1.92.8 to 1.92.9 specific to the Docking+Multi-Viewports branch:

git tag: v1.92.9-docking

Viewports:

  • Fixed an issue where the implicit "Debug" window while hidden would erroneously interfere with merging secondary viewports into the main viewport.

Docking:

  • Fixed behavior change/regression in 1.92.8 where a window using the ImGuiWindowFlags_AlwaysAutoResize flag would have ItemWidth default change when docked. (#9355, #9443) [@reybits]

Backends:

  • Metal4: added multi-viewport support. (#9465, #9451) [@hoffstadt]
  • Vulkan: fixed use after-free when using multi-viewports with dynamic rendering. (#9390, #9468) [@vikhik, @Turtle-PB]

@theor: "A app to import svg, convert it to gcode with streaming to a pen plotter:"

Image

ArcBrush: The node-based image editor https://arcbrush.com/ https://x.com/albertomoss / https://x.com/ArcBrushApp

Image

Password Defense: "Zero-Knowledge Password Manager with No Database Server" @smoke1080p https://github.com/smoke1080p/Password-Defense

image

Tech video about 007 First Light shows a little bit of dear imgui: https://www.youtube.com/watch?v=m0SJ9i9RtRg + selected shots

Image

@MikhailGorobets: "Iโ€™m developing a cross-platform DICOM Viewer in C++. The project also builds for the web platform via Emscripten. You can try it here: https://grenzwert.net/ "

Image

by @brenocq: ๐Ÿฑ> Ket - a quantum circuit debugger: "I've been building Ket, an open-source quantum computing library for C++20 (with Python bindings), and its centerpiece is a step-through circuit debugger built entirely with Dear ImGui/ImPlot/ImPlot3D. You load an OpenQASM circuit, step through it gate by gate, and watch the wavefunction evolve -- the editable code, the circuit diagram, the full state vector, and per-qubit Bloch spheres all update live." Website: https://ket.brenocq.com ยท Code: https://github.com/brenocq/ket The whole thing compiles to WebAssembly, so it runs right in the browser -- no install: ๐Ÿ‘‰ Live demo: https://brenocq.github.io/ket/demo/

Image

@tangtangtang1995 3D Claw "Hi! Iโ€™m building 3D Claw, an open-source C++17 workspace for 3D point-cloud and mesh processing. Dear ImGui is used for the docked desktop UI: model tree, property panels, algorithm parameter dialogs, AI assistant panels, and live controls around an Easy3D/OpenGL viewport. The main idea is to make geometry algorithms less black-box: supported tools can expose intermediate states, previews, result metrics, and AI-assisted parameter/result feedback."

Image

GitHub: https://github.com/tangtangtang1995/3D-Claw Article: https://mmwiki.cn/posts/f3a9d120.html Demo: 3D-Claw

Liberation: The next generation of professional laser show software https://liberationlaser.com/ Image Full video: https://www.youtube.com/watch?v=-ivFNRButXA

@Jaytheway: "Hello! I love ImGui ๐Ÿงก I'm using it for JPL Spatial Application that demonstrates some of the features of my audio library JPL Spatial" Image

MyoGestic, a Real-time EMG / biosignal framework for myocontrol & prosthetics research. Image

@matrohin _"Hi! Thank you for Dear ImGui and ImPlot! Great libraries!" I'm developing a process explorer for Linux: https://github.com/matrohin/prock Image

@eduardodoria: Doriax Engine "A free, open-source 2D/3D game engine and integrated editor for building cross-platform games and interactive projects with Lua or C++." https://github.com/doriaxengine/doriax / https://doriax.org / more shots

Image

MemDBG is a high-performance memory debugging and inspection suite designed for PlayStation 4 and PlayStation 5 homebrew research environments. https://github.com/seregonwar/MemDBG Showcase: https://github.com/seregonwar/MemDBG/blob/main/docs/showcase.md Image

@Jgocunha: "A C++20 library and interactive application for building and simulating Dynamic Neural Field (DNF) architectures: github/dynamic-neural-field-composer. Also, uses implot and imgui-node-editor." https://youtu.be/Ss_FOccIM_o Watch the video

Newly announced and released Box3D by @erincatto: https://box2d.org/posts/2026/06/announcing-box3d/ Has a testbed and replay viewer:

Image

Plinky debug/visualizer by @mmalex https://plinkysynth.com/ from https://bsky.app/profile/mmalex.bsky.social/post/3mpxsfa5krs25 "I stream state out over webusb and get the robots to help me write throwaway one-page visualizers. whatever your tool, visualize visualize visualize! and make every bug worse before you fix it, so you can see its true colours :)" Image

SOFiSTiK suite "We are very happy to use Dear ImGui in our Viewer application (desktop and web), the interactive post-processing tool part of our structural analysis SOFiSTiK suite:" https://www.sofistik.com/ Image

...More in gallery threads.


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.

๐Ÿ’ฐ ๐Ÿ™ 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.