Imgui
This project is an immediate-mode graphical user interface library designed for rapid development of tools and debugging interfaces. By generating UI geometry every frame through procedural code, it eliminates the need for persistent state synchronization between application data and the interface. It is primarily intended for integration into existing rendering pipelines, where it produces raw vertex buffers and draw commands that are agnostic to the underlying graphics API.
The library distinguishes itself through a highly decoupled architecture that supports complex, dockable, and multi-viewport layouts. It manages window positions, tab dragging, and node splitting, allowing developers to detach interface elements into independent operating system windows. To ensure consistent interaction across diverse environments, it maps native input events into a unified format and provides robust identifier-based scoping to track element states across frames.
The framework offers a broad capability surface for building sophisticated engine tooling and diagnostic utilities. It includes support for advanced visual components such as node editors, 2D and 3D plotters, and specialized inspectors, alongside infrastructure for DPI scaling and custom shape rendering. The system is designed for high portability, featuring compile-time configuration options that allow developers to adapt core data structures and mathematical types to specific engine requirements.
The repository provides extensive examples for connecting the library to major graphics backends and frameworks, alongside tools for generating language-specific bindings.
Features
- Engine Backends - The library connects interface functionality to custom engines by mapping input events and uploading textures through platform-specific backends.
- Backend-Agnostic Rendering Pipelines - Decouples UI logic from graphics APIs by producing raw vertex buffers and draw commands for external host renderers.
- Vertex Buffer Generators - The library provides a framework for generating optimized vertex buffers to display interactive graphical elements within three-dimensional rendering pipelines.
- Text Editors - [](#text-editors) **ImGuiColorTextEdit (goossens's)**: Colorizing text editor for Dear ImGui (2024-2026) github/goossens/ImGuiColorTextEdit **ImGuiColorTextEdit**: Colorizing text editor for Dear ImGui (2017-2019) github
- Window Docking Systems - The library manages window positions by supporting tab dragging, node splitting, and the undocking of individual windows or hierarchies.
- Node Editors - [](#node-editors) **imgui-node-editor**: node editor using Dear ImGui (2016-2023) github/thedmd/imgui-node-editor **ImNodes**: Node graph implementation for Dear ImGui (2019-2022) github/rokups/ImNodes **imnodes**: A sma
- Immediate Mode UI Libraries - A graphical interface framework that generates UI elements every frame to simplify state management and integration with custom rendering pipelines.
- Flexible Windowing Systems - Managing complex, dockable, and multi-viewport interface layouts that allow users to organize and detach tools within a graphical application.
- Immediate Mode Rendering Systems - Generates UI geometry every frame by executing procedural code, eliminating the need for persistent state synchronization between data and view.
- Immediate Mode UI Development - Building lightweight, frame-based graphical interfaces that integrate directly into existing rendering loops for real-time applications and tools.
- Declarative UI Composition - A programming paradigm where developers define interface layouts through code-based function calls that automatically reconcile state changes into visual output.
- Game Engine Tooling - Creating custom editors, debug inspectors, and visual manipulation gizmos that run inside high-performance graphics engines and simulation environments.
- Graphics Backends - Connecting interactive interface components to diverse rendering backends like Vulkan, Metal, and DirectX across multiple operating systems.
- ID-Based Widget Scoping - Assigns unique identifiers to interface elements based on call stacks or user-provided labels to track interaction state across frames.
- Immediate Mode Plotting Libraries - [](#plotting-graph) **ImPlot**: Advanced 2D Plotting for Dear ImGui (2020-2025) github/epezent/implot **ImPlot3D**: Immediate Mode 3D Plotting for Dear ImGui (2024) github/brenocq/implot3d **imgui-plot** (2019-2023) gith
- Developer-Focused Debugging Interfaces - A specialized UI toolkit designed for building real-time inspectors, memory editors, and diagnostic tools for complex software applications.
- Dynamic Debugging Visualizations - Implementing real-time memory editors, graph plotters, and state inspectors to monitor and manipulate application data during active development.
- DPI Scaling - The library adjusts font sizes and layout dimensions based on display resolution to ensure interface components remain legible on all screens.
- Platform-Specific Input Bridging - Maps native operating system events like mouse and keyboard signals into a unified internal format for consistent cross-platform interaction.
- Framework and Engine Backends - [](#frameworkengine-backends) Main repository include examples for DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL2/3, Vulkan, SDL\_Renderer, iOS, WebGPU, using frameworks such as GLFW, SDL2, Win32, GLUT, Androi
- Docking Layout Systems - The library configures complex window arrangements by splitting nodes and assigning content to designated docking zones.
- Docking Systems - The library creates flexible regions within a window or across the viewport to host nested content and maintain stable layouts.
- Multi-Viewport Windowing Systems - The library renders interface windows outside the main application boundary by detaching them into independent operating system windows.
- Binding Generators - [](#binding-generators) ### cimgui [](#cimgui) https://github.com/cimgui/cimgui (2015-2025) Output C API + output metadata (see `generator/output/` folder) which can be used to automatically generate other bindings. **(I
- Cross-Platform Graphics Tooling - A collection of rendering backends and platform adapters that enable consistent interface display across diverse hardware and operating systems.
- Graphics Pipeline Configurations - The library processes draw data and manages graphics states like alpha blending and projection matrices for consistent visual rendering.
- System Input Handling - The library processes operating system events including mouse movements, keyboard presses, and window resizing to ensure interface responsiveness.
- Custom Shape Rendering - The library renders lines and custom geometric shapes directly onto windows using low-level drawing commands and coordinate-based primitives.
- UI Test Engines - [](#automation--testing) **imgui\_test\_engine**: Dear ImGui Test Engine + Test Suite (2022-2024) github/ocornut/imgui\_test\_engine
- Viewport-Independent Windowing - Supports multi-window layouts by detaching interface elements into separate operating system windows managed by the host application context.
- Compile-Time Header Configurations - Uses preprocessor macros to customize core data structures and mathematical types before compilation to match specific engine requirements.
- Serialization and Reflection Tools - [](#inspectors-serialization-reflection) **ImGui::Auto()**: auto serialize into UI using C++17 (2017) github/Csabix/imgui **ImQuick**: render UI elements automagically based only on the variable type. (2021) github/marti
- Widget Identifier Systems - The library distinguishes interaction targets within parent containers by applying unique labels or scoping identifiers to ensure correct input response.
- Language Bindings - [](#language-bindings) Note: those bindings may be more or less maintained, more or less close to the spirit of original API. People who create language bindings sometimes haven't used the C++ API themselves. Dear ImGui
- Hexadecimal Editors - [](#hex--memory-editors) **imgui\_memory\_editor**: hexadecimal editor (2017-2024) github/ocornut/imgui\_club **imgui\_hex\_editor**: My version of hexadecimal editor for the Dear ImGui (2024) github/Teselka/imgui\_hex\_
- Knobs - [](#knobs) **imgui-rs-knobs**: A library for designing knobs for imgui-rs \[Rust\] (2021) github/DGriffin91/imgui-rs-knobs **imgui-knobs**: This is a port/adaptation of imgui-rs-knobs (2022-2023) github/altschuler/imgui-