imgui v1.79 Release Notes

Release Date: 2020-10-08 // 5 months ago
  • Reading the full 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!

    ๐Ÿš€ Release notes:
    Wiki: for bindings, links, extensions etc.
    ๐Ÿ™‹ FAQ:
    Discord server:
    ๐Ÿ‘ Issues and support:

    Thank you!

    ๐Ÿ‘ Ongoing work on Dear ImGui is currently financially supported by:

    ๐Ÿ‘€ We are transitioning toward a B2B model to sustain, maintain and grow this project. If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.

    ๐Ÿ‘ Huge thank you to all past and present supporters!

    ๐Ÿ’ฅ Breaking Changes

    (Suggestion: once in a while, add #define IMGUI_DISABLE_OBSOLETE_FUNCTIONS in your imconfig.h file to make sure you are not using to-be-obsoleted symbols.)

    • ๐Ÿšš Fonts: Removed ImFont::DisplayOffset in favor of ImFontConfig::GlyphOffset. DisplayOffset was applied after scaling and not very meaningful/useful outside of being needed by the default ProggyClean font. It was also getting in the way of better font scaling, so let's get rid of it now! If you used DisplayOffset it was probably in association to rasterizing a font at a specific size, in which case the corresponding offset may be reported into GlyphOffset. If you scaled this value after calling AddFontDefault(), this is now done automatically. (#1619)
    • ImGuiListClipper: Renamed constructor parameters which created an ambiguous alternative to using the ImGuiListClipper::Begin() function, with misleading edge cases. Always use ImGuiListClipper::Begin()! Kept inline redirection function (will obsolete). Note: imgui_memory_editor in version 0.40 from imgui_club used this old clipper API. Update your copy if needed.
    • ๐Ÿ’… Style: Renamed style.TabMinWidthForUnselectedCloseButton to style.TabMinWidthForCloseButton.
    • Renamed ImGuiSliderFlags_ClampOnInput to ImGuiSliderFlags_AlwaysClamp. Kept redirection enum (will obsolete).
    • โช Renamed OpenPopupContextItem() back to OpenPopupOnItemClick(), REVERTED CHANGE FROM 1.77. For variety of reason this is more self-explanatory and less error-prone. Kept inline redirection function (will obsolete).
    • โœ‚ Removed return value from OpenPopupOnItemClick() - returned true on mouse release on item - because it is inconsistent with other popups API and makes others misleading. It's also and unnecessary: you can use IsWindowAppearing() after BeginPopup() for a similar result.

    Other Changes

    • ๐Ÿ›  Window: Fixed using non-zero pivot in SetNextWindowPos() when the window is collapsed. (#3433)
    • ๐Ÿ›  Nav: Fixed navigation resuming on first visible item when using gamepad. [@rokups]
    • ๐Ÿ›  Nav: Fixed using Alt to toggle the Menu layer when inside a Modal window. (#787)
    • ๐Ÿ›  Scrolling: Fixed SetScrollHere() functions edge snapping when called during a frame where ContentSize is changing (issue introduced in 1.78). (#3452).
    • ๐Ÿ‘ InputText: Added support for Page Up/Down in InputTextMultiline(). (#3430) [@Xipiryon]
    • InputText: Added selection helpers in ImGuiInputTextCallbackData().
    • InputText: Added ImGuiInputTextFlags_CallbackEdit to modify internally owned buffer after an edit (note that InputText() already returns true on edit, the callback is useful mainly to manipulate the underlying buffer while focus is active).
    • ๐Ÿ›  InputText: Fixed using ImGuiInputTextFlags_Password with InputTextMultiline(). It is a rather unusual or useless combination of features but no reason it shouldn't work! (#3427, #3428)
    • ๐Ÿ›  InputText: Fixed minor scrolling glitch when erasing trailing lines in InputTextMultiline().
    • ๐Ÿ›  InputText: Fixed cursor being partially covered after using CTRL+End key.
    • ๐Ÿ›  InputText: Fixed callback's helper DeleteChars() function when cursor is inside the deleted block. (#3454)
    • ๐Ÿšš InputText: Made pressing Down arrow on the last line when it doesn't have a carriage return not move to the end of the line (so it is consistent with Up arrow, and behave same as Notepad and Visual Studio. Note that some other text editors instead would move the cursor to the end of the line). [@Xipiryon]
    • Tab Bar: Added TabItemButton() to submit tab that behave like a button. (#3291) [@Xipiryon]
    • Tab Bar: Added ImGuiTabItemFlags_Leading and ImGuiTabItemFlags_Trailing flags to position tabs or button at either end of the tab bar. Those tabs won't be part of the scrolling region, and when reordering cannot be moving outside of their section. Most often used with TabItemButton(). (#3291) [@Xipiryon]
    • Tab Bar: Added ImGuiTabItemFlags_NoReorder flag to disable reordering a given tab.
    • Tab Bar: Keep tab item close button visible while dragging a tab (independent of hovering state).
    • ๐Ÿ›  Tab Bar: Fixed a small bug where closing a tab that is not selected would leave a tab hole for a frame.
    • ๐Ÿ›  Tab Bar: Fixed a small bug where scrolling buttons (with ImGuiTabBarFlags_FittingPolicyScroll) would generate an unnecessary extra draw call.
    • ๐Ÿ›  Tab Bar: Fixed a small bug where toggling a tab bar from Reorderable to not Reorderable would leave tabs reordered in the tab list popup. [@Xipiryon]
    • DragFloat, DragScalar: Fixed ImGuiSliderFlags_ClampOnInput not being honored in the special case where v_min == v_max. (#3361)
    • ๐Ÿ›  SliderInt, SliderScalar: Fixed reaching of maximum value with inverted integer min/max ranges, both with signed and unsigned types. Added reverse Sliders to Demo. (#3432, #3449) [@rokups]
    • Text: Bypass unnecessary formatting when using the TextColored()/TextWrapped()/TextDisabled() helpers with a "%s" format string. (#3466)
    • CheckboxFlags: Display mixed-value/tristate marker when passed flags that have multiple bits set and stored value matches neither zero neither the full set.
    • ๐Ÿ›  BeginMenuBar: Fixed minor bug where CursorPosMax gets pushed to CursorPos prior to calling BeginMenuBar() so e.g. calling the function at the end of a window would often add +ItemSpacing.y to scrolling range.
    • TreeNode, CollapsingHeader: Made clicking on arrow toggle toggle the open state on the Mouse Down event rather than the Mouse Down+Up sequence, even if the _OpenOnArrow flag isn't set. This is standard behavior and amends the change done in 1.76 which only affected cases were _OpenOnArrow flag was set. (This is also necessary to support full multi/range-select/drag and drop operations.)
    • Columns: Fix inverted ClipRect being passed to renderer when using certain primitives inside of a fully clipped column. (#3475) [@szreder]
    • Popups, Tooltips: Fix edge cases issues with positioning popups and tool-tips when they are larger than viewport on either or both axises. [@rokups]
    • 0๏ธโƒฃ Fonts: AddFontDefault() adjust its vertical offset based on floor(size/13) instead of always +1. Was previously done by altering DisplayOffset.y but wouldn't work for DPI scaled font.
    • ๐Ÿ Metrics: Various tweaks, listing windows front-to-back, greying inactive items when possible.
    • Demo: Add simple InputText() callbacks demo (aside from the more elaborate ones in Examples->Console).
    • Backends: OpenGL3: Fix to avoid compiling/calling glBindSampler() on ES or pre 3.3 contexts which have the defines set by a loader. (#3467, #1985) [@jjwebb]
    • โ™ป๏ธ Backends: Vulkan: Some internal refactor aimed at allowing multi-viewport feature to create their own render pass. (#3455, #3459) [@FunMiles]
    • Backends: DX12: Clarified that imgui_impl_dx12 can be compiled on 32-bit systems by redefining the ImTextureID to be 64-bit (e.g. '#define ImTextureID ImU64' in imconfig.h). (#301)
    • โš  Backends: DX12: Fix debug layer warning when scissor rect is zero-sized. (#3472, #3462) [@StoneWolf]
    • ๐Ÿง Examples: Vulkan: Reworked buffer resize handling, fix for Linux/X11. (#3390, #2626) [@RoryO]
    • Examples: Vulkan: Switch validation layer to use VK_LAYER_KHRONOS_validation instead of VK_LAYER_LUNARG_standard_validation which is deprecated (#3459) [@FunMiles]
    • โš  Examples: DX12: Enable breaking on any warning/error when debug interface is enabled.
    • ๐Ÿ— Examples: DX12: Added #define ImTextureID ImU64 in project and build files to also allow building on 32-bit systems. Added project to default Visual Studio solution file. (#301)

    Tab Bar: TabItemButton() + ImGuiTabItemFlags_Trailing

    CheckboxFlags() with visible tri-state (previously only in internals)

    Other branches & Beta features!

    ๐Ÿ”€ The Tables (#2957) features is still available for testing, it is expected to fully stabilize and be merged for 1.80. You are encouraged to use Tables and provide feedback today. Currently doing a few final aggressive changes before stabilizing the API.

    Some user-visible changes from 1.78 in 1.79 related to the tables branch include:

    • ๐Ÿ’ฅ Tables: BREAKING CHANGE : Renamed TableNextCell() to TableNextColumn(). (see #2957 (comment))
    • ๐Ÿ’ฅ Tables: BREAKING CHANGE : Made TableNextRow() NOT enter into first column. (see #2957 (comment))
    • ๐Ÿ’ฅ Tables: BREAKING CHANGE : Renamed TableAutoHeaders() to `TableHeadersRow().
    • ๐Ÿ’ฅ Tables: BREAKING CHANGE : Added TableSetupScrollFreeze() api, remove ImGuiTableFlags_ScrollFreezeXXX flags. Avoid awkwardly named ScrollFreeze flags, raise limit over 3, and will allow for future API freezing bottom/right side. See #2957 (comment).
    • ๐Ÿ’ฅ Tables: BREAKING CHANGE : Sorting: Made it users responsibility to clear SpecsDirty back to false, so TableGetSortSpecs() doesn't have side-effect any more. See #2957 (comment)
    • ๐Ÿ’ฅ Tables: BREAKING CHANGE : Renamed ImGuiTableFlags_NoClipX to ImGuiTableFlags_NoClip, clarified purpose, moved lower in the list as it doesn't need to be so prominent.
    • ๐Ÿ›  Tables: Fixed clipper to support any number of frozen rows.
    • ๐Ÿ›  Tables: Fixed for calling TableSetBgColor(ImGuiTableBgTarget_CellBg) multiple times on the same cell.
    • 0๏ธโƒฃ Tables: Fixed ImGuiTableColumnFlags_WidthAlwaysAutoResize columns when clipped (which would be default behavior without _Resizable and when clipping/scrolling).
    • ๐Ÿ”€ Tables: Extend outer-most clip limits to match those of host when merging draw calls. Generally clarify/simplify ClipRect extending/merging code in TableReorderDrawChannelsForMerge().
    • Tables: Added TableGetColumnCount().
    • Tables: Added ImGuiTableFlags_ContextMenuInBody flag.
    • Tables: Added ImGuiTableFlags_NoBordersInBody, ImGuiTableFlags_NoBordersInBodyUntilResize, removed ImGuiTableFlags_BordersFullHeightV.
    • ๐Ÿ›  Tables: Fixed lower clipping when using ImGuiTableFlags_NoHostExtendY.
    • ๐Ÿ›  Tables: Fixed a crash when using 8-level deep recursive table (was mistakenly holding on a pointer across resize/invalidation of the pool buffer).

    The docking (#2109) and multi-viewports (#1542) features are available in the docking branch, they are in beta but actively maintained and being used by many teams already. Your continuous feedback is always appreciated.

    Some of changes from 1.78 in 1.79 related to the docking branch (multi-viewport and docking features) include:

    • Docking: DockSpace() emits ItemSize() properly (useful when not filling all space).
    • ๐Ÿ›  Docking: Fixed docking while hovering a child window. (#3420) broken by 85a661d. Improve metrics debugging.
    • ๐Ÿ›ฐ Docking: Fix honoring payload filter with overlapping nodes. (we incorrectly over-relied on g.HoveredDockNode when making change for #3398)
    • Docking: Fix handling of WindowMenuButtonPosition == ImGuiDir_None in Docking Nodes. (#3499)
    • ๐Ÿ›  Viewports: Fixed a rare edge-case if the window targeted by CTRL+Tab stops being rendered.
    • Viewports, Backends: DX12: Make secondary viewport format match main viewport one (#3462) {@BeastLe9enD]
    • Viewports: Backends: Vulkan: Removed unused shader code. Fix leaks. Avoid unnecessary pipeline creation for main viewport. Amend 41e2aa2. (#3459) + Add ImGui_ImplVulkanH_CreateWindowSwapChain in ImGui_ImplVulkanH_CreateOrResizeWindow().
    • Viewports: Backends: DirectX9: Recover from D3DERR_DEVICELOST on secondary viewports. (#3424)
    • Viewports, Backends: Win32: Fix toggling of ImGuiViewportFlags_TopMost (#3477) [@Kodokuna]
    • โ†ช Viewports: Backends: GLFW: Workaround for cases where glfwGetMonitorWorkarea fails (#3457) [@dougbinks]

    There's a CMake pull-request (#1713) if you prefer a traditional CMake integration over registering sources files in your own project. There's a premake5 branch if you prefer the sane Visual Studio projects generated by premake.

    ๐Ÿ‘€ See Gallery threads for more pictures and to post yours!

    @enci: "I use Dear ImGui a lot in my curriculum at Breda University of Applied Sciences. Here are two screenshots from student projects, posted with permission.". RTX real-time ray tracer by Viktor Zoutman

    @Vitorbnc: "VVERSimulator is a VVER-440 Pressurized Water Reactor Simulator. It simulates the primary circuit of Unit 3 of the Paks Nuclear Power Plant in Hungary."

    ๐Ÿšง @crash5band: "Glitter Studio is a WIP particle editor for Sonic Generations"

    @ongamex: "The welcome screen in my level editor"

    @tomasiser: __"Hello! A bit over 1 year ago, we finished our student project called Pepr3D for 3D printing. Even though the project is not maintained anymore, I wanted to showcase our usage of ImGui here."

    World of Warcraft 8th extension technical blog post shows a game ui mockup of their "Adventures" feature:

    Kanteran: "This is a code-block editor for education using dear imgui"

    ๐Ÿ‘ท @thedmd: " I'm developing more concrete blueprint example for node editor. This one does real job behind the nodes.
    It will land on main branch as an example when I decide it is decent enough. You can look at the code right now on branch. Code is in flux so a lot can change yet."

    Flight Simulator 2020 is now released, with dev mode / SDK tools using Dear ImGui

    ๐Ÿ’ป @dfranx SHADERed (a shader IDE) running in the browser

    @epezent Amazing ImPlot still moving forward:
    legend utilities
    plot stems
    drag lines and points

    @d3cod3: __"here goes a project of mine in current development ( beta stage now ), called Mosaic, a livecoding programming/patching environment for creating real-time audio-visual compositions."

Previous changes from v1.78

  • Reading the full 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!

    ๐Ÿš€ Release notes:
    Wiki: for bindings, links, extensions etc.
    ๐Ÿ™‹ FAQ:
    Discord server:
    ๐Ÿ‘ Issues and support:

    Thank you!

    ๐Ÿ‘ Ongoing work on Dear ImGui is currently financially supported by:

    We are transitioning toward a B2B model to grow project. If your company uses Dear ImGui, consider reaching out at contact at to help us sustain and improve Dear ImGui.

    ๐Ÿ‘ Huge thank you to all past and present supporters!

    ๐Ÿ’ฅ Breaking Changes

    (Read carefully, not as scary as it sounds. If you maintain a language binding for dear imgui, you may want to evaluate how this might impact users, depending on the language provide dynamic dispatch functions, or simply let the low-level code handle it)

    • Obsoleted use of the trailing float power=1.0f parameter for those functions: [@ShironekoBen, @ocornut]
      • DragFloat(), DragFloat2(), DragFloat3(), DragFloat4(), DragFloatRange2(), DragScalar(), DragScalarN().
      • SliderFloat(), SliderFloat2(), SliderFloat3(), SliderFloat4(), SliderScalar(), SliderScalarN().
      • VSliderFloat(), VSliderScalar().
    • 0๏ธโƒฃ Replaced the final float power=1.0f argument with ImGuiSliderFlags flags defaulting to 0 (as with all our flags).
      Worked out a backward-compatibility scheme so hopefully most C++ codebase should not be affected.
      In short, when calling those functions:
      • If you omitted the 'power' parameter (likely in C++), you are not affected.
      • If you set the 'power' parameter to 1.0f (same as previous default value):
      • Your compiler may warn on float>int conversion.
      • Everything else will work (but will assert if IMGUI_DISABLE_OBSOLETE_FUNCTIONS is defined).
      • You can replace the 1.0f value with 0 to fix the warning, and be technically correct.
      • If you set the 'power' parameter to >1.0f (to enable non-linear editing):
      • Your compiler may warn on float>int conversion.
      • Code will assert at runtime for IM_ASSERT(power == 1.0f) with the following assert description:
        "Call Drag function with ImGuiSliderFlags_Logarithmic instead of using the old 'float power' function!".
      • In case asserts are disabled, the code will not crash and enable the _Logarithmic flag.
      • You can replace the >1.0f value with ImGuiSliderFlags_Logarithmic to fix the warning/assert
        and get a similar effect as previous uses of power >1.0f.
        ๐Ÿ‘€ See #3361 for all details.
        ๐Ÿšš Kept inline redirection functions (will obsolete) apart for: DragFloatRange2(), VSliderFloat(), VSliderScalar(). For those three the 'float power=1.0f' version was removed directly as they were most unlikely ever used.
    • DragInt, DragFloat, DragScalar: Obsoleted use of v_min > v_max to lock edits (introduced in 1.73, inconsistent, and was not demoed nor documented much, will be replaced a more generic ReadOnly feature).

    Other Changes

    • ๐Ÿ Nav: Fixed clicking on void (behind any windows) from not clearing the focused window. This would be problematic e.g. in situation where the application relies on io.WantCaptureKeyboard flag being cleared accordingly. (bug introduced in 1.77 WIP on 2020/06/16) (#3344, #2880)
    • ๐Ÿšš Window: Fixed clicking over an item which hovering has been disabled (e.g inhibited by a popup) from marking the window as moved.
    • Drag, Slider: Added ImGuiSliderFlags parameters.
      • For float functions they replace the old trailing float power=1.0 parameter. (See #3361 and the "Breaking Changes" block above for all details).
      • Added ImGuiSliderFlags_Logarithmic flag to enable logarithmic editing (generally more precision around zero), as a replacement to the old 'float power' parameter which was obsoleted. (#1823, #1316, #642) [@ShironekoBen, @AndrewBelt]
      • Added ImGuiSliderFlags_ClampOnInput flag to force clamping value when using CTRL+Click to type in a value manually. (#1829, #3209, #946, #413).
      • Added ImGuiSliderFlags_NoRoundToFormat flag to disable rounding underlying value to match precision of the display format string. (#642)
      • Added ImGuiSliderFlags_NoInput flag to disable turning widget into a text input with CTRL+Click or Nav Enter.- Nav, Slider: Fix using keyboard/gamepad controls with certain logarithmic sliders where pushing a direction near zero values would be cancelled out. [@ShironekoBen]
    • ๐Ÿ›  DragFloatRange2, DragIntRange2: Fixed an issue allowing to drag out of bounds when both min and max value are on the same value. (#1441)
    • ๐Ÿ›  InputText, ImDrawList: Fixed assert triggering when drawing single line of text with more than ~16 KB characters. (Note that current code is going to show corrupted display if after clipping, more than 16 KB characters are visible in the same low-level ImDrawList::RenderText() call. ImGui-level functions such as TextUnformatted() are not affected. This is quite rare but it will be addressed later). (#3349)
    • ๐Ÿ›  Selectable: Fixed highlight/hit extent when used with horizontal scrolling (in or outside columns). Also fixed related text clipping when used in a column after the first one. (#3187, #3386)
    • ๐Ÿšš Scrolling: Avoid SetScroll(), SetScrollFromPos() functions from snapping on the edge of scroll limits when close-enough by (WindowPadding - ItemPadding), which was a tweak with too many side-effects. The behavior is still present in SetScrollHere() functions as they are more explicitly aiming at making widgets visible. May later be moved to a flag.
    • Tab Bar: Allow calling SetTabItemClosed() after a tab has been submitted (will process next frame).
    • InvisibleButton: Made public a small selection of ImGuiButtonFlags (previously in imgui_internal.h) and allowed to pass them to InvisibleButton(): ImGuiButtonFlags_MouseButtonLeft/Right/Middle. This is a small but rather important change because lots of multi-button behaviors could previously only be achieved using lower-level/internal API. Now also available via high-level InvisibleButton() with is a de-facto versatile building block to creating custom widgets with the public API.
    • ๐Ÿ”€ Fonts: Fixed ImFontConfig::GlyphExtraSpacing and ImFontConfig::PixelSnapH settings being pulled from the merged/target font settings when merging fonts, instead of being pulled from the source font settings.
    • ImDrawList: Thick anti-aliased strokes (> 1.0f) with integer thickness now use a texture-based path, reducing the amount of vertices/indices and CPU/GPU usage. (#3245) [@ShironekoBen]
      • This change will facilitate the wider use of thick borders in future style changes.
      • Requires an extra bit of texture space (~64x64 by default), relies on GPU bilinear filtering.
      • Set io.AntiAliasedLinesUseTex = false to disable rendering using this method.
      • Clear ImFontAtlasFlags_NoBakedLines in ImFontAtlas::Flags to disable baking data in texture.
    • ๐Ÿ’… ImDrawList: changed AddCircle(), AddCircleFilled() default num_segments from 12 to 0, effectively enabling auto-tessellation by default. Tweak tessellation in Style Editor->Rendering section, or by modifying the style.CircleSegmentMaxError value. [@ShironekoBen]
    • ๐Ÿš€ ImDrawList: Fixed minor bug introduced in 1.75 where AddCircle() with 12 segments would generate an extra vertex. (This bug was mistakenly marked as fixed in earlier 1.77 release). [@ShironekoBen]
    • Demo: Improved "Custom Rendering"->"Canvas" demo with a grid, scrolling and context menu. Also showcase using InvisibleButton() with multiple mouse buttons flags.
    • Demo: Improved "Layout & Scrolling" -> "Clipping" section.
    • ๐Ÿ Demo: Improved "Layout & Scrolling" -> "Child Windows" section.
    • ๐Ÿ’… Style Editor: Added preview of circle auto-tessellation when editing the corresponding value.
    • ๐Ÿ‘ Backends: OpenGL3: Added support for glad2 loader. (#3330) [@moritz-h]
    • ๐Ÿ‘€ Backends: Allegro 5: Fixed horizontal scrolling direction with mouse wheel / touch pads (it seems like Allegro 5 reports it differently from GLFW and SDL). (#3394, #2424, #1463) [@nobody-special666]
    • ๐Ÿ›  Examples: Vulkan: Fixed GLFW+Vulkan and SDL+Vulkan clear color not being set. (#3390) [@RoryO]
    • โœ… CI: Emscripten has stopped their support for their fastcomp backend, switching to latest sdk [@Xipiryon]


    Other branches & Beta features!


    The tables (#2957) features is still available for testing, it is expected to fully stabilize and be merged for 1.80. You are encourage to use Tables today and provide feedback.

    Some user-visible changes from 1.77 in 1.78 related to the tables branch include:

    • Tables: Rename border V/H flags HInner -> InnerH.
    • Tables: non-resizable columns also submit their requested width for auto-fit.
    • ๐Ÿšš Tables: Fix calculation of auto-fit (remove extraneous padding). Demo setting a width in columns setup + ImGuiTableFlags_NoKeepColumnsVisible.
    • 0๏ธโƒฃ Tables: Store submitted column width and avoid saving default default widths.
    • ๐Ÿ›  Tables: Simplified TableHeader() and not relying on Selectable(), fixed various padding issues. Added work-around for CellRect.Min.x offset by CellSpacing.x.
    • ๐Ÿ›  Tables: Fixed TableHeader() not declaring its height properly.
    • ๐Ÿ›  Tables: Fixed table settings not being saved inside a child window (#3367).
    • ๐Ÿ Tables: Fixed stacked popups incorrectly accessing g.CurrentTable of parent-in-stack windows.
    • Tables: Added TableSetBgColor() api with color for RowBg and CellBg colors.
    • ๐Ÿšš Tables: Removed extra +1.0f pixels initially allocated to make right-most column visible, fix visible padding asymmetry. Tweaked debug code in demo.
    • Tables: Comments on Sizing Policies.

    The docking (#2109) and multi-viewports (#1542) features are available in the docking branch, they are in beta but actively maintained and being used by many teams already. Your continuous feedback is always appreciated.

    Some of changes from 1.77 in 1.78 related to the docking branch (multi-viewport and docking features) include:

    • ๐Ÿšš Docking: Made DockBuilderAddNode() automatically call DockBuilderRemoveNode(). (#3399, #2109)
    • Docking: Storing HoveredDockNode in context which can be useful for easily detecting e.g. hovering an empty node. (#3398)
    • ๐Ÿ›  Docking: Fixed docking overlay bits appearing at (0,0), because of 43bd80a. Most typically noticeable when disabling multi-viewport.
    • โ†ช Docking: Workaround recovery for node created without the _DockSpace flags later becoming a DockSpace. (#3340)
    • Docking: Rework size allocations to recover when there's no enough room for nodes + do not hold on _WantLockSizeOnce forever (#3328)
    • Docking: Rework size allocation to allow user code to override node sizes. Not all edge cases will be properly handled but this is a step toward toolbar emitting size constraints.
    • Docking: Added experimental flags to perform more docking filtering and disable resize per axis. Designed for toolbar patterns.
    • Viewports, Backends, GLFW: Use GLFW_MOUSE_PASSTHROUGH when available.
    • ๐Ÿ›  Viewports, Backends: DX12: Fixed issue on shutdown when viewports are disabled. (#3347)

    There's a CMake pull-request (#1713) if you prefer a traditional CMake integration over registering imgui sources files in your own project. There's a premake5 branch if you prefer the saner and nicer Visual Studio projects generated by premake.

    Help wanted!

    • If your company uses Dear ImGui, you can reach out to contact at
    • ๐Ÿ“š Dear ImGui is looking for a technical writer to help writing technical articles, tutorials and documentation. Please reach out if you are interesting in helping!.
    • ๐Ÿง Multi-viewports in particular needs help and bug-fixes on Linux and Mac. Specific workarounds for both SDL and GLFW are becoming highly desirable. I am myself not a Linux nor Mac users and those platforms have been lagging behind in term of multi-viewport supports. (#2117).
    • ๐Ÿ‘€ The Vulkan renderer appears to have issues (see vulkan tag)
    • Browsing issues and todo list you may find something something to contribute to!

    ๐Ÿ‘€ See Gallery threads for more pictures and to post yours!

    League of Legends
    league of legends

    Clash of Clans video from 8m29
    clash of clans

    ๐Ÿ’ป Some control UI for a robot by Boston Dynamics video

    @Moneyl: "Working on a map viewer / modding tool for Red Faction Guerrilla. Right now it's rendering the bounding box of each zone object. Working on loading some of it's mesh formats next."

    โœ… @erickjung: "I'm glad to introduce Mockingbird, a tool designed to simplify software testing and development, helping with data inspection and manipulation. With a minimalist user interface, you can easily navigate through data, mock any HTTP(s)' system, and get insights."
    ๐Ÿคก Mockingbird

    @pthom "ImGui Manual is an attempt to make an enjoyable and efficient manual for ImGui. The idea is to use the reference code in imgui_demo.cpp in order to make an interactive manual."
    ImGui Manual

    ๐Ÿ’… @JakeCoxon "I forked ImGui to make it look like windows98. Mainly for a bit of fun, learning the codebase and potentially make an app that looked like this style"

    @tlbtlbtlb "Yoga Studio is an IDE for robotics, with tools for exploring the space of control parameters. Open source at"
    Yoga Studio

    ๐Ÿ’ป @JMS55 "Sandbox is a falling sand game like The Power Toy or Sandspiel. [...] I used imgui-rs, imgui-winit-support, and imgui-wgpu for the UI. Code is here"

    Receiver 2 has a in-game debug UI (F12 key)
    Receiver 2

    Bizzarrus: "Some data track widgets I made a while ago for my company's internal tool"

    xX_WhatsTheGeek_Xx: "Software Defined Radio software I'm working on. Uses default imgui widgets for the sidebar and a custom waterfall/fft widget"

    ๐Ÿ’ป moneyl: "A game / destruction sim thing I've been working on (never actually got to gameplay as usual lol). Going to adapt this code to make a 2d game instead to hopefully make things simpler. Using imgui for tools and may use it for game UI as well. Using this theme: #707 (comment) The icons are FontAwesome + this library"