Every Prefab UI is wrapped in aDocumentation Index
Fetch the complete documentation index at: https://prefab.prefect.io/docs/llms.txt
Use this file to discover all available pages before exploring further.
PrefabApp. It holds your component tree, state, theme, and external assets together as a single unit.
Creating an App
Context manager
The natural way to build an app. Components inside thewith block become the view:
pf-app-root CSS class that themes target for default padding. Add your own classes via css_class:
Passing a view
If you build the tree separately, pass it viaview=:
From wire data
PrefabApp.from_json() wraps pre-serialized wire protocol data, for example from sandboxed execution. Keyword arguments override values from the wire:
Fields
| Field | Type | Description |
|---|---|---|
view | Component | dict | Component tree to render (set automatically in context manager mode) |
state | dict | Initial client-side state |
theme | Theme | Theme to apply — see Themes |
css_class | str | Additional CSS/Tailwind classes for the root container. Stacks on top of pf-app-root. |
defs | list[Define] | Reusable component definitions |
stylesheets | list[str] | CSS URLs or inline CSS to load in <head> |
scripts | list[str] | External JS URLs to load in <head> |
connect_domains | list[str] | Domains to allow in CSP connect-src (for Fetch actions) |
on_mount | Action | list[Action] | Action(s) to run when the app loads |
key_bindings | dict[str, Action] | Keyboard shortcuts mapping key names to actions |
title | str | HTML page title (default: "Prefab") |
Methods
app.html() returns a complete, self-contained HTML page with the Prefab renderer and all data baked in.
app.to_json() returns the wire-format envelope — a dict with $prefab, view, state, defs, and theme.
app.csp() computes Content Security Policy domains from the app’s asset configuration.
State
state sets the initial values that template expressions like {{ count }} resolve against:
PrefabApp constructor:
on_mount
Run actions when the app loads. This is the place to start polling intervals, fetch initial data, or perform any setup that depends on the renderer being ready:on_mount is actually a universal component property — every component supports it, not just PrefabApp. For most components it fires immediately since the entire tree renders at once. But for components inside Condition, Pages, or ForEach, it fires when they actually enter the DOM — useful for lazy data loading when a tab activates or a conditional branch becomes true.
Keyboard Shortcuts
key_bindings maps keyboard shortcuts to actions. When a user presses a matching key combination, the action fires, same as on_click or on_mount. Keys are standard DOM KeyboardEvent.key values, with optional modifier prefixes:
Ctrl+, Shift+, Alt+, and Meta+ (⌘ on Mac). They combine naturally: "Ctrl+Shift+S" matches Ctrl+Shift+S. The key portion uses the standard KeyboardEvent.key names: ArrowRight, ArrowLeft, Enter, Escape, Tab, letter keys, etc.
Key bindings are suppressed when the user is typing in an input, textarea, or select, so shortcuts never interfere with form entry.
Keyboard Shortcuts Dialog
TheKeyboardShortcutsDialog helper builds a dialog that lists your shortcuts with styled Kbd key indicators. It returns a SetState action you can wire directly into key_bindings:
_show_shortcuts), so the SetState action from key_bindings opens it programmatically. The trigger button also works for mouse users. No initial state setup is needed; the dialog defaults to closed.
The helper uses the state-controlled Dialog name prop under the hood.
Stylesheets
Thestylesheets field accepts both URLs and inline CSS. URLs become <link> tags; inline CSS (detected by {) becomes a <style> tag. For theming, prefer theme= over inline stylesheets.