github ocornut/imgui v1.92.6

latest release: v1.92.6-docking
10 hours ago

v1.92.6 🔍

❤️ 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..

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 recent/renewing sponsors:

And:


🎤 Embarrassment time 🎤

Wookash Podcast had me a few months ago, 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

Unreal Engine users? See "Converging toward a principal Unreal Engine backend/binding for Dear ImGui?"

Also check the Useful Extensions/Widgets page for a full list.


Changes (since v1.92.5)

🆘 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.

1 92 6 ProggyClean vs ProggyForever

TL;DR;

  • Opinionatedly not focusing on styling and yet keeps looking a little bit better with every release 🎉
  • Opinionatedly keeps increasing version number in a shy way.
  • Exciting new alternative scalable default font ProggyForever.
  • Font related tweak/fixes.
  • Might-be-affecting-some breaking-change for bizarre old default parameter to BeginPopupContextXXX().
  • Added optional/configurable color markers for ColorEdit, and opt-in for multi-components Drags/Sliders.
  • Tables, TreeNode, InputText, Navigation fixes etc.
  • Word-wrapping improvements.
  • Multi-viewports Z-ordered related fixed.
  • Facilitate use of Nearest filtering for many backends (not yet fully backend agnostic).
  • Many other things.

Breaking Changes

  • Fonts:
    • AddFontDefault() now automatically selects an embedded font between:
      • AddFontDefaultBitmap(): classic pixel-clean font. Recommended at Size 13px with no scaling.
      • AddFontDefaultVector(): new scalable font. Recommended at any higher size.
      • The default selection is based on (style.FontSizeBase * FontScaleMain * FontScaleDpi * DisplayDensity) reaching a small threshold, but old codebases may not set any of them properly. As as a result, it is likely that old codebases may still default to AddFontDefaultBitmap()`.
      • Prefer explicitly calling either of them based on your own logic! You can call AddFontDefaultBitmap() to ensure legacy behavior.
    • Fixed handling of ImFontConfig::FontDataOwnedByAtlas = false which did erroneously make a copy of the font data, essentially defeating the purpose of this flag and wasting memory (undetected since July 2015 and now spotted by @TellowKrinkle, this is perhaps the oldest bug in Dear ImGui history, albeit for a rarely used feature!) (#9086, #8465)
      HOWEVER, fixing this bug is likely to surface bugs in user/app code:
      • Prior to 1.92, font data only needs to be available during the atlas->AddFontXXX() call.
      • Since 1.92, font data needs to available until atlas->RemoveFont(), or more typically until a shutdown of the owning context or font atlas.
      • The fact that handling of FontDataOwnedByAtlas = false was broken bypassed the issue altogether.
    • Removed ImFontConfig::PixelSnapV added in 1.92 which turns out is unnecessary (and was mis-documented). Post-rescale GlyphOffset is always rounded.
  • Popups: changed compile-time ImGuiPopupFlags popup_flags = 1 default value to be = 0 for BeginPopupContextItem(), BeginPopupContextWindow(), BeginPopupContextVoid(), OpenPopupOnItemClick().
    The default value has same meaning before and after. (#9157, #9146)
    • Before this version, those functions had a 'ImGuiPopupFlags popup_flags = 1 default value in their function signature. This was introduced by a change on 2020/06/23 (1.77) while changing the signature from int mouse_button to ImGuiPopupFlags popup_flags and trying to preserve then-legacy behavior.
    • We have now changed this behavior to: cleanup a very old API quirk, facilitate use by bindings, and to remove the last and error-prone non-zero default value. Also because we deemed it extremely rare to use those helper functions with the Left mouse button!
      As using the LMB would generally be triggered via another widget, e.g. a Button() + a OpenPopup()/BeginPopup() call.
    • Before: The default = 1 means ImGuiPopupFlags_MouseButtonRight.
      Explicitly passing a literal 0 means ImGuiPopupFlags_MouseButtonLeft.
    • After: The default = 0 means ImGuiPopupFlags_MouseButtonRight.
      Explicitly passing a literal 1 also means ImGuiPopupFlags_MouseButtonRight.
      (if legacy behavior are enabled) or will assert (if legacy behavior are disabled).
    • TL;DR: if you don't want to use right mouse button for popups, always specify it
      explicitly using a named ImGuiPopupFlags_MouseButtonXXXX value.
    • Recap:
BeginPopupContextItem("foo");                                         // Behavior unchanged (use Right button)
BeginPopupContextItem("foo", ImGuiPopupFlags_MouseButtonLeft);        // Behavior unchanged (use Left button)
BeginPopupContextItem("foo", ImGuiPopupFlags_MouseButtonLeft | xxx);  // Behavior unchanged (use Left button + flags)
BeginPopupContextItem("foo", ImGuiPopupFlags_MouseButtonRight | xxx); // Behavior unchanged (use Right button + flags)
BeginPopupContextItem("foo", 1);                                      // Behavior unchanged (as a courtesy we legacy interpret 1 as ImGuiPopupFlags_MouseButtonRight, will assert if disabling legacy behaviors.
BeginPopupContextItem("foo", 0);                                      // !! Behavior changed !! Was Left button. Now will defaults to Right button! --> Use ImGuiPopupFlags_MouseButtonLeft.
BeginPopupContextItem("foo", ImGuiPopupFlags_NoReopen);               // !! Behavior changed !! Was Left button + flags. Now will defaults to Right button! --> Use ImGuiPopupFlags_MouseButtonLeft | xxx.
  • Commented out legacy names obsoleted in 1.90 (Sept 2023):
    • BeginChildFrame() --> BeginChild() with ImGuiChildFlags_FrameStyle flag.
    • EndChildFrame() --> EndChild().
    • ShowStackToolWindow() --> ShowIDStackToolWindow().
    • IM_OFFSETOF() --> offsetof().
    • IM_FLOOR() --> IM_TRUNC() [internal, for positive values only]
  • Hashing: handling of "###" operator to reset to seed within a string identifier doesn't include the "###" characters in the output hash anymore:
    Before: GetID("Hello###World") == GetID("###World") != GetID("World")
    After: GetID("Hello###World") == GetID("###World") == GetID("World")
    • This has the property of facilitating concatenating and manipulating identifiers using "###", and will allow fixing other dangling issues.
    • This will invalidate hashes (stored in .ini data) for Tables and Windows that are using the "###" operators. (#713, #1698)
  • Renamed helper macro IM_ARRAYSIZE() -> IM_COUNTOF(). Kept redirection/legacy name.
  • Backends:
    • Vulkan: optional ImGui_ImplVulkanH_DestroyWindow() helper used by our example code does not call vkDestroySurfaceKHR(): because surface is created by caller of ImGui_ImplVulkanH_CreateOrResizeWindow(), it is more consistent. (#9163)

Other Changes

  • Fonts:
    • Added AddFontDefaultVector(): a new embedded monospace scalable font: ProggyForever!
      From https://github.com/ocornut/proggyforever: _"ProggyForever is an MIT-licensed partial reimplementation of the ProggyVector font (originally by Tristan Grimmer), which itself is a vector-based reinterpretation of the ProggyClean bitmap font that happily served as
      Dear ImGui default font for over 10 years." [...] "I commissioned Thiebault Courot to recreate this, applied various minor tweaks
      and fixes, and reworked his editing pipeline toward shipping FontForge source files so we can allow and track future changes."
      • TL;DR; there was no strictly MIT-licensed matching font. We made it!
      • The font data was carefully subsetted, trimmed and compressed so the embedded data is ~14 KB. Embedding a scalable default font ensures that Dear ImGui can be easily and readily used in all contexts, even without file system access.
      • Expect minor fixes/improvements in following releases.
      • As always you can opt-out of the embedded font data if desired.
    • AddFontDefault() now automatically selects an embedded font between the classic pixel-looking one and the new scalable one. Prefer calling AddFontDefaultVector() or AddFontDefaultBitmap() explicitly.
    • Fixed a crash when trying to use AddFont() with MergeMode==true on a font that has already been rendered. (#9162) [@ocornut, @cyfewlp]
    • Fixed an issue where using PushFont() from the implicit/fallback "Debug" window when its recorded state is collapsed would incorrectly early out. This would break e.g. using direct draw-list calls such as GetForegroundDrawList() with current font. (#9210, #8865)
    • Fixed an issue related to EllipsisChar handling, while changing font loader or font loader flags dynamically in Style->Fonts menus.
    • imgui_freetype: fixed overwriting ImFontConfig::PixelSnapH when hinting is enabled, creating side-effects when later disabling hinting or dynamically switching to stb_truetype rasterizer.
    • Adding new fonts after removing all fonts mid-frame properly updates current state.
  • Textures:
    • Fixed a building issue when ImTextureID is defined as a struct.
    • Fixed displaying texture # in Metrics/Debugger window.
  • Menus:
    • Fixed MenuItem() label position and BeginMenu() arrow/icon/popup positions, when used inside a line with a baseline offset.
    • Made navigation into menu-bar auto wrap on X axis. (#9178)
  • TreeNode:
    • Fixed highlight position when used inside a line with a large text baseline offset (it never quite worked in this situation; but then most of the time the text baseline offset ends up being zero or FramePadding.y for a given line).
  • Tables:
    • Fixed an issue where a very thin scrolling table would advance parent layout slightly differently depending on its visibility (caused by a mismatch between hard minimum window size and table minimum size).
    • Fixed an issue where submitting non-integer row heights would eventually advance table parent layout by +0/+1 depending on its visibility.
    • Fixed losing stored display order when reducing column count or when .ini data has missing or duplicate values. (#9108, #4046)
  • ColorEdit:
    • Added R/G/B/A color markers next to each component (enabled by default).
    • Added ImGuiColorEditFlags_NoColorMarkers to disable them.
    • Added style.ColorMarkerSize to configure width of color component markers.
  • Sliders, Drags:
    • Added ImGuiSliderFlags_ColorMarkers to opt-in adding R/G/B/A color markers next to each components, in multi-components functions.
    • Added a way to select a specific marker color.
  • InputText:
    • InputTextMultiline(): fixed a minor bug where Shift+Wheel would allow a small horizontal scroll offset when there should be none. (#9249)
    • ImGuiInputTextCallbackData: SelectAll() also sets CursorPos to SelectionEnd.
    • ImGuiInputTextCallbackData: Added SetSelection() helper.
    • ImGuiInputTextCallbackData: Added ID and EventActivated members. (#9174)
  • Text, InputText:
    • Reworked word-wrapping logic:
      • Try to not wrap in the middle of contiguous punctuation. (#8139, #8439, #9094)
      • Try to not wrap between a punctuation and a digit. (#8503)
      • Inside InputTextMultiline() with WordWrap enabled: prefer keeping blanks at the end of a line rather than at the beginning of next line. (#8990, #3237)
    • Fixed low-level word-wrapping function reading from *text_end when passed a string range. (#9107) [@achabense]
    • Changed RenderTextEllipsis() logic to not trim trailing blanks before the ellipsis, making ellipsis position more consistent and not arbitrary hiding the possibility of multiple blanks. (#9229)
  • Nav:
    • Fixed remote/shortcut InputText() not teleporting mouse cursor when nav cursor is visible and io.ConfigNavMoveSetMousePos is enabled.
    • Fixed a looping/wrapping issue when used in menu layer. (#9178)
    • Fixed speed scale for resizing/moving with keyboard/gamepad. We incorrectly used io.DisplayFramebufferScale as a scaling factor (very old code), effectively making those actions faster on macOS/iOS retina screens. (changed this to use a style scale factor that's not fully formalized yet)
    • Fixed an UBSan warning when using in a ImGuiListClipper region . (#9160)
  • Scrollbar: fixed a code-path leading to a divide-by-zero (which would not be noticeable by user but detected by sanitizers). (#9089) [@judicaelclair]
  • InvisibleButton: allow calling with size (0,0) to fit to available content size. (#9166, #7623)
  • Tooltips, Disabled: fixed EndDisabledOverrideReenable() assertion when nesting a tooltip in a disabled block. (#9180, #7640) [@RegimantasSimkus]
  • Added GetItemFlags() in public API for consistency and to expose generic flags of last submitted item. (#9127)
  • Misc: fixed build on ARM64/ARM64EC targets trying to use SSE/immintrin.h. (#9209, #5943, #4091) [@navvyswethgraphics]
  • Log/Capture:
    • Fixed erroneously injecting extra carriage returns in output text buffer when ItemSpacing.y > FramePadding.y + 1 while emitting items.
  • Images:
    • Added style.ImageRounding, ImGuiStyleVar_ImageRounding to configure rounding of Image() widgets. (#2942, #845)
    • ImageButton() doesn't use a clamped style.FrameRounding value but instead adjust inner image rounding when FramePadding > FrameRounding`. (#2942, #845)
  • Shortcuts:
    • IsItemHovered() without ImGuiHoveredFlags_AllowWhenBlockedByActiveItem doesn't filter out the signal when activated item is a shortcut remote activation; (which mimics what's done internally in the ItemHoverable() function). (#9138)
    • Fixed tooltip placement being affected for a frame when located over an item activated by SetNextItemShortcut(). (#9138)
  • Error Handling:
    • Improved error handling and recovery for EndMenu()/EndCombo(). (#1651, #9165, #8499)
    • Improved error handling and recovery for TableSetupColumn().
  • Debug Tools:
    • Debug Log: fixed incorrectly printing characters in IO log when submitting non-ASCII values to io.AddInputCharacter(). (#9099)
    • Debug Log: can output to debugger on Windows via Win32 OutputDebugString() (#5855)
  • Demo:
    • Slightly improve Selectable() demos. (#9193)
  • Backends:
    • DirectX10: added SamplerNearest in ImGui_ImplDX10_RenderState. (+renamed SamplerDefault to SamplerLinear, which was tagged as beta API)
    • DirectX11: added SamplerNearest in ImGui_ImplDX11_RenderState. (+renamed SamplerDefault to SamplerLinear, which was tagged as beta API)
    • GLFW: Avoid repeated glfwSetCursor() / glfwSetInputMode() unnecessary calls. Lowers overhead for very high framerates (e.g. 10k+ FPS). [@maxliani]
    • GLFW: Added IMGUI_IMPL_GLFW_DISABLE_X11 / IMGUI_IMPL_GLFW_DISABLE_WAYLAND to forcefully disable either. (#9109, #9116) Try to set them automatically if headers are not accessible. (#9225)
    • OpenGL3: Fixed embedded loader multiple init/shutdown cycles broken on some platforms. (#8792, #9112)
    • SDL2, SDL3: changed GetClipboardText() handler to return NULL on error aka clipboard contents is not text. Consistent with other backends. (#9168)
    • SDL2, SDL3: systems other than X11 are back to starting mouse capture on mouse down (reverts 1.91.9 change). Only X11 requires waiting for a drag by default (not ideal, but a better default for X11 users). Waiting for a drag to start mouse capture leads to input drops when dragging after clicking on the edge of a window. (#3650, #6410, #9235, #3956, #3835)
    • SDL2, SDL3: added ImGui_ImplSDL2_SetMouseCaptureMode()/ImGui_ImplSDL3_SetMouseCaptureMode() function for X11 users to disable mouse capturing/grabbing. (#3650, #6410, #9235, #3956, #3835)
      • When attached to a debugger may want to call:
        • ImGui_ImplSDL3_SetMouseCaptureMode(ImGui_ImplSDL3_MouseCaptureMode_Disabled);
      • But you can also configure your system or debugger to automatically release mouse grab when crashing/breaking in debugger, e.g.
        • console: setxkbmap -option grab:break_actions && xdotool key XF86Ungrab
        • or use a GDB script to call SDL_CaptureMouse(false). See #3650.
      • On platforms other than X11 this is unnecessary.
    • SDL_GPU3: added SamplerNearest in ImGui_ImplSDLGPU3_RenderState.
    • SDL_GPU3: macOS version can use MSL shaders in order to support macOS 10.14+ (vs Metallib shaders requiring macOS 14+). Requires application calling SDL_CreateGPUDevice() with SDL_GPU_SHADERFORMAT_MSL. (#9076) [@Niminem]
    • Vulkan: helper for creating a swapchain (used by examples and multi-viewports) selects VkSwapchainCreateInfoKHR's compositeAlpha value based on cap.supportedCompositeAlpha, which seems to be required on some Android devices. (#8784) [@FelixStach]
    • WebGPU: fixes for Emscripten 5.0.0 (note: current examples do not build with 5.0.1).
    • Win32: handle WM_IME_CHAR/WM_IME_COMPOSITION to support Unicode inputs on MBCS (non-Unicode) Windows. (#9099, #3653, #5961) [@ulhc, @ocornut, @Othereum]
    • Win32: minor optimization not submitting gamepad input if packet number has not changed (reworked previous 1.92.4). (#9202, #8556) [@AhmedSamyMousa, @MidTerm-CN]
  • Examples:
    • Win32+DirectX12: ignore seemingly incorrect D3D12_MESSAGE_ID_FENCE_ZERO_WAIT warning on startups on some setups. (#9084, #9093) [@RT2Code, @LeoGautheron]

Changes from 1.92.5 to 1.92.6 specific to the Docking+Multi-Viewports branch:

git tag: v1.92.6-docking

  • Docking:
    • Fixed various rendering issues and ability to have rounded floating dock nodes (#6993, #6151) - please note that rounding is still disabled on standalone viewports.
    • Fixed implicit/fallback "Debug" window from staying visible if once docked. (#9151)
    • Demo: rework 'Dockspace' demo to increase clarity and put more emphasis on the basic path of simply calling DockSpaceOverViewport().
  • Viewports:
    • Fixed a regression in 1.92.4 where partially moving a floating docking node with horizontal/vertical split over the main viewport would set the window in an invalid state in some situations, making user unable to further interact with the window.
    • Fixed a regression in 1.92.4 which could cause combos/popups window from appearing under their parent viewport if their geometry overlapped the main viewport. (#8948, #9172, #9131, #9128)
    • Fixed an assert in background dimming code, which could trigger after using gamepad/keyboard to move a window to another viewport. (#9053) [@lut0pia, @ocornut]
  • Backends:
    • GLFW: dynamically load X11 functions to avoid -lx11 linking requirement introduced in 1.92.3. (#9116, #9109) [@ramenguy99]
    • GLFW: improve workarounds for cases where GLFW is unable to provide reliable monitor info. Preserve existing monitor list when none of the new one is valid. (#9195, #7902, #5683)
    • SDL2, SDL3: adjust IME offset to match other backends and master branch. (#6071, #1953)
    • Win32: viewports created by backend forcefully direct messages to DefWindowProcW() in order to support Unicode text input. (#9099, #3653, #5961) [@ulhc]
    • Win32: fixed an issue from 1.90.5 where newly appearing windows that are not parented to the main viewport didn't have their task bar icon appear before the window was explicitly refocused. (#7354, #8669)

Gallery

"Seb Lee shows a really cool laser art installation with custom control software using dear imgui!"
Full video of the behind the scenes: https://www.youtube.com/watch?v=FgTo5WRluy0

Image Image

@soufianekhiat: "ImAnim - Animation Engine for Dear ImGui"
#9102
https://github.com/soufianekhiat/ImAnim
Image

id Software (Doom: The Dark Ages) at Graphics Programming Conference 2025 (https://www.graphicsprogrammingconference.nl):
Image

Unknown software visible at 6:04 in The making of Tarantino’s The Lost Chapter: Yuki’s Revenge
Image
...More in gallery threads.

Internal tooling for Absolum (custom engine by Guard Crush Games)
Image

https://www.sees.ai/ has all sorts of video on their youtube channel:
e.g. Autonomous electricity grid inspection
https://www.youtube.com/watch?v=hTEVNdqI89U
Image
(link to more)

@BigJk: "Using ImGui (again) for my next steam game. It's a Fake OS + Dungeon Crawler + Match-3 game called DungeonOS. "
https://store.steampowered.com/app/4221660/DungeonOS/
Image

Geopoint, Geolidar by Geobotica
https://www.geobotica.com/geolidar/
Image

CVEDIA-RT
https://www.cvedia.com/cvedia-rt
https://www.reddit.com/r/MachineLearning/comments/w5w0jq/p_we_have_developed_cvediart_as_a_free_tool_to/

HLS_576.mp4

@jose-donato: "crypto orderflow app built using dear imgui (c++) and compiled to the web using emscripten"
app: https://cryexc.josedonato.com, full demo here: https://x.com/josedonato__/status/2010022826317885817
Image

@THISISAGOODNAME: "I made a NES emulator & nsf player."
https://github.com/CU-Production/imgui_fc_visualizer
Image

@Flinterpop "A GIS app I developed for use with different modules such as the ADS-B and Radar message emulator. "
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.

❤️ Last year 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.

Don't miss a new imgui release

NewReleases is sending notifications on new releases.