#egui #egui-ui #ui

egui_suspense

Automatically show loading and error uis for egui

10 breaking releases

0.11.0 Mar 26, 2026
0.10.0 Oct 12, 2025
0.9.0 Jul 11, 2025
0.8.0 Feb 7, 2025
0.1.0 Nov 1, 2023

#2572 in GUI

25 downloads per month
Used in 2 crates

MIT license

98KB
966 lines

egui_suspense

egui_ver Latest version Documentation unsafe forbidden License

A helper to display loading, error and retry uis when waiting for asynchronous data.

Minimal example

use eframe::egui;
use egui::CentralPanel;
use egui_suspense::EguiSuspense;

pub fn main() -> eframe::Result<()> {
    let mut suspense = EguiSuspense::reloadable(|cb| {
        std::thread::spawn(move || {
            std::thread::sleep(std::time::Duration::from_secs(1));
            cb(if rand::random() {
                Ok("Hello".to_string())
            } else {
                Err("OOPSIE WOOPSIE!".to_string())
            });
        });
    });

    eframe::run_simple_native(
        "DnD Simple Example",
        Default::default(),
        move |ctx, _frame| {
            CentralPanel::default().show(ctx, |ui| {
                
                // This will show a spinner while loading and an error message with a 
                // retry button if the callback returns an error.
                suspense.ui(ui, |ui, data, state| {
                    ui.label(format!("Data: {:?}", data));

                    if ui.button("Reload").clicked() {
                        state.reload();
                    }
                });
            });
        },
    )
}

Dependencies

~18MB
~350K SLoC