Immediate Mode GUI Programming

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
  • imgui

    Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies

  • The Dear ImGui readme is a good starting point:

    https://github.com/ocornut/imgui

    ...now of course Dear ImGui is a specific implementation of an immediate mode UI framework, but it's also the most popular implementation.

  • egui

    egui: an easy-to-use immediate mode GUI in Rust that runs on both web and native

  • I cannot recommend immediate mode GUI programming based on the limitations I've experienced working with egui.

    egui does not support putting two widgets in the center of the screen: https://github.com/emilk/egui/issues/3211

    It's really easy to get started with immediate mode, it's really easy to bust out some UI, but the second you start trying to involve dynamically resized context and responsive layouts -- abandon all hope. The fact it has to calculate everything in a single pass makes these things hard/impossible.

    ... that said, I'm still using it for https://ant.care/ (https://github.com/MeoMix/symbiants) because it's the best thing I've found. I'm crossing my fingers that Bevy's UI story (or Kayak https://github.com/StarArawn/kayak_ui) become significantly more fleshed out sooner rather than later. Bevy 0.13 should have lots more in this area though (https://github.com/bevyengine/bevy/discussions/9538)

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
  • symbiants

    Ant Colony Sim + Daily Mental Health Exercises

  • I cannot recommend immediate mode GUI programming based on the limitations I've experienced working with egui.

    egui does not support putting two widgets in the center of the screen: https://github.com/emilk/egui/issues/3211

    It's really easy to get started with immediate mode, it's really easy to bust out some UI, but the second you start trying to involve dynamically resized context and responsive layouts -- abandon all hope. The fact it has to calculate everything in a single pass makes these things hard/impossible.

    ... that said, I'm still using it for https://ant.care/ (https://github.com/MeoMix/symbiants) because it's the best thing I've found. I'm crossing my fingers that Bevy's UI story (or Kayak https://github.com/StarArawn/kayak_ui) become significantly more fleshed out sooner rather than later. Bevy 0.13 should have lots more in this area though (https://github.com/bevyengine/bevy/discussions/9538)

  • microui

    A tiny immediate-mode UI library

  • There is also microui, which I like[0].

    Which I forked to work with SDL2[1], no guarantees. It's fun to hack on.

    [0]https://github.com/rxi/microui

    [1]https://github.com/kennethrapp/microui

  • microui

    A tiny immediate-mode UI library (by kennethrapp)

  • There is also microui, which I like[0].

    Which I forked to work with SDL2[1], no guarantees. It's fun to hack on.

    [0]https://github.com/rxi/microui

    [1]https://github.com/kennethrapp/microui

  • kayak_ui

  • I cannot recommend immediate mode GUI programming based on the limitations I've experienced working with egui.

    egui does not support putting two widgets in the center of the screen: https://github.com/emilk/egui/issues/3211

    It's really easy to get started with immediate mode, it's really easy to bust out some UI, but the second you start trying to involve dynamically resized context and responsive layouts -- abandon all hope. The fact it has to calculate everything in a single pass makes these things hard/impossible.

    ... that said, I'm still using it for https://ant.care/ (https://github.com/MeoMix/symbiants) because it's the best thing I've found. I'm crossing my fingers that Bevy's UI story (or Kayak https://github.com/StarArawn/kayak_ui) become significantly more fleshed out sooner rather than later. Bevy 0.13 should have lots more in this area though (https://github.com/bevyengine/bevy/discussions/9538)

  • bevy

    A refreshingly simple data-driven game engine built in Rust

  • I cannot recommend immediate mode GUI programming based on the limitations I've experienced working with egui.

    egui does not support putting two widgets in the center of the screen: https://github.com/emilk/egui/issues/3211

    It's really easy to get started with immediate mode, it's really easy to bust out some UI, but the second you start trying to involve dynamically resized context and responsive layouts -- abandon all hope. The fact it has to calculate everything in a single pass makes these things hard/impossible.

    ... that said, I'm still using it for https://ant.care/ (https://github.com/MeoMix/symbiants) because it's the best thing I've found. I'm crossing my fingers that Bevy's UI story (or Kayak https://github.com/StarArawn/kayak_ui) become significantly more fleshed out sooner rather than later. Bevy 0.13 should have lots more in this area though (https://github.com/bevyengine/bevy/discussions/9538)

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • slint

    Slint is a declarative GUI toolkit to build native user interfaces for Rust, C++, or JavaScript apps.

  • I haven't. I was just searching for a GUI library that was Bevy-compatible and slint isn't at the moment: https://github.com/slint-ui/slint/discussions/940

    Sorry!

  • sciter

    Sciter: the Embeddable HTML/CSS/JS engine for modern UI development

  • otherwise, if we have only retained mode as in browsers, we will need to modify the DOM heavily and create temporary elements for handles.

    [1] https://sciter.com

  • tracy

    Frame profiler

  • The RemedyBG debugger (https://remedybg.handmade.network/) and the Tracy profiler (https://github.com/wolfpld/tracy) both use Dear ImGui and so far I've only read high praise from people who used those tools compared to the 'established' alternatives.

    For tools like this, programmers are also just "normal users", and from the developer side, I'm sure they evaluated various alternatives with all their pros and cons before settling for Dear ImGui.

  • hello_egui

    A collection of useful crates for egui

  • https://lucasmerlin.github.io/hello_egui/

    I've had to spend a lot of time improving egui and it's ecosystem in the process of building my app but it seems to be worth it.

    If you're not building a graphical app it probably makes more sense to use something like tauri or flutter as the gui to build a cross platform app with rust, at least until it's gui ecosystem matures.

  • ImHex

    🔍 A Hex Editor for Reverse Engineers, Programmers and people who value their retinas when working at 3 AM.

  • I didn't use RemedyBG or Tracy, but I did try ImHex (https://github.com/WerWolv/ImHex) and it loaded 12% of the CPU because everything is being repainted 60 times per second. Heck, it even has an option to limit the FPS, which solves the CPU load a bit, but at the same time results in sluggish input because the event handling is tied to the drawing frequency.

    So yes, the experience was not good, and I don't see what these tools would lose by using a proper GUI. I don't want every utility to drain my laptop battery like a decent video game.

    ImGui is great if you already have a loop where everything is unconditionally redrawn every frame, but otherwise it's a really odd choice for an end-user application.

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts