Releases: pthom/imgui_bundle
v1.92.801
v1.92.800
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.
Full Changelog: v1.92.700...v1.92.800
v1.92.700
Updated Dear ImGui to v1.92.7
imgui-bundle.pages.dev
The docs and demos were relocated to a new and faster server, with new URL addresses. The new URL are also much easier to remember.
- Home: https://imgui-bundle.pages.dev/
- Documentation: https://imgui-bundle.pages.dev/doc
- ImGui Bundle Explorer: https://imgui-bundle.pages.dev/explorer/
- Playground: https://imgui-bundle.pages.dev/playground/
(Note: all previous url will now automatically redirect to the new urls)
Markdown Renderer Improvements
Added LaTeX math rendering
LaTeX math is now supported in the Markdown renderer, using the new imgui_microtex library (native rendering via MicroTeX + FreeType). Enable it with AddOnsParams.with_latex = True.
- Inline
$...$and display$$...$$math in Markdown - Python bindings for
imgui_microtex - Pyodide: lazy-download LaTeX fonts via jsdelivr
- Frame-generation cache eviction (default 60 frames)
Markdown: HTML and CommonMark extensions
- Task lists:
- [ ]/- [x] - GitHub-style admonitions:
> [!NOTE],> [!WARNING],> [!TIP], etc. - Permissive autolinks (bare URLs become links; opt-out available)
- Inline HTML spans:
<sub>,<sup>,<kbd>,<mark>, plus anOnHtmlSpancallback for custom spans <details>/<summary>collapsibles<pre>blocks<img>tags with width/height, async download (desktop via libcurl, Pyodide via JS fetch)
Other Markdown improvements
- Fix word wrapping issues around transitions between bold/italic and normal
- Make spacing between blocks, headers and paragraphs more coherent
- Adaptive code snippet colors: new
SnippetTheme::Autopicks dark or light based on current ImGui theme - TextEdit no longer shows a caret in coded blocks.
Pyodide / Playground
- Improved online playground
- Clipboard support (SDL2 + Emscripten)
immapp.download_url_bytes/immapp.download_url_bytes_async- Pin pyodide-build version to pyodide version
- Lazy import for pydantic types
- numpy is now optional (no runtime dependency)
ImPlot v1.0 - Per-index color/size support
- Updated ImPlot to v1.0
ImPlotSpec: numpy array support for per-index color/size fields (fill_colors,line_colors,marker_fill_colors,marker_line_colors,marker_sizes)
ImPlot3D v0.4 - Per-index color/size support
- Updated ImPlot3D to v0.4
ImPlot3DSpec: same numpy array fields as ImPlot- New Python demo: Per-Index Colors (colorful lines, scatter, triangles, quads, Gouraud-shaded duck)
- Refactored Custom Per-Point Style demo to use batched per-index arrays
ImGuiColorTextEdit: switched to goossens rewrite (breaking API changes)
Replaced the santaclose-based ImGuiColorTextEdit with the complete rewrite by Johan A. Goossens. This brings a cleaner architecture, proper UTF-8 support, C++17, no regex/boost dependency, and many new features.
New features
- Find/replace UI with keyboard shortcuts
- Text markers (colored line highlights with tooltips)
- Bracket matching with visual indicators
- Line decorators (custom gutter content per line)
- Context menu callbacks (separate for line numbers and text area)
- Change and transaction callbacks
- Filter selections/lines (transform text via callbacks)
- Autocomplete framework
- TextDiff widget (combined and side-by-side diff view)
- Many more languages (C#, JSON, Markdown, AngelScript)
Breaking API changes (Python)
| Old | New |
|---|---|
TextEditor.PaletteId.dark |
TextEditor.get_dark_palette() |
TextEditor.PaletteId.light |
TextEditor.get_light_palette() |
TextEditor.PaletteId.retro_blue |
(removed) |
TextEditor.PaletteId.mariana |
(removed) |
TextEditor.LanguageDefinitionId.cpp |
TextEditor.Language.cpp() |
set_language_definition(id) |
set_language(Language.cpp()) |
set_cursor_position(line, col) |
set_cursor(line, col) |
set_view_at_line(line, mode) |
scroll_to_line(line, alignment) |
get_selected_text(cursor) |
get_cursor_text(cursor) |
get_cursor_position() -> TextPosition |
get_main_cursor_position() -> CursorPosition |
render(title, border, size) -> bool |
render(title, size, border) -> None |
undo(steps) / redo(steps) |
undo() / redo() (no steps) |
SnippetTheme.retro_blue / .mariana |
(removed) |
To detect text changes, use set_change_callback(callback, delay_ms) instead of the old render() return value.
See the breaking changes note at the top of imgui_color_text_edit.pyi for a quick summary.
Breaking API changes (C++)
Same renames as Python (CamelCase). Additionally:
Render()parameter order changed:(title, size, border)instead of(title, border, size)Render()returnsvoidinstead ofbool
hello_imgui
- Add
emscriptenAllowBrowserZoomShortcutspreference: forward browser zoom shortcuts (Ctrl+/Ctrl-) to the browser, true by default - Add
ImageAndSizeFromEncodedDataandLoadImageDataFromEncodedDatafor loading images from in-memory encoded data IniFolderLocationon Emscripten: return""forCurrentFolder,"/"for othersLoadDefaultFont_WithFontAwesomeIcons: log a message if the icon font file is not found (instead of silently failing)- Skip
TearDownif it already ran at exit (e.g. if it threw an exception itself) - Suppress GCC false positive
-Wstringop-overflowin stb_image - Document theming API
Test Engine: interaction and screenshot tooling
New helpers for driving an ImGui app from Python (or C++) and capturing screenshots, useful for visual self-validation and automated testing.
- New
immapp.testingmodule: high-level helpers to interact with widgets and capture screenshots - Bind
imgui_capture_tool.hfor Python; addCaptureSetFilename HelloImGui::OpenglScreenshotRgb: report an explicit error if capture fails
ImmVision
- Fix colormap rendering for single-channel images
- Improve draw pixel values: better text contrast against background
- Fix zoom synchronization between linked views
- Polish overall look
- Add license file
Other library updates
- Updated ImCoolBar, ImGuizmo, ImAnim, nanovg, ImFileDialog, imgui_tex_inspect, md4c
Build & CI
- MSVC: add
/bigobjfor implot (fixes Windows ARM64 wheel build) - CMake: refuse in-source builds
- CI: add win64 wheels, bump cibuildwheel/pypi-publish/deploy-pages/upload-pages-artifact
- Fix ImGui StackLayout fractional-height alignment drift
Python bindings & API fixes
- Expose
TextFilter.input_bufproperty (#451) imgui_explorer: showim_anim.pyiin Python (#406)- Fix
get_style_color_vec4/color_convert_rgb_to_hsvbindings register_demos_assets_folder()helper- async runners: fix an issue where immapp.run_async could use 100% CPU (cf #460)
Documentation
- Developer docs: fork management, justfile workflows, bindings, Pyodide
- FAQ review, Nuitka compatibility docs
- Interactive explorable demos
Full Changelog: v1.92.601...v1.92.700
v1.92.601
ImmVision: OpenCV is now optional / use GPU rendering pipeline
ImmVision no longer requires OpenCV: this way the compilation and installation of the library is much faster, and the resulting binaries are smaller.
All image processing (color conversion, statistics, alpha blending, drawing annotations, zoom/pan transform, image saving) has been reimplemented without OpenCV dependencies.
- New core types:
ImageBuffer,Point,Point2d,Size,Matrix33dreplacecv::Matand OpenCV geometric types in all public APIs - Zero-copy interop: When OpenCV is available (
IMMVISION_HAS_OPENCV),cv::Matconverts seamlessly to/fromImageBuffervia implicit constructors - Python: No change for Python users — ImmVision continues to use numpy arrays (the
cvnp_nanobridge has been removed) - Drawing primitives: Custom bitmap font and Bresenham drawing replace OpenCV's
putText,line,ellipse,rectangle - Image saving: Uses
stb_image_write(PNG/JPG/BMP/TGA/HDR) instead ofcv::imwrite - Zoom/pan: Custom implementation with nearest, bilinear, and area-based downscaling
- ImmDebug API change:
ImmDebug()now assumes RGB (the common default); useImmDebugBgr()for OpenCV BGR images. Fixed per-image color order handling in the viewer. - Smaller wheels: ~16% size reduction across all platforms (45 MB total savings)
- Faster CI builds: 5–8 minutes faster per platform (no more OpenCV compilation)
- New features: colormap support for single-channel integer images, multithreaded pixel drawing/resize, fixed watched pixel delete button visibility
The ImmVision rendering pipeline has been rewritten to use GPU texture sampling and ImGui DrawList:
- GPU zoom/pan: Image uploaded to GPU texture once (with mipmaps); pan/zoom handled via UV coordinates — no more per-frame CPU warp
- Mipmap filtering:
GL_NEARESTat high zoom (pixel-perfect),GL_LINEARfor moderate zoom,GL_LINEAR_MIPMAP_LINEARfor downsampling (high-quality anti-aliasing) - DrawList annotations: Grid lines, pixel values, and watched pixel markers drawn via ImGui DrawList in screen space (TrueType font replaces bitmap font)
- DrawList backgrounds: School paper and alpha checkerboard rendered via DrawList (no longer composited into texture)
- Inspector redesign: Horizontal filmstrip with scrolling and adjustable thumbnail size replaces the old vertical listbox
- Other fixes: "Export colormap image" now available for uint8 images with colormap; save dialog remembers last directory
demo_imgui_bundle (aka "Dear ImGui Bundle Explorer")
- Display version and compilation time at startup (C++, emscripten and Python versions)
- Python demo code is also shown in the python version (when installed from Pypi)
hello_imgui
- Fix potential memory error in font handling (
_LoadFontImpl: pass font buffer allocated withIM_ALLOC) - Add
HelloImGui::LoadImageDataFromAsset()— decode an image from assets into CPU memory (C++ only) - Compile
imgui_impl_metal.mmandMetalNanoVGwith-fobjc-arc(fixes ARC bridge cast warnings) - Workaround plutovg
file(RELATIVE_PATH)error with relativeCMAKE_INSTALL_PREFIX(scikit-build-core)
Build & warnings cleanup
We are now at zero-warnings, on all CI / platforms and configs.
- CMake: fetch freetype & plutovg with
EXCLUDE_FROM_ALL - CMake: fix ImAnim exclusion when
IMGUI_BUNDLE_WITH_IMANIM_FULL_DEMOSis off - CMake:
ibd_add_this_folder_as_demos_librarynow linksdemo_utils(fixes GCC linker error) - CMake: suppress Apple ld duplicate library warnings
- CMake: suppress third-party warnings (ImAnim:
-Wno-unused-result,-Wno-nontrivial-memaccess; plutosvg:-Wno-deprecated-declarations) - CMake: normalize install path (
./lib/→lib) to fix CMP0177 warning - Fix
ImFileDialogu8pathdeprecation warning (C++20 compatibility) - Fix GCC
-Wformat-truncationwarning indemo_imgui_bundle_intro.cpp
Contributors
Full Changelog: v1.92.600...v1.92.601
V1.92.600
v1.92.600
Based on ImGui v1.92.6 & hello_imgui v1.92.6.
Dear ImGui Explorer
Dear ImGui Explorer (formerly "imgui_manual") has been rewritten from scratch and integrated into the Dear ImGui Bundle repository. It was previously a standalone project; Dear ImGui Bundle is now its parent repository.
It provides interactive manuals for ImGui, ImPlot, ImPlot3D, and ImAnim — with side-by-side C++/Python code, syntax highlighting, and search in API reference files (headers, Python stubs).
- Follow source: click on any demo widget to jump to its source code
- Search across API files with Ctrl+Shift+F
- Lazy-load demo code files (desktop and Emscripten)
- Deployed at pthom.github.io/imgui_explorer
Dear ImGui Bundle Explorer (formerly "ImGui Bundle Interactive Manual")
The interactive manual has been renamed to Dear ImGui Bundle Explorer and significantly enhanced:
- New intro tab with a carousel of 7 interactive slides showcasing the ecosystem
- Deployed at traineq.org/imgui_bundle_explorer
New library: ImAnim
Added ImAnim, a tweening and animation library for ImGui.
- Available via
immapp.run(..., with_im_anim=True)/ImmApp::AddOnParams::withImAnim - Python API adapted for
get_float,get_vec2,get_color, etc.
Updates to libraries
- Update imgui to v1.92.6-docking
- Update hello_imgui to v1.92.6
- Update implot to latest version (breaking change: added
ImPlotSpec, removed plot item styling) - Update implot3d to latest version (breaking change: added
ImPlot3DSpec) - Update ImGuiColorTextEdit: line numbers always visible in separate gutter, improved selection colors
- Update imgui_knobs: added
SetKnobColors,UnsetKnobColors, default color adapts to light/dark theme - Update imgui_md: render tables using ImGui tables (resizable columns), delay before showing link hrefs
Python: Async run and notebook support
- Added
hello_imgui.run_async()/immapp.run_async()for async/await support (with maximal performance). See doc for async - Added
immapp.nbmodule for non-blocking Jupyter notebook execution (nb.start(),nb.stop(),nb.is_running()). See doc for notebook - Added
hello_imgui.nbconvenience module
Pyodide (web) support
- Added Docker build system for Pyodide wheels
run()is fire-and-forget in Pyodide; userun_async()for awaitable behavior- CI workflow for Pyodide builds
- Pyodide wheels now exclude demo code to reduce size
Python bindings
- Added
em_size()andem_to_vec2()at root ofimgui_bundlefor DPI-independent sizing - Added
__getitem__/__setitem__(subscript[]) for ImVec2 and ImVec4 - Configurable wheel builds with selective module inclusion
- Fix: accept read-only numpy arrays (e.g. from pandas) in nanobind bindings
hello_imgui improvements
- Added
AddAssetsSearchPath()/ClearAssetsSearchPaths()/GetAssetsSearchPaths()for multi-folder asset resolution at runtime - Added
topMostwindow attribute - Added
iniDisableandiniClearPreviousSettingsparams - Added
FpsIdling::vsyncToMonitorandFpsIdling::fpsMaxsettings - Added
theme_changedcallback - Fix: ManualRender RunnerParams lifetime management
Build & CI
- Added ARM Linux (aarch64) wheel builds using native
ubuntu-24.04-armrunners - Reduced Emscripten .data sizes: demos only bundle the assets they actually need
- Deduplicated demo assets (removed ~1.1M of files duplicated between
assets/anddemos_assets/) - Emscripten: use GLFW3 backend by default instead of SDL2
- Fix: shell injection in BrowseToUrl (replaced
system()withfork+execlp)
Documentation
- Complete documentation overhaul using Jupyter Book, available as PDF
- Added developer documentation (building, bindings, repo structure)
Full Changelog: v1.92.5...v1.92.600
v1.92.5
This version is based on ImGui v1.92.5 & hello_imgui v1.92.5.
Updates to libraries
- Updates imgui to v1.92.5-docking
- Update imgui_test_engine to v1.92.5
- update hello_imgui to v1.92.5
- update implot to latest version
- update implot3d to latest version
- update ImGuizmo to latest version
- update ImCoolbar to latest version
Python bindings
- most pip dependencies are now optional: only numpy is required. Pydantic, PyOpenGL, glfw, Pillow, matplotlib, and opencv-python are optional (if you use features that require them)
- Vec2Protocol and Vec4Protocol are iterable / unpackable
- import immapp_notebook.run_nb only if IPython is installed
- option IMGUI_BUNDLE_PYTHON_DISABLE_OPENGL2 (Off by default): can disable Python backend support for OpenGL2
- Update wgpu example to use wgpu latest API (compatible with v1.92)
- Implot & ImPlot3d: fix bindings for setup_axis_ticks
Tooling
- Fix pyodide build (force build sdl2 and libthtml5 with -fPIC)
Full Changelog: v1.92.4...v1.92.5
v1.92.4
v1.92.4
This version is based on ImGui v1.92.3, and brings some small fixes.
- InputTextMultiline: when inside imgui-node-editor, improve handling of single preview
- imgui-node-editor: solve clipping issue which occur when a popup is open inside a node
New Contributors: @XenoAmess made their first contribution in #393 (Fallback for __file__ in Pyodide demo)
Full Changelog: v1.92.3...v1.92.4
v1.92.3
Updates to libraries
ImGui:
- Updates imgui and imgui_test_engine to v1.92.3
hello_imgui:
- update to v1.92.3
- add SetLoadAssetFileDataFunction (and python binding): a way to customize asset loading
imgui_md:
imgui-knobs, ImGuizmo, imgui_toggle:
- update to latest version
ImGuiColorTextEdit:
- update to latest version (from santaclose fork)
Python bindings:
ImGui bindings:
- ImGui Enums now use 'enum.IntFlag'
(This impacts only the typing checks, not the runtime behavior)
This means that you may replace code like:
imgui.WindowFlags_.no_collapse.value | imgui.WindowFlags_.no_decoration.valuewith:
imgui.WindowFlags_.no_collapse | imgui.WindowFlags_.no_decoration- imgui.push_font (accepts optional font)
- Improve typing for ImVec2 and ImVec4 (use different protocols. Thanks to @joegnis)
Pure Python Backends
Pure Python Backends
- Fix pygame backend (thanks Dom Ormsby)
- Fix issue when pasting with glfw backend (thanks to @sunsigil)
Other
- ImGuizmo:handle deltaMatrix / document Manipulate API
What's Changed
- Update PygameRenderer by @d-orm in #372
- Uses different protocols for Python binding class ImVec2 and ImVec4 by @joegnis in #374
New Contributors
- @d-orm made their first contribution in #372
- @joegnis made their first contribution in #374
- @sunsigil made their first contribution in #388
Full Changelog: v1.92.0...v1.92.3
v1.92.0
Starting with v1.92.0, version numbers are now synced between "Dear ImGui", "Hello ImGui" and "Dear ImGui Bundle"
ImGui
Use ImGui v1.92.0: Scaling fonts & many more (big release)
This is a big release for ImGui.
TLDR: Fonts may be rendered at any size. Glyphs are loaded and rasterized dynamically. No need to specify ranges, prebake etc. GetTexDataAsRGBA32() is now obsolete.
- Many Font related changes: this release brings many changes on the ImGui side : do read the ImGui release notes
Python bindings
- Potentially breaking change for extern pure Python backends:
font_atlas_get_tex_data_as_rgba32was removed (read the advice below) - Font-related changes, following ImGui v1.92.0
- Fix ImPlot stubs (thanks @tlambert03)
- Fix imgui_ctx and imgui_node_ctx
- pure python backends: split opengl implems, implement texture update in python pure opengl backends
- imgui bindings => publish texture related infos
Advice for extern pure Python Backends (wgpu, etc.)
Since v1.92, font_atlas_get_tex_data_as_rgba32 was removed. Backends will need to be adapted by implementing support for dynamic fonts (preferred)
Extract from ImGui doc:
ImGui Version 1.92.0 (June 2025), added texture support in Rendering Backends, which is the backbone for supporting dynamic font scaling among other things. In order to move forward and take advantage of all new features, support for ImGuiBackendFlags_RendererHasTextures will likely be REQUIRED for all backends before June 2026.
- Read ImGui backend doc: flag
ImGuiBackendFlags_RendererHasTextures(1.92+) (read the part "Rendering: Adding support for ImGuiBackendFlags_RendererHasTextures (1.92+)"). - For inspiration, also look at opengl_base_backend implementation of _update_texture().
Pyodide
- Added support for Pyodide
Contributions
- fix: exclude
MkTimefrom implot_internal stubs by @tlambert03 in #349 - Add imgui_ctx.tree_node_ex (flags are missing in imgui_ctx.tree_node) by @zaicruvoir1rominet in #353
- test: add test to ensure that stub files are valid by @tlambert03 in #351
Full Changelog: v1.6.3...v1.92.0
v1.6.3
What's Changed
- Fix matplotlib example due to use of a deprecated function by @thiago4455 in #305
- Add SDL3 python backend. by @Aermoss in #340
ImGui
- update imgui to v1.91.9b
- Python: adapt API for ImFont:: CalcWordWrapPositionA (cf #308)
Fixes
- update imgui_md (fix soft break handling). Cf #306
- ImGui / Python: adapt API for ImFont:: CalcWordWrapPositionA (cf #308)
- Fix documentation rendering (cf #316)
- Fixes for compat with CMake 4
ImPlot
- update implot
- Add implot_demo.py (full python transcription of implot_demo.cpp)
- add demo_implot_stock.py
- python Bindings: improve setup_axis_ticks
ImPlot3d
- Update implot3d: added PlotImage & bindings
- implot3d_demo.py: provide nice demo textures
- add implot3d_demo.py: full transcription of implot3d_demo.cpp
- improve python bindings
- adapt bindings for PlotMesh (cf #320)
- manual bindings for setup_axis_ticks
Pure Python Backends
- Review keyboard handling
- Sdl: handle SDL_GL_MakeCurrent errors
- Add SDL3 python backend
- Add an example using wgpu (WebGPU for Python)
ImmVision
- update immvision (fix for compat with OpenCV 4.11)
ImGuizmo
- update ImGuizmo to v1.91.3
- Fix customization of styles (cf #329)
ImGuiColorTextEdit
- Update ImGuiColorTextEdit (from santaclose fork)
ImGuiMd
- fix soft break handling. Cf #306
New Contributors
- @thiago4455 made their first contribution in #305
- @Aermoss made their first contribution in #340
Full Changelog: v1.6.2...v1.6.3