This release includes 2 breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+1 more
ReleasePort's take
Light signalIn v1.92.800, three ImDrawList drawing functions now expect thickness before flags, and ImGuiColorTextEdit's TextEditor API renames column to index while introducing a DocPos struct for cursor/selection.
Why it matters: Update all calls to `add_rect`, `add_polyline`, and `path_stroke` with the new argument order; modify code that uses ImGuiColorTextEdit’s TextEditor API to reference `index` instead of `column` and adopt the DocPos struct before upgrading. Failure to adjust will cause compile‑time errors.
Summary
AI summaryArgument order swapped for three ImDrawList drawing functions and TextEditor API cursor/selection structs renamed.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Breaking | Medium |
`add_rect`, `add_polyline`, `path_stroke` argument order swapped; thickness first, flags last. `add_rect`, `add_polyline`, `path_stroke` argument order swapped; thickness first, flags last. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Breaking | Medium |
`TextEditor` API changed: column renamed to index, new DocPos struct used for cursor/selection. `TextEditor` API changed: column renamed to index, new DocPos struct used for cursor/selection. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
`ImGuiColorTextEdit` rebased on upstream future branch with layered architecture and new overlays. `ImGuiColorTextEdit` rebased on upstream future branch with layered architecture and new overlays. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Pyodide upgraded to version 0.29.4 with new WebGL bindings (`webgl.register_texture`, `webgl.unregister_texture`). Pyodide upgraded to version 0.29.4 with new WebGL bindings (`webgl.register_texture`, `webgl.unregister_texture`). Source: granite4.1:30b@2026-05-23-audit Confidence: low |
— |
| Feature | Low |
`imgui-node-editor` suppresses hover/active for widgets inside covered nodes and fixes popup positioning. `imgui-node-editor` suppresses hover/active for widgets inside covered nodes and fixes popup positioning. Source: granite4.1:30b@2026-05-23-audit Confidence: low |
— |
| Feature | Low |
`imgui-node-editor` link color now automatic based on light/dark theme; improved selection colors via `UpdateNodeEditorColorsFromImguiColors()`. `imgui-node-editor` link color now automatic based on light/dark theme; improved selection colors via `UpdateNodeEditorColorsFromImguiColors()`. Source: granite4.1:30b@2026-05-23-audit Confidence: low |
— |
| Feature | Low |
Playground added ImPlot demos, WebAudio minimal beep example, and improved loading UI (non-blocking banner, progress bar). Playground added ImPlot demos, WebAudio minimal beep example, and improved loading UI (non-blocking banner, progress bar). Source: granite4.1:30b@2026-05-23-audit Confidence: low |
— |
| Bugfix | Medium |
StackLayout now avoids inflating measured_size when no springs, fixing fractional-height alignment drift. StackLayout now avoids inflating measured_size when no springs, fixing fractional-height alignment drift. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Test Engine now catches Python exceptions in callbacks, reporting them as errors and continuing execution. Test Engine now catches Python exceptions in callbacks, reporting them as errors and continuing execution. Source: granite4.1:30b@2026-05-23-audit Confidence: low |
— |
| Bugfix | Medium |
Fixed `imgui_bundle.imgui.<submodule>` import issues (e.g., imgui.test_engine). Fixed `imgui_bundle.imgui.<submodule>` import issues (e.g., imgui.test_engine). Source: granite4.1:30b@2026-05-23-audit Confidence: low |
— |
| Bugfix | Medium |
Fixed SDL Python backends on Wayland (#463) and moved PyOpenGL Wayland workaround out of `imgui_bundle/__init__.py`. Fixed SDL Python backends on Wayland (#463) and moved PyOpenGL Wayland workaround out of `imgui_bundle/__init__.py`. Source: granite4.1:30b@2026-05-23-audit Confidence: low |
— |
| Bugfix | Low |
`imgui_test_engine` CrashHandler installs SA_RESETHAND on Unix to avoid abort() reentry spam. `imgui_test_engine` CrashHandler installs SA_RESETHAND on Unix to avoid abort() reentry spam. Source: granite4.1:30b@2026-05-23-audit Confidence: low |
— |
| Bugfix | Low |
ImmVision clamps images to prevent texture bleeding when dragged outside viewport and improves resize behavior in zoomed node editor. ImmVision clamps images to prevent texture bleeding when dragged outside viewport and improves resize behavior in zoomed node editor. Source: granite4.1:30b@2026-05-23-audit Confidence: low |
— |
Full changelog
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:
# 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:
The mask reserves bits 0-3 specifically to catch this swap: any smallRuntimeError: IM_ASSERT(... "Incorrect parameter. Did you swapped 'thickness' and 'flags'?")
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:
// 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:
# 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_error
on 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 is
NextWindowData.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_background
to 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.
Breaking Changes
- Swapped last two arguments of `add_rect`, `add_polyline`, and `path_stroke` methods on `imgui.ImDrawList` (thickness now precedes flags).
- Renamed `column` to `index` in cursor/selection structs; replaced integer line/column pairs with `TextEditor.DocPos(line, index)` objects for all position-related TextEditor calls.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About Full Python GUI apps in the browser
All releases →Related context
Related tools
Beta — feedback welcome: [email protected]