Skip to content

v1.92.900

Latest

Choose a tag to compare

@pthom pthom released this 14 Aug 13:05
· 1 commit to main since this release
a69e34a

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 only

Text 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: write imgui.get_io().config_color_edit_flags = flags instead.
  • imgui.DragDropFlags_.source_auto_expire_payload (obsoleted in 2024) was removed: use payload_auto_expire.

Other additions

  • imgui.open_popup() and imgui.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() and io.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_months can discard stale ones (see also io.config_ini_settings_save_last_used_date).

New: terminal emulator widget for Python (imgui_bundle.imgui_terminal)

image

A pyte-based terminal emulator widget, usable in any ImGui Bundle app:

  • TerminalView renders 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: LocalShellTransport runs a local shell behind a pty (POSIX); the demos add SSH and websocket transports implementing the same two-method TerminalTransport protocol.
  • Requires the pyte package: pip install "imgui-bundle[terminal]".
  • See demo_terminal.py in the demo launcher (tab bar with multiple sessions, confirm-exit dialog), and demos_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 managers

Available 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 future branch.
    • Breaking: render() lost its border: bool parameter, replaced by child_flags: ImGuiChildFlags and window_flags: ImGuiWindowFlags (a former render(id, size, False) call becomes render(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).
  • 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.
  • Hello ImGui:

    • new runner_params.callbacks.confirm_exit (return False to cancel an exit request).
    • HighDPI font scaling now goes through style.font_scale_dpi instead of multiplying font sizes at load time (finalizes the ImGui 1.92 transition).
    • asset_file_full_path also searches the current folder.
    • added BeforeSwap callback.
  • imspinner: updated to the 2026 version, with many new spinners (#483).

  • ImGuizmo: upstream bug fixes (gizmo jitter, multi-view, is_over for 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_colors and marker_* 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.
  • ImPlot:

    • imgui_ctx.push_font: the font_size_base_unscaled parameter is now mandatory, in line with imgui.push_font since ImGui 1.92.
  • immapp.testing.run: test engine failures (e.g. "Unable to locate item") now raise a RuntimeError carrying the engine log, instead of being silently swallowed (new raise_on_error=True parameter); engine errors are also
    printed live to the terminal.

  • imgui_fig (matplotlib figures): works with any matplotlib backend (no need to call matplotlib.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