I have been working on Dear ImGui Bundle since 2022, but it is the first time I talk about it here. It is a framework around Dear ImGui for building interactive applications in Python and C++. It comes with batteries included: Plotting, image inspection, Markdown, node editors, 3D gizmos, knobs, toggles, etc.

https://imgui-bundle.pages.dev

It now also runs smoothly in the browser via pyodide: The playground below is a python app running in your browser (no server, no JavaScript). You can edit the code on the left and click Run. It even works on mobile.

https://imgui-bundle.pages.dev/playground

I have a strong interest in providing tools that help others express their creativity. This project aims to be a step in this direction as it helps develop GUIs where the code is extremely readable & hackable.

Some of the goals it addresses:

- Bring true Immediate Mode GUI to Python and C++

- A versatile range of high quality libraries: Widgets, Plots, Image Analysis, Node edition, markdown rendering

- Multiplatform apps in C++: works on all platform in C++ (desktop, mobile, emscripten)

- Deploy python apps to the web

- High quality python bindings that are always up-to-date (because they are auto-generated)

- Smooth transition between C++ and Python (same APIs for both)

I'd be happy to answer questions!

  • gloflo a day ago |
    If no JavaScript then what enables interactivity?
    • hagbard_c a day ago |
      Web assembly? This started out as a bowdlerised form of JavaScript (asm.js) but evolved to become is own thing.
      • sheept a day ago |
        You still need JavaScript to instantiate WebAssembly and let it interact with the page, which is why your sibling comment admits there's still a bit of JS.
    • pstomi a day ago |
      Thanks for the question! I should have said almost no JavaScript:

      There is a minimal amount of JavaScript just to download and run pyodide and then it is only Python: see example at

      https://imgui-bundle.pages.dev/playground/?demo=p_35_minimal...

      • fredcallagan a day ago |
        Very very impressive! So many use cases for this. Thanks again
  • 2ndorderthought a day ago |
    Is this downloading and installing Python packages into the browser via wasm?

    I like the idea a little bit. Mostly because I don't like javascript. So I say keep going for it, it could fill some niches.

    I'm sure you know this, but the page takes like 30s to load on mobile. It wasn't a comfortable ux. Once it did load it seemed pretty fast though so kudos. Kind of gave me macromedia flash vibes from 2002.

    • pstomi a day ago |
      Thanks! I don't like javascript either, and I certainly dislike CSS :-)

      Yes, the initial download of pyodide is about 5 MB. After that it is another 5MB for the bundle wheel.

      But there is some hope: Based on test I just did, I see I did not setup headers so that the wheel and pyodide are cached in a browser (or in its fs): this could reduce reload times by a sizable factor.

      Once loaded you can run at 60 FPS (or even 120 FPS depending on the browser's vsync).

      As you can see in the playground: you can then switch from app to app instantly once pyodide is loaded and running. It almost feels like going from a page to another. You can see that when using the combobox to select example at the top right in the playground.

  • austin-cheney a day ago |
    I agree with the other comments. Its super cool after it eventually loads.

    For real world use I don't think its practical if its only goal is basic browser UX in Python versus JavaScript, but I can see amazing value in this for larger applications written in Python that need to make use of a Python GUI.

    • pstomi a day ago |
      Absolutely. This shines when you actually want to display complex / animated / streaming data in larger applications; or if you want to create educative or training material on several pages (i.e apps here).

      As an example, I once built an online stock/ticker app with it: smooth real-time updates in a nice plot. It would have been more complex with DOM based widgets (and probably less fun).

  • 0gs a day ago |
    just curious -- do yall dislike JS as developers, or as users? i agree this is really cool though
    • pstomi a day ago |
      This is a genuine question, and I will be honest: I do not really dislike JS. I even worked on large typescript projects and appreciated it.

      What I do not like is the strange mix of technologies you have to cope with in order to work with Python on the web: your project is often a mix of python / html / css / react / js / node.

      Many very nice frameworks try to abstract this and present you only the python side; but they rely on this stack internally. Once you want to reach complex use cases (such as a refresh at reasonable rate), you will have to "open the engine" and enter into this mix.

    • xboxnolifes 21 hours ago |
      I dislike JS as a developer.... but I also dislike python, so...
  • CyLith 18 hours ago |
    This is really neat, and I think I can use it in some of my projects as a simple front end to physical simulation tools. One question I have: do you have true 3D bindings? I see there is ImPlot3D, but right now I need to render meshes in OpenGL (or WebGL as the case will be). Is there a way for me to define shaders and feed it triangle soup?
    • pstomi 8 hours ago |
      Thanks!

      Yes I do have access to webgl. I added some examples to explain this:

      For example look at:

      https://imgui-bundle.pages.dev/playground/?demo=webgl_textur...

      There are two more examples: look at the WebGL examples in the combo-box at the top-right of the page.

      Enjoy! If you end up using it, please try to keep me informed :-)

  • TrnsltLife 17 hours ago |
    Cool! Now someone should do something like this for Java!
    • pstomi 15 hours ago |
      Yes, back to 1999!