# \[ANN\] CImGui.jl - A Wrapper for Bloat-free Immediate Mode Graphical User interface(Dear ImGui)

**URL:** <https://discourse.julialang.org/t/ann-cimgui-jl-a-wrapper-for-bloat-free-immediate-mode-graphical-user-interface-dear-imgui/21268>\
**Category:** Package Announcements\
**Created:** [February 27, 2019, 4:22pm UTC](https://discourse.julialang.org/t/ann-cimgui-jl-a-wrapper-for-bloat-free-immediate-mode-graphical-user-interface-dear-imgui/21268 "2019-02-27T16:22:39Z")\
**Posts on this page:** 9\
**Page:** 3

<div class="post-metadata">

**Author:** ![Gnimuc](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gnimuc/32/2194_2.png) [@Gnimuc](https://discourse.julialang.org/u/Gnimuc)\
**Post date:** [January 29, 2022, 12:03pm UTC](https://discourse.julialang.org/t/ann-cimgui-jl-a-wrapper-for-bloat-free-immediate-mode-graphical-user-interface-dear-imgui/21268/41 "2022-01-29T12:03:33Z")

</div>

> [@freeman](#):
>
> How can I set `GLFW.WindowShouldClose(window)` to `true` , so that the renderloop exits?

GLFW should responsible for returning that value when users close the GLFW window(IIRC, either by clicking the [`x`] button or pressing `Esc`?).

---

<div class="post-metadata">

**Author:** ![freeman](https://avatars.discourse-cdn.com/v4/letter/f/ec9cab/32.png) [@freeman](https://discourse.julialang.org/u/freeman)\
**Post date:** [January 29, 2022, 12:06pm UTC](https://discourse.julialang.org/t/ann-cimgui-jl-a-wrapper-for-bloat-free-immediate-mode-graphical-user-interface-dear-imgui/21268/42 "2022-01-29T12:06:00Z")

</div>

Ahhhhh I understand. That doesn’t work for me, but maybe that’s because I’m using i3wm, which is a bit unusual in that respect.

Thank you!

EDIT: fot future reference, it DOES work with i3wm, you just have to use the keyboard instead of the mouse: Pressing ALT+SHIFT+Q will correctly trigger `WindowShouldClose(window)`.

---

<div class="post-metadata">

**Author:** ![JamesNZ](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jamesnz/32/35361_2.png) [@JamesNZ](https://discourse.julialang.org/u/JamesNZ)\
**Post date:** [September 11, 2024, 8:35pm UTC](https://discourse.julialang.org/t/ann-cimgui-jl-a-wrapper-for-bloat-free-immediate-mode-graphical-user-interface-dear-imgui/21268/43 "2024-09-11T20:35:05Z")

</div>

Heyo heyo 🐙 Necro’ing this topic to say that v3 is released now and you can check out the changelog here: [Changelog · CImGui.jl](https://gnimuc.github.io/CImGui.jl/stable/changelog/#%5Bv3.0.0%5D(https://github.com/Gnimuc/CImGui.jl/releases/tag/v3.0.0)-2024-09-11)

Hopefully this is a not-too-breaking release 🤞 The big changes are the update to ImGui 1.91.1, and generating all the wrappers automagically.

(P.S. check out [ImGuiTestEngine.jl · ImGuiTestEngine](https://juliaimgui.github.io/ImGuiTestEngine.jl/stable/) for writing tests, helps a lot with making sure everything works after upgrading)

---

<div class="post-metadata">

**Author:** ![JamesNZ](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jamesnz/32/35361_2.png) [@JamesNZ](https://discourse.julialang.org/u/JamesNZ)\
**Post date:** [December 22, 2024, 5:37pm UTC](https://discourse.julialang.org/t/ann-cimgui-jl-a-wrapper-for-bloat-free-immediate-mode-graphical-user-interface-dear-imgui/21268/44 "2024-12-22T17:37:46Z")

</div>

v4 has been released to wrap ImGui 1.91.6: [Changelog · CImGui.jl](https://juliaimgui.github.io/CImGui.jl/stable/changelog/#%5Bv4.0.0%5D(https://github.com/JuliaImGui/CImGui.jl/releases/tag/v4.0.0)-2024-12-21)

There were quite a few IO-related breaking changes in 1.91.5 so I’d recommend checking out the changelogs.

---

<div class="post-metadata">

**Author:** ![aplavin](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/aplavin/32/222056_2.png) [@aplavin](https://discourse.julialang.org/u/aplavin)\
**Post date:** [May 12, 2026, 10:13pm UTC](https://discourse.julialang.org/t/ann-cimgui-jl-a-wrapper-for-bloat-free-immediate-mode-graphical-user-interface-dear-imgui/21268/45 "2026-05-12T22:13:59Z")

</div>

As I understand, all imgui + cimgui libraries to be used by Julia libraries are bundled into CImGuiPack, right?  
The setup is quite involved, and I couldn’t understand (even with AI 🙂 ) how to:

- update implot version? recently, v1 was released, would be nice to have it in Julia
- use implot3d?

---

<div class="post-metadata">

**Author:** ![JamesNZ](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jamesnz/32/35361_2.png) [@JamesNZ](https://discourse.julialang.org/u/JamesNZ)\
**Post date:** [May 13, 2026, 11:51pm UTC](https://discourse.julialang.org/t/ann-cimgui-jl-a-wrapper-for-bloat-free-immediate-mode-graphical-user-interface-dear-imgui/21268/46 "2026-05-13T23:51:15Z")

</div>

Yes, the process is rather convoluted I’m afraid 😅 I’ve written some docs here about updating all the library versions, lemme know if you get stuck anywhere: [Contributing · CImGui.jl](https://juliaimgui.github.io/ImGuiDocs.jl/cimgui/dev/contributing/)

Usually I go with the latest versions of all packages rather than updating just implot. To wrap implot3d you’d need to:

1. Add cimplot3d to cimgui-pack or make a new JLL for it. I don’t have strong opinions on which is better, though I suspect that given how tightly integrated imgui and its dependent libraries are it’s easier to keep it all in one JLL.
2. Add a new package (or add it as part of ImPlot) that generates Julia wrappers for the implot3d functions. Writing a script to generate nice Julia wrappers is quite difficult, though probably easier these days with AI.

---

<div class="post-metadata">

**Author:** ![aplavin](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/aplavin/32/222056_2.png) [@aplavin](https://discourse.julialang.org/u/aplavin)\
**Post date:** [May 15, 2026, 6:49pm UTC](https://discourse.julialang.org/t/ann-cimgui-jl-a-wrapper-for-bloat-free-immediate-mode-graphical-user-interface-dear-imgui/21268/47 "2026-05-15T18:49:03Z")

</div>

I wonder if we can make everything work together without the requirement that all C libraries are bundled into a single jll artifact?  
Proof of concept seems to work: [GitHub - aplavin/implot3d\_test · GitHub](https://github.com/aplavin/implot3d_test). Build and demo app using CImGui.jl + implot3d works correctly.  
What do you think about this approach @JamesNZ, basically having at least extra less-commonly-used libraries packaged as separate jlls?

---

<div class="post-metadata">

**Author:** ![JamesNZ](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jamesnz/32/35361_2.png) [@JamesNZ](https://discourse.julialang.org/u/JamesNZ)\
**Post date:** [May 15, 2026, 9:16pm UTC](https://discourse.julialang.org/t/ann-cimgui-jl-a-wrapper-for-bloat-free-immediate-mode-graphical-user-interface-dear-imgui/21268/48 "2026-05-15T21:16:54Z")

</div>

As long as compat bounds are set appropriately I think that’s totally fine 👍 Feel free to steal the generator code from one of the existing projects BTW, it should be fairly possible to get the CImGui.jl generator script to work with the cimplot3d bindings. And if you’d like you’re very welcome to move the Julia package to the JuliaImGui org and we could add you as a member 🙂 In any case it would be cool to have the Julia package docs linked in our multidocumenter setup.

---

<div class="post-metadata">

**Author:** ![aplavin](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/aplavin/32/222056_2.png) [@aplavin](https://discourse.julialang.org/u/aplavin)\
**Post date:** [May 15, 2026, 10:04pm UTC](https://discourse.julialang.org/t/ann-cimgui-jl-a-wrapper-for-bloat-free-immediate-mode-graphical-user-interface-dear-imgui/21268/49 "2026-05-15T22:04:45Z")

</div>

Yggdrasil PR [[CImPlot3D] new package, v0.4.0 · Pull Request #13747 · JuliaPackaging/Yggdrasil](https://github.com/JuliaPackaging/Yggdrasil/pull/13747) is pending (could you please review it, in case anything is off?).  
After that, plan to create CImPlot3D.jl package – and of course would be happy to create it in that org / move there!

I was just worried whether I missed anything – given that imgui + implot + testengine + imnodes are all bundled in a single jll.

[Previous page](https://discourse.julialang.org/t/ann-cimgui-jl-a-wrapper-for-bloat-free-immediate-mode-graphical-user-interface-dear-imgui/21268.md?page=2)
