|
| 1 | +--- |
| 2 | +title: "Immediate Mode GUI Resources" |
| 3 | +description: "A reading list on Immediate Mode GUIs, in Rust and otherwise." |
| 4 | +date: 2025-07-11 |
| 5 | +tags: ["eng"] |
| 6 | +--- |
| 7 | + |
| 8 | +## Design |
| 9 | + |
| 10 | +- [Immediate-Mode Graphical User Interfaces (2005)](https://caseymuratori.com/blog_0001) - Casey Muratori - The original blog post that coined "IMGUI" |
| 11 | +- [About the IMGUI Paradigm](https://github.com/ocornut/imgui/wiki) - Dear ImGui Wiki - Explains how UI state lives in your code rather than hidden in the library |
| 12 | +- [Casey Muratori's IMGUI Video (2005)](https://mollyrocket.com/forums/viewtopic.php?t=134) - Historical video that inspired many modern IMGUI libraries |
| 13 | +- [Why is UI in Rust So Hard?](https://www.warp.dev/blog/why-is-building-a-ui-in-rust-so-hard) - Warp Dev - Challenges of Rust's memory safety rules with traditional GUI patterns |
| 14 | +- [Rust 2021: GUI](https://raphlinus.github.io/rust/gui/2021/01/18/rust-2021-gui.html) - Raph Levien - Cross-platform abstractions and considerations for Rust GUI toolkits |
| 15 | + |
| 16 | +## Managing State |
| 17 | + |
| 18 | +- [State Handling Advantages](https://github.com/ocornut/imgui/wiki) - No duplicate state between UI and application, eliminating complex observer patterns |
| 19 | +- [Keyboard Focus & Event Routing](https://ourmachinery.com/post/keyboard-focus-and-event-routing-in-immediate-mode-guis/) - Niklas Gray - Implementing focus and input handling without persistent widget objects |
| 20 | + |
| 21 | +## Reflections |
| 22 | + |
| 23 | +- [Dear ImGui Wiki & FAQs](https://github.com/ocornut/imgui/wiki) - Omar Cornut - Common questions and design trade-offs in IMGUI libraries |
| 24 | + |
| 25 | +**GPUI** |
| 26 | + |
| 27 | +- [Ownership and data flow in GPUI](https://zed.dev/blog/gpui-ownership) - via [Nathan Sobo](https://github.com/nathansobo) |
| 28 | +- [Leveraging Rust and the GPU to render user interfaces at 120 FPS](https://zed.dev/blog/videogame) - via [Antonio Scandurra](https://github.com/as-cii) |
| 29 | + |
| 30 | +## Performance Techniques for Fast Frames |
| 31 | + |
| 32 | +- [Batched Rendering](https://github.com/ocornut/imgui/wiki) - Grouping geometry by texture/material to minimize draw calls |
| 33 | +- [Caching and Partial Updates](https://raphlinus.github.io/ui/druid/2019/11/22/reactive-ui.html) - Raph Levien - Recording display lists and reusing vertex buffers across frames |
| 34 | + |
| 35 | +## Metal |
| 36 | + |
| 37 | +- [Using Metal and Rust to make FFT even faster](https://blog.lambdaclass.com/using-metal-and-rust-to-make-fft-even-faster/) - LambdaClass - Using Rust with Apple's Metal API via metal-rs bindings |
| 38 | +- [3 Years of Metal Retrospective](https://aras-p.info/blog/2021/04/05/3-Years-of-Metal/) - Arseny Kapoulkine - Experience porting a renderer to Metal on iOS/macOS |
| 39 | +- [Optimizing the Metal pipeline to maintain 120 FPS in GPUI](https://zed.dev/blog/120fps) - via [Nathan Sobo](https://github.com/nathansobo) & [Antonio Scandurra](https://github.com/as-cii) |
| 40 | + |
| 41 | +## Native macOS APIs |
| 42 | + |
| 43 | +- [Rust API Bindings for iOS & macOS](https://alwaysprocessing.blog/series/rust-bindings) - Always Processing - Wrapping Core Foundation and Cocoa APIs in safe Rust |
| 44 | +- [Rust ❤️ Swift: Writing Cocoa Apps in Rust](https://kylewlacy.github.io/posts/cocoa-apps-in-rust/) - Kyle Lacy - Building macOS Cocoa GUI using the objc crate |
0 commit comments