[ ocornut ](https://github.com/ocornut) / ** [imgui](https://github.com/ocornut/imgui) ** Public

  * ### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/ocornut/imgui/wiki/Quotes).

  * [ Notifications ](https://github.com/login?return_to=%2Focornut%2Fimgui) You must be signed in to change notification settings
  * [ Fork 11.6k ](https://github.com/login?return_to=%2Focornut%2Fimgui)
  * [ Star  72.2k ](https://github.com/login?return_to=%2Focornut%2Fimgui)

# Quotes

Jump to bottom

omar edited this page Sep 20, 2024 · [16 revisions](https://github.com/ocornut/imgui/wiki/Quotes/_history)

meme by @newincpp
<https://twitter.com/newincpp/status/1418283887462072322>

_"imgui revolutionised our game development, i cannot imagine making tools without it. from tiny test projects to a large console game, it's utterly dependable and delightful to use. its simple & deep, a rare combination._"
-Alex Evans ([Media Molecule](https://www.mediamolecule.com/))

_"Dear ImGui is stunning. I don't know how I lasted so long without ever knowing about this. I've removed all my old debugging GUI code and replaced it with this."_
-Ron Gilbert ([Terrible Toybox](https://thimbleweedpark.com))

_"Imgui is a small, well written immediate mode GUI that allowed me to build and very quickly iterate on my gpuvis tool features. Its portability also allowed me to easily get it running on Mac, Windows, and Linux. I really enjoy working with Omar and sincerely hope I never have to work with large bloated UI toolkits ever again. Love Imgui!"_
-Michael Sartain ([Valve Software](https://www.valvesoftware.com))

_"Fundamentally changes the way that production and debug tools are developed at Ubisoft. This productivity library is an amazingly efficient way to increase the quality of these tools,"_
-Nicolas Fleury (Technical Architect, Rainbow Six: Siege, [Ubisoft](https://www.ubisoft.com))

_"so easy to use"_
-John Carmack ("Independent AI researcher")

_"Dear ImGui packing so much power into such a straightforward interface makes me wonder why every other GUI package is so hard to use. Dear ImGui makes writing clean UI look easy. [...] The least annoying middleware I’ve ever used!"_
-Elan Ruskin ([Insomniac Games](https://insomniac.games))

_"ImGui is the perfect fit for any personal projects, games and R &D apps. I use it as a git module: easy to include and straight to the point, while still allowing me to create customised and advanced UI. A pleasure to use!"_
-Sébastien Hillaire ([Frostbite](https://www.ea.com/frostbite) / [Electronic Arts](https://www.ea.com))

_"Dear ImGui is amazing. It's pretty much the only sizable library written by someone else that I've ever enjoyed using."_
-Shawn McGrath ([RAD Game Tools](http://www.radgametools.com/))

_"Dear imgui is the best thing that happened to programming since the invention of the debugger."_
-Sherief Farouk (Senior Software Engineer, [NVIDIA](http://www.nvidia.com))

_"Dear ImGui is our favorite UI System of choice since a few years. We're proud of being one of the first companies applying it in the Industrial Robotics Field. We use it on all sort of software running 24 hours/day on production lines and even on Robot Programming Teach Pendants. Our customer base loves the ability to remote the UI seamlessly in browser or through a tablet/smartphone, a feature that is easily achievable through some non-official extensions of the main library. It provides most of the functionality of every other UI system we've tried (WPF, HTML5 and Qt), while still keeping complexity down by many orders of magnitude. The source code is easy to understand, to integrate and to update because of its "lightweight with no dependencies" approach that has been enforced by its creator since the very first releases. Seriously, there's no reason not to start using it today for your next big project!"_
-Stefano Cristiano (R&D Director, [Recognition Robotics](https://recognitionrobotics.com/))

_"The biggest productivity boost I regularly see in a codebase is adding Dear IMGUI."_
-Noel Austin (Technical Director, [d3tLtd](https://d3tltd.com/))

_"From fast prototyping to professional UI, Dear ImGui is a stellar library. We moved our tools to Dear ImGui three years ago, and never looked back. Omar did an amazing job!"_
-Benoit Jacquier ([Kylotonn](https://www.kylotonn.com))

_"From generic property list to very specific realtime tool UI, dear imgui covers all our needs. Tool UI has never been so easy."_
-Damien Quilot (Lead developer, [Nadeo](https://www.nadeo.com/))

_"Dear ImGui is hands down the best C++ GUI library I've ever used. It's easy to setup and integrate, the API is very intuitive, and the feature-set is broad and flexible. I couldn't imagine building our engine tools without it!"_
-Mobeen Fikree ([Vertex Pop](http://www.vertexpop.com/))

Also see [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui) page.

### Clone this wiki locally


[ ocornut ](https://github.com/ocornut) / ** [imgui](https://github.com/ocornut/imgui) ** Public

  * ### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/ocornut/imgui/wiki/Releases-Recap).

  * [ Notifications ](https://github.com/login?return_to=%2Focornut%2Fimgui) You must be signed in to change notification settings
  * [ Fork 11.6k ](https://github.com/login?return_to=%2Focornut%2Fimgui)
  * [ Star  72.2k ](https://github.com/login?return_to=%2Focornut%2Fimgui)

# Releases Recap

Jump to bottom

omar edited this page Jun 13, 2024 · [1 revision](https://github.com/ocornut/imgui/wiki/Releases-Recap/_history)

This is a very synthetic recap of some features, but most individual releases have 20~40 new features or fixes.

  * [v1.90.8](https://github.com/ocornut/imgui/releases/tag/v1.90.8): scroll by page, empty scalar input fields & many more
  * [v1.90.7](https://github.com/ocornut/imgui/releases/tag/v1.90.7): macos cmd<>ctrl, macos ctrl+click, shortcut(), input routing policies & many more
  * [v1.90.6](https://github.com/ocornut/imgui/releases/tag/v1.90.6): extend default window cliprect, tables, webgpu-native/dawn, backends & many more
  * [v1.90.5](https://github.com/ocornut/imgui/releases/tag/v1.90.5): concave fill functions, windows, menus/popups & many more
  * [v1.90.4](https://github.com/ocornut/imgui/releases/tag/v1.90.4): debug item picker, angled headers, popups, many more
  * [v1.90.3](https://github.com/ocornut/imgui/releases/tag/v1.90.3): sdl gamepad improvements & many more
  * [v1.90.2](https://github.com/ocornut/imgui/releases/tag/v1.90.2): nav activation feedback, nav, popup no reopen, debug break tools, input text reload from buf, backends & many more
  * [v1.90.1](https://github.com/ocornut/imgui/releases/tag/v1.90.1): debug tools, unfiltered text inputs in scalar inputs, drags, sliders, glfw emscripten, backends & many more
  * [v1.90](https://github.com/ocornut/imgui/releases/tag/v1.90): resizable child windows, separators, tables angle headers & fixes, listbox, font rasterizer density, extra key enums, ellipses, simpler vulkan texture setup & many more
  * [v1.89.9](https://github.com/ocornut/imgui/releases/tag/v1.89.9): tables, clipper & many more
  * [v1.89.8](https://github.com/ocornut/imgui/releases/tag/v1.89.8): svg font icons w/ imgui_freetype+lunasvg, easier imdrawdata amends, tables, scrolling & many more
  * [v1.89.7](https://github.com/ocornut/imgui/releases/tag/v1.89.7): tooltips and hover tests with delay and stationary checks, overlapping items & many more
  * [v1.89.6](https://github.com/ocornut/imgui/releases/tag/v1.89.6): nav record preferred per-axis pos, sdlrenderer3, backends & many more
  * [v1.89.5](https://github.com/ocornut/imgui/releases/tag/v1.89.5): nav triggered scroll bubble up to parent, io queue tweaks for touch inputs, inputtext, ime, backends & many more
  * [v1.89.4](https://github.com/ocornut/imgui/releases/tag/v1.89.4): proper nav tabbing, courtesy math operators in imgui.h, overlapping drag and drop targets, backends & many more
  * [v1.89.3](https://github.com/ocornut/imgui/releases/tag/v1.89.3): SeparatorText(), mouse wheel fixes, sdl3 backend & many more
  * [v1.89.2](https://github.com/ocornut/imgui/releases/tag/v1.89.2): tables nav works with frozen rows & many more
  * [v1.89.1](https://github.com/ocornut/imgui/releases/tag/v1.89.1): fixes & many more
  * [v1.89](https://github.com/ocornut/imgui/releases/tag/v1.89): begin() nested inside popups, nav & inputtext, ImGuiMod orable with ImGuiKey, remove io.NavInputs[], ImageButton() signature, debug log lookup items id & many more
  * [v1.88](https://github.com/ocornut/imgui/releases/tag/v1.88): input queue fixes, debug utf-8 encoding viewer & many more
  * [v1.87](https://github.com/ocornut/imgui/releases/tag/v1.87): input queue & new io api, updated all backends, c++11 required, new key enums, ime fixes, metal c++ & many more
  * [v1.86](https://github.com/ocornut/imgui/releases/tag/v1.86): modals, nav, menus, inputtext, clipper, backends & many more
  * [v1.85](https://github.com/ocornut/imgui/releases/tag/v1.85): debug stack tool, focused/hovered tests flags, nav, coloredit, menus, backends & many more
  * [v1.84.2](https://github.com/ocornut/imgui/releases/tag/v1.84.2): BeginDisabled() fixes
  * [v1.84.1](https://github.com/ocornut/imgui/releases/tag/v1.84.1): BeginDisabled() fixes
  * [v1.84](https://github.com/ocornut/imgui/releases/tag/v1.84): BeginDisabled(), tables, drag and drop, fonts, win32 dpi without manifest, backends callbacks & many more
  * [v1.83](https://github.com/ocornut/imgui/releases/tag/v1.83): scrolling, nav, tables, backends & many more
  * [v1.82](https://github.com/ocornut/imgui/releases/tag/v1.82): draw functions use ImDrawFlags, revamped rounding params, drags, sliders, renderig backends blend better with bg & many more
  * [v1.81](https://github.com/ocornut/imgui/releases/tag/v1.81): list box, freetype, basic viewport/monitor types stuff in master, vulkan loaders & many more
  * [v1.80](https://github.com/ocornut/imgui/releases/tag/v1.80): tables api, added imgui_tables.cpp, tabs, backends & many more
  * [v1.79](https://github.com/ocornut/imgui/releases/tag/v1.79):
  * [v1.78](https://github.com/ocornut/imgui/releases/tag/v1.78):
  * [v1.77](https://github.com/ocornut/imgui/releases/tag/v1.77):
  * [v1.76](https://github.com/ocornut/imgui/releases/tag/v1.76):
  * [v1.75](https://github.com/ocornut/imgui/releases/tag/v1.75):
  * [v1.74](https://github.com/ocornut/imgui/releases/tag/v1.74):
  * [v1.73](https://github.com/ocornut/imgui/releases/tag/v1.73):
  * [v1.72b](https://github.com/ocornut/imgui/releases/tag/v1.72b):
  * [v1.72](https://github.com/ocornut/imgui/releases/tag/v1.72):
  * [v1.71](https://github.com/ocornut/imgui/releases/tag/v1.77):
  * [v1.70](https://github.com/ocornut/imgui/releases/tag/v1.70):
  * [v1.69](https://github.com/ocornut/imgui/releases/tag/v1.69):
  * [v1.68](https://github.com/ocornut/imgui/releases/tag/v1.68):
  * [v1.67](https://github.com/ocornut/imgui/releases/tag/v1.67):
  * [v1.66b](https://github.com/ocornut/imgui/releases/tag/v1.66b):
  * [v1.66](https://github.com/ocornut/imgui/releases/tag/v1.66):
  * [v1.65](https://github.com/ocornut/imgui/releases/tag/v1.65):
  * [v1.64](https://github.com/ocornut/imgui/releases/tag/v1.64):
  * [v1.63](https://github.com/ocornut/imgui/releases/tag/v1.63):
  * [v1.62](https://github.com/ocornut/imgui/releases/tag/v1.62):
  * [v1.61](https://github.com/ocornut/imgui/releases/tag/v1.61):
  * [v1.60](https://github.com/ocornut/imgui/releases/tag/v1.60): ImGui_ImplXXXX_RenderDrawData() revamp, gamepad/keyboard nav, CreateContext(), io.ConfigFlags, io.BackendFlags, windows, styles, popups, columns, font atlas, backends/examples & many more

### Clone this wiki locally


[ ocornut ](https://github.com/ocornut) / ** [imgui](https://github.com/ocornut/imgui) ** Public

  * ### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/ocornut/imgui/wiki/Bindings).

  * [ Notifications ](https://github.com/login?return_to=%2Focornut%2Fimgui) You must be signed in to change notification settings
  * [ Fork 11.6k ](https://github.com/login?return_to=%2Focornut%2Fimgui)
  * [ Star  72.2k ](https://github.com/login?return_to=%2Focornut%2Fimgui)

# Bindings

Jump to bottom

omar edited this page Mar 16, 2026 · [223 revisions](https://github.com/ocornut/imgui/wiki/Bindings/_history)

_(We had to turn off wiki editing, see[Home](https://github.com/ocornut/imgui/wiki/Home) for details. you may post small edit requests in [#9292](https://github.com/ocornut/imgui/issues/9292))_

## Index

  * Binding Generators
  * Language Bindings (C, C#, Rust, Zig & many more)
  * Framework/Engine Backends (Unreal Engine, Unity, Godot and many more)
  * Software Renderers/Rasterizers
  * Miscellaneous
  * Ports, Rewrites, Clones

## Binding Generators

### 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.
**(Important: if your generator uses cimgui with imgui_internal.h parsing: both imgui.h and imgui_internal.h contents are output in the same file! PLEASE use the "location" metadata to detect internal contents and expose them differently to your users (e.g. separate namespace). Please do not expose internal contents to your users without them knowing about it!)**

### dear_bindings

<https://github.com/dearimgui/dear_bindings> (2021-2025)
Dear Bindings generates a C API for Dear ImGui, and metadata so other languages can easily generate their own bindings on top.
Can parse imgui.h, imgui_internal.h etc. and generate neatly decorated C versions (full comments, alignment).

### litgen

<https://pthom.github.io/litgen> (2022-2024)
litgen is an automatic bindings generator from C++ to Python. It emits binary bindings and preserves the original documentation in a python stub (comparable to a C header file): compare [imgui.h](https://github.com/ocornut/imgui/blob/master/imgui.h) to its [python translation](https://github.com/pthom/imgui_bundle/blob/main/bindings/imgui_bundle/imgui/__init__.pyi). It can produce bindings for Dear ImGui and other libraries. It is used to maintain up to date bindings inside Dear ImGui Bundle ([link](https://github.com/pthom/imgui_bundle)).

## 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 was designed for C++ and some of the subtleties may be lost in translation with other languages. If your language supports it, I would suggest replicating the function overloading and default parameters used in the original, else the API may be harder to use. In doubt, always check the original C++ version first!

Now on to the list...

### Beef

  * **imgui-beef**: auto-generated Beef wrapper library for Dear ImGui
<https://github.com/RogueMacro/imgui-beef>

### C

  * **cimgui**: auto-generated c-api wrapper for Dear ImGui
****(metadata output from cimgui can be used to automatically generate other bindings**)**
<https://github.com/cimgui/cimgui>
  * **dear_bindings**: auto-generated c-api wrapper for Dear ImGui
****(metadata output from dcimgui can be used to automatically generate other bindings**)**
<https://github.com/dearimgui/dear_bindings>

### C#/.Net

  * **ImGui.NET**: An ImGui wrapper for .NET Core
<https://github.com/mellinoe/ImGui.NET>
  * **DearImGui**: imgui + implot for .NET + a controller for OpenGL (OpenTK)
<https://github.com/aybe/DearImGui>
  * **Hexa.NET.ImGui**: A .NET wrapper for the Dear ImGui.
<https://github.com/HexaEngine/Hexa.NET.ImGui>

### C++17

  * **ImGuiWrapper**: CMakeList wrapper and C++17 RAII encapsulation for accessing Imgui

### ChaiScript

  * **imgui-chaiscript**: ChaiScript bindings for ImGui
<https://github.com/JuJuBoSc/imgui-chaiscript>

### CovScript

  * **covscript-imgui**: ImGui Extension for CovScript (Covariant)
<https://github.com/covscript/covscript-imgui>

### Crystal

  * **crystal-imgui**: Crystal bindings to Dear ImGui
<https://github.com/oprypin/crystal-imgui>

### D

  * **BindBC-ImGui**: Static & dynamic bindings to Dear ImGui, compatible with BetterC, @nogc, and nothrow.
<https://github.com/BindBC/bindbc-imgui>
  * **DerelictImgui**: Dynamic bindings to cimgui for the D programming language
<https://github.com/Extrawurst/DerelictImgui>

### Go

  * **cimgui-go**: Go wrapper library for "Dear ImGui"
<https://github.com/AllenDang/cimgui-go>

### Harbour

  * **harbour-cimgui-sokol-starterkit**: Quite minimal Harbour language + Dear ImGui starter project
<https://github.com/alcz/harbour-cimgui-sokol-starterkit>

### Haskell

  * **dear-imgui.hs**: Haskell bindings to Dear ImGui,
<https://github.com/haskell-game/dear-imgui.hs>
  * **imgui-haskell**: Haskell bindings for Dear ImGui
<https://github.com/dbousamra/imgui-haskell>

### Haxe

  * **linc_imgui**: binding for imgui (Haxe/hxcpp)
<https://github.com/Aidan63/linc_imgui>
  * **hlimgui**: [Heaps](https://heaps.io/) game engine binding for Dear ImGui
<https://github.com/haddock7/hlimgui>

### Jank

  * **jank-imgui**: Demonstrates calling the C++ imgui library from jank
<https://github.com/kylc/jank-imgui>

### Java

  * **jimgui**: Pure Java binding for dear imgui
<https://github.com/ice1000/jimgui>
  * **imgui-java**: JNI based binding for Dear ImGui
<https://github.com/SpaiR/imgui-java>

### JavaScript

  * **imgui-js**: JavaScript bindings for Dear ImGui using Emscripten and TypeScript
<https://github.com/flyover/imgui-js> \+ also see [web demo](https://flyover.github.io/imgui-js/example/)
  * **jsimgui** JavaScript bindings for Dear ImGui
<https://jsr.io/@mori2003/jsimgui>

### Julia

  * **CImGui.jl**: Julia wrapper for cimgui
<https://github.com/JuliaImGui/CImGui.jl>

### Kotlin

  * **kotlin-imgui**: Kotlin bindings for Dear ImGui
<https://github.com/Dominaezzz/kotlin-imgui>

### Lobster

  * **imgui.lobster**:
<http://strlen.com/lobster/>

### Lua

  * **LuaJIT-ImGui**: LuaJIT ffi binding for imgui and implementations
<https://github.com/sonoro1234/LuaJIT-ImGui>
  * **imgui_lua_bindings**: imgui bindings for lua (also see LÖVE binding)
<https://github.com/casssoft/imgui_lua_bindings> (unmaintained)
<https://github.com/megumumpkin/imgui_lua_bindings> (up to date fork)
  * **lua-ffi-bindings**: FFI bindings for LuaJIT
<https://github.com/thenumbernine/lua-ffi-bindings>
  * **sol2_imgui_bindings**: ImGui bindings for Sol2
<https://github.com/MSeys/sol2_ImGui_Bindings>
  * **Gideros_ImGui**: ImGui bindings for Gideros Studio
<https://github.com/MultiPain/Gideros_ImGui>
  * **ImGuiLuaGen**: Dear ImGUI <> LuaJIT-FFI wrapper generator
<https://github.com/BeamNG/ImGuiLuaGen>

### Nim

  * **nim-imgui**: cimgui bindings for Nim
<https://github.com/nimgl/imgui>

### Odin

  * **odin-imgui**: Odin binding for Dear ImGui
<https://gitlab.com/L-4/odin-imgui>
  * **imgui-odin-backends**: A custom backend for 'Dear ImGui' written in Odin
<https://github.com/alektron/imgui-odin-backends>

### Pascal

  * **imgui-pas**: pascal bindings for imgui
<https://github.com/dpethes/imgui-pas>

### PureBasic

  * **pb-cimgui**: PureBasic interface to CImGui Wrapper
<https://github.com/hippyau/pb-cimgui>

### Python

  * **pyimgui**: Cython-based Python bindings for dear imgui
<https://github.com/swistakm/pyimgui>
  * **Bimpy**: Bundled imgui for python
<https://github.com/podgorskiy/bimpy>
  * **CyImGui**: Python bindings for ImGui using Cython. (obsolete)
<https://github.com/chromy/cyimgui>
  * **Ogre-imgui**:
<https://github.com/OGRECave/ogre-imgui>
  * **deargui**: Python bindings for dear imgui, generated with clang and pybind11
<https://github.com/cammm/deargui>
  * **Dear ImGui Bundle**: autogenerated bindings and stubs for ImGui (as well as ImPlot, ImGuizmo, node-editor, etc.)
<https://github.com/pthom/imgui_bundle>
  * Also see **DearPyGui** below for a RM-style framework.

### ReaScript

  * **ReaImGui**: ReaScript binding and REAPER backend for Dear ImGui
<https://forum.cockos.com/showthread.php?t=250419>

### Ruby

  * **ruby-imgui**: Yet another ImGui wrapper for Ruby
<https://github.com/vaiorabbit/ruby-imgui>

### Rust

  * **imgui-rs**: Rust bindings for ImGui
<https://github.com/imgui-rs/imgui-rs>
  * **dear-imgui-rs**: Rust bindings ecosystem for Dear ImGui, with docking, WGPU/GL backends, and rich set of extensions (ImPlot, ImPlot3D, ImGuizmo, ImNodes & more).
<https://github.com/Latias94/dear-imgui-rs>
  * **imgui-rust**: Alternative (personal) imgui rust bindings
<https://github.com/nsf/imgui-rust>
  * **ImStrv** Patch Branch [features/string_view](https://github.com/ocornut/imgui/tree/features/string_view) to use string-range more commonly instead of zero-terminated strings.
<https://github.com/ocornut/imgui/pull/3038>
  * **rust-imgui-opengl-renderer**
<https://github.com/michaelfairley/rust-imgui-opengl-renderer>
  * **easy-imgui-rs**: Rust crates to build full GUI applications.
<https://github.com/rodrigorc/easy-imgui-rs>

### Swift

  * **SwiftGui**: an experimental API inspired by SwiftUI declarative code, using Dear ImGui and running on OSX and iOS.
<https://github.com/erickjung/SwiftGUI>
  * **SwiftImGui**: Swift wrapper around Dear imgui for macOS, iOS and linux
<https://github.com/ctreffs/SwiftImGui>
  * **Swift-imgui**: Dear ImGui Swift Wrapper API for macOS and iOS
<https://github.com/mnmly/Swift-imgui>

### Zig

  * **zig-gamedev/zgui**: Zig build package and bindings for imgui and and optional extras.
<https://github.com/zig-gamedev/zgui>
  * **Zig-ImGui**: Zig bindings for ocornut/imgui, generated using cimgui/cimgui
<https://github.com/SpexGuy/Zig-ImGui>
  * **zig-imgui**: ImGui bindings for Zig, generated using dear bindings
<https://github.com/pdoane/zig-imgui>
  * **zig_workbench**
<https://github.com/DarknessFX/zig_workbench>

## Framework/Engine 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, Android, OSX/Cocoa, Allegro. See [examples/](https://github.com/ocornut/imgui/tree/master/examples) and [BACKENDS.md](https://github.com/ocornut/imgui/blob/master/docs/BACKENDS.md) for details.

### AGS / Adventure Game Studio

  * **agsimgui**: <https://github.com/ericoporto/agsimgui>

### Amethyst

  * **amethyst-imgui**: <https://github.com/amethyst/amethyst-imgui>

### bgfx

  * **bgfx**: <https://github.com/bkaradzic/bgfx/tree/master/examples/common/imgui>

### Blender

  * **BlenderImgui**: <https://github.com/eliemichel/BlenderImgui>

### bsf

  * **bsfimgui**: <https://github.com/pgruenbacher/bsfImgui>

### Cinder

  * **Cinder-ImGui**: <https://github.com/cinder/Cinder/blob/master/include/cinder/CinderImGui.h>

### Cocos2d-x

  * **imguix**: <https://github.com/c0i/imguix>
  * **cocos2dx-imgui**: <https://github.com/Mjarkiew/cocos2dx-imgui>, <https://github.com/Xrysnow/cocos2d-x-imgui> and [#551](https://github.com/ocornut/imgui/issues/551)
  * **ImGui for axmol**: <https://github.com/axmolengine/axmol/tree/dev/extensions/ImGui>

### Defold

  * **extension-imgui**: <https://github.com/britzl/extension-imgui>

### Diligent Engine

  * **DiligentTools**: [DiligentTools](https://github.com/DiligentGraphics/DiligentTools/blob/master/Imgui/src/ImGuiImplDiligent.cpp), [example](https://github.com/DiligentGraphics/DiligentSamples/tree/master/Samples/ImguiDemo)

### DirectX7

  * **D3D7Imgui**: <https://github.com/AndenDev/D3D7Imgui>

### Ebiten

  * **ebiten-imgui**: <https://github.com/gabstv/ebiten-imgui>

### Flexium

  * **FlexGUI**: <https://github.com/DXsmiley/FlexGUI>

### GLEQ

  * Event processing: [#3034](https://github.com/ocornut/imgui/issues/3034)

### GML / GameMaker Studio 2

  * **ImGuiGML**: <https://marketplace.yoyogames.com/assets/6221/imguigml>
  * **ImGui_GM**: <https://nommiiin.itch.io/imgui-gm> / <https://github.com/nommiin/ImGui_GM>

  * Dear ImGui seems integrated in recent versions of GameMaker Studio.

### Godot

  * **imgui-godot**: <https://github.com/pkdawson/imgui-godot>
  * **godot-dear-imgui**: <https://github.com/Blackdrop-Interactive-AB/godot-dear-imgui>

### GTK3 + OpenGL3

  * **imgui_impl_gtk3**: Unmerged PR: [#2032](https://github.com/ocornut/imgui/pull/2032)

### Irrlicht Engine

  * **IrrIMGUI**: <https://github.com/Armmegon/Irrlicht-ImGui>

### JUCE

  * **imgui_juce**: <https://github.com/Krasjet/imgui_juce>

### LÖVE+LUA

  * **love-imgui**: <https://github.com/slages/love-imgui>
  * **love-imgui (fork)**: <https://github.com/MikuAuahDark/love-imgui>
  * **LuaJIT-ImGui (ffi)**: <https://github.com/sonoro1234/LuaJIT-ImGui>
  * **cimgui-love (ffi)**: <https://codeberg.org/apicici/cimgui-love>

### Mach engine

  * **mach/imgui**: <https://github.com/machlibs/imgui>

### Magnum

  * **magnum-integration**: <https://github.com/mosra/magnum-integration>, [doc](https://doc.magnum.graphics/magnum/namespaceMagnum_1_1ImGuiIntegration.html), [example](https://doc.magnum.graphics/magnum/examples-imgui.html)

### Marmalade

  * **imgui_impl_marmalade**: [backend](https://github.com/ocornut/imgui/tree/v1.85/backends) \+ [example](https://github.com/ocornut/imgui/tree/v1.85/examples/example_marmalade)

### Monogame

  * **ImGui.NET for MonoGame**: <https://github.com/roy-t/ImGui.NET>

### NanoRT

  * **imgui_impl_raytrace**: <https://github.com/syoyo/imgui/tree/nanort/examples/raytrace_example>

### nCine

  * **nCine Out-of-the-box integration**: <https://github.com/nCine/nCine> and [example 1](https://github.com/nCine/nCine/blob/master/tests/apptest_scene.cpp), [example 2](https://github.com/nCine/nCine/blob/master/tests/apptest_simdbench.cpp)

### Nim Game Lib

  * **NimGL**: <https://github.com/nimgl/nimgl>

### Nintendo 3DS (homebrew)

  * **libctru/libcitro3d**: <https://github.com/mtheall/ftpd/tree/master/source/3ds>

### Nintendo Switch (homebrew)

  * **libnx/libdeko3d**: <https://github.com/mtheall/ftpd/tree/master/source/switch>
<https://github.com/scturtle/imgui_deko3d_example>

### Nintendo Wii U (homebrew)

  * **wut/GX2**: <https://github.com/GaryOderNichts/imgui>

### Ogre

  * **ogre-imgui**: <https://github.com/OGRECave/ogre-imgui>

### openFrameworks

  * **ofxImGui**: <https://github.com/jvcleave/ofxImGui>

### OpenSceneGraph/OSG

  * **imgui-osg**: <https://github.com/Tordan/imgui-osg> and older gist: <https://gist.github.com/fulezi/d2442ca7626bf270226014501357042c>

### Orx

  * **ImGuiOrx**: <https://github.com/thegwydd/ImGuiOrx> (was [#1843](https://github.com/ocornut/imgui/pull/1843))

### Photoshop

  * **Recipe: Custom UI for plug-ins using Dear ImGui**: <https://sonictk.github.io/ps_cpp_recipes/#recipe:customuiforplug-insusingimgui>, <https://github.com/sonictk/ps_cpp_recipes>

### PSP

  * **imgui_psp**: <https://github.com/adriensalon/imgui_psp>

### px_render

  * **px_render_imgui.h**: <https://github.com/pplux/px/blob/master/px_render_imgui.h> (was [#1935](https://github.com/ocornut/imgui/pull/1935))

### raylib

  * **rlImGui**: <https://github.com/raylib-extras/rlImGui>

### RGFW

  * **imgui_imp_rgfw.h**: <https://github.com/ColleagueRiley/imgui_imp_rgfw.h>

### Qt

  * **imgui-qt3d**: <https://github.com/alpqr/imgui-qt3d>
  * **QQuickItem (qrhiimgui2)**: Qt >= 6.4 <https://github.com/alpqr/qrhiimgui2>
Has a sample to integrate it in a QWindow if not using QtQuick. Supports imgui 1.87+
  * **QQuickItem (qrhiimgui)**: Qt >= 6 <https://github.com/alpqr/qrhiimgui>
Has a sample to integrate it in a QWindow if not using QtQuick. _IMPORTANT: Requires a patch merged in a newer version of Qt 6 in order to use it in QML. Consider using qrhiimgui2 instead._
  * **QQuickItem (imgui-qtquick)**: OpenGL only, Qt 5+: <https://github.com/alpqr/imgui-qtquick>
  * **QOpenGLWindow (qtimgui)**: <https://github.com/seanchas116/qtimgui>
  * **QtDirect3D**: <https://github.com/giladreich/QtDirect3D>

### SDL_Renderer

  * ~~**imgui_sdl** : <https://github.com/Tyyppi77/imgui_sdl>~~
  * We now have an official [imgui_impl_sdlrenderer2](https://github.com/ocornut/imgui/tree/master/backends) backend.

### SFML

  * **imgui-sfml**: <https://github.com/SFML/imgui-sfml>

### Slang Graphics Layer

  * **thread #8089**: <https://github.com/ocornut/imgui/issues/8089>

### Sokol

  * **sokol-samples**: <https://github.com/floooh/sokol-samples/blob/master/glfw/imgui-glfw.cc>

### Unity

  * **uimgui**: <https://github.com/psydack/uimgui> (2022-2024)
    * charlietran's fork: <https://github.com/charlietran/uimgui> (2024+)
    * yCatDev's fork: <https://github.com/yCatDev/uimgui-extended> (2026+)
  * **dear-imgui-unity**: <https://github.com/realgamessoftware/dear-imgui-unity> (2020-2024)
  * **ImGuiUnityEditor**: <https://github.com/Skaidd/ImGuiUnityEditor> (2025)

### Unreal Engine

See [Converging toward a principal Unreal Engine backend/binding for Dear ImGui?](https://github.com/ocornut/imgui/issues/9122). The situation with the amount of Unreal Engine backends is a bit unfortunate. Here's hoping to Epic eventually spend a little bit of time maintaining a backend that ticks all the boxes. In the meanwhile, feast yourself!

  * **UnrealImGui (IDI-Systems fork)** (2022-2025): <https://github.com/IDI-Systems/UnrealImGui>
  * **VesCodes/ImGui** (2023-2025) (w/ docking and multi-viewports) <https://github.com/VesCodes/ImGui>
  * **Cog** (2023-2025) (w/ many ready to use tools): <https://github.com/arnaud-jamin/Cog>
  * **amuTBKT/ImGuiPlugin** (2025) (w/ docking and ImPlot etc.): <https://github.com/amuTBKT/ImGuiPlugin>
  * **DFoundryFX** (2023-2025): <https://github.com/DarknessFX/DFoundryFX>
  * **ImGui_WS** (2022-2025): <https://github.com/Eragon-Brisingr/ImGui_WS>
  * **UnrealNetImgui** (plugin for NetImgui, 2020-2024): <https://github.com/sammyfreg/UnrealNetImgui>
  * Also see: [Useful Extensions: Unreal Engine specific](https://github.com/ocornut/imgui/wiki/Useful-Extensions#unreal-engine-specific) for: Cog, PropertyWatcher, UnrealImGuiTools etc.
  * Legacy:
    * **UnrealImGui (original)** (2017-2021): ~~<https://github.com/segross/UnrealImGui>~~
    * **UnrealImGui (benui-dev fork)** (2022-2023): ~~<https://github.com/benui-dev/UnrealImGui>~~
    * **UnrealImGuiDocker** (2023) (w/ docking and multi-viewports): ~~<https://github.com/Sharundaar/UnrealImGuiDocker>~~ (prefer VesCodes)
    * **UnrealEngine_ImGui** (2017): ~~<https://github.com/sronsse/UnrealEngine_ImGui>~~
    * **ImGui-for-Blueprints** (2022): ~~<https://github.com/sleeptightAnsiC/ImGui-for-Blueprints> (2022)~~

### UWP

  * **imgui-uwp**: <https://github.com/ahmed605/imgui-uwp>, <https://github.com/ocornut/imgui/pull/6579>

### vtk

  * **imgui-vtk**: <https://github.com/trlsmax/imgui-vtk>
  * **vtkDearImGUIInjector**: <https://github.com/jspanchu/vtkDearImGUIInjector>
  * **vtkImGuiAdapter**: <https://github.com/phcerdan/vtkImGuiAdapter>

### VulkanHpp

  * **ImGui-VulkanHpp**: <https://github.com/takiyu/ImGui-VulkanHpp>

### VulkanSceneGraph

  * **vsgImGui**: <https://github.com/vsg-dev/vsgImGui>

### vvvv

  * **VL.ImGui**: <https://github.com/vvvv/VL.StandardLibs/tree/main/VL.ImGui> (shipping with vvvv out-of-the-box)

### Win32 GDI renderer

  * **imgui_impl_gdi**: Unmerged PR: [#2724](https://github.com/ocornut/imgui/pull/2724)

### WxWidgets

  * **wxImGuiCanvas.h**: <https://github.com/ocornut/imgui/issues/1029>

### Xbox 360

  * **imgui-xbox360**: <https://github.com/ClementDreptin/imgui-xbox360>

## Software Renderers/Rasterizers

  * **imgui_software_renderer**
<https://github.com/emilk/imgui_software_renderer>
  * **ImFastRast**
<https://github.com/malamanteau/ImFastRast>
  * **ImSoft**
<https://github.com/LAK132/ImSoft>
  * **ImDuino**
<https://github.com/LAK132/ImDuino>

## Miscellaneous

### Retained Frameworks over Dear ImGui

  * **DearPyGui** A retained framework build over Dear ImGui
<https://github.com/hoffstadt/DearPyGui>
  * **Omniverse Kit**
<https://www.nvidia.com/en-us/omniverse/>

### API wrapping

  * **ReShade** includes support for plenty of graphics API + supports creating and loading dll add-ons that can utilize ImGui by linking against imgui.h and ReShade's own API headers. While ReShade itself stays up to date with ImGui releases on the docking branch, the add-on API has been designed to handle version changes without recompilation. See [#9286](https://github.com/ocornut/imgui/issues/9286).
<https://github.com/crosire/reshade>

## Ports, Rewrites, Clones

(notable rewrites or clones, those are not supported on this repository, and are technically different projects)

### Javascript Port/Rewrite

  * **imgui-njs**: imgui-njs is a manual-port / partial-rewrite of dear imgui
<https://github.com/cannerycoders/imgui-njs>

### Kotlin Port/Rewrite

  * **dear jvm imgui**: full JVM port/rewrite
<https://github.com/kotlin-graphics/imgui>

### Lua Port/Rewrite

  * **imgui-lua**: WIP port of Dear ImGui in pure Lua, supports games/engines that enable advanced Lua scripting such as Garry's Mod, Love2D and so on.
<https://github.com/GrayWolf64/imgui-lua>

### Roblox Port/Rewrite

  * **Iris**: Iris is an Immediate mode GUI Library for Roblox, Based on Dear ImGui
<https://github.com/Michael-48/Iris>

### Clone this wiki locally


[ ocornut ](https://github.com/ocornut) / ** [imgui](https://github.com/ocornut/imgui) ** Public

  * ### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/ocornut/imgui/wiki/Docking).

  * [ Notifications ](https://github.com/login?return_to=%2Focornut%2Fimgui) You must be signed in to change notification settings
  * [ Fork 11.6k ](https://github.com/login?return_to=%2Focornut%2Fimgui)
  * [ Star  72.2k ](https://github.com/login?return_to=%2Focornut%2Fimgui)

# Docking

Jump to bottom

omar edited this page Jan 23, 2026 · [23 revisions](https://github.com/ocornut/imgui/wiki/Docking/_history)

  * Search Issues: <https://github.com/ocornut/imgui/labels/docking>
  * See: [Glossary -> Docking terms](https://github.com/ocornut/imgui/wiki/Glossary#docking-terms).

_Docked windows_

## Preamble

#### Where to find it?

Docking is currently available in the [docking](https://github.com/ocornut/imgui/tree/docking) branch.

  * This is a well maintained branch and most large teams have been using this branch for a while.
  * It is safe and recommended to use that branch.
  * The branch also include the [Multi-viewports](https://github.com/ocornut/imgui/wiki/Multi-Viewports) feature.
  * Since July 2023, releases are also tagged for docking, e.g. `v1.92.0` `v1.92.0-docking`.

#### How can I enable docking?

Enable config flag:

  * `ImGui::GetIO().ConfigFlags |= ImGuiConfigFlags_DockingEnable;`

Create a fullscreen dockspace (optional)

  * `ImGui::DockSpaceOverViewport();`

That's pretty much it. There are additional docked related configuration flags in the ImGuiIO structure which you may toy with.

#### Why is not merged to master???

(This is the most asked question ever)
TL;DR; I am not happy with the current state of the code. I am a cautious person.

  * I want to rewrite it from scratch a third time (1st version was never released).
  * DockBuilder API is kept in imgui_internal.h because it is not great.
  * Many open issues don't have easy enough fixes, which suggests the code being too complex or fragile compared to the quality I strive for.
  * Some core concepts needs to be re-implemented or redesigned.
  * I have been incrementally adding automated tests to [imgui_test_suite](https://github.com/ocornut/imgui_test_engine) in order to facilitate rewriting the code.

However, you can benefit from a lot of docking features without being impacted by any of this. **The largest amount of interactions you'll have with the docking system are at end-user level and do not require API calls**. By just enabling the config flag above and calling a few functions you can benefit from 90% of Docking features. Even the hypothetical full rewrite of Docking system is not expected to impact most users. API that are most at risk of changing are hidden in `imgui_internal.h` for this reason, and even so, if they do change, we'll make reasonable effort to document the reasoning the update path.

In addition, Docking will only move forward with feedback from users, so the more people using it, the closer we are to a reach mergeable version. TL;DR; is totally fine to use for most users.

## Usage Guide

Also see our [Glossary](https://github.com/ocornut/imgui/wiki/Glossary) about Docking terminology.

#### Docking

Dock by dragging windows from their title tab or tab (hold SHIFT to disable docking)

  * Dock into an existing window or node

  * Split existing node

#### Undocking

  * Undock a window from a node

  * Undock a node (all windows) from a hierarchy

#### Other features

  * Tab bar may be hidden

## Dockspace

If you want to dock window on the edge of your screen (rather than only into other windows), most application can do:

    ImGui::NewFrame();

    // Create a dockspace in main viewport.
    ImGui::DockSpaceOverViewport();

or

    ImGui::NewFrame();

    // Create a dockspace in main viewport, where central node is transparent.
    ImGui::DockSpaceOverViewport(0, ImGui::GetMainViewport(), ImGuiDockNodeFlags_PassthruCentralNode);

`DockSpaceOverViewport()` is a helper which:

  * Create an invisible window covering the given viewport.
  * Then submits a `DockSpace()` into it.

That's pretty much what it does.

A `DockSpace()` is an arbitrary location inside a window, where other windows may be docked into.

  * Dockspaces need to be submitted _before_ any window they can host. Submit it early in your frame!
    * (because of this constraint, the implicit `"Debug"` window can not be docked into an explicit DockSpace() node, because that window is submitted as part of the part of the NewFrame() call. An easy workaround is that you can create your own implicit `"Debug##2"` window after submitting a dockspace, leave it in the window stack for anyone to use)
  * Dockspaces need to be kept alive if hidden, otherwise windows docked into it will be undocked.
    * If you have e.g. multiple tabs with a dockspace inside each tab: submit the non-visible dockspaces with `ImGuiDockNodeFlags_KeepAliveOnly`.

## Programmatically setting up docking layout (DockBuider api)

Unfortunately, there is no great API for this yet. I am sorry! I know everyone is asking for this!

  * There _is_ a DockBuilder API in imgui_internal.h. **It's not great, it is unfinished, and not well documented** (you can find more examples if you search in Issues).
  * An alternative is to manually create desired settings, save them using `SaveIniSettingsXXX()` function, strip the data to whatever is necessary to you and call `LoadIniSettingsXXX()`.

DockBuilder API idiomatic example:

    #include "imgui_internal.h"

    ImGuiID dockspace_id = ImGui::GetID("My Dockspace");
    ImGuiViewport* viewport = ImGui::GetMainViewport();

    // Create settings
    if (ImGui::DockBuilderGetNode(dockspace_id) == nullptr)
        ImGui::DockBuilderAddNode(dockspace_id, ImGuiDockNodeFlags_DockSpace);
        ImGui::DockBuilderSetNodeSize(dockspace_id, viewport->Size);
        ImGuiID dock_id_left = 0;
        ImGuiID dock_id_main = dockspace_id;
        ImGui::DockBuilderSplitNode(dock_id_main, ImGuiDir_Left, 0.20f, &dock_id_left, &dock_id_main);
        ImGuiID dock_id_left_top = 0;
        ImGuiID dock_id_left_bottom = 0;
        ImGui::DockBuilderSplitNode(dock_id_left, ImGuiDir_Up, 0.50f, &dock_id_left_top, &dock_id_left_bottom);
        ImGui::DockBuilderDockWindow("Game", dock_id_main);
        ImGui::DockBuilderDockWindow("Properties", dock_id_left_top);
        ImGui::DockBuilderDockWindow("Scene", dock_id_left_bottom);
        ImGui::DockBuilderFinish(dockspace_id);

    // Submit dockspace
    ImGui::DockSpaceOverViewport(dockspace_id, viewport, ImGuiDockNodeFlags_PassthruCentralNode);

    // Submit windows
    ImGui::Begin("Properties");
    ...

  * I dislike this API probably even more than you. I expect to redesign this before it reaches the public API.

### Debugging

  * Use the [Debug Log](https://github.com/ocornut/imgui/wiki/Debug-Tools#debug-log) to log docking events.
  * Use the [Metrics/Debugger Window](https://github.com/ocornut/imgui/wiki/Debug-Tools#metricsdebugger-window)'s Docking section to browse internal docking data.

### More

  * TODO: explain what data is persisting in .ini file, how and why.

### Clone this wiki locally


[ ocornut ](https://github.com/ocornut) / ** [imgui](https://github.com/ocornut/imgui) ** Public

  * ### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/ocornut/imgui/wiki/Implementing-Power-Save,-aka-Idling-outside-of-ImGui).

  * [ Notifications ](https://github.com/login?return_to=%2Focornut%2Fimgui) You must be signed in to change notification settings
  * [ Fork 11.6k ](https://github.com/login?return_to=%2Focornut%2Fimgui)
  * [ Star  72.2k ](https://github.com/login?return_to=%2Focornut%2Fimgui)

# Implementing Power Save, aka Idling outside of ImGui

Jump to bottom

Pascal Thomet edited this page Oct 19, 2023 · [4 revisions](https://github.com/ocornut/imgui/wiki/Implementing-Power-Save,-aka-Idling-outside-of-ImGui/_history)

### Intro

ImGui applications can consume a lot of CPU, since they update the screen very frequently. In order to reduce the CPU usage, it can be desirable to reduce the FPS when no user interaction is detected, in a controllable manner.

[Various PRs address power save](https://github.com/ocornut/imgui/pulls?q=is%3Apr+is%3Aopen+power), by proposing to modify ImGui.

Instead of modifying ImGui, an alternative approach is possible and it is not that difficult. It's motto is to say that this is neither a responsibility of ImGui in itself, nor a responsibility of the backend, but the responsibility of an application "runner" that is developed by the user around the backend.

This approach is summarized below. Of course, you may adapt it to your liking.

### 1. Create a storage for the idling data

First, inside the application state, let's add a storage for the Idling parameters.

For example:

    struct FpsIdling
        float fpsIdle = 9.f;         // FPS when idling
        bool  enableIdling = true;   // a bool to enable/disable idling
        bool  isIdling = false;      // an output parameter filled by the runner
    };

    // This is your application/runner state.
    // Call it whatever you want, store whatever you want in it!
    struct RunnerState
        // [...] Lots of other params, probably
        FpsIdling fpsIdling;

### 2. Update your rendering logic

Somewhere in the code, there ought to be a function that polls events, call `ImGui::NewFrame`, calls your Gui code, etc. It is probably called in a loop until the window is closed.

Let's suppose it is called `RenderLogic`. It could be updated like this:

    void RenderLogic(RunnerState& ioState)
        //[...]

        #ifndef __EMSCRIPTEN__
        // This form of idling will call sleep (and is not adapted for emscripten)
        IdleBySleeping(ioState.fpsIdling);
        #endif

        // Backend specific call to poll incoming events (glfwPollEvents, etc.)
        XXXX_PollEvents();

        #ifdef __EMSCRIPTEN__
        if (ShallIdleThisFrame_Emscripten(ioState.fpsIdling))
            // early exit for emscripten
            return;
        #endif

        // Backend specific calls create a new frame, followed by ImGui::NewFrame()
        XXXX_NewFrame_3D();
        XXXX_NewFrame_Backend();
        ImGui::NewFrame();

        //[...] Rest of the rendering logic

Then, you can implement idling like this:

    // Idling for non emscripten, where your app is responsible for the main loop.
    // This form of idling will call WaitForEventTimeout(), which may call sleep()
    void IdleBySleeping(FpsIdling& ioIdling)
        ioIdling.isIdling = false;
        if ((ioIdling.fpsIdle > 0.f) && ioIdling.enableIdling)
            double beforeWait = ClockSeconds();
            double waitTimeout = 1. / (double) params.fpsIdling.fpsIdle;

            // Backend specific call that will wait for an event for a maximum duration of waitTimeout
            // (for example glfwWaitEventsTimeout(timeout_seconds))
            XXXWaitForEventTimeout(waitTimeout);

            double afterWait = Internal::ClockSeconds();
            double waitDuration = (afterWait - beforeWait);
            double waitIdleExpected = 1. / params.fpsIdling.fpsIdle;
            ioIdling.isIdling = (waitDuration > waitIdleExpected * 0.9);

Here, we assume that ClockSeconds() returns the time measured by a global clock ([example](https://github.com/pthom/hello_imgui/blob/master/src/hello_imgui/internal/clock_seconds.cpp))

### 3. If using emscripten change the approach!

For emscripten, the situation is a bit different: in order to not overload the browser, you are supposed to not call your rendering logic in a loop, but instead to register `RenderLogic`, like so:

    void emscripten_imgui_main_loop(void* arg) {
        RenderLogic(whereverYouStoreYourAppState);

    int main() {
        // [...]
        emscripten_set_main_loop_arg(emscripten_imgui_main_loop, NULL, ...);
        // [...]

You cannot call sleep inside emscripten (which would result in a _busy loop_ , flooding the cpu). So instead, you opt for an early exit. Something like this can work:

    // Logic for idling under emscripten
    // This test should be done after calling Impl_PollEvents() since it checks the event queue for incoming events!
    bool ShallIdleThisFrame_Emscripten(FpsIdling& ioIdling)
        ImGuiContext& g = *GImGui;
        bool hasInputEvent =  ! g.InputEventsQueue.empty();

        if (! ioIdling.enableIdling)
            ioIdling.isIdling = false;
            return false;

        static double lastRefreshTime = 0.;
        double now = ClockSeconds();

        bool shallIdleThisFrame = false;
        if (hasInputEvent)
            ioIdling.isIdling = false;
            shallIdleThisFrame = false;
        else
            ioIdling.isIdling = true;
            if ((now - lastRefreshTime) < 1. / params.fpsIdling.fpsIdle)
                shallIdleThisFrame = true;
            else
                shallIdleThisFrame = false;

        if (! shallIdleThisFrame)
            lastRefreshTime = now;

        return shallIdleThisFrame;

where ClockSeconds could be implemented for example like this:

    #include <chrono>

    double ClockSeconds()
        static const auto start = std::chrono::steady_clock::now();
        auto now = std::chrono::steady_clock::now();
        std::chrono::duration<double> elapsed = now - start;
        return elapsed.count();

### Clone this wiki locally


[ ocornut ](https://github.com/ocornut) / ** [imgui](https://github.com/ocornut/imgui) ** Public

  * ### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/ocornut/imgui/wiki/Funding).

  * [ Notifications ](https://github.com/login?return_to=%2Focornut%2Fimgui) You must be signed in to change notification settings
  * [ Fork 11.6k ](https://github.com/login?return_to=%2Focornut%2Fimgui)
  * [ Star  72.2k ](https://github.com/login?return_to=%2Focornut%2Fimgui)

# Funding

Jump to bottom

omar edited this page Feb 26, 2026 · [45 revisions](https://github.com/ocornut/imgui/wiki/Funding/_history)

### Software doesn't maintain itself

Your contributions are keeping this project good. Dear ImGui is used by [many projects](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui). The main library is available under a free and permissive license, but continued maintenance and development have been a many-years full-time commitment for me, which we'd like to sustain and grow (including hiring focused contributors more often). In addition to maintenance and stability there are many desirable features yet to be added.

Dear ImGui has first been conceptualized and prototyped in 2012, first released and developed as a side-project from 2014, then became my main focus from the end of 2017. You can read [10 years of Dear ImGui](https://github.com/ocornut/imgui/issues/7892) if you are interested in the history of this project. Thanks to sponsors, in 2020, we poured ~2500 hours of work into Dear ImGui R&D. In 2021 ~1600 hours.

Dear ImGui in 2025 is incredibly more powerful and versatile than Dear ImGui was 2014. We are committed to keep improving the software while keeping it sane, optimal, flexible, respectful to the user. Every engineering teams will benefit from it.

We are consistently doing R&D and sitting on unfinished features needing work.

We have answered [thousands of community questions/issues](https://github.com/ocornut/imgui/issues?q=state%3Aopen) in the open and in one centralized place in order to create a database of knowledge.

We have created a [test engine & test suite](https://github.com/ocornut/imgui_test_engine) to test the library, minimize regressions, facilitate contributions and effectively contributes to documenting the code (pro-tip: if you are unsure what some code is for, disable it and run the test suite!).

We are ensuring at every moment that the library is the most efficient it can be (with strict standards aligning with the needs of game developers, such as: 0 heap allocations on most frames).

We are designing easy and well-documented transitions to updated APIs when changes are necessary, because code written by users often lives for years or decades.

But we can only keep doing that and move forward with continued support.

### How to financially support Dear ImGui? (Businesses)

  * You can support continued development and maintenance via invoiced sponsoring.
  * You can support continued development and maintenance via invoiced technical support, enterprise support, maintenance contracts. Your engineering team will be able to reach us directly, save time, minimize issues and tech debts, get prioritized bug fixes, and benefit from all sorts of technical support.
  * You may purchase commercial licenses for [Dear ImGui Test Engine](https://github.com/ocornut/imgui_test_engine), which is a separate project, useful if you want to automate processing and testing of your tools, engine or game. Its licensing scheme is designed to support funding the main library.
  * *COUGH* it is perfectly ok to buy hours of support and not use them all. It is perfectly ok to buy licenses and not use the Test Engine thoroughly. Whatever makes it easiest for your company to fund Dear ImGui we can work with.

For any of the above, please e-mail _omar AT discohello dot com_ to get started!
**If your company is using Dear ImGui, please consider reaching out today to say hello!**. All B2B transactions are invoiced and handled by [Disco Hello](https://www.discohello.com/). We are disclosed for variety of console systems and work with several major game studios and non-game businesses.

### How to financially support Dear ImGui? (Individuals)

You can support continued development and maintenance with one-off or recurring donations [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=WGHNC6MBFLZ2S). In the event that you are an individual and wish to make an unusually large contribution, please e-mail beforehand to discuss more optimal ways to do it.

### Past and present supporters

(Recent years supporters with links)

**Platinum-chocolate sponsors**

  * **Blizzard**

**Double-chocolate sponsors**

  * [Supercell](http://www.supercell.com)
  * [Riot Games](http://www.riotgames.com)
  * [Valve](https://www.valvesoftware.com)
  * [Scorewarrior](https://scwr.gg/imgui)
  * [BeamNG](https://www.beamng.com)
  * NVIDIA
  * Ubisoft

**Chocolate sponsors**

  * **[G3Dvu](https://www.g3dvu.com)**
  * **[OTOY](https://www.otoy.com/)**
  * **[Tanius Technology](http://www.tanius.com)**
  * [Adobe](https://www.adobe.com/products/substance3d/apps/modeler.html)
  * [Aras Pranckevičius](http://aras-p.info/)
  * [Asobo Studio](https://www.asobostudio.com)
  * [id Software](https://www.idsoftware.com)
  * [Lucid Games](https://www.lucidgames.co.uk)
  * [MachineGames](https://www.machinegames.com/)
  * [Planestate Software](http://www.plane9.com)
  * [RocketWerkz](https://rocketwerkz.com/)
  * Arkane Lyon
  * Avalanche Studios Group
  * Epic
  * Google
  * Noel Berry
  * Pocketwatch Games
  * RAD Game Tools

**Salty-caramel sponsors**

  * [Remedy Entertainment](https://www.remedygames.com)
  * [Thatgamecompany](https://thatgamecompany.com/)
  * [Vector Unit](https://www.vectorunit.com)
  * [Passtech Games](https://www.passtechgames.com/)
  * [SCS Software](https://www.scssoft.com)
  * [River End Games](https://riverendgames.com/)
  * [Mobigame](https://www.mobigame.net)
  * [Sebastian Schöner](http://blog.s-schoener.com/)
  * [Sofistik](https://www.sofistik.com/en/company/about-us)
  * [FUTO](https://futo.org)
  * [Tuxedo Labs](https://www.tuxedolabs.com/)
  * Dirk Gregorius
  * Dotemu
  * Esoterica Engine
  * Framefield
  * Gravity Well
  * Grinding Gear Games
  * Hexagon
  * Kylotonn
  * Media Molecule
  * Mesh Consultants
  * O-Net Communications (USA)
  * Nadeo
  * Next Level Games
  * Recognition Robotics
  * Unit 2 Games
  * Terrible Toybox
  * Wonderland Engine

### Patreon supporters (2015-2019) <3

From November 2014 to December 2019, the development of Dear ImGui has been financially supported by generous users on Patreon. Here's a list of those supporters, roughly ordered by joining date (some people opted out of this list, please reach out to be added/removed). (Note that the sponsoring levels here don't match the ones used for corps above)

_Double Chocolate_

  * Greggman, Aras Pranckevičius, Runner, Aiden Koss.

_Salty Caramel_

  * Jetha Chan, Wild Sheep Studio, Pastagames, Mārtiņš Možeiko, Daniel Collin, Chris Genova, Glenn Fiedler, Dakko Dakko, ikrima, Geoffrey Evans, Mercury Labs, Singularity Demo Group, Mischa Alff, Sebastien Ronsse, Lionel Landwerlin, Nikolay Ivanov, Ron Gilbert, Brandon Townsend, Morten Skaaning, G3DVu, Cort Stratton, drudru, Harfang 3D, Jeff Roberts, Rainway inc, Ondra Voves, Neil Bickford, Bill Six, Graham Manders.

_Caramel_

  * Michel Courtine, César Leblic, Dale Kim, Alex Evans, Rui Figueira, Paul Patrashcu, Jerome Lanquetot, Ctrl Alt Ninja, Paul Fleming, Neil Henning, Stephan Dilly, Neil Blakey-Milner, Aleksei, NeiloGD, Justin Paver, FiniteSol, Vincent Pancaldi, James Billot, Robin Hübner, furrtek, Eric, Simon Barratt, Game Atelier, Julian Bosch, Simon Lundmark, Vincent Hamm, Farhan Wali, Matt Reyer, Colin Riley, Victor Martins, Josh Simmons, Garrett Hoofman, Sergio Gonzales, Andrew Berridge, Roy Eltham, Game Preservation Society, Kit framework, Josh Faust, Martin Donlon, Quinton, Felix, Andrew Belt, Codecat, Claudio Canepa, Doug McNabb, Emmanuel Julien, Guillaume Chereau, Jeffrey Slutter, Jeremiah Deckard, r-lyeh, Roger Clark, Nekith, Joshua Fisher, Malte Hoffmann, Mustafa Karaalioglu, Merlyn Morgan-Graham, Per Vognsen, Fabian Giesen, Jan Staubach, Matt Hargett, John Shearer, Jesse Chounard, kingcoopa, Miloš Tošić, Jonas Bernemann, Johan Andersson, Nathan Hartman, Michael Labbe, Tomasz Golebiowski, Louis Schnellbach, Felipe Alfonso, Jimmy Andrews, Bojan Endrovski, Robin Berg Pettersen, Rachel Crawford, Edsel Malasig, Andrew Johnson, Sean Hunter, Jordan Mellow, Nefarius Software Solutions, Laura Wieme, Robert Nix, Mick Honey, Astrofra, Jonas Lehmann, Steven Kah Hien Wong, Bartosz Bielecki, Oscar Penas, A M, Liam Moynihan, Artometa, Mark Lee, Dimitri Diakopoulos, Pete Goodwin, Johnathan Roatch, nyu lea, Oswald Hurlem, Semyon Smelyanskiy, Le Bach, Jeong MyeongSoo, Chris Matthews, Frederik De Bleser, Anticrisis, Matt Reyer.

And all other past and present supporters; THANK YOU!
You can read [10 years of Dear ImGui](https://github.com/ocornut/imgui/issues/7892) if you are interested in the history of this project

### Clone this wiki locally


[ ocornut ](https://github.com/ocornut) / ** [imgui](https://github.com/ocornut/imgui) ** Public

  * ### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/ocornut/imgui/wiki/Multi-Viewports).

  * [ Notifications ](https://github.com/login?return_to=%2Focornut%2Fimgui) You must be signed in to change notification settings
  * [ Fork 11.6k ](https://github.com/login?return_to=%2Focornut%2Fimgui)
  * [ Star  72.2k ](https://github.com/login?return_to=%2Focornut%2Fimgui)

# Multi Viewports

Jump to bottom

omar edited this page Dec 3, 2025 · [10 revisions](https://github.com/ocornut/imgui/wiki/Multi-Viewports/_history)

  * Development Thread: <https://github.com/ocornut/imgui/issues/1542>
  * Open Issues: <https://github.com/ocornut/imgui/labels/multi-viewports>
  * Also see: [Glossary: Multi-Viewports terms](https://github.com/ocornut/imgui/wiki/Glossary#multi-viewports-terms).

#### What is it?

Multi-viewports is the feature allowing you to **seamlessly extract Dear ImGui windows out of your main rendering context**. In traditional game programming, your engine/game generally create an OS window associated to a graphics context (e.g. using DirectX, OpenGL) and all rendering has to happen inside this graphics context.

With multi-viewports, Dear ImGui gets the ability to create new OS windows and graphics contexts, as required to host Dear ImGui that have been moved outside the boundaries of the primary OS window. This is achieved via a set of flags and functions (inside `ImGuiPlatformIO` structure) which allows Dear ImGui to communicate with individual back-ends. **Most back-ends provided in the `backends/` folder can support multi-viewports**.

Among other things, Multi-viewports also facilitate the use of Dear ImGui over multiple monitors.

#### Where to find it?

Multi-viewports are currently available in the [docking](https://github.com/ocornut/imgui/tree/docking) branch. This is a well maintained branch and most large teams have been using this branch for a while. It is safe and recommended to use that branch.

#### How can I enable Multi-viewports ?

If you are using platform and renderer back-ends from the `backends/` folder, they already support multi-viewports.

  * Add to your configuration flags:

    io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;

  * Add in your main loop, after rendering your main viewport:

    // Update and Render additional Platform Windows
    if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable)
        ImGui::UpdatePlatformWindows();
        ImGui::RenderPlatformWindowsDefault();
        // TODO for OpenGL: restore current GL context.

That's pretty much it. There may be additional calls required surrounding this depending on the backend you are using: OpenGL in particular needs backup/restore of current GL context. Check the [example project](https://github.com/ocornut/imgui/tree/docking/examples) appropriate to your setup for details.

There are a few additional multi-viewports related configuration flags in the IO structure which you may toy with.

If you are using a custom back-end, refer to the `ImGuiPlatformIO` structure and existing `backends/` \+ `examples/` to implement support for multi-viewports in your engine. This is not particularly easy to add.

#### Issues

  * The feature tends to be broken on Linux/X11 with many window managers. It's been endlessly reported and will only likely ever be fixed if a Linux user wants to commit the time to investigate this seriously (aka run and implement new tests, and test their changes on other OS than their own). See [#2117](https://github.com/ocornut/imgui/issues/2117).
  * The feature doesn't work in Wayland. Wayland doesn't let application read or write windows positions.

#### FAQ

  * Q: What happens to the coordinate systems?

  * A: When enabling `ImGuiConfigFlags_ViewportsEnable`, the coordinate system used by Dear ImGui changes to match the coordinate system of your OS/desktop (e.g. (0,0) generally becomes the top-left corner of your primary monitor). This shouldn't affect most code, but if you have code using absolute coordinates you may want to change them to be relative to a window, relative to a monitor or relative to your main viewport (`GetMainViewport()->Pos`).

  * Q: How to handle varying DPI over multiple monitors?

  * A: See [this FAQ entry](https://github.com/ocornut/imgui/blob/master/docs/FAQ.md#q-how-should-i-handle-dpi-in-my-application).

### Clone this wiki locally


[ ocornut ](https://github.com/ocornut) / ** [imgui](https://github.com/ocornut/imgui) ** Public

  * ### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/ocornut/imgui/wiki/Upcoming-Changes).

  * [ Notifications ](https://github.com/login?return_to=%2Focornut%2Fimgui) You must be signed in to change notification settings
  * [ Fork 11.6k ](https://github.com/login?return_to=%2Focornut%2Fimgui)
  * [ Star  72.2k ](https://github.com/login?return_to=%2Focornut%2Fimgui)

# Upcoming Changes

Jump to bottom

omar edited this page Mar 5, 2025 · [6 revisions](https://github.com/ocornut/imgui/wiki/Upcoming-Changes/_history)

This is a rarely updated, higher-level list of intent.
**Section 6 of "[10 years of Dear ImGui](https://github.com/ocornut/imgui/issues/7892)" has more details on some of those topics.**

## Viewport

  * Improve [Multi-Viewports](https://github.com/ocornut/imgui/wiki/Multi-Viewports) feature toward merging in Master (~2.00) ([#1542](https://github.com/ocornut/imgui/issues/1542)).

## DPI

  * Better DPI support (current solution is for user to load font + scale style according to DPI). (v1.92: [#8465](https://github.com/ocornut/imgui/issues/8465), [#1676](https://github.com/ocornut/imgui/issues/1676))

## Navigation, Controls

  * Improve gamepad and keyboard controls. ([#787](https://github.com/ocornut/imgui/issues/787))
  * Inputs: Promote ownership and routing system to public API.
  * Shortcuts: Promote shortcut system to public API (+ finish proof-of-concept for shortcuts in hidden menus).
  * Shortcuts: alt-style local shortcuts.
  * Menus: once menus are able to handle their shortcuts (aka recursing in non-visible menus) we could envision Mac-style menu searching.

## Docking

  * Improve/rewrite [Docking](https://github.com/ocornut/imgui/wiki/Docking) toward merging in v2.00. ([#2109](https://github.com/ocornut/imgui/issues/2109))

## Text/Fonts

  * Finish work on dynamic font and incremental atlas updates (v1.92: [#8465](https://github.com/ocornut/imgui/issues/8465)).
  * Incremental font atlas updates.
  * Rewrite better text primitives.

## Styling

  * Improve styling support (easier to add more colors, basic inheritance system, cache float4->ImU32 conversions).
  * Improve basic render primitives (allow for gradients, etc.).
  * Optimize basic render primitives (e.g. using 8-way texture for curved shapes, borders, circles) to reduce CPU +vertices cost.

## Bindings

  * Improve [dear_bindings](https://github.com/dearimgui/dear_bindings) to ease the generation of language bindings (e.g. C).

## Automation, Tests

  * Continued work on [Dear ImGui Test Engine](https://github.com/ocornut/imgui_test_engine) and Dear ImGui Test Suite.

### Clone this wiki locally


[ ocornut ](https://github.com/ocornut) / ** [imgui](https://github.com/ocornut/imgui) ** Public

  * ### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/ocornut/imgui/wiki/Tips).

  * [ Notifications ](https://github.com/login?return_to=%2Focornut%2Fimgui) You must be signed in to change notification settings
  * [ Fork 11.6k ](https://github.com/login?return_to=%2Focornut%2Fimgui)
  * [ Star  72.2k ](https://github.com/login?return_to=%2Focornut%2Fimgui)

# Tips

Jump to bottom

omar edited this page Jul 2, 2024 · [15 revisions](https://github.com/ocornut/imgui/wiki/Tips/_history)

**This section is old and lacking... Most of the tips here are not super relevant anymore.**

Also see [Debug Tools](https://github.com/ocornut/imgui/wiki/Debug-Tools).

### Visual debugging

  * `ImGui::DebugDrawCursorPos()`, `ImGui::DebugDrawItemRect()` are a convenient way to easily display the current layout position or previous item geometry.

  * You can use ImDrawList primitives on the foreground drawlist, e.g. `GetForegroundDrawList()->AddRectFilled(...)` to bypass clipping of the current window. Whenever you are working with coordinates and unsure of their values, consider displaying them on screen using `AddRect()`, `AddCircle()`, etc.

  * Using keyboard modifiers is a convenient way to easily enable/disable something.

    ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
    ImVec2 my_pos= ImGui::GetCursorScreenPos();

    if (ImGui::GetIO().KeyShift)
        ImGui::DebugDrawItemRect(); // Helper to draw a rectangle between GetItemRectMin() and GetItemRectMax()
        ImGui::GetForegroundDrawList()->AddCircleFilled(my_pos, 3, IM_COL32(255, 0, 0, 255)); // Draw red circle at position
    ImGui::Text("Shift held: %d", ImGui::GetIO().KeyShift);

### Using Begin/BeginChild

  * You can omit `Begin()`/`End()`, widgets will be created into an implicit "Debug" window.
  * You can call `Begin()` multiple times to append to a same window from different place.
  * Use `Begin()`/`BeginChild()` to put yourself back into the context of another window (see [#270](https://github.com/ocornut/imgui/issues/270)
  * Similarly, functions like `BeginMenuBar()` or `BeginTabBar()` allow appending into a menu or tab-bar.
  * An interesting trick that isn't obvious is that you can use Begin() just to put yourself into the context of that window. So here I want to react to the user inputting an address to scroll to, I use BeginChild() again on the child that I've already drawn so I can use SetScrollFromPosY() on it.

    ImGui::BeginChild("##scrolling", ImVec2(0, -ImGui::GetFrameHeightWithSpacing()));
    // ...(draw main content)
    ImGui::EndChild();

    // And then much later in the main window, get back into child context to change scrolling offset
    ImGui::BeginChild("##scrolling");
    ImGui::SetScrollFromPosY(ImGui::GetCursorStartPos().y + (goto_addr / Rows) * line_height);
    ImGui::End();

### Using ImGuiOnceUponAFrame

The `ImGuiOnceUponAFrame` helper will allow run the block of code only once a frame. You can use it to quickly add custom UI in the middle of a deep nested inner loop in your code. (It is essentially just a helper which stores and compare a frame number).

### Plot: Use Stride for easily plotting a field in array of structures

<https://github.com/ocornut/imgui/issues/271>

Here I've got some code sampling joints of an animation as e.g 60 hz. And I can plot that directly from the joint structure without copying the data around one more time

    int stride = skel.getBoneCount() * sizeof(JointTransform);
    ImGui::PlotLines("RightFoot y", &all_sampled_joints[skel.getBoneIndex("RightFoot")].translation.y, samples, 0, NULL, FLT_MAX, FLT_MAX, ImVec2(0,0), stride);
    ImGui::PlotLines("RightToeBase y", &all_sampled_joints[skel.getBoneIndex("RightToeBase")].translation.y, samples, 0, NULL, FLT_MAX, FLT_MAX, ImVec2(0,0), stride);
    ImGui::PlotLines("LeftFoot y", &all_sampled_joints[skel.getBoneIndex("LeftFoot")].translation.y, samples, 0, NULL, FLT_MAX, FLT_MAX, ImVec2(0,0), stride);
    ImGui::PlotLines("LeftToeBase y", &all_sampled_joints[skel.getBoneIndex("LeftToeBase")].translation.y, samples, 0, NULL, FLT_MAX, FLT_MAX, ImVec2(0,0), stride);

### Use C++11 lambas with Combo/ListBox/Plot functions

_Update: Since 1.53 you can use`BeginCombo()/EndCombo()` and submit items yourself, which is more adequate than using Combo with a function._

    void SelectBoneByName(const char* label, int* bone_idx, const Skeleton* skeleton)
        ImGui::Combo(label, bone_idx,
            [](void* data, int idx, const char** out_text) { *out_text = skeleton->GetBoneName(idx); return *out_text != NULL; },
        (void*)skeleton, skeleton->GetBoneCount());

    ImGui::PlotLines("Sin", [](void*data, int idx) { return sinf(idx*0.2f); }, NULL, 100);
    ImGui::PlotLines("Cos", [](void*data, int idx) { return cosf(idx*0.2f); }, NULL, 100);

Bit awkward with sample indices to plot an actual math function. Ideally here we could introduce variants of plot that use all floats. Will probably add something.

Likewise for combo boxes, don't copy data around creating list of strings! Use a function to retrieve your data from whatever format it is naturally. The whole plot API is a little awkward and could be reworked along with adding some form of iterator scheme for sparse combo / list-box.

### Clone this wiki locally


[ ocornut ](https://github.com/ocornut) / ** [imgui](https://github.com/ocornut/imgui) ** Public

  * ### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/_history).

  * [ Notifications ](https://github.com/login?return_to=%2Focornut%2Fimgui) You must be signed in to change notification settings
  * [ Fork 11.6k ](https://github.com/login?return_to=%2Focornut%2Fimgui)
  * [ Star  72.2k ](https://github.com/login?return_to=%2Focornut%2Fimgui)

# [History](https://github.com/ocornut/imgui/wiki/_history) / About the IMGUI paradigm

## Revisions

Compare revisions

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Oct 3, 2025

[ebf7d8c](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/ebf7d8c122bf595b3c8aca6221d62a8b54430d6c)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Oct 2, 2025

[349a93f](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/349a93f469fc28e21101a18bfc70538a4902eb3c)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Sep 8, 2024

[8449109](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/8449109121cbd3a88104cb804710bf05475a0c42)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Sep 3, 2024

[cb2696c](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/cb2696cef64c89ed4901749b9361f0bdbf1f9723)

  * Sean Barrett's work

[ ocornut ](https://github.com/ocornut) committed Sep 3, 2024

[fc434f3](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/fc434f33fd6d8e2b87cf8701735fdab91393bb9b)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Sep 3, 2024

[7911d8c](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/7911d8c618bf6b2a8ce227253071aba876f5f5fb)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Jan 17, 2024

[6f563cf](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/6f563cf7ca9a102670ff93f6e74c71847a39799c)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Aug 25, 2023

[f1aa74b](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/f1aa74b704827693b924e450b4905b08239c4404)

  * corrected the declaration of m_SaveItem in RMGUI example

[ occcy ](https://github.com/occcy) committed Apr 26, 2023

[a03978a](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/a03978a2e5658383df4be1f2c58519e26251b415)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Jan 25, 2023

[e295c99](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/e295c9911b04865c7610607d69e06133112ccf1a)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Jan 25, 2023

[64338b3](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/64338b38002a41df1631cd4526873850a37aff95)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Jan 25, 2023

[ebe40c4](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/ebe40c46c9c7a2b4f5c4a7fa0bb90cdf9d78fc00)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Jan 25, 2023

[6007255](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/60072550fab67d73a2703768a6552d225911aab5)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Jan 25, 2023

[01aa9f5](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/01aa9f57ae6a20083ba960e43ae394e11d477f70)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Jan 25, 2023

[da99a0b](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/da99a0bf2d85dfe42a017d36563848c7abd3f13f)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Jan 25, 2023

[4958d48](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/4958d48e3268cad2d209cf801dc7783a34734b7b)

  * Links

[ ocornut ](https://github.com/ocornut) committed Jan 25, 2023

[9213dc9](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/9213dc95741499dab75984e8500e7cb4b6fffccc)

  * Added links to MollyRocket archives

[ ocornut ](https://github.com/ocornut) committed Jan 25, 2023

[b6fdab7](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/b6fdab7f0c92165197f03118cb4fec340edd82d6)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Sep 14, 2022

[95bc6ad](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/95bc6ad90ce1538c3bda7d457a4bda33541efc41)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Sep 14, 2022

[fbf1ff2](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/fbf1ff2fdf45527317407a59a3ac4d6397b7afc0)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Mar 29, 2022

[a7cad09](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/a7cad09f866c5c993d9950e562e168f778f4d85c)

  * Modeless writeup

[ ocornut ](https://github.com/ocornut) committed Mar 29, 2022

[fb7df1e](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/fb7df1ea0165d4914ff73005e48c01db3ebad7cf)

  * Fixed words coming in the wrong order. Removed question marks for reasons.

[ fishermans-friend ](https://github.com/fishermans-friend) committed Sep 24, 2021

[480b88b](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/480b88be65d7e2b58bc4f379d5ad77636c131f96)

  * Sean Barrett's article in Game Developer Magazine

[ ocornut ](https://github.com/ocornut) committed May 21, 2021

[839110f](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/839110f05df7dfee26ef9c480de00bf489eaba28)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Feb 18, 2021

[4da17a3](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/4da17a3396f3a2fb03198eb594a46006aa177144)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Feb 15, 2021

[b96cff4](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/b96cff43c9f9664c3e5a59c6a3ccb859d01a0aeb)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Feb 15, 2021

[e814164](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/e814164f58b8c0827d0461e581139c48293cf3f6)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Feb 15, 2021

[f436aa9](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/f436aa91d9bbf30db0348b602fdc6ea35858a95f)

  * Updated About the IMGUI paradigm (markdown)

[ ocornut ](https://github.com/ocornut) committed Feb 15, 2021

[5c38cc6](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/5c38cc6a6812fff344d63dfb9c1e7182e8469a7c)

  * Working on definition

[ ocornut ](https://github.com/ocornut) committed Feb 15, 2021

[9534bbc](https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm/9534bbca7269ee05d61670fab127f6f0ab9865fd)


[ ocornut ](https://github.com/ocornut) / ** [imgui](https://github.com/ocornut/imgui) ** Public

  * ### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/ocornut/imgui/wiki/Help-Wanted).

  * [ Notifications ](https://github.com/login?return_to=%2Focornut%2Fimgui) You must be signed in to change notification settings
  * [ Fork 11.6k ](https://github.com/login?return_to=%2Focornut%2Fimgui)
  * [ Star  72.2k ](https://github.com/login?return_to=%2Focornut%2Fimgui)

# Help Wanted

Jump to bottom

omar edited this page Jan 4, 2023 · [39 revisions](https://github.com/ocornut/imgui/wiki/Help-Wanted/_history)

Currently looking for help with those things.
**This is absolutely not a complete list** (there a millions of other things to do, see [Issues](https://github.com/ocornut/imgui/issues) and [docs/TODO.txt](https://github.com/ocornut/imgui/blob/master/docs/TODO.txt)), those are merely some suggestions of things I am particularly struggling with before I may not have the hardware or expertise. If you are motivated and want to help this project and the community there is almost certainly a spot for you :)

**Funding**

  * If your company uses Dear ImGui, please reach to [contact@dearimgui.com](mailto:contact@dearimgui.com).

**Documentation**

  * The wiki needs improvements.
  * How about creating visual gallery showcasing external widgets?
  * We need features overview pages describing Gamepad/Keyboard Navigation, Docking, Multi-Viewports, Tables etc. for users.
  * We need technical overview pages describing the same but from the point of view of programmers wanting to work on them.

**Community**

  * Helping to answer some [GitHub issues/threads](https://github.com/ocornut/imgui/issues) or [Discussions](https://github.com/ocornut/imgui/discussions)?

**Third-party Software**
If you are familiar or interested in GLFW, designing/developing/submitting those changes to GLFW would be great

  * **Linux/Mac: implement per-OS workarounds for other GLFW/SDL issues**, see <https://github.com/ocornut/imgui/issues/2117#issuecomment-465185644>
  * GLFW: Solve <https://github.com/glfw/glfw/issues/1236> in GLFW (transparent inputs) for portable multi-viewport support. OR implement per-OS workaround in imgui_impl_glfw.cpp. Done PR: <https://github.com/glfw/glfw/pull/1568>, Waiting for GLFW merge.
  * GLFW: implement/solve <https://github.com/glfw/glfw/issues/427> in GLFW (add missing diagonal resize mouse cursors).

**Features**

  * Viewport: The multi-viewport feature needs users/testers to move forward! (see [#1542](https://github.com/ocornut/imgui/issues/1542), available in `docking` branch`).
  * Viewport: In particular, Linux/OSX have issues and need some work from volunteers. See [#2117](https://github.com/ocornut/imgui/issues/2117).
  * Tables: Feedback wanted! See [#2957](https://github.com/ocornut/imgui/issues/2957).
  * Docking: Feedback wanted! See [#2109](https://github.com/ocornut/imgui/issues/2109).

**Platform/Renderer Backends**

  * Mac: imgui_impl_osx.mm need some love ([#1873](https://github.com/ocornut/imgui/issues/1873))
  * Mobile: Wanted imgui_impl_ios.cpp Platform Binding+Example for iOS (+ use existing renderer).
  * Web: Wanted imgui_impl_emscripten.cpp Platform Binding+Example for Emscripten (+ use existing renderer to create a new example). ([#336](https://github.com/ocornut/imgui/pull/336))
  * **Any of the third-party Unreal backend need multi-viewport support!**
  * **Any of the third-party Unity backend need multi-viewport support!**

**External Language Bindings**

  * Many language bindings are not kept up to date (see <https://github.com/ocornut/imgui/wiki/Links>)
  * Considering switching bindings to use the [dear_bindings](https://github.com/dearimgui/dear_bindings) or [cimgui](https://github.com/cimgui/cimgui) generated data so users of your framework/language can stay up to date without manual intervention.

### Clone this wiki locally


[ ocornut ](https://github.com/ocornut) / ** [imgui](https://github.com/ocornut/imgui) ** Public

  * ### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/ocornut/imgui/wiki/Error-Handling).

  * [ Notifications ](https://github.com/login?return_to=%2Focornut%2Fimgui) You must be signed in to change notification settings
  * [ Fork 11.6k ](https://github.com/login?return_to=%2Focornut%2Fimgui)
  * [ Star  72.2k ](https://github.com/login?return_to=%2Focornut%2Fimgui)

# Error Handling

Jump to bottom

omar edited this page Sep 30, 2024 · [7 revisions](https://github.com/ocornut/imgui/wiki/Error-Handling/_history)

Since Dear ImGui 1.91.3 we provide way to configure how to handle _SOME_ recoverable errors.

  * Error recovery is provided as a way to facilitate:
    * Recovery after a programming error (native code or scripting language - the later tends to facilitate iterating on code while running).
    * Recovery after running an exception handler or any error processing which may skip code after an error has been detected.
  * Error recovery is not perfect nor guaranteed! It is a feature to ease development. You are not supposed to rely on it in the course of a normal application run.
  * By design, we do NOT allow error recovery to be 100% silent. One of the three options needs to be checked!
  * Always ensure that on programmers seats you have at minimum Asserts or Tooltips enabled when making direct imgui API call! Otherwise it would severely hinder your ability to catch and correct mistakes!

Typical scenarios:

#### (1) Programmer seats (current default)

  * Recoverable errors will call `IM_ASSERT_USER_ERROR()`, leading to `IM_ASSERT()` being executed.
  * If you can resume execution from your assert, recovery will generally be performed.
  * If you can configure your assert to be ignored, recover will generally be performed and the error tooltip will be visible.

#### (2) Programmer seats (nicer/experimental)

  * Disable Asserts `io.ConfigErrorRecoveryEnableAssert=false` but keep Tooltips visible.
  * Recoverable errors will be visible in an error tooltip.
  * The error tooltip will allow user to enable asserts.
  * This implicitly rely on functional recovery. A few cases might probably still crash/assert. If this works well, we may make it the default in future versions.

#### (3) Non-programmer seats: what you might want to setup:

  * Use `io.ConfigErrorRecoveryEnableAssert=false`, but make sure log entries are well visible or reported somewhere.
  * If errors are not well resurfaced to programmers, it may hinder your ability to prevent errors from staying/spreading in the codebase. Use with caution!

#### (4) If you offer the ability to write Dear ImGui code via e.g. scripting language, you may want to:

  * Use `ErrorRecoveryStoreState()` to record stack sizes before running the script interpreter.
  * Use `io.ConfigErrorRecoveryEnableAssert=false` but only while in the context of the script interpreter.
  * Maybe trigger a script break from your `ErrorCallback` if you can.
  * Ensure that `io.ConfigErrorRecoveryEnableTooltip=true`! And that log entries are well surfaced and visible somewhere.

#### (5) To handle resuming code execution after an exception:

  * Use `ErrorRecoveryStoreState()` to record stack sizes before your try {} block.
  * Temporary adjust settings (e.g. disable assert, set a log callback).
  * Call `ErrorRecoveryTryToRecoverState()`.
  * Restore settings.

### API

In `ImGuiIO`:

    bool        ConfigErrorRecovery;                // = true       // Enable error recovery support. Some errors won't be detected and lead to direct crashes if recovery is disabled.
    bool        ConfigErrorRecoveryEnableAssert;    // = true       // Enable asserts on recoverable error. By default call IM_ASSERT() when returning from a failing IM_ASSERT_USER_ERROR()
    bool        ConfigErrorRecoveryEnableDebugLog;  // = true       // Enable debug log output on recoverable errors.
    bool        ConfigErrorRecoveryEnableTooltip;   // = true       // Enable tooltip on recoverable errors. The tooltip include a way to enable asserts if they were disabled.

### Manual stack state backup/restore

e.g.

    ImGuiErrorRecoveryState state;
    ImGui::ErrorRecoveryStoreState(&state);
    .... run scripting code
    ImGui::ErrorRecoveryTryToRecoverState(&state);

Exception handling:

    ImGuiErrorRecoveryState state;
    ImGui::ErrorRecoveryStoreState(&state);
    try
        .... run code
    catch
        ImGui::ErrorRecoveryTryToRecoverState(&state);

### Clone this wiki locally


[ ocornut ](https://github.com/ocornut) / ** [imgui](https://github.com/ocornut/imgui) ** Public

  * ### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/ocornut/imgui/wiki/Sponsors).

  * [ Notifications ](https://github.com/login?return_to=%2Focornut%2Fimgui) You must be signed in to change notification settings
  * [ Fork 11.6k ](https://github.com/login?return_to=%2Focornut%2Fimgui)
  * [ Star  72.2k ](https://github.com/login?return_to=%2Focornut%2Fimgui)

# Sponsors

Jump to bottom

omar edited this page Mar 17, 2024 · [85 revisions](https://github.com/ocornut/imgui/wiki/Sponsors/_history)

This section has been moved to [Funding](https://github.com/ocornut/imgui/wiki/Funding).

### Clone this wiki locally