Streaming

Deferred #[load(stream)] handlers let SSR flush the shell immediately while slow data streams in.

Stream loader

#[load(stream)]
async fn home(req: &FlowRequest) -> HomeData {
    // Slow DB query — does not block initial HTML
    db::home(req).await
}

Page pattern

pub fn page(_req: FlowRequest) -> View {
    match use_home_load() {
        LoadValue::Pending => view! {
            <article>
                <h1>"Home"</h1>
                {stream_slot("home")}
            </article>
        },
        LoadValue::Ok(data) => home_view(&data),
        LoadValue::Err(e) => error_page(&FlowError::Loader(e)),
    }
}

fn home_view(data: &HomeData) -> View {
    view! {
        <article>
            <h1>{data.title.clone()}</h1>
            <p>{data.body.clone()}</p>
        </article>
    }
}

stream_slot

stream_slot(name) marks where deferred HTML is inserted when the loader completes. Enable streaming on FlowApp:

FlowApp::new()
    .streaming(true)
    .auto_pages("src/pages", PagesRegistry)
    .serve(FlowServeOptions::default())
    .await

Cookbook

See Streaming loaders cookbook for a complete deferred pattern.