Immediate-Mode Graphical User Interfaces (2005)
By Casey Muratori
Ages ago, in the long-forgotten year 2002, I was working on a viewer utility for Granny 3D. In those days, cross-platform toolkits for any purpose were much less mature, and far less plentiful, than they are today. If you were one of the comparatively few people shipping GUI applications across a wide variety of platforms, you were probably going to have to roll your own UI if you didn’t want to suffer mightily with one of the existing solutions.
So, in the course of developing the viewer utility, I wrote a GUI layer. As I was writing it, I began to realize that “retained” GUI code design has all the same drawbacks that typically cause us to avoid using retained-mode APIs in graphics. I experimented with having the GUI code operate in a more immediate fashion, like an immediate-mode graphics API, and found that everything was simpler, more powerful, and could span the gamut of both 2D and 3D interaction seamlessly.
Excited about the results, I reported on the technique to a private mailing list in the fall of 2002. To describe it, I coined the term “Single-path Immediate Mode Graphical User Interface,” borrowing the “immediate mode” term from graphics programming to illustrate the difference in API design from traditional GUI toolkits. I continued to use the technique for several years, until I finally put up a super rough public video describing the basics in 2005:
What can I say? We didn’t have ubiquitous high-quality video recording and screen capture software back then :)
Anyhow, that was the last time I spoke directly about the technique in detail. Since then, it’s found widespread acceptance across a large number of disciplines including  —  much to my surprise  —  web development.
I’ve also seen lots of people getting into arguments about immediate-mode vs. retained-mode GUI APIs. I think this has something to do with how simple the IMGUI concept is, as it leads people to think they understand it, and then they proceed to get into heated arguments as if they actually know what they’re talking about. I rarely see this problem when I’m talking about anything even mildly complicated, like quaternions.
So this video will probably remain the last thing I have to say about “IMGUI” programming for the forseeable future, except to add the fact that if you’re arguing about it, you probably don’t understand it very well.
There’s really not a lot there to argue about.
For more information on my current projects, join the Molly Rocket Mailing List: