Dear ImGui is a bloat-free graphical user interface library for C++. It outputs optimized vertex buffers that you can render anytime in your 3D-pipeline-enabled application. It is fast, portable, renderer agnostic, and self-contained (no external dependencies).
Dear ImGui is designed to enable fast iterations and to empower programmers to create content creation tools and visualization / debug tools (as opposed to UI for the average end-user). It favors simplicity and productivity toward this goal and lacks certain features commonly found in more high-level libraries.
Dear ImGui is particularly suited to integration in game engines (for tooling), real-time 3D applications, fullscreen applications, embedded applications, or any applications on console platforms where operating system features are non-standard.
Minimize state synchronization.
Minimize UI-related state storage on user side.
Minimize setup and maintenance.
Easy to use to create dynamic UI which are the reflection of a dynamic data set.
Easy to use to create code-driven and data-driven tools.
Easy to use to create ad hoc short-lived tools and long-lived, more elaborate tools.
Easy to hack and improve.
Portable, minimize dependencies, run on target (consoles, phones, etc.).
Efficient runtime and memory consumption.
Battle-tested, used by many major actors in the game industry.
Homepage
Download
Recent Releases
1.90.512 Apr 2024 11:45
minor feature:
Decorated log and release notes: https://github.com/ocornut/imgui/releases/tag/v1.90.5
Breaking changes:
More formally obsoleted 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)..
- IsKeyPressed(GetKeyIndex(ImGuiKey_XXX)) -- IsKeyPressed(ImGuiKey_XXX).
ImDrawList: Merged the radius_x/radius_y parameters in 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. @cfillion .
Other changes:
Windows: Scrollbar visibility decision uses current size when both size and contents
size are submitted by API..
Windows: Double-click to collapse may be disabled via key-ownership mechanism..
Windows: BeginChild(): Extend outer resize borders to the edges when there are no corner
grips. Essentially affects resizable child windows. @cfillion .
Windows: BeginChild(): Resizing logic for child windows evaluates whether per-axis clamping
should be applied based on parent scrollbars, not child scrollbars. @cfillion
Adjust those resizing limits to match window padding rather than inner clipping rectangle.
Tables: auto-width columns when using synced-instances of same table, width of
one instance would bleed into next one instead of sharing their widths..
Tables: Angled headers: border hit box extending beyond when used within
non-scrollable tables. @cfillion .
Tables: Angled headers: borders not moving back up after TableAngleHeadersRow()
stops being called. @cfillion .
Tables: Angled headers: rounding header size to nearest integers, some when using clipper.
Menus, Popups: an where sibling menu popups re-opening in successive
frames would erroneously the window. While it is technically a popup it woul
1.90.424 Feb 2024 03:05
minor bugfix:
Decorated log and release notes: https://github.com/ocornut/imgui/releases/tag/v1.90.4
Other changes:
Nav: SetKeyboardFocusHere() or programmatic tabbing API from not working on
windows with the ImGuiWindowFlags_NoNavInputs flag (regression in 1.90.2, which
among other things broke imgui_memory_editor).
Menus, Popups: an where hovering a parent-menu upward would
erroneously the window..
Popups: resizable popup minimum size being too small. Standardized minimum
size logic.
Modals: Temporary changes of ImGuiCol_ModalWindowDimBg are properly handled by
BeginPopupModal()..
Tables: Angled headers: support for multi-line labels..
Tables: Angled headers: various to accurately handle CellPadding changes..
Tables: Angled headers: properly registers horizontal component of angled headers
for auto-resizing of columns..
Tables: Angled headers: TableAngledHeadersRow() incorrect background fill
drawn too low, particularly visible with tables that have no scrolling..
ProgressBar: a minor tesselation when rendering rounded progress bars,
where in some situations the rounded section wouldn't follow regular tesselation rules.
DeTools: Item Picker: Promoted ImGui::DetartItemPicker() to public API..
DeTools: Item Picker: Menu entry visible in Demo- Tools but greyed out unless
io.ConfigDeIsDegerPresent is set..
Misc: Added optional alpha multiplier parameter to GetColorU32(ImU32) variant.
Demo: Custom Rendering: better demonstrate PathArcTo(), PathBezierQuadraticCurveTo(),
PathBezierCubicCurveTo(), PathStroke(), PathFillConvex() functions.
.
1.90.315 Feb 2024 19:05
minor feature:
Decorated log and release notes: https://github.com/ocornut/imgui/releases/tag/v1.90.3
Breaking changes:
Backends: SDL2: Removed obsolete ImGui_ImplSDL2_NewFrame(SDL_Window*) signature which
was obsoleted in 1.84. Calling ImGui_ImplSDL2_NewFrame() is fine.
Backends: Vulkan: Moved RenderPass parameter from ImGui_ImplVulkan_Init() function to
ImGui_ImplVulkan_InitInfo structure. Not required when using dynamic rendering. @shawnhatori .
Backends: Vulkan: Using dynamic rendering now require filling the PipelineRenderingCreateInfo
structure in ImGui_ImplVulkan_InitInfo, allowing to configure color/depth/stencil formats.
Removed ColorAttachmentFormat field previously provided for dynamic rendering.
@shawnhatori .
Other changes:
Menus, Popups: menus and popups with ChildWindow flag erroneously not displaying
a scrollbar when contents is over parent viewport size. @ZingBallyhoo .
Backends: SDL2, SDL3: Handle gamepad disconnection + increasing gamepad reference
counter continuously. Added support for multiple simultaneous gamepads.
Added ImGui_ImplSDL2_SetGamepadMode()) function to select whether to automatically pick
first available gamepad, all gamepads, or specific gamepads.
@ocornut, @lethal-guitar, @wn2000, @bog-dan-ro .
BackendsL SDL3: gamepad handling. @bog-dan-ro .
Backends: SDLRenderer3: query newly added SDL_RenderViewportSet() to not restore
a wrong viewport if none was initially set.
Backends: DirectX9: Using RGBA format when allowed by the driver to avoid CPU side
conversion. @Demonese .
Internals: ImFileOpen not working before context is created, preventing creation
of a font atlas before main context creation. @PathogenDavid, @ocornut .
.
1.90.210 Feb 2024 00:03
major bugfix:
Breaking changes:
- Commented out ImGuiIO::ImeWindowHandle obsoleted in 1.87 in favor of writing
to 'void* ImGuiViewport::PlatformHandleRaw'.
- Backends: WebGPU: ImGui_ImplWGPU_Init() now takes a ImGui_ImplWGPU_InitInfo structure
instead of variety of parameters, allowing for easier further changes. (#7240)
Other changes:
- Nav: keyboard/gamepad activation mark widgets as held to give better visual feedback.
- Nav: tweak to logic marking navigated item as hovered when using keyboard, allowing
the hover highlight to stay even while another item is activated.
- Nav: Fixed 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
- Nav: Fixed pressing Escape while in a child window with _NavFlattened flag. (#7237)
- Nav: Improve handling of Alt key to toggle menu so that key ownership may be claimed on
individual left/right alt key without interfering with the other.
- Nav, Menus: Fixed click on a BeginMenu() followed by right-arrow from making the child menu
reopen and flicker (using ImGuiPopupFlags_NoReopen).
- Nav: ImGuiWindowFlags_NoNavInputs is tested during scoring so NavFlattened windows can use it.
- Popups: OpenPopup(): added 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).
- Popups: Slight change to popup closing logic (e.g. after focusing another window) which skipped
over popups that are also child windows.
- Combo: Fixed not reusing windows optimally when used inside a popup stack.
- Debug Tools: Metrics: Fixed debug break in SetShortcutRouting() not handling ImGuiMod_Sh