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
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, css, stylesheets, and mode as needed.
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
Usestylesheets for external CSS URLs. They render as <link> tags and contribute style origins to app.csp().
Use css for inline CSS strings. They render as <style> tags and are included in the wire format so JSON-based renderers can apply them.