Inline panel on demand
Load detail into a sidebar without a full navigation:#detail.
Append to a list
Usebeforeend to add server-rendered rows:
Form that updates a region
Prevent double submission withon:submit.prevent:
#status.
Application errors vs infrastructure errors
The server owns application outcomes. The client owns transport and infrastructure failures.
Return a small HTML fragment for expected failures (for example
422 with field errors). Do not rely on Nitro’s full error page inside a fragment target — Aero refuses to inject full documents (<!DOCTYPE / <html>) or overlay-bootstrap shells.
Listen for transport and infrastructure failures:
Save with loading feedback
Usebusy or state so the trigger reflects in-flight requests (requires reactivity + hypermedia):
aero-loading, aero-swapping, and aero-settling apply to involved elements during the lifecycle.
Progressive enhancement link
Static navigation still works when JS is off:href="/api/docs" for a static GET on an anchor. With JS, hypermedia intercepts the click and swaps into main.
Lifecycle hooks
Listen for swap completion (analytics, focus management):Server-driven URL
Return anaero-push-url response header to update the address bar without a client pushUrl option.
When to use HTMX instead
See Hypermedia for enabling Aero hypermedia alongside HTMX.