Releases: pthom/imgui_bundle
v1.6.0
This release brings a major upgrade with Dear ImGui v1.91.5, a new python binding library (nanobind), various quality-of-life improvements (notably in the node editor), and support for Python 3.13.
Python Bindings
Transition to Nanobind - Nov 2024
We’ve replaced Pybind11 with Nanobind for Python bindings. This change should be seamless for most users. If you encounter any issues, please let us know.
Python 3.13 Support
- Prebuilt binary wheels are now available for Python 3.11, 3.12, and 3.13. (Python 3.10 remains supported, requiring source builds.)
Additional Changes
glfw_backend
: Updated clipboard handling to the new API.- Key enum bindings: Removed
im_gui_
prefix from values. - Flags enums (e.g.,
InputTextFlagsPrivate_
,TreeNodeFlagsPrivate_
): Cleaned up unnecessary prefixes. ImFontGlyph
: Published methodsget_codepoint()
,is_visible()
, andis_colored()
.imgui_fig
: Added support for user-defined Matplotlib renderers.- Stubbed
ImVec2
/ImVec4
math operators (fix #267). pyglet_backend
: Fixed version checks (thanks to @DragonMoffon).implot
: Resolved issues withsetup_axis_links()
bindings.- Optimized startup by deferring PIL and Matplotlib imports.
- Initial steps toward supporting Pyodide.
ImmVision
Breaking Change - October 2024: Explicit Color Order Configuration
You must now explicitly set the color order (RGB or BGR) in your program. Use one of the following before displaying images:
- C++:
ImmVision::UseRgbColorOrder()
orImmVision::UseBgrColorOrder()
- Python:
immvision.use_rgb_color_order()
orimmvision.use_bgr_color_order()
- Temporary overrides:
ImmVision::PushColorOrderBgr/Rgb()
andImmVision::PopColorOrder()
.
This ensures clarity regarding color order. Failure to set it will result in an error when attempting to display images.
Additional Notes:
- The
IsColorOrderBGR
member inImageParams
and theisBgrOrBgra
parameter inImageDisplay
have been removed.
- Published
GlTexture
in the API. - Prevented zooming when zoom level becomes excessively extreme.
Hello ImGui: Updated to v1.6.0
- SVG Font Rendering: Switched from
lunasvg
toplutosvg
(default:HELLOIMGUI_USE_FREETYPE_PLUTOSVG
). - Added
AddDockableWindow
andRemoveDockableWindow
APIs. - Enhanced
demo_docking
to better showcase docking and theme customization. - Introduced
HelloImGui::ManualRender
: A namespace with functions for fine-grained rendering control. - Progressed on Pyodide integration (for ImGui Bundle).
- Improved font rendering for iOS.
Node Editor
Many quality of life improvements: see demo on this page
- Enhanced popup placement and child window handling. See issue #310.
InputTextMultiline
now works within the node editor (opens as a popup for editing).- Node theme colors now align better with the overall theme.
ImGuiMd
- Added
ImGuiMd::GetFont(const MarkdownFontSpec& fontSpec)
.
ImmApp
- Introduced
Immapp::ManualRender
: A namespace with functions for fine-grained rendering control.
ImGui
- Updated ImGui to v1.91.5.
Demos
- Docking Demo: Improved layout and theme setup.
- Python Demos: Removed OpenCV dependency; now uses Pillow for image loading.
- Removed outdated demos, including ImGuizmo curve editing (only maintaining 3D Gizmo compatibility).
Contributors & Acknowledgements
- @DragonMoffon made their first contribution in PR #269.
- Thanks to @sammycage for assisting with font rendering improvements (see this discussion
- Special thanks to @davidlatwe for supporting the transition from Pybind11 to Nanobind.
- Gratitude to @wjakob for guidance on building with Nanobind.
- Shoutout to @lukaasm for patching popup rendering in the node editor.
- And as always a big shoutout to @ocornut, creator of Dear ImGui
Full Changelog: v1.5.2...v1.6.0
Please share your feedback for this release here! Your input is very valuable!
v1.5.2
ImGui:
- Updated ImGui to v1.90.9-docking
- Added support for StackLayout: ImGui::BeginHorizontal & ImGui::BeginVertical (by @thedmd)
- Warn if users reuse an ID (cf ocornut/imgui#7669)
Hello ImGui
See changes in Hello ImGui v1.5.0
- add FontDpiResponsive
- add OpenGlOptions
- add null backends
- Improved text rendering on windows (via improved antialiasing)
- Can set OpenGL options in hello_imgui.ini in any parent folder
- add InputTextResizable & WidgetWithResizeHandle
- Logger: use less vertical space
- add Push/PopTweakedTheme (different windows can have different themes)
- add callback PostRenderDockableWindows
- Polish Themes
Libraries
immvision
- fixup Custom version of cv::warpAffine for small sizes
- ImmVision::Image is now resizable / added ImmVision::ImageDisplayResizable
- fix icon buttons size
- Add option ResizeKeepAspectRatio: when resizing an image, the widget will keep the aspect ratio of the image
imgui-knobs
- can drag knob horizontally or vertically
ImPlot
- Add Python binding for colors (cf #221)
imgui-node-editor
- Add ForceWindowContentWidthToNodeWidth: ImGui::TextWrapped(), ImGui::Separator(), and ImGui::SliderXXX can now fit inside a Node. See proposed fix to @thedmd here: thedmd/imgui-node-editor#298
- The theme of the node editor can be derived and adapted automatically from ImGui Theme (see UpdateNodeEditorColorsFromImguiColors)
Python
- imgui_fig is now resizable
- Added binding for ColorPicker4
- Added mathematical operators for ImVec2, ImVec4, ImColor
- add pickle support for ImVec2, ImVec4, ImColor
- Add eq operator to ImVec2/4/ImColor bindings
- add pydantic support for ImVec2, ImVec4, ImColor
Build
- Add CMake options to disable some libraries
Contributions and contributors
Many thanks to all contributors!
- Update bindings_intro with updated steps by @learn-more in #177
- Add python markdown div example by @learn-more in #176
- update manual pybind function name for imgui backends by @hugle in #203
- MacOS binary wheel installation by @dcnieho in #219
New Contributors
- @learn-more made their first contribution in #177
- @hugle made their first contribution in #203
Full Changelog: v1.3.0...v1.5.0
v1.5.0-rc1
High level changes overview
ImGui:
- Updated ImGui to v1.90.5-docking
- Added support for StackLayout (by @thedmd)
Hello ImGui
See changes in Hello ImGui v1.5.0-rc1
- add FontDpiResponsive
- add OpenGlOptions
- add null backends
- Can set OpenGL options in hello_imgui.ini in any parent folder
- add InputTextResizable & WidgetWithResizeHandle
- Logger: use less vertical space
Libraries
- immvision:
- fixup Custom version of cv::warpAffine for small sizes
- ImmVision::Image is now resizable / added ImmVision::ImageDisplayResizable
- imgui-knobs: can drag knob horizontally or vertically
Python
- imgui_fig is now resizable
Build
- Add CMake options to disable some libraries
Full changes
Pull requests & contributors
- Update bindings_intro with updated steps by @learn-more in #177
- Add python markdown div example by @learn-more in #176
- update manual pybind function name for imgui backends by @hugle in #203
New Contributors
- @learn-more made their first contribution in #177
- @hugle made their first contribution in #203
Full Changelog: v1.3.0...v1.5.0-rc1
Get python wheels from here
v1.3.0
Version numbers are synced between hello_imgui and imgui_bundle.
New libraries
- Added NanoVG: see python bindings, code of python demos, code of C++ demos, online full demo, online simple demo, and API for integration with ImGui. Works on Linux, Windows, macOS, emscripten, iOS and Android (OpenGL only).
Bundle
- Update imgui to v1.90.1-docking
- Update implot, imgui_test_engine, imgui-node-editor
Python
- Release the Python GIL when rendering: improve multithreading performance (see #171)
- Fix an issue under Ubuntu where cibuildwheel binary wheels did not work (see #170)
Hello ImGui
- Added EdgeToolbars: see definition, callbacks, example usage, and demo
- Callbacks: add EnqueuePostInit, EnqueueBeforeExit, PostInit_AddPlatformBackendCallbacks
- Add renderer_backend_options
- Add support for Extended Dynamic Range (EDR) on macOS : see PR. Added demo / EDR - Only works with Metal
- Test Engine: can re-call params.callbacks.RegisterTests
- rememberEnableIdling default=false (true is too surprising)
- emscripten: Use webgl2 / GLES3
Fixes
- Fix usage of
ShowIdStackTool
without ImGui Test Engine (see #166) - ImGuiColorTextEdit: added bindings for GetSelection / Fixed keyboard selection (see #169)
Full Changelog: v1.2.1...v1.3.0
v1.2.1
Hello ImGui
- Added nice documentation pages
- Uses Freetype for font rendering
- Improved Font Loading utility
- Added support for Colored font and Emoji fonts (Demo)
- Can fully customize the menu bar
Backends
- Review CMake options for backend selection
- Add support for Metal rendering backend (C++ only, macOS only)
- Add support for Vulkan rendering backend (C++ only, Linux, Windows, macOS)
- Add support for DirectX11 rendering backend (C++ only, Windows)
- Add support for DirectX12 rendering backend (C++ only, Windows). Experimental
- Deprecated CMake options IMGUI_BUNDLE_WITH_GLFW and IMGUI_BUNDLE_WITH_SDL
(use HELLOIMGUI_USE_GLFW_OPENGL3 and HELLOIMGUI_USE_SDL_OPENGL3 instead) - updated imgui to v1.90-docking
iOS
- Add LaunchScreen.storyboard for iOS: apps are now full screen
- Add support for EdgeInsets (handle safe area on iOS, i.e. the notch): see here and here
Android
- Hello ImGui now compatible with Android (including assets, app icon, etc.): see instruction here in the Starter template and here
Python
- Can plot Matplotlib figures in Python: see demo and imgui_fig
- Added imgui_ctx: python context manager for imgui.begin / imgui.end, etc (lots)
- Show python & C++ code in the ImGui Demo window (see "Dear ImGui" tab in the interactive manual)
- Added bindings for imgui AddPolyline / AddConvexPolyFilled
- Added bindings for imgui IniFileName and LogFilename, WindowName
- Added bindings for ImGuiInputTextCallback and ImGuiSizeCallback (also see this)
- Python backends: use new ImGui mouse API. Corrected pygame backend keymap
Bundle
- Added starter template repo as quickstart for C++ apps
Contributors
- Fix modal window rendering in pyopengl backend (Fix #156) by @Aman-Anas in #157
- Add fix for scroll and drag by @jc211 in #158
- Bump actions/checkout from 3 to 4 by @dependabot in #164
New Contributors
- @Aman-Anas made their first contribution in #157
- @jc211 made their first contribution in #158
Full Changelog: v1.1.0...v1.2.1
v1.1.0
3D
- Added callback
runnerParams.callbacks.CustomBackground
: display any 3D scene in the background of the app: see doc
App deployment
- Added support for macOS application bundles
- Added option to specify where settings are saved:
RunnerParams.iniFolderType
can be set to:CurrentFolder
,AppUserConfigFolder
,DocumentsFolder
,HomeFolder
,TempFolder
,AppExecutableFolder
. - Support for Application Icon: the file
assets/app_settings/icon.png
will be used to generate the window icon (C++, Python), and app icon (C++ only) for any platform. See assets structure below:
assets/
├── world.jpg # A custom asset
├── app_settings/ # Application settings
│ ├── icon.png # This will be the app icon, it should be square
│ │ # and at least 512x512. It will be converted
│ │ # to the right format, for each platform.
│ ├── apple/
│ │ └── Info.plist # macOS and iOS app settings
│ │ # (or Info.ios.plist + Info.macos.plist)
├── fonts/
│ ├── DroidSans.ttf # Default fonts
│ └── fontawesome-webfont.ttf # used by HelloImGui
│ ├── Roboto
│ │ ├── Roboto-Bold.ttf # Font used by Markdown
│ │ ├── Roboto-BoldItalic.ttf
│ │ ├── Roboto-Regular.ttf
│ │ └── Roboto-RegularItalic.ttf
│ ├── SourceCodePro-Regular.ttf
├── images
│ └── markdown_broken_image.png
Python bindings
- Added initial support for full python backends:
- see bindings/imgui_bundle/python_backends
- see #142
- see full example with glfw3 + OpenGL3: bindings/imgui_bundle/python_backends/examples/example_python_backend_glfw3.py
- Note: ImmApp and Hello ImGui provide advanced support for anti-aliased fonts and HighDPI. This is not provided by python backends: you will have to implement it yourself
- Improved ImGui bindings: added bindings for
ImDrawData
andImDrawList
arrays
(see #142)
CMake
- hello_imgui_add_app and imgui_bundle.add_app can now accept ASSETS_LOCATION as a parameter e.g.
hello_imgui_add_app(my_app file1.cpp file2.cpp ASSETS_LOCATION my_assets)
v1.0.0.0
This release is the first official v1.0.0.0!
See release v1.0.0.0-beta1 for full changelog.
It adds:
- Updated SDL and glfw
- Updated imgui to V1.90 WIP (2023-10-21) and imgui_test_engine
- Updated implot bindings
Full Changelog: v1.0.0-beta1...v1.0.0
v1.0.0-beta1
Added support for ImGui Test Engine
ImGui Test Engine is a Tests & Automation Engine for Dear ImGui.
- Can be used with python, and C++ (all platforms, incl emscripten). See python bindings declarations (stubs).
- Enabled by default inside ImGui Bundle. Needs to be enabled manually when using Hello ImGui.
- Lots of work on making ImGui Test Engine's coroutines (thread based) compatible with Python and emscripten
- ImGui Test Engine is now used to run interactive automations in the interactive manual (click on the "Show me" buttons)
- Added specific demo and doc
Note: See Dear ImGui Test Engine License. (TL;DR: free for individuals, educational, open-source and small businesses uses. Paid for larger businesses)
New library
- Added new library: ImCoolBar
Doc
- Completely reviewed the doc site.
- Added "quickstart & example" section, with lots of examples
- Added & reviewed development doc
- Added specific doc / bindings maintenance (and how to add bindings for new libraries)
Misc
- Python bindings stubs: add "overload" everywhere when required
- cmake: add options to run sanitizers (no warning given by any of them at this moment)
- demo_logger: add logs at startup
- implot python bindings: add plot_bar_groups & plot_pie_chart
- update imgui_toggle (after merged PRs from imgui_bundle)
- update HelloImGui: add callback BeforeImGuiRender
- update ImmVision: can call gladLoadGl if needed (fix #134)
- add demo imgui_example_glfw_opengl3.cpp
Full Changelog: v0.9.0...v1.0.0-beta1
v0.9.0
v0.8.8
- update imgui to v1.89.6 and implot to v0.17
- Enable 32 bits ImDrawIdx for ImPlot
Submodules changes:
- ImmVision: fix exit sequence, can save colormap image
- imgui-node-editor: fixes
- HelloImGui: basic apps can run without font assets / can set docking options for main dock space