Extend the Platform
Registries
Field, view, and component registries — how the admin resolves renderers from schema.
Registries are the mechanism that connects server-side schema to client-side rendering. When the admin panel encounters a text field, it looks up the text renderer in the field registry.
How Registries Work
Server: f.text()
↓
Generated: { type: "text", options: {...} }
↓
Admin Client: fieldRegistry.get("text")
↓
React: <TextFieldRenderer value={...} onChange={...} />Field Registry
Maps field types to React components:
// Built-in field renderers
text → TextInput
textarea → TextareaInput
richText → RichTextEditor (TipTap)
number → NumberInput
boolean → Checkbox / Switch
date → DatePicker
datetime → DateTimePicker
select → SelectDropdown
relation → RelationPicker
upload → FileUpload
object → NestedForm
array → RepeatableItems
blocks → BlockEditor
json → JSONEditorView Registry
Maps view types to React components:
// Built-in view renderers
table → TableView (list)
form → FormView (edit)Component Registry
General-purpose component registry for dynamic rendering:
// Registered components available for server-driven UI
icon → IconComponent
badge → BadgeComponentExtending Registries
Register custom renderers by placing files in the admin directory. Codegen discovers them automatically:
questpie/admin/
fields/
color.tsx # Custom color field renderer
currency.tsx # Custom currency field renderer
views/
kanban.tsx # Custom kanban list viewThese are merged with built-in defaults during codegen and exported in .generated/client.ts.
Related Pages
- Custom Fields — Creating field types
- Custom Views — Creating view types
- Plugins — Plugin system