Dear ImGui: C++ graphical user interface library
Immediate mode GUI library for 3D applications.
Learn more about imgui
Dear ImGui is an immediate mode GUI library written in C++ that generates optimized vertex buffers for rendering. It operates without external dependencies and provides a self-contained core that compiles directly into applications. The library uses an immediate mode design pattern where UI state is reconstructed each frame rather than retained, reducing synchronization complexity. It is commonly integrated into game engines, real-time 3D applications, and tools where rapid iteration and minimal UI state overhead are priorities.
Immediate Mode Design
UI is reconstructed each frame rather than retained, eliminating state synchronization between application and UI. Reduces boilerplate code and simplifies integration into existing codebases without architectural changes.
Renderer Agnostic Output
Generates optimized vertex buffers compatible with any graphics API or rendering pipeline. Backends provided for common platforms, or create custom backends wherever textured triangles can be rendered.
Minimal Dependencies Integration
Core functionality contained in a few platform-agnostic C++ files that compile directly into projects. No external dependencies or build process required, suitable for embedded systems and console platforms.
#include "imgui.h"
void RenderDebugUI() {
ImGui::Begin("Debug Info");
ImGui::Text("FPS: %.1f", ImGui::GetIO().Framerate);
static float velocity = 0.0f;
ImGui::SliderFloat("Speed", &velocity, 0.0f, 100.0f);
if (ImGui::Button("Reset")) {
velocity = 0.0f;
}
ImGui::End();
}Breaks Vulkan backend init struct layout and removes legacy TreeNode/Selectable/Clipper names from 2023; adds child window resize grips and routing flexibility.
- –Move Vulkan init fields (RenderPass, Subpass, MSAASamples, PipelineRenderingCreateInfo) into init_info.PipelineInfoMain and add image_usage arg to helper.
- –Remove ImGuiTreeNodeFlags_AllowItemOverlap, ImGuiSelectableFlags_AllowItemOverlap, and ImGuiListClipper::IncludeRangeByIndices (obsoleted July/Sept 2023).
Patch release fixing font merging regression from 1.92, clipper/table row assumptions, and InputText word-wrap bugs; adds configurable scrollbar padding.
- –Update custom backends to support ImGuiBackendFlags_RendererHasTextures per improved docs/BACKENDS.md if not done since v1.92.0.
- –Use ImGuiListClipperFlags_NoSetTableRowCounters when clipping in pixel units (ItemsHeight=1) to avoid breaking table row logic.
Hotfix for v1.92.2 resolving IsItemHovered() regression on disabled items and items without identifiers when mouse button is held.
- –Update immediately if you call IsItemHovered() on disabled widgets or Text() while users hold mouse buttons down.
- –Allegro5 users gain texture format fixes, ImGui_ImplAllegro5_SetDisplay() for display switching, and PrintScreen key support on Windows.
See how people are using imgui
Related Repositories
Discover similar tools and frameworks used by developers
dash
Build reactive web apps with Python callbacks.
zustand
Immutable store-based React state management without boilerplate.
react
Component-based library using virtual DOM for efficient UI rendering.
OpenCut
Timeline-based browser video editor with multi-track support.
components
Material Design components and utilities for Angular applications.