Updated Dear ImGui to v1.92.9b
See release info for v1.92.9 and v1.92.9b
(includes the post-release fix for ImDrawData::CmdListsCount).
Behavior change: keyboard edits of scalar widgets apply on validation
Typing a value into InputInt, InputFloat, DragXXX or SliderXXX no longer writes intermediate values to the backing variable at each keystroke: typing "123" now yields a single change to 123 on Enter / tab-out / deactivation, instead of 1, then 12, then 123. In Python:
changed, value = imgui.input_int("int", value) # changed becomes True on validation onlyText inputs keep the previous behavior. Both are configurable via the new imgui.ItemFlags_.live_edit_on_input_scalar / live_edit_on_input_text with imgui.push_item_flag(); see "Widgets/Live Edit Flags" in the demo.
Breaking changes
imgui.set_color_edit_options(flags)was removed: writeimgui.get_io().config_color_edit_flags = flagsinstead.imgui.DragDropFlags_.source_auto_expire_payload(obsoleted in 2024) was removed: usepayload_auto_expire.
Other additions
imgui.open_popup()andimgui.open_popup_on_item_click()now return a bool (True when the popup was just opened).imgui.get_item_clicked_count_with_single_click_delay()andio.mouse_single_click_delay: disambiguate single-click from double-click.imgui.ColorEditFlags_.picker_no_rotate: fix the S/V triangle in the hue-wheel picker.- Settings aging: ini entries record their last-used date;
io.config_ini_settings_auto_discard_monthscan discard stale ones (see alsoio.config_ini_settings_save_last_used_date).
New: terminal emulator widget for Python (imgui_bundle.imgui_terminal)
A pyte-based terminal emulator widget, usable in any ImGui Bundle app:
TerminalViewrenders a VT100 screen and handles keyboard and mouse input: word/line selection, right-click paste, Alt as Meta, and correct handling of modified keys (Shift-Tab, Ctrl-Space, modified arrows).- A transport feeds bytes to the view:
LocalShellTransportruns a local shell behind a pty (POSIX); the demos add SSH and websocket transports implementing the same two-methodTerminalTransportprotocol. - Requires the
pytepackage:pip install "imgui-bundle[terminal]". - See
demo_terminal.pyin the demo launcher (tab bar with multiple sessions, confirm-exit dialog), anddemos_python/demos_terminal/for the local shell, SSH and websocket variants.
New: context managers for ImPlot (imgui_bundle.implot_ctx)
Python-only, in the same spirit as imgui_ctx: implot_ctx wraps the begin/end and push/pop pairs of ImPlot, so the matching end_*()/pop_*() is called automatically.
from imgui_bundle import implot, implot_ctx
with implot_ctx.begin_plot("My Plot") as plot:
if plot: # the plot may be collapsed or clipped
implot.plot_line("cos", x, y)
with implot_ctx.push_colormap(implot.Colormap_.cool):
... # no need to test the value of the push_* context managersAvailable for create_context, begin_plot, begin_subplots, push_style_color, push_style_var, push_colormap and
push_plot_clip_rect.
See demo_python_context_manager in the demo launcher. Contributed by @zaicruvoir1rominet (#473).
Updated bundled libraries
-
ImGuiColorTextEdit:
- followed upstream's merge of its
futurebranch. - Breaking:
render()lost itsborder: boolparameter, replaced bychild_flags: ImGuiChildFlagsandwindow_flags: ImGuiWindowFlags(a formerrender(id, size, False)call becomesrender(id, size)). - Also adds configurable left margins (
set_line_number_left_margin,set_decoration_left_margin,set_text_left_margin) - improved minimap rendering (width is now automatic, tunable via
set_mini_map_columns).
- followed upstream's merge of its
-
imgui-node-editor:
- configurable background grid size via
StyleVar.grid_size(#470) - fixed incomplete rendering of popups.
- Via the bundled ImGui patch, multiline text inputs inside the editor now render a preview box with a resizable edit popup.
- configurable background grid size via
-
Hello ImGui:
- new
runner_params.callbacks.confirm_exit(return False to cancel an exit request). - HighDPI font scaling now goes through
style.font_scale_dpiinstead of multiplying font sizes at load time (finalizes the ImGui 1.92 transition). asset_file_full_pathalso searches the current folder.- added BeforeSwap callback.
- new
-
imspinner: updated to the 2026 version, with many new spinners (#483).
-
ImGuizmo: upstream bug fixes (gizmo jitter, multi-view,
is_overfor SCALEU, disappearing translation axis). -
ImPlot3D: legend scrolling.
-
imgui_toggle: build fix against recent ImGui merged upstream (our fork now carries no patches).
-
ImGui Test Engine: updated (test-suite amendments for the LiveEdit change).
-
ImmVision: added ImageInterpolationMode setting
Python API: behavior changes and fixes
-
ImPlot / ImPlot3D:
- mismatched dtypes now raise.** Plot functions that take several numeric arrays (e.g.
implot.plot_scatter(xs, ys)) now raise a clear error when the arrays have different dtypes, instead of silently reinterpreting one array's bytes (an int64 index plotted against float64 values used to collapse to x=0). The error names both dtypes and suggests.astype(...)(#467). - ImPlotSpec / ImPlot3DSpec array fields fixed (#484): the
line_colors,fill_colorsandmarker_*setters stored only a raw pointer, so a temporary array could be garbage-collected before rendering (wrong colors or crash), and the getter returned a pointer address instead of the array. Arrays are now kept alive for the Spec's lifetime, and the getter returns the ndarray.
- mismatched dtypes now raise.** Plot functions that take several numeric arrays (e.g.
-
ImPlot:
imgui_ctx.push_font: thefont_size_base_unscaledparameter is now mandatory, in line withimgui.push_fontsince ImGui 1.92.
-
immapp.testing.run: test engine failures (e.g. "Unable to locate item") now raise aRuntimeErrorcarrying the engine log, instead of being silently swallowed (newraise_on_error=Trueparameter); engine errors are also
printed live to the terminal. -
imgui_fig(matplotlib figures): works with any matplotlib backend (no need to callmatplotlib.use("Agg")anymore), fixes a crash with animated figures on matplotlib 3.11, and captures HiDPI/retina figures at the correct size.
Alpine linux wheels (musllinux): fixed ImportError
- musllinux (Alpine) wheels could not be imported at all (
Error relocating ...: glPopAttrib: symbol not found): musl's loader resolves all symbols at import time, and the wheel was missing its libGL link. musllinux wheels are now built without the legacy OpenGL2 python backend (ImGui_ImplOpenGL2_*bindings), removing the link-time OpenGL dependency; the OpenGL3 backend is unaffected.
Pyodide: switched to Pyodide 314 (Python 3.14); wheels now published on PyPI
- The Pyodide wheel now targets Pyodide 314.x: Python 3.14, Emscripten 5.0.3, wheel tag
cp314-cp314-pyemscripten_2026_0_wasm32. - Thanks to PEP 783, Pyodide wheels are now published on PyPI (starting with v1.92.801): in a Pyodide 314+ environment,
micropip.install("imgui-bundle")installs imgui_bundle directly from PyPI. - The playground and the minimal sample were updated accordingly.
Demos
demo_chinese_font(Python + C++): how to display non-Latin text (Chinese glyphs, font loading).demo_glfw_window_manip(Python): manipulate the native GLFW window of an immapp application (maximize, center, opacity, request attention).
New Contributors
Full Changelog: v1.92.801...v1.92.900