Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies
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!
π£ Click version number above to display full release note contents, otherwise it is clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A Also see our Wiki with sections such as Getting Started, Useful Extensions Gallery, Software using Dear ImGui, Bindings & Backends and more! π
Consider reading the foreword for v1.90.5. If you contacted me in March consider following up :)
Dear ImGui is funded by your contributions and 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 & Sponsors page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and that will contribute to fund Dear ImGui.
In the last years, Dear ImGui has been financially supported by: Aras PranckeviΔius / Arkane Lyon / Asobo Studio / Avalanche Studios Group / BeamNG / Blizzard / Esoterica Engine / G3Dvu / Lucid Games / Noel Berry / Mobigame / Planestate Software / Pocketwatch Games / Remedy Entertainment / Supercell / Terrible Toybox / Tuxedo Labs / Wonderland Engine and many individual contributors. Thank you for allowing Dear ImGui to stay on its path.
Special thanks to @cfillion, @GamingMinds-DanielC, @PathogenDavid & more for for their help with patches and answers!
Breaking Changes:
io.AddKeyEvent()
, as this naturally align with how macOS X uses those keys. (#2343, #4084, #5923, #456)
ImGuiMod_Ctrl | ImGuiKey_C
is a valid idiomatic shortcut for both Windows and Mac style users.ImGuiMod_Shortcut
which was previously dynamically remapping to Ctrl or Cmd/Super. It is now unnecessary to specific cross-platform idiomatic shortcuts. Kept symbols redirecting ImGuiMod_Shortcut
to ImGuiMod_Ctrl
(will obsolete).CaptureKeyboardFromApp()
-> SetNextFrameWantCaptureKeyboard()
CaptureMouseFromApp()
-> SetNextFrameWantCaptureMouse()
SDL_Renderer2
/SDL_Renderer3
: ImGui_ImplSDLRenderer2_RenderDrawData()
and ImGui_ImplSDLRenderer3_RenderDrawData()
now takes a SDL_Renderer*
parameter. This was previously overlooked from the API but it will allow eventual support for multi-viewports.Extra Breaking changes IF AND ONLY IF you were using imgui_internal.h versions of Shortcut()
or owner-aware versions of IsKeyPressed()
, IsKeyChordPressed()
, IsMouseClicked()
prior to this version.
ImGuiKeyOwner_None
to ImGuiKeyOwner_NoOwner
, to make use more explicit and reduce confusion with the fact it is a non-zero value and cannot be a default.ImGuiInputFlags_RouteGlobalLow
-> ImGuiInputFlags_RouteGlobal
(this is the suggested global route)ImGuiInputFlags_RouteGlobal
-> ImGuiInputFlags_RouteGlobal | ImGuiInputFlags_RouteOverFocused
ImGuiInputFlags_RouteGlobalHigh
-> ImGuiInputFlags_RouteGlobal | ImGuiInputFlags_RouteOverFocused | ImGuiInputFlags_RouteOverActive
Shortcut(),
SetShortcutRouting()`: swapped last two parameters order in function signatures:
Shortcut(ImGuiKeyChord key_chord, ImGuiID owner_id = 0, ImGuiInputFlags flags = 0);
Shortcut(ImGuiKeyChord key_chord, ImGuiInputFlags flags = 0, ImGuiID owner_id = 0);
IsKeyPressed()
, IsKeyChordPressed()
, IsMouseClicked()
: swapped last two parameters order in function signatures:
IsKeyPressed(ImGuiKey key, ImGuiID owner_id, ImGuiInputFlags flags = 0);
IsKeyPressed(ImGuiKey key, ImGuiInputFlags flags, ImGuiID owner_id = 0);
IsMouseClicked(ImGuiMouseButton button, ImGuiID owner_id, ImGuiInputFlags flags = 0);
IsMouseClicked(ImGuiMouseButton button, ImGuiInputFlags flags, ImGuiID owner_id = 0);
Other Changes
BeginChild()
: fixed visibility of fully clipped child windows and tables from Test Engine.BeginChild()
: fixed auto-fit calculation when using either (not both) ResizeX
/ResizeY
and double-clicking on a border. Calculation incorrectly didn't always account for scrollbar as it assumed the other axis would also be auto-fit. (#1710)Shortcut()
function. e.g. Using ImGui::Shortcut(ImGuiMod_Ctrl | ImGuiKey_C)
with default policy:
SetNextItemShortcut()
to set a shortcut to locally or remotely press or activate an item (depending on specified routing policy: using ImGuiInputFlags_RouteGlobal
the item shortcut may be executed even if its window is not in focus stack). Items like buttons are not fully activated, in the sense that they get pressed but another active item, e.g. InputText() won't be deactivated.Shortcut()
, SetNextItemShortcut()
: (#456, #2637)
ImGuiInputFlags_RouteFocused
: focus stack route (default)ImGuiInputFlags_RouteActive
: only route to active itemImGuiInputFlags_RouteGlobal
: route globally, unless a focus route claim shame shortcut.ImGuiInputFlags_RouteAlways
: no routing submission, no routing check.ImGuiInputFlags_Repeat
: for use by Shortcut() and by upcoming rework of various input functions (which are still internal for now).ImGuiInputFlags_Tooltip
: for SetNextItemShortcut()
to show a tooltip when hovering item.ImGuiInputFlags_RouteOverFocused
: global route takes priority over focus route.ImGuiInputFlags_RouteOverActive
: global route takes priority over active item.ImGuiInputFlags_RouteUnlessBgFocused
: global route disabled if no imgui window focused.ImGuiInputFlags_RouteFromRootWindow
: route evaluated from the point of view of root window rather than current window.ImGui::GetKeyName(ImGuiKey_None)
from returning "N/A" or "None" depending on value of IMGUI_DISABLE_OBSOLETE_KEYIO. It always returns "None".IMGUI_CHECKVERSION()
to verify ABI compatibility between caller code and compiled version of Dear ImGui. If you get an assert it most likely mean you have a build issue, read comments near the assert. (#7568)WndProc
handler to be called before backend initialization. Because of how ::CreateWindow()
calls in WndProc
it is facilitating to not assert. (#6275) [@MennoVink]Changes from 1.90.6 to 1.90.7 related to the Docking branch:
DockSpaceOverViewport()
to allow passing an explicit dockspace id if desired. (#7611)
DockSpaceOverViewport(const ImGuiViewport* viewport = NULL, ImGuiDockNodeFlags flags = 0, ...);
DockSpaceOverViewport(ImGuiID dockspace_id = 0, const ImGuiViewport* viewport = NULL, ImGuiDockNodeFlags flags = 0, ...);
Simply add a leading 0 to your existing calls to DockSpaceOverViewport() if you have any.Changes from 1.90.6 to 1.90.7 related to the Range-Select branch: (aimed to merge in 1.91)
current_selection_size
argument to BeginMultiSelect()
, optional. Required for shortcut routing so we can e.g. have Escape be used to clear selection then to exit child window.@delhoume: _"Here is my first application using ImGui, still learning a lot. [...] It is a simple but efficient TIFF image viewer specially designed to allow instant display of massive images. [...] https://github.com/delhoume/qshowtiff.
@slerpxcq: "A WIP character animation editor" https://github.com/slerpxcq/mma
@learn-more: "UI for my custom 6502 emulator." The machine being simulated here is the 6502 computer from Ben Eater (https://eater.net/6502 / https://www.youtube.com/watch?v=XlbPnihCM0E). The software currently running in the emulator is MSBASIC ported for Ben Eater's machine: https://github.com/beneater/msbasic)
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 needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out (omar AT dearimgui DOT com). See Funding/Sponsors page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and that will contribute to fund 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!
π£ Click version number above to display full release note contents, otherwise it is clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A Also see our Wiki with sections such as Getting Started and Useful Extensions Gallery! π
Consider reading the foreword for v1.90.5. If you contacted me in March consider following up :)
Dear ImGui is funded by your contributions and 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 & Sponsors page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and that will contribute to fund Dear ImGui.
Special thanks to @cfillion, @GamingMinds-DanielC, @PathogenDavid & more for for their help with patches and answers!
Recent financial contributions by G3DVu!, Lucid Games! Aras! Remedy Entertainment! And many other individuals. Thank you,
Breaking Changes:
SameLine()
call. (#7505, #282) Before: TreeNode("##Hidden"); SameLine(); Text("Hello");
// This was actually incorrect! BUT appeared to look ok with the default style
// where ItemSpacing.x == FramePadding.x * 2 (it didn't look aligned otherwise).
After: TreeNode("##Hidden"); SameLine(0, 0); Text("Hello");
// This is correct for all values in style.
ImGuiTreeNodeFlags_SpanAvailWidth
).Other Changes
ClipRect
to extend to windows' left and right borders, instead of adding arbitrary WindowPadding.x * 0.5f
space on left and right. That ClipRect half-padding was arbitrary/confusing and inconsistent with Y axis. It also made it harder to draw items covering whole window without pushing an extended ClipRect. Some items near windows left and right edge that used to be clipped may be partly more visible. (#3312, #7540, #3756, #6170, #6365)Begin()
append calls from setting last item information for title bar, making it impossible to use IsItemHovered() on a Begin()-to-append, and causing issue bypassing hover detection on collapsed windows. (#7506, #823)ImFontConfig::GlyphOffset
may become duplicate with this fix. (#7399, #7404) [@GamingMinds-DanielC]ImGuiTreeNodeFlags_SpanTextWidth
to make hitbox and highlight only cover the label. (#6937) [@dimateos]style.TableAngledHeadersTextAlign
and corresponding ImGuiStyleVar_TableAngledHeadersTextAlign
variable. Default to horizontal center. (#6917) [@thedmd, @ocornut]glPolygonMode()
on them. (#7447) [@afraidofdark, @ocornut]IMGUI_IMPL_VULKAN_USE_VOLK
define. (you could always use IMGUI_IMPL_VULKAN_NO_PROTOTYPES
+ ImGui_ImplVulkan_LoadFunctions()
as well). (#6582, #4854) [@adalsteinnh, @kennyalive, @ocornut]SDL_StartTextInput()
/SDL_StopTextInput()
as SDL3 no longer enables it by default. (#7452, #6306, #6071, #1953) [@Green-Sky]example_emscripten_wgpu/
to example_glfw_wgpu/
. (#7435, #7132)Changes from 1.90.5 to 1.90.6 related to the Docking branch:
io.ConfigDockingWithShift
is enabled, fixed help tooltip erroneously reading SetNextWindowXXX()
data. (#6709, #4643, #7491) [@ocornut, @cfillion]Changes from 1.90.3 to 1.90.6 related to the Range-Select branch: (previous release notes skipped a few)
ImGuiSelectionRequestType_Clear
and ImGuiSelectionRequestType_SelectAll
into ImGuiSelectionRequestType_SetAll
, rename ImGuiSelectionRequest::RangeSelected
to Selected
.ImGuiSelectionBasicStorage
by using a single SetItemSelected() entry point.ImGuiMultiSelectFlags_NoAutoSelect
, ImGuiMultiSelectFlags_NoAutoClear
features.Bitty Engine https://paladin-t.github.io/bitty/
@naoki-0603: "Game engine under development. / This is a game under development using my own game engine."
@Eragon-Brisingr: ImGui_WS Support Unreal Engine use ImGui and Draw on web page. https://github.com/Eragon-Brisingr/ImGui_WS
storymachine https://www.trystorymachine.com
@achabense: _"I'm working on a project for exploring MAP-rules. https://github.com/achabense/astral
@mikamyara : "I write a code that simulates a CPU architecture for my students (for pedagogy only), and once the microcode table is filled with necessary signals, allows to create simple assembler code." https://dl.eea-fds.umontpellier.fr/ArchiLaSimu-1.0/
@rafaelanderka: lbm-imgui "an interactive fluid simulation toolbox." https://github.com/rafaelanderka/lbm-imgui
@antopilo "A game engine inspired by Quake that I've been working on for a couple years" https://nuake.antopilo.dev https://github.com/antopilo/Nuake
Tug by @kyle-sylvestre: Tug: GDB frontend made with Dear ImGui https://github.com/kyle-sylvestre/Tug
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 needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out (omar AT dearimgui DOT com). See Funding/Sponsors page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and that will contribute to fund 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!
π£ Click version number above to display full release note contents, otherwise it is clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A Also see our Wiki with sections such as Getting Started and Useful Extensions Gallery! π
I have been exceptionally mostly away in the past two months. A series of things happened. The project lost its largest source of income a few months ago. Shortly after I ran into some personal issues that have been emotionally draining. Coincidentally this aligned with a long-time planed trip so it was a good timing to disappear for a little bit. I have attended GDC (thanks to BeamNG) in an effort to engage in discussion with some potential sponsors, and generally to engage a little bit of gamedev reality again :)
I am now back home. I have moved offices. Managed to get some financial contributions (G3DVu!, Lucid Games! Aras!) and hopeful that ongoing discussions will eventually allow to fill the gap. Heck, I'm looking into buying a Mac now to get toward settling some of the recurrent scaling/dpi issues.
Dear ImGui is funded by your contributions and 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 & Sponsors page. Did you know? If sponsoring is not your cup of tea, you may buy licenses for Test Engine and that will contribute to fund Dear ImGui.
Special thanks to @cfillion, @GamingMinds-DanielC, @PathogenDavid & more for for their help with patches and answers!
TL;DR
Breaking Changes:
GetKeyIndex()
when IMGUI_DISABLE_OBSOLETE_FUNCTIONS
is set.
It has been unnecessary and a no-op since 1.87 (it returns the same value as passed when used with a 1.87+ backend using io.AddKeyEvent()
function). (#4921)
IsKeyPressed(GetKeyIndex(ImGuiKey_XXX))
--> IsKeyPressed(ImGuiKey_XXX)
AddEllipse()
, AddEllipseFilled()
and PathEllipticalArcTo()
into a single ImVec2 parameter. Exceptionally, because those functions were added recently in 1.90, we are not adding inline redirection functions. The transition is easy and should affect few users. (#2743, #7417) [@cfillion]Other Changes:
TableAngleHeadersRow()
stops being called. (#7416) [@cfillion]ListBox()
.io.PlatformLocaleDecimalPoint
decimal point localization feature not working regression from 1.90.1. (#7389, #6719, #2278) [@GamingMinds-DanielC]ImGuiStyleVar_TabBorderSize
, ImGuiStyleVar_TableAngledHeadersAngle
for consistency. (#7411) [@cfillion]AddConcavePolyFilled()
, PathFillConcave()
concave filling. (#760) [@thedmd] Note that only simple polygons (no self-intersections, no holes) are supported.AddText()
to accept null ranges. (#3615, 7391)Changes from 1.90.4 to 1.90.5 related to the Docking branch:
@faywong: lemon-note: A simple note taking tool i created with IMGUI. https://github.com/faywong/lemon-note
The Indie Stone just announced they're replacing their old debug UI in Project Zomboid with Dear ImGui. More screenshots, some videos, and their thoughts can be found on their recent devlog.
"Spotted in Hypersomnia, Used as ingame UI" https://store.steampowered.com/app/2660970/Hypersomnia/).
@eliasdaler "Dev tools for the game/engine I'm developing. The source code can be found here: https://github.com/eliasdaler/edbr"
"Universal compression ratio analyzer using the .kkp and .sym formats introduced in rekkrunchy-with-analytics." https://github.com/ConspiracyHu/kkpView-public And a blog post on resource compression: https://conspiracy.hu/articles/12-minimal-engine-file-formats-of-conspiracy-intros/
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 needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out (omar AT dearimgui DOT com). See Funding/Sponsors page.
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!
π£ Click version number above to display full release note contents, otherwise it is clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A Also see our Wiki with sections such as Getting Started and Useful Extensions Gallery! π
Dear ImGui is funded by your contributions and needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Sponsors page.
This is a small amend to v1.90.2 and v1.90.3.
TL;DR
ImGuiWindowFlags_NoNavInputs
, which broke imgui_memory_editor in 1.90.2.DebugStartItemPicker()
public API and wired to Tools menu. EVERY TIME I MENTION THE ITEMPICKER TO ANYONE, THEY SAY "WOW I WISH WE LEARNED ABOUT IT EARLIER". (#2673)Other Changes:
SetKeyboardFocusHere()
or programmatic tabbing APIs from not working on windows with the ImGuiWindowFlags_NoNavInputs flag (regression in 1.90.2, which among other things broke imgui_memory_editor #36).ImGuiCol_ModalWindowDimBg
are properly handled by BeginPopupModal()
. (#7340)TableAngledHeadersRow()
incorrect background fill drawn too low, particularly visible with tables that have no scrolling. (#6917)ImGui::DebugStartItemPicker()
to public API. (#2673)io.ConfigDebugIsDebuggerPresent
is set. (#2673)GetColorU32(ImU32)
variant.PathArcTo()
, PathBezierQuadraticCurveTo()
, PathBezierCubicCurveTo()
, PathStroke()
, PathFillConvex()
functions.Changes from 1.90.3 to 1.90.4 related to the Docking branch:
ImGuiBackendFlags_HasMouseHoveredViewport
support with GLFW 3.3.x, as required specs for it was relaxed in 1.87. This enable better viewport hovering detection without GLFW 3.4's GLFW_MOUSE_PASSTHROUGH
, with less reliance on dear imgui's own heuristic of platform windows order. (#7316)Angled Headers:
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 needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out (omar AT dearimgui DOT com). See Sponsors page.
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!
π£ Click version number above to display full release note contents, otherwise it is clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A Also see our Wiki with sections such as Getting Started and Useful Extensions Gallery! π
Dear ImGui is funded by your contributions and needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Sponsors page.
This is a small amend to v1.90.2. In particular, the fix to sizing of child menus seemed important enough to warrant a hot-fix. In 1.90.1 and 1.90.2, child menus with lots of contents wouldn't get clamped to parent viewport boundaries and therefore wouldn't show a scrollbar.
Breaking Changes:
ImGui_ImplSDL2_NewFrame(SDL_Window*)
signature which was obsoleted in 1.84. Calling ImGui_ImplSDL2_NewFrame() without parameter is fine.ImGui_ImplVulkan_Init()
function to ImGui_ImplVulkan_InitInfo
structure. Not required when using dynamic rendering. (#7308) [@shawnhatori]PipelineRenderingCreateInfo
structure in ImGui_ImplVulkan_InitInfo
, allowing to configure color/depth/stencil formats. Removed ColorAttachmentFormat
field previously provided for dynamic rendering. (#7166, #6855, #5446, #5037) [@shawnhatori]Other Changes:
ImGui_ImplSDL2_SetGamepadMode()
function to select whether to automatically pick
first available gamepad, all gamepads, or specific gamepads. (#3884, #6559, #6890, #7180) [@ocornut, @lethal-guitar, @wn2000, @bog-dan-ro]SDL_RenderViewportSet()
to not restore a wrong viewport if none was initially set.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 needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out (omar AT dearimgui DOT com). See Sponsors page.
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!
π£ Click version number above to display full release note contents, otherwise it is clipped by GitHub!
Homepage: https://github.com/ocornut/imgui Release notes: https://github.com/ocornut/imgui/releases FAQ: https://www.dearimgui.com/faq/ Getting Started: https://github.com/ocornut/imgui/wiki/Getting-Started Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki! It has sections such as this Getting Started and Useful Extensions Gallery! π
Dear ImGui is funded by your contributions and needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Sponsors page.
In the last year, Dear ImGui has been financially supported by:
Special thanks to @GamingMinds-DanielC, @PathogenDavid, @sakiodre & more for for their help with github answers.
Huge thank you to all past and present supporters! Also thanks to PVS Studio (great static analyzer) for providing us with a license for this project.
Past releases include v1.89, v1.89.1, v1.89.2, v1.89.3, v1.89.4, v1.89.5, v1.89.6, v1.89.7, v1.89.8, v1.89.9, v1.90, v1.90.1 .We are trying to make more frequent releases. Because: some people are relying on tagging and auto-generated bindings for other languages. And: it sets a beat and may encourage teams to update more frequently. Remember that our policy is to comment out obsolete names/symbols after 24 months, so at minimum you must update once year to reduce update complexity, but the most frequently you update the easier it will be.
TL;DR
Breaking Changes:
ImGuiIO::ImeWindowHandle
obsoleted in 1.87 in favor of writing to void* ImGuiViewport::PlatformHandleRaw
.ImGui_ImplWGPU_Init()
now takes a ImGui_ImplWGPU_InitInfo
structure instead of variety of parameters, allowing for easier further changes. (#7240)Other Changes:
SetKeyboardFocusHere()
not working when current nav focus is in different scope, regression from 1.90.1 related to code scoping Tab presses to local scope. (#7226) [@bratpilz]ImGuiWindowFlags_NavFlattened
flag. (#7237)BeginMenu()
followed by right-arrow from making the child menu reopen and flicker (using ImGuiPopupFlags_NoReopen
).ImGuiWindowFlags_NoNavInputs
is tested during scoring so NavFlattened windows can use it.ImGuiPopupFlags_NoReopen
flag to specifically not close and reopen a popup when it is already open. (#1497, #1533) (Note that this differs from specific handling we already have in place for the case of calling OpenPopup()
repeatedly every frame: we already didn't reopen in that specific situation, otherwise the effect would be very disastrous in term of confusion, as reopening would steal focus).SetShortcutRouting()
not handling ImGuiMod_Shortcut
redirect.IM_DEBUG_BREAK
macro on GCC to work around GDB bug (#7266) [@Peter0x44]vkAcquireNextImageKHR()
validation errors in VulkanSDK 1.3.275 by allocating one extra semaphore than in-flight frames. (#7236) [@mklefrancois]vkMapMemory()
calls unnecessarily using full buffer size. (#3957)ImGui_ImplVulkan_InitInfo::MinAllocationSize
field. (#7189, #4238)ImGui_ImplWGPU_InitInfo::PipelineMultisampleState
. (#7240)WGPUDepthStencilState
fields explicitly as a recent Dawn update stopped setting default values. (#7232) [@GrigoryGraborenko]GL_PIXEL_UNPACK_BUFFER
. (#7253)Changes from 1.90.1 to 1.90.2 related to the Docking branch:
ImGuiWindowClass::FocusRouteParentWindowId
as a way to connect the focus route between a tool window to a parent document window, so that Shortcuts in the documents are routed when the tool is focused (regardless of whether the tool is docked or in a floating viewport, etc.) (#6798)ImGuiDockNodeFlags_DockedWindowsInFocusRoute
to automatically make a dockspace connect the focus route of its docked window. This is provided a convenience in case you have windows where a connection is not explicit. (#6798)io.ConfigWindowsMoveFromTitleBarOnly
is set. (#7299, #3071)Changes from 1.90.1 to 1.90.2 related to the Range-Select branch:
This is a new API that hasn't been discussed much in public yet. Ignore if you are not one of the few users. If you happen to be using this please do get in contact. Hopefully this is on track to be stable and merged in 1.91.
Thank you for reading this changelog!
Since 1.89 we semi-sneakily soft launched two new entire projects:
Dear ImGui Automation/Test Engine & Test Suite https://github.com/ocornut/imgui_test_engine
Dear Bindings: alternative binding generator for C and other languages by @ShironekoBen (as an alternative to good old cimgui). https://github.com/dearimgui/dear_bindings
See Useful extensions wiki page for more.
@vhollander: "v2 platinum theme used in an actual program"
@kasperhbo: "An custom titlebar for mac os, using a "modified" version of glfw" for my tools applications https://github.com/KaspersTools/HummingBird https://github.com/KaspersTools/imgui
@GavinNL: "For one of my projects, I needed the ability to dynamically create UI Form interfaces at run-time. So I developed a library that lets you define the interface using a Json Schema. I based it off React Json Schemas"
https://github.com/GavinNL/ImJSchema WebAssembly Version To Test: https://t.co/IdlVzzm19L
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 needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out (omar AT dearimgui DOT com). See Sponsors page.
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!
π£ Click version number above to display full release note contents, otherwise it is clipped by GitHub!
Homepage: https://github.com/ocornut/imgui Release notes: https://github.com/ocornut/imgui/releases FAQ: https://www.dearimgui.com/faq/ Getting Started: https://github.com/ocornut/imgui/wiki/Getting-Started Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki! It has sections such as this Getting Started and Useful Extensions Gallery! π
Dear ImGui is funded by your contributions and needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Sponsors page.
In 2023, Dear ImGui was financially supported by:
Special thanks to @GamingMinds-DanielC, @PathogenDavid, @sakiodre, for their help with github answers.
Huge thank you to all past and present supporters! Also thanks to PVS Studio (great static analyzer) for providing us with a license for this project.
Past releases include v1.89, v1.89.1, v1.89.2, v1.89.3, v1.89.4, v1.89.5, v1.89.6, v1.89.7, v1.89.8, v1.89.9, v1.90 .We are trying to make more frequent releases. Because: some people are relying on tagging and auto-generated bindings for other languages. And: it sets a beat and may encourage teams to update more frequently. Remember that our policy is to comment out obsolete names/symbols after 24 months, so at minimum you must update once year to reduce update complexity, but the most frequently you update the easier it will be.
TL;DR
io.ConfigDebugIsDebuggerPresent
is enabled. See Debug Tools.
Breaking Changes:
ImGuiFreeType::BuildFontAtlas()
obsoleted in 1.81. Prefer using #define IMGUI_ENABLE_FREETYPE
or see commented code for manual runtime calls.ImGuiListClipper
which can return non-contiguous ranges.ImGuiColumnsFlags_XXX
symbols redirecting to ImGuiOldColumnsFlags_XXX
, obsoleted from imgui_internal.h in 1.80.ImGuiKey_KeyPadEnter
redirection to ImGuiKey_KeypadEnter
. (#2625, #7143)Other Changes:
BeginChild()
: Fixed auto-resizing erroneously limiting size to host viewport minus padding. There are no limit to a child width/height. (#7063) [@Devyre]BeginChild()
: Resize borders rendered even when ImGuiWindowFlags_NoBackground
is specified. (#1710, #7194)style.WindowMinSize.x
(instead of x/y) for both axises since 1.90. (#7106) [@n0bodysec]SetNextFrameWantCaptureKeyboard(false)
calls are not overridden back to true when navigation is enabled. SetNextFrameWantCaptureKeyboard()` is always higher priority. (#6997)InputTextMultiline()
: Fixed Tab character input not repeating (1.89.4 regression).InputTextMultiline()
: Tabbing through a multi-line text editor which allows Tab character inputs (using the ImGuiInputTextFlags_AllowTabInput
flag) doesn't automatically activate it, in order to allow passing through multiple widgets easily. (#3092, #5759, #787)BeginMenu()
can keep the wrong child menu open. (#6671, #6926)ImGuiTabItemFlags_NoAssumedClosure
to enable app to react on closure attempt, without having to draw an unsaved document marker (ImGuiTabItemFlags_UnsavedDocument
sets _NoAssumedClosure
automatically). (#7084)io.ConfigDebugIsDebuggerPresent
option. When enabled, this adds buttons in various locations of Metrics/Debugger to manually request a debugger break: (see Debug Tools Wiki Page)
Begin()
call.ItemAdd()
call via debug log and hovering 0xXXXXXX identifiers.BeginTable()
call.SetShortcutRouting()
/Shortcut()
call. [Internal]DebugFlashStyleColor()
to identify a style color. Added to Style Editor.IMGUI_USER_H_FILENAME
to change the path included when using IMGUI_INCLUDE_IMGUI_USER_H
.. (#7039) [@bryceberger]IMGUI_DEFINE_MATH_OPERATORS
is defined.io.BackendPlatformUserData
and io.BackendRendererUserData
are NULL in order to catch cases where backend was not shut down. (#7175)ImGui_ImplGlfw_InstallEmscriptenCanvasResizeCallback()
to register canvas selector and auto-resize GLFW window. (#6751) [@Traveller23, @ypujante]vkCreateCommandPool()
vs vkDestroyCommandPool()
. (#7075) [@FoonTheRaccoon]MinAllocationSize
field in ImGui_ImplVulkan_InitInfo
to workaround zealous "best practice" validation layer. (#7189, #4238) [@philae-ael]VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
as we don't reset them.wgpuRenderPassEncoderSetScissorRect()
crash when rendering modal window's dimming layer, which has an unclipped value in ImDrawCmd::ClipRect
. (#7191) [@aparis69]Changes from 1.90 to 1.90.1 related to the docking branch (multi-viewport and docking features):
Changes from 1.90 to 1.90.0 related to the range-select branch:
This is a new API that hasn't been discussed much in public yet. Ignore if you are not one of the few users. If you happen to be using this please do get in contact. I know I said this API would have been stabilized by now, but it's not! I expect that the latest major API breaking changes are now done. Hopefully this is on track to be stable and merged in 1.91.
BeginMultiSelect()
.ImGuiSelectionBasicStorage
helper.ImGuiMultiSelectFlags_BoxSelect2d
support. Enabled in Asset Browser. Selectable() supports it.Thank you for reading this changelog!
Since 1.89 we semi-sneakily soft launched two new entire projects!
Dear ImGui Automation/Test Engine & Test Suite https://github.com/ocornut/imgui_test_engine
Dear Bindings: alternative binding generator for C and other languages by @ShironekoBen (as an alternative to good old cimgui). https://github.com/dearimgui/dear_bindings
Some interesting new third-party projects:
@sakiodre: "Spotted in a LTT's video, Bigscreen Beyond uses dear imgui for their driver utility interface."
@AlpyneDreams: "We recently updated our in-engine realtime lighting editor to use ImGui for the Source Engine branch used by Portal 2: Desolation. This replaces the old VGUI light editor which was somewhat cumbersome to use. We also support placing area lights and projected cubemap light probes."
@kyle-sylvestre: MightyGrep is a simple file searching application
https://github.com/ocornut/imgui/assets/25188464/25804b39-231b-42af-a17e-08d36127d831
@r5r6ty "I use imgui for my Unity game development a video use this repo: Uimgui
@WerWolf: "I've posted some pictures here before but it's been close to 3 years of development now and A LOT has change since. Here's some new pictures of ImHex, the Hex Editor / Reverse Engineering Suite I've been developing using ImGui" https://imhex.werwolv.net / https://web.imhex.werwolv.net
Data Information view displaying various stats about the file
@arabine "A Story Editor to build stories for a home made story teller device (for children). " https://github.com/arabine/open-story-teller / https://www.openstoryteller.org
@foxnne "I posted a much older version of this, but this is my pixel art project, Pixi."
@xhighway999 "Again just another game engine called ITERO for our inhouse project"
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 needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out (omar AT dearimgui DOT com). See Sponsors page.
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!
π£ Click version number above to display full release note contents, otherwise it is clipped by GitHub!
Homepage: https://github.com/ocornut/imgui Release notes: https://github.com/ocornut/imgui/releases FAQ: https://www.dearimgui.com/faq/ Getting Started: https://github.com/ocornut/imgui/wiki/Getting-Started Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki! It has sections such as this Getting Started and Useful Extensions Gallery! π
Dear ImGui is funded by your contributions and needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Sponsors page.
Ongoing work on Dear ImGui is currently financially supported by:
Special thanks to @GamingMinds-DanielC, @PathogenDavid, @sakiodre, for their help with github answers.
Last release we reached 50000 stars. Our latest arbitrary milestone is that for a brief moment we had 777 open issues and 4444 closed ones.
Huge thank you to all past and present supporters! Also thanks to PVS Studio (great static analyzer) for providing us with a license for this project.
This is a followup to v1.89, v1.89.1, v1.89.2, v1.89.3, v1.89.4, v1.89.5, v1.89.6, v1.89.7, v1.89.8, v1.89.9. We are trying to make more frequent releases. Because: some people are relying on tagging and auto-generated bindings for other languages. And: it sets a beat and may encourage teams to update more frequently. Remember that our policy is to comment out obsolete names/symbols after 24 months, so at minimum you must update once year to reduce update complexity, but the most frequently you update the easier it will be.
I have been stubbornly deferring tagging 1.90 for while because I wanted to include the multi-select feature in it. Guess what? It's not done (now scheduled for 1.91)! And because 1.90 changelog is big enough already I'm tagging it now. There are about 1000 lines of changelog between 1.89 and 1.90.
TL;DR
BeginChild()
signature to enable new features: replaced bool border=false
with ImGuiChildFlags
, backward compatible.Resizable child windows
Angled table headers
Breaking Changes:
bool border = false
parameter to ImGuiChildFlags flags = 0
;. Added ImGuiChildFlags_Border value. As with our prior "bool-to-flags" API updates, the ImGuiChildFlags_Border value is guaranteed to be == true forever to ensure a smoother transition, meaning all existing calls will still work.
If you want to neatly transition your call sites:
BeginChild("Name", size, true)
BeginChild("Name", size, ImGuiChildFlags_Border)
BeginChild("Name", size, false)
BeginChild("Name", size)
or BeginChild("Name", 0)
or BeginChild("Name", size, ImGuiChildFlags_None)
.ImGuiChildFlags_Border == true
, but you are encouraged to update call sites.ImGuiChildFlags_AlwaysUseWindowPadding
as a replacement for the window-flag ImGuiWindowFlags_AlwaysUseWindowPadding
: the feature only ever made sense for use with BeginChild()
anyhow, passing it to Begin() had no effect. Now that we accept child-flags we are moving it there. Kept inline redirection enum (will obsolete later) so existing code will work. (#462)
BeginChild("Name", size, 0, ImGuiWindowFlags_AlwaysUseWindowPadding);
BeginChild("Name", size, ImGuiChildFlags_AlwaysUseWindowPadding, 0);
BeginChildFrame()
/EndChildFrame()
: removed functions in favor of using BeginChild()
with the ImGuiChildFlags_FrameStyle
flag. Kept inline redirection function (will obsolete). Those functions were merely PushStyleXXX/PopStyleXXX
helpers and custom versions are easy to create. (The removal isn't so much motivated by needing to add the feature in BeginChild()
, but by the necessity to avoid BeginChildFrame()
signature mismatching BeginChild()
signature and features.)ShowStackToolWindow()
("Stack Tool") to ShowIDStackToolWindow()
("ID Stack Tool"), as earlier name was misleading. Kept inline redirection function. (#4631)io.MetricsActiveAllocations
introduced in 1.63, was displayed in Metrics and unlikely to be accessed by end-user. Value still visible in the UI and easily to recompute from a delta.IMGUI_DISABLE_OBSOLETE_FUNCTIONS
now automatically defines IMGUI_DISABLE_OBSOLETE_KEYIO. (#4921)IM_OFFSETOF()
macro in favor of using offsetof()
available in C++11. Kept redirection define. (#4537)bool (*getter)(void* user_data, int idx, const char** out_text)
bool Combo(const char* label, int* current_item, bool (*getter)(void* user_data, int idx, const char** out_text), ...);
bool ListBox(const char* label, int* current_item, bool (*getting)(void* user_data, int idx, const char** out_text), ...);
const char* (*getter)(void* user_data, int idx)
bool Combo(const char* label, int* current_item, const char* (*getter)(void* user_data, int idx), ...);
bool ListBox(const char* label, int* current_item, const char* (*getter)(void* user_data, int idx), ...);
GetWindowContentRegionWidth()
-> use GetWindowContentRegionMax().x - GetWindowContentRegionMin().x
. Consider that generally GetContentRegionAvail().x
is often more correct and more useful.ImDrawCornerFlags_XXX
-> use ImDrawFlags_RoundCornersXXX
names. Read 1.82 changelog for details + grep commented names in sources.AddRect()
/AddRectFilled()
/PathRect()
/AddImageRounded()
. -> Use ImDrawFlags_RoundCornersXXX
flags. Read 1.82 changelog for details.ImGui_ImplVulkan_CreateFontsTexture()
: backend now creates its own command-buffer to upload fonts. Removed ImGui_ImplVulkan_DestroyFontUploadObjects()
which is now unnecessary. No need to call ImGui_ImplVulkan_CreateFontsTexture()
as it is done automatically in ImGui_ImplVulkan_NewFrame()
. You can call ImGui_ImplVulkan_CreateFontsTexture()
manually if you need to reload the font atlas texture. (#6943, #6715, #6327, #3743, #4618)Other Changes:
ImGuiChildFlags_ResizeX
and ImGuiChildFlags_ResizeY
to allow resizing child windows from the bottom/right border (toward layout direction). Resized child windows settings are saved and persistent in .ini file. (#1710)ImGuiChildFlags_Border
as a replacement for 'bool border = true' parameter.ImGuiChildFlags_AutoResizeX
and ImGuiChildFlags_AutoResizeY
to auto-resize on one axis, while generally providing a size on the other axis. (#1666, #1395, #1496, #1710) e.g. BeginChild("name", {-FLT_MIN, 0.0f}, ImGuiChildFlags_AutoResizeY);
ImGuiChildFlags_AlwaysAutoResize
disables this optimization, meaning child contents will never be clipped (not recommended).BeginGroup()
. (until we come up with new helpers for framed groups and work-rect adjustments, see #1496).SetNextWindowSizeConstraints()
rectangle, often useful when ImGuiChildFlags_AutoResizeX
or ImGuiChildFlags_AutoResizeY
. (#1666, #1395, #1496) Custom constraint callback are not supported with child window.ImGuiChildFlags_FrameStyle
as a replacement for BeginChildFrame()
, use it to make child window use FrameBg, FrameRounding, FrameBorderSize, FramePadding instead of ChildBg, ChildRounding, ChildBorderSize, WindowPadding.p_open != NULL
in BeginPopupModal()
+ set back user value to false when popup is closed in ways other than clicking the close button. (#6900)WindowPadding
instead of clipping edges).CellPadding
instead of clipping edges).SeparatorText()
. (#1643)Columns()
, as we favored that idiom back then, only different is left position follows indentation level, to match calling a Separator()
inside or outside Columns().SetItemTooltip()
/IsItemHovered(ImGuiHoveredFlags_ForTooltip)
defaults to activate tooltips on disabled items. This is done by adding ImGuiHoveredFlags_AllowWhenDisabled
to the default value of style.HoverFlagsForTooltipMouse
/style.HoverFlagsForTooltipNav
. (#1485)ImGuiHoveredFlags_ForTooltip
with a ImGuiHoveredFlags_DelayXXX
override. (#1485)AcceptDragDropPayload()
with ImGuiDragDropFlags_AcceptNoPreviewTooltip
and submitting a tooltip manually.ImGuiTableColumnFlags_AngledHeader
on selected
columns and call TableAngledHeadersRow()
. Added style.TableAngledHeadersAngle
style option.ImGuiTableFlags_HighlightHoveredColumn
flag, currently highlighting column header.TableSetColumnIndex()
to coarse clip. With an active clipper it would have asserted. Without a clipper, the scrollbar range would be wrong.TableBorderLight
and TableBorderStrong
in some situations, causing the earlier to be visible underneath when alpha is not 1.0f.ScrollX
enabled where an extraneous draw command would be created.InputTextMultiline()
: Fixed a crash pressing Down on last empty line of a multi-line buffer. (regression from 1.89.2, only happened in some states). (#6783, #6000)ImGuiConfigFlags_NavEnableKeyboard
is set. Previously was inconsistent and only enabled when stepping through a non-input item. (#6802, #3092, #5759, #787)ImGuiTreeNodeFlags_SpanAllColumns
for use in tables. (#3151, #3565, #2451, #2438)ImGuiTabItemFlags_UnsavedDocument
) which was accidentally offset in 1.89.9. (#6862) [@alektron]ImGuiColorEditFlags_NoTooltip
not being forwarded to individual DragFloat3 sub-widgets which have a visible color preview when ImGuiColorEditFlags_NoSidePreview
is also set. (#6957)SameLine()
followed by manual cursor manipulation.ImGuiComboFlags_WidthFitPreview
flag. (#6881) [@mpv-enjoyer]SetNextWindowXXX()
data when returning false.float size_pixels
passed to AddFontXXX()
functions is now rounded to lowest integer. This is because our layout/font system currently doesn't fully support non-integer sizes. Until it does, this has been a common pitfall leading to more or less subtle issues. (#3164, #3309, #6800)ImFontConfig::RasterizerDensity
field to increase texture size of rendered glyphs without altering other metrics. Among other things, this makes it easier to have zooming code swapping between 2 fonts (e.g. a 100% and a 400% fonts) depending on current scale. (#6925) [@thedmd] Important: if you increase this it is expected that you would render the font with a scale of
similar value or magnitude. Merely increasing this without increasing scale may lower quality.ImFontConfig::RasterizerDensity
. (#6925) [@thedmd]IMGUI_ENABLE_FREETYPE_LUNASVG
support. (#6842, #6591)IsKeyChordPressed()
helper function e.g. IsKeyChordPressed(ImGuiMod_Ctrl | ImGuiKey_S)
. (note that ImGuiMod_Shortcut
may be used as an alias for Cmd on OSX and Ctrl on other systems)."%.*s"
(along with "%s"
) specially to bypass formatting. (#3466, #6846)ImGuiKey_F13
to ImGuiKey_F24
. (#6891, #4921)ImGuiKey_AppBack
, ImGuiKey_AppForward
. (#4921)io.WantSetMousePos
ignores incoming MousePos
events. (#6837, #228) [@bertaye]AddEllipse()
, AddEllipseFilled()
, PathEllipticalArcTo()
. (#2743) [@Doohl]find_index()
helper."Drag and Drop -> Tooltip at target location"
demo."Layout -> Child Windows -> Manual-resize"
demo. (#1710)"Layout -> Child Windows -> Auto-resize with constraints"
demo. (#1666, #1395, #1496, #1710)"Examples -> Constrained-resizing window"
custom constrains demo. (#6210) [@cfillion]ImGui_ImplVulkan_CreateFontsTexture()
: backend now creates its own command-buffer to upload fonts. Removed ImGui_ImplVulkan_DestroyFontUploadObjects()
which is now unnecessary. No need to call ImGui_ImplVulkan_CreateFontsTexture()
as it is done automatically in ImGui_ImplVulkan_NewFrame()
. You can call ImGui_ImplVulkan_CreateFontsTexture() manually if you need to reload font atlas texture. Fixed leaks, and added ImGui_ImplVulkan_DestroyFontsTexture()
(probably no need to call this directly). (#6943, #6715, #6327, #3743, #4618)
[@helynranta, @thomasherzog, @guybrush77, @albin-johansson, @MiroKaku, @benbatya-fb, @ocornut]MouseWheel
callback before shutdown. (#6790, #6096, #4019) [@halx99]VK_SNAPSHOT
/ ImGuiKey_PrintScreen
as Windows doesn't emit it (same behavior as GLFW/SDL). (#6859) [@thedmd, @SuperWangKai]imgui_impl_opengl3_loader.h
to load "libGL.so" instead of "libGL.so.1", accommodating for NetBSD systems having only "libGL.so.3" available. (#6983)ImFloor()
to ImTrunc()
. Renamed ImFloorSigned()
to ImFloor()
. (#6861)Changes from 1.89.9 to 1.90.0 related to the docking branch (multi-viewport and docking features):
ImGuiDockNodeFlags_NoUndocking
. (#2999, #6823, #6780, #3492)ImGuiDockNodeFlags_NoSplit
to ImGuiDockNodeFlags_NoDockingSplit
.ImGuiDockNodeFlags_NoDockingInCentralNode
to ImGuiDockNodeFlags_NoDockingOverCentralNode
.ImGuiDockNodeFlags_NoDockingSplitMe
to ImGuiDockNodeFlags_NoDockingSplit
.SetNextWindowClass
) on success would prevent further filter from running, namely the one that prevent docking over a popup.Changes from 1.89.9 to 1.90.0 related to the prototype range-select branch:
This is a new API that hasn't been discussed much in public yet. Ignore if you are not one of the few users. If you happen to be using this please do get in contact. I know I said this API would have been stabilized by now, but it's not! I expect that the latest major API breaking changes are now done. Hopefully this is on track to be stable and merged in 1.91.
ImVector<ImGuiSelectionRequest>
list. This api will allow box-selection to work. (see a1e85e0).ImGuiMultiSelectFlags_ClearOnClickWindowVoid
to ImGuiMultiSelectFlags_ClearOnClickVoid
.ImGuiMultiSelectFlags_ScopeWindow
, ImGuiMultiSelectFlags_ScopeRect
to override/specify scope.ImGuiMultiSelectFlags_BoxSelect
(doesn't work well with clipper yet).EndMultiSelect()
recovery in ErrorCheckEndWindowRecover()
.IsItemToggledSelection()
. Added assert. Moved to multi-selection section of imgui.h.ExampleSelection
.Thank you for reading this changelog!
Since 1.89 we semi-sneakily soft launched two new entire projects!
Dear ImGui Automation/Test Engine & Test Suite https://github.com/ocornut/imgui_test_engine
Dear Bindings: alternative binding generator for C and other languages by @ShironekoBen (as an alternative to good old cimgui). https://github.com/dearimgui/dear_bindings
Some interesting new third-party projects:
Some debug tools in Alan Wake 2 https://www.remedygames.com/article/how-northlight-makes-alan-wake-2-shine
@allenwp: The AV Latency.com Toolkit is an open source software suite that is used to accurately measure audio latency of consumer electronics for the purpose of audio-video synchronization (AV sync). RTINGS.com will soon be integrating this toolkit into their test methods.
@skaarj1989: SupernovaEngine https://github.com/skaarj1989/SupernovaEngine
@coumcashier: "I would like to find out what ImGui's styling system could do. So I created a clone of the sign in page for a popular gaming platform. It implements changing border color on hover/active state for buttons and checkbox as this is commonly found in web apps but not provided by default in ImGui. Its follows the vibe design system from Monday.com."
https://github.com/ocornut/imgui/assets/122149176/3dc68815-c501-42ad-97ea-9f78be8f7df3
@pavelsevecek: "I'm using ImGui for my space simulation software." https://pavelsevecek.github.io/
@Froyok: "I'm still iterating on my Game Engine UI and now have switched to the docking branch. I'm using a lot of custom tweaks in here, but without modifying Dear ImGui itself."
Machina Labs (https://machinalabs.ai) using Dear ImGui, spotted in SmarterEveryDays Video about incremental sheet forming:
Quake II remastered debug tools https://bethesda.net/en/article/6NIyBxapXOurTKtF4aPiF4/enhancing-quake-ii
@hugeproblem: "Yet another node graph editor [..] It's not a immediate-mode-node-graph addon for ImGui, but more of a (embeddable, customizable, extensible, scriptable) standalone application. It has nice looking default appearance:" https://github.com/hugeproblem/nged (+ many cool gifs at https://github.com/ocornut/imgui/issues/6478#issuecomment-1747288625)
@JorenJoestar: "As needed aid to write our "Mastering Graphics Programming with Vulkan", ImGui was essential. Probably not the most advanced usage of it, but the possibility of debugging any texture in realtime (especially with bindless rendering), or having a simple but effective GPU profiler, needed to check the timings for each technique developed for each chapter, or simply having all the debug options and tweables for each render subsystem was like having a team to help!" https://github.com/PacktPublishing/Mastering-Graphics-Programming-with-Vulkan
@ocjb: "My work in progress game engine."
IOLITE voxel game engine https://iolite-engine.com/
Meta XR Simulator https://developer.oculus.com/downloads/package/meta-xr-simulator/
Generative Fill for Video at Adobe Max #ProjectFastFill https://www.youtube.com/watch?v=kyYk-u2rxYA
@arnaud-jamin: "Cog is a set of debug tools for Unreal Engine" https://github.com/arnaud-jamin/Cog
Adventure game Engine for MSX2 + game Stan the Dreamers
https://jamque.itch.io/stan-the-dreamer-msx2/devlog/396876/a-new-adventure-game-engine-has-come-to-msx2
@guillaC: SQLiteDiskExplorer and "SQLiteDiskExplorer is a tool designed to assist you in the efficient management of your SQLite files. Explore and manage your SQLite files with ease using SQLiteDiskExplorer, Your valuable data is just a scan away !" https://github.com/guillaC/SQLiteDiskExplorer
Wallet "is application that lets you manage your stock and finance. It is meant to be lite and efficient. It is not a trading platform." https://wallet.wiimag.com/
@TheGoodDoktor: "Spectrum Analyser is a program that helps you to reverse engineer ZX Spectrum games. I wrote it for my own amusement but others have found it interesting too." https://github.com/TheGoodDoktor/8BitAnalysers
@quantmage: QuantMage is a SaaS platform for algorithmic & quantitative stock investment. It's using ImGui+WASM for its logic editor and backtesting tool frontend. https://quantmage.app/grimoire/88feda7697abf9d66cf63ae359ac3cb2
@jamesdolezal: "Slideflow Studio is a user interface for deploying deep learning models for digital pathology research applications. Dear Imgui (and the python wrapper, pyimgui) were essential in making this a success. Thank you for developing this wonderful framework!"
@Saul-Alejandro-Gonzalez-Vilchis: "INDEX 2024 is a game engine IDE program that will be released on December 31, 2023 also powered by the private hazel source code. Its user interface is so beautiful that a lot of effort will be put into it. that's why we will add a "Ribbon Bar" system. [...] Thank for ImGui & Hazel Core Team" https://github.com/INDEV-Technologies/INDEX
https://github.com/ocornut/imgui/assets/126918321/d38e191f-2b9b-4e78-8b0b-848fd9948d5d
@Ermelber: Mario Kart Toolbox: "This is a Mario Kart DS modding suite I've been working on with @Gericom. This uses the latest and greatest .NET 7.0 with C# bindings thanks to ImGui.NET (using an OpenGL backend with [OpenTK] https://github.com/opentk/opentk)) and we use a modified version of ImGuizmo for 3D controls."
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 needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Sponsors page.
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!
π£ Click version number above to display full release note contents, sometimes randomly clipped by GitHub..
Homepage: https://github.com/ocornut/imgui Release notes: https://github.com/ocornut/imgui/releases FAQ: https://www.dearimgui.com/faq/ Getting Started: https://github.com/ocornut/imgui/wiki/Getting-Started Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki! It has sections such as this Getting Started and Useful Extensions Gallery! π
Dear ImGui is funded by your contributions and needs them to sustain and grow. We can do regular B2B Invoicing. If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.
Ongoing work on Dear ImGui is currently financially supported by:
Special thanks to @GamingMinds-DanielC, @sakiodre, @PathogenDavid for their help with github answers.
Reaching 50000 GitHub stars: (49993 as I'm typing those words)
Huge thank you to all past and present supporters! Also thanks to PVS Studio (great static analyzer) for providing us with a license for this project.
This is a followup to v1.89, v1.89.1, v1.89.2, v1.89.3, v1.89.4, v1.89.5, v1.89.6, v1.89.7, v1.89.8. We are trying to make more frequent releases. Because: some people are relying on tagging and auto-generated bindings for other languages. And: it sets a beat and may encourage teams to update more frequently.
I have been stubbornly deferring tagging 1.90 for while because I wanted to include the range-select feature in it, but it's not done... But there are about 650 lines of changelog between 1.89 and 1.89.9.
Breaking Changes:
IncludeRangeByIndices()
(also called ForceDisplayRangeByIndices()
before 1.89.6) again to IncludeItemsByIndex(). Kept inline redirection function. (#6424, #3841)Other Changes:
SameLine(0,0)
after TableNextColumn()
/TableSetColumnIndex()
in order to reuse line pos/height from previous cell. (#3740)style.CellPadding.y
between rows. (#3740)ImGuiTreeNodeFlags_NavLeftJumpsBackHere
now goes through proper navigation logic: honor scrolling and selection. (#1079, #1131)SliderInt()
when v_max=INT_MAX
. (#6675, #6679) [@jbarthelmes]style.ItemInnerSpacing.x
between items, stopped incorrectly using FramePadding
in a way where hit-boxes could overlap when setting large values. (#6749).
and ,
into the current decimal point character when using Decimal/Scientific character filter. (#6719, #2278) [@adamsepp]IncludeItemByIndex()
helper to include a single item. (#6424, #3841)TotalVtxCount
/TotalIdxCount
does not match the sum of individual ImDrawList's buffer sizes when a dimming/modal background is rendered. (#6716)ChannelsMerge()
if not done after a split._CalcCircleAutoSegmentCount()
when passing excessively large radius to AddCircle()
. (#6657, #5317) [@EggsyCRO, @jdpatdiscord]io.PlatformLocaleDecimalPoint
to configure decimal point ('.' or ',') for languages needing it. Should ideally be set to the value of *localeconv()->decimal_point
but our backends don't do it yet. (#6719, #2278)io.AddMousePosEvent()
and io.AddMouseButtonEvent()
writing MouseSource to wrong union section. Was semantically incorrect and accidentally had no side-effects with default compiler alignment settings. (#6727) [@RickHuang2001]SameLine()
between cells. (#3740)CellPadding.y
between rows. (#3740)ImDrawListSplitter
.ImGui_ImplSDL2_InitForOther()
/ImGui_ImplSDL3_InitForOther()
for consistency (matching GLFW backend) and as most initialization paths don't actually need to care about rendering backend.Changes from 1.89.8 to 1.89.9 related to the docking branch (multi-viewport and docking features):
io.ConfigDockingWithShift
is enabled, staying stationary while moving a window displays an help tooltip to increase affordance. (#6709, #4643)Changes from 1.89.8 to 1.89.9 related to the prototype range-select branch:
This is a new API that hasn't been discussed much in public yet. Ignore if you are not one of the few users. If you happen to be using this please do get in contact. I know I said this API would have been stabilized by now, but it's not! I expect to make some more changes before 1.90. Hopefully this is on track to be stable and merged in 1.90.
RangeSelect/MultiSelect: (BREAKING) Renamed SetNextItemSelectionData()
to SetNextItemSelectionUserData()
.
RangeSelect/MultiSelect: (BREAKING) Use ImGuiSelectionUserData
type (= ImS64) instead of void* for selection user data.
RangeSelect/MultiSelect: (BREAKING) RequestSetRange's parameter are RangeFirstItem...RangeLastItem
(which are always ordered, unlike RangeSrcItem...RangeDstItem
). Removed RangeDstItem
. Removed RangeDirection
.
RangeSelect/MultiSelect: (BREAKING) Removed RangeSrcPassedBy in favor of favoring user to call IncludeByIndex(RangeSrcItem) which is easier/simpler to honor.
RangeSelect/MultiSelect: (BREAKING) Renamed ImGuiMultiSelectFlags_NoMultiSelect
to ImGuiMultiSelectFlags_SingleSelect
as it seems easier to grasp + fixed behavior.
RangeSelect/MultiSelect: Added ImGuiMultiSelectFlags_SelectOnClickRelease
to allow dragging an unselected item without altering selection + update drag and drop demo.
RangeSelect/MultiSelect: Assert if SetNextItemSelectionUserData() is called not in the context of a BeginMultiSelect() block.
RangeSelect/MultiSelect: Tweak debug log to print decimal+hex values for item data.
RangeSelect/MultiSelect: Clear selection when leaving a scope with a nav directional request (may make optional).
RangeSelect/MultiSelect: Demo: Assets Browser: Added assets browser demo.
RangeSelect/MultiSelect: Demo: Dual List Box: Added simple dual list box demo. (#6648)
RangeSelect/MultiSelect: Demo: added simpler demo using Clipper. Clarify RangeSrcPassedBy doc.
RangeSelect/MultiSelect: Demo: rework ExampleSelection with an ExampleSelectionAdapter layer, allowing to share more code across examples using different storage design.
RangeSelect/MultiSelect: Demo: rework deletion demo code.
Previously:
ImGui::SetNextItemSelectionData((void*)(intptr_t)idx);
Now:
ImGui::SetNextItemSelectionUserData(idx);
Previously:
if (ms_io->RequestSetRange)
{
int first = (int)ms_io->RangeSrcItem;
int last = (int)ms_io->RangeDstItem
if (first > last)
swap(first, last);
for (int idx = first; idx <= last; idx++)
SetSelection(idx, ms_io->RangeSelected);
}
Now:
if (ms_io->RequestSetRange)
for (int idx = ms_io->RangeFirstItem; idx <= ms_io->RangeLastItem; idx++)
SetSelection(idx, ms_io->RangeSelected);
Previously: (required inside loop and after loop, when using clipper)
if (!ms_io->RangeSrcPassedBy && clipper.DisplayStart > ms_io->RangeSrcItem)
ms_io->RangeSrcPassedBy = true;
Now:
if (ms_io->RangeSrcItem != -1)
clipper.IncludeItemByIndex((int)ms_io->RangeSrcItem); // Ensure RangeSrc item is not clipped.
Since 1.89 we semi-sneakily soft launched two new entire projects!
Dear ImGui Automation/Test Engine & Test Suite https://github.com/ocornut/imgui_test_engine
Dear Bindings: alternative binding generator for C and other languages by @ShironekoBen (as an alternative to good old cimgui). https://github.com/dearimgui/dear_bindings
Below a selection of screenshots from Gallery threads...
@simco50: "A simple CPU/GPU profiler with a timeline UI having both CPU and GPU tracks in the same synchronized view. Continuously records and saves N frames and can be paused to analyze." https://github.com/simco50/TimelineProfiler
Intel XeSS Demo https://github.com/intel/xess
PrusaSlicer (Prusa Slic3r) using Dear ImGui within their 3d viewport: https://www.prusa3d.com/page/prusaslicer_424/
@samuel-watson: "This is a non-game related example. Dear ImGui is used as the GUI for a scientific application to support the design of cluster randomised trials (a type of experimental design). [...] It runs in the browser and is compiled using Emscripten to generate the html, JS, and WASM files. " The app is currently hosted at https://www.clustertrial.app/ and the code is available at the GitHub repo.
@lukaasm: "Next addition to our game/engine tooling suite: ParticleEditor ( based on modified version of https://github.com/thedmd/imgui-node-editor )"
@rodan: "Magic Carpet 2 porting effort." https://github.com/rodan/magic_carpet_2
@cfnptr: "Screenshot from my pet game engine editor. With a visual studio code inspired theme :)"
YAZE (Yet Another Zelda3 Editor) by @scawful https://github.com/scawful/yaze
Property Watcher: A runtime variable watch window for Unreal Engine using ImGui, by @guitarfreak https://github.com/guitarfreak/PropertyWatcher
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
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!
π£ Click version number above to display full release note contents, sometimes randomly clipped by GitHub..
Homepage: https://github.com/ocornut/imgui Release notes: https://github.com/ocornut/imgui/releases FAQ: https://www.dearimgui.com/faq/ Getting Started: https://github.com/ocornut/imgui/wiki/Getting-Started Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki! It has sections such as this Getting Started and Useful Extensions Gallery! π
Ongoing work on Dear ImGui is currently financially supported by:
Huge thank you to all past and present supporters! Also thanks to PVS Studio (great static analyzer) for providing us with a license for this project.
Dear ImGui is funded by your contributions and needs them right now. We can do regular B2B Invoicing. If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.
This is a followup to v1.89, v1.89.1, v1.89.2, v1.89.3, v1.89.4, v1.89.5, v1.89.6, v1.89.7. We are trying to make more frequent releases. Because: some people are relying on tagging and auto-generated bindings for other languages. And: it sets a beat and may encourage teams to update more frequently.
I have been stubbornly deferring tagging 1.90 for while because I wanted to include the range-select feature in it, but it's not done... But there are about 600 lines of changelog between 1.89 and 1.89.8.
Breaking Changes:
io.ClearInputCharacters()
(added in 1.47) as it now ambiguous and often incorrect/misleading considering the existence of a higher-level input queue. This is automatically cleared by io.ClearInputsKeys()
. (#4921)CmdLists[]
array is now owned, changed from ImDrawList**
to ImVector<ImDrawList*>
. Majority of users shouldn't be affected, but you cannot compare to NULL nor reassign manually anymore. Instead use AddDrawList()
. Allocation count are identical. (#6406, #4879, #1878)Other Changes:
ImFontConfig::OversampleH
now defaults to 2 instead of 3, since the quality increase is largely minimal.IMGUI_ENABLE_FREETYPE_LUNASVG
along with IMGUI_ENABLE_FREETYPE
, and providing headers/libraries for lunasvg. (#6591, #6607) [@sakiodre]ImDrawData: CmdLists[]
array is now an ImVector<> owned by ImDrawData rather than a pointer to internal state.
ImDrawData::AddDrawList()
helper function to do that. (#6406, #4879, #1878)ImDrawCmd
. (#4857, #5937)ImGuiHoveredFlags_ForTooltip
for Keyboard/Gamepad navigation, got broken prior to 1.89.7 due to an unrelated change making flags conflict. (#6622, #1485)CallbackResize
although unnecessary, in a frame where the return value was false.GetContentRegionAvail().y
report not taking account of lower cell padding or of using ImGuiTableFlags_NoHostExtendY
. Not taking it into account would make the idiom of creating vertically bottom-aligned content (e.g. a child window) inside a table make the parent window erroneously have a scrollbar. (#6619)io.ClearEventsQueue()
to clear incoming inputs events. (#4921)
May be useful in conjunction with io.ClearInputsKeys()
if you need to clear both current inputs state and queued events (e.g. when using blocking native dialogs such as Windows's ::MessageBox() or ::GetOpenFileName()).io.ClearInputsKeys()
specs to also clear current frame character buffer (what now obsoleted io.ClearInputCharacters()
did), as this is effectively the desirable behavior.IMGUI_DISABLE_STB_SPRINTF_IMPLEMENTATION
config macro to disable stb_sprintf implementation when using IMGUI_USE_STB_SPRINTF. (#6626) [@septag]SetNextItemAllowOverlap()
. (#6574, #6512, #3909, #517)InputText()
flags.IMGUI_DISABLE
. (#6601)GLFW_CURSOR_DISABLED
as it can be used differently. User may set ImGuiConfigFlags_NoMouse
if desired. (#5625, #6609) [@scorpion-26]Changes from 1.89.7 to 1.89.8 related to the docking branch (multi-viewport and docking features):
ImGuiCol_Border
) for consistency. With default styles it doesn't make a big difference. (#2522) [@rmitton] In the future if we promote using thick value for inner/outer docking padding we may need to introduce new colors for it.style.DockingSeparatorSize
, ImGuiStyleVar_DockingSeparatorSize
. Now also scaled by style.ScaleAllSizes()
. (#3481, #4721, #2522) [@PossiblyAShrub, @wobbier]Changes from 1.89.7 to 1.89.8 related to the range-select branch:
This is hopefully the last batch of breaking changes before merging this in 1.90:
BeginMultiSelect()
doesn't need two last params maintained by users. Moving some storage from user to core.ImGuiMultiSelectIO
to facilitate implementing deletion while providing correct scrolling/focus.Since 1.89 we semi-sneakily soft launched two new entire projects!
Dear ImGui Automation/Test Engine & Test Suite https://github.com/ocornut/imgui_test_engine
Dear Bindings: alternative binding generator for C and other languages by @ShironekoBen (as an alternative to good old cimgui). https://github.com/dearimgui/dear_bindings
Below a selection of screenshots from Gallery threads...
@ThFriedrich: riCOM is a software used in electron microscopy. It interfaces with direct electron cameras for the real-time creation of atomic resolution microscopy images from 4-dimensional data.
@msnh2012: A custom application. (TCP debugger)
Remedy's Northlight Engine
@sakiodre : I'm developing a ghidra decompiler plugin [...] ended up writing my own editor from scratch.
@FuXiii: Online Shader Compiler
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