| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| imgui_bundle-1.92.8-cp313-cp313-pyemscripten_2025_0_wasm32.whl | 2026-05-13 | 5.0 MB | |
| srcs-full-v1.92.800.tar.gz | 2026-05-13 | 58.4 MB | |
| README.md | 2026-05-12 | 9.5 kB | |
| v1.92.800 source code.tar.gz | 2026-05-12 | 9.6 MB | |
| v1.92.800 source code.zip | 2026-05-12 | 10.0 MB | |
| Totals: 5 Items | 82.9 MB | 0 | |
v1.92.800
Updated Dear ImGui to v1.92.8
Breaking changes: add_rect, add_polyline, path_stroke argument order
Dear ImGui v1.92.8 swapped the last two arguments of three ImDrawList
drawing functions so that thickness (which is set explicitly far more
often than flags) comes first. The bindings track this change.
For Python users — the affected methods on imgui.ImDrawList:
| Method | Old signature | New signature |
|---|---|---|
add_rect |
(p_min, p_max, col, rounding, flags, thickness) |
(p_min, p_max, col, rounding, thickness, flags) |
add_polyline |
(points, col, flags, thickness) |
(points, col, thickness, flags) |
path_stroke |
(col, flags, thickness) |
(col, thickness, flags) |
If you use only positional arguments and pass 5+ of them, swap the last two:
:::python
# Before
draw_list.add_rect(p0, p1, col, rounding, imgui.ImDrawFlags_.none.value, 1.5)
draw_list.path_stroke(col, imgui.ImDrawFlags_.closed.value, thickness)
# After
draw_list.add_rect(p0, p1, col, rounding, 1.5, imgui.ImDrawFlags_.none.value)
draw_list.path_stroke(col, thickness, imgui.ImDrawFlags_.closed.value)
Old-order calls will not silently misrender — they are caught by one of three mechanisms:
- Static type-check (recommended). Running
mypyorpyrightonce after upgrading flags every call that passes a float literal where the new signature expectsflags: int:Argument of type "float" cannot be assigned to parameter "flags" of type "ImDrawFlags" in function "add_rect" - Runtime, float thickness. pybind11 refuses to convert
float→int, soadd_rect(..., flags=ALL, thickness=2.0)written in the old order raisesTypeErrorimmediately. - Runtime, int thickness. When both arguments are ints (e.g.
thickness=2), the swapped value lands inflagsand trips ImGui's own guard(flags & ImDrawFlags_InvalidMask_) == 0, raising:RuntimeError: IM_ASSERT(... "Incorrect parameter. Did you swapped 'thickness' and 'flags'?")The mask reserves bits 0-3 specifically to catch this swap: any small integer thickness ends up with bits 0-3 set, while every valid flag uses only bits 4-9.
In practice this covers every realistic old-order call site, so no extra detection layer is added on the Python side.
For C++ users — same swap on ImDrawList::AddRect, ImDrawList::AddPolyline
and ImDrawList::PathStroke. See the upstream ImGui v1.92.8 changelog for
the full rationale; the short version is that the typical call site changes
from:
:::cpp
// Before
draw_list->AddRect(p_min, p_max, col, rounding, ImDrawFlags_None, border_size);
// After
draw_list->AddRect(p_min, p_max, col, rounding, border_size);
When IMGUI_DISABLE_OBSOLETE_FUNCTIONS is off (the default), ImGui keeps an
inline redirection so old call sites still compile; with it on (as in the
ImGui Bundle Python build), the old overloads are =delete, surfacing
mistakes at compile time.
Updated ImGuiColorTextEdit (architecture refactor)
ImGuiColorTextEdit was rebased on its upstream future branch, which
introduces a layered architecture (Document / TypeSetter / Colorizer /
Bracketeer / LineFold / MiniMap / AutoComplete overlays) and lays the
groundwork for word wrap, line folding, and a VSCode-style minimap.
The public C++ API changed in ways that propagate to the Python bindings.
All cursor/selection coordinates now go through dedicated structs instead
of (line, column) integer pairs, and column is renamed to index in
the document-coordinate struct (rows differ from lines once word-wrap is
enabled).
Breaking changes: TextEditor API
For Python users — the most common call sites:
| Before | After |
|---|---|
editor.get_main_cursor_position().column |
editor.get_main_cursor_position().index |
editor.set_cursor(line, col) |
editor.set_cursor(TextEditor.DocPos(line, col)) |
editor.select_region(sl, sc, el, ec) |
editor.select_region(TextEditor.DocPos(sl, sc), TextEditor.DocPos(el, ec)) |
editor.get_word_at_screen_pos(pos) |
editor.get_word_at_mouse_pos(pos) |
editor.grow_selections_to_curly_brackets() |
editor.grow_selections() |
editor.shrink_selections_to_curly_brackets() |
editor.shrink_selections() |
editor.get_first_visible_line() / get_last_visible_line() |
editor.get_first_visible_row() / get_last_visible_row() |
Context-menu and hover callbacks now receive a PopupData object instead
of (line, column) integers:
:::python
# Before
def text_context_menu(line: int, column: int):
...
editor.set_text_context_menu_callback(text_context_menu)
def line_number_context_menu(line: int):
...
editor.set_line_number_context_menu_callback(line_number_context_menu)
# After
def text_context_menu(data: TextEditor.PopupData):
line, column = data.pos.line, data.pos.index
...
def line_number_context_menu(data: TextEditor.PopupData):
line = data.pos.line
...
For C++ users — same shape, with TextEditor::DocPos{line, index} and
TextEditor::PopupData& data. Line/column counters are now size_t (use
%zu in printf-style format strings).
Test Engine: safer Python integration
- Catch Python exceptions in
test_func/gui_func/teardown_func. Previously a Python exception in one of these callbacks propagated asnanobind::python_erroron the engine's coroutine thread, hitstd::terminate, and killed the process (taking remaining queued tests with it). Exceptions are now printed as a traceback, reported viaImGuiTestEngine_Error(test marked asTestStatus.error), and swallowed so the engine continues. imgui_test_engineCrashHandler: installSA_RESETHANDon *nix to avoid abort() reentry spam.- Fix
imgui_bundle.imgui.<submodule>imports (e.g.imgui.test_engine).
imgui-node-editor
- Suppress hover/active for widgets inside a node that is covered by another node.
- Fix popup position for
ComboandColorEditinside the node editor canvas (three coords needed canvas→screen translation; the right guard isNextWindowData.HasFlags, notWindowFlags). - Link color now automatic, based on light vs dark theme.
UpdateNodeEditorColorsFromImguiColors(): improve colors, especially selection colors.- README: documented keyboard/mouse interactions; added doc in the header.
ImmVision
- Clamp images so their texture does not bleed when dragged completely outside the viewport.
- Improved resize: widget size, contrast, and behavior in a zoomed node editor.
ImGui (StackLayout patch)
- StackLayout: don't inflate
measured_sizewhen the layout has no springs (fixes fractional-height alignment drift in some layouts).
Pyodide / Playground
- Switched to pyodide 0.29.4.
- New WebGL binding for Pyodide:
webgl.register_texture/webgl.unregister_texture. Use it inside HelloImGui'scustom_backgroundto upload textures produced from JS-sideWebGL2RenderingContext. Seepyodide_projects/projects/playground/examplesfor documented examples. - Playground: added documented WebGL examples, source link on the minimal example, and restore the landing page on browser back-to-root.
- Added
implot_demo,implot3d_demo, andimgui_demoto the playground. - New "WebAudio minimal beep" example demonstrating browser audio from Python.
- Save Python code to a file before running it (for nicer tracebacks).
- Per-file deployment of demo source into the Emscripten FS
(
imgui_bundle_add_demo.cmake). - Non-blocking loading banner over the canvas, with explanatory text, smooth time-based progress, rotating tips, and a lazy pendulum video.
- Smooth progress bar for per-demo wheel installs; snap back to 0 when the banner reopens.
- Pyodide + LaTeX: fix issues on consecutive runs.
min_pyodide_app: log errors to the JS console.
Python backends
- Fix SDL python backends on Wayland (#463).
- Move the PyOpenGL Wayland workaround out of
imgui_bundle/__init__.py(#321, [#463]): applied only by the affected backends.
Full Changelog: https://github.com/pthom/imgui_bundle/compare/v1.92.700...v1.92.800