Skip to main content

The agentic frontend framework that even humans can use.

Project description

Prefab 🎨

The agentic frontend framework that even humans can use.

🚧 Don't panic. Prefab is under extremely active development. You probably shouldn't use it yet. 🚧

PyPI - Version Tests License

Docs · Playground · GitHub

Prefab

Prefab is a frontend framework with a Python DSL that compiles to JSON. Describe a UI — layouts, forms, charts, data tables, full interactivity — and a bundled React renderer turns that JSON into a self-contained application.

Composing frontends in Python is blasphemous surprisingly natural. And because it's a JSON protocol, any source can produce a Prefab UI. Write one in Python, serve one as an MCP App, or let an agent generate one dynamically — no templates or predefined views required.

Hello world card

This card has a live-updating heading, a text input bound to client-side state, and badges — all from a few lines of Python. You can try an interactive version in the Prefab docs. In fact, every example in the Prefab docs is rendered with Prefab itself.

from prefab_ui.components import Card, CardContent, CardFooter, Column, H3, Muted, Input, Badge, Row

with Card():
    with CardContent():
        with Column(gap=3):
            H3("Hello, {{ name }}!")
            Muted("Type below and watch this update in real time.")
            Input(name="name", placeholder="Your name...")
    with CardFooter():
        with Row(gap=2):
            Badge("Name: {{ name }}", variant="default")
            Badge("Prefab", variant="success")

Since everything compiles to JSON, you can author a UI from a Python script, have an agent generate one on the fly, or serve one from any MCP server or REST API.

Made with 💙 by Prefect

Installation

pip install prefab-ui

Requires Python 3.10+.

How It Works

  1. Build a component tree in Python (or raw JSON from any source)
  2. The tree compiles to Prefab's JSON format
  3. A bundled React renderer turns the JSON into a live interface

State flows through {{ templates }}. When you write {{ query }}, the renderer interpolates the current value from client-side state. Named form controls sync automatically — Input(name="city") keeps {{ city }} up to date on every keystroke. Actions like CallTool and SetState drive interactivity without custom JavaScript.

Components

35+ components covering layout, typography, forms, data display, and interactive elements. Containers nest with Python context managers:

from prefab_ui.components import Card, CardHeader, CardTitle, CardContent, Column, Text, Badge

with Card():
    with CardHeader():
        CardTitle("User Profile")
    with CardContent():
        with Column():
            Text("{{ user.name }}")
            Badge("{{ user.role }}", variant="secondary")

Pydantic models generate forms automatically — constraints like min_length and ge become client-side validation:

from pydantic import BaseModel, Field
from prefab_ui.components import Form
from prefab_ui.actions.mcp import CallTool

class SignupForm(BaseModel):
    email: str = Field(description="Your email address")
    name: str = Field(min_length=2, max_length=50)
    age: int = Field(ge=18, le=120)

Form.from_model(SignupForm, on_submit=CallTool("create_user"))

Actions

Actions define what happens on interaction — state updates, server calls, navigation, notifications:

from prefab_ui.components import Button
from prefab_ui.actions import SetState, ShowToast
from prefab_ui.actions.mcp import CallTool

Button("Save", on_click=[
    SetState("saving", True),
    CallTool(
        "save_data",
        arguments={"item": "{{ item }}"},
        on_success=ShowToast(title="Saved"),
        on_error=ShowToast(title="Failed", variant="destructive"),
    ),
    SetState("saving", False),
])

Documentation

Full documentation at prefab.prefect.io, including an interactive playground where you can try components live.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

prefab_ui-0.8.1.tar.gz (2.8 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

prefab_ui-0.8.1-py3-none-any.whl (803.9 kB view details)

Uploaded Python 3

File details

Details for the file prefab_ui-0.8.1.tar.gz.

File metadata

  • Download URL: prefab_ui-0.8.1.tar.gz
  • Upload date:
  • Size: 2.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prefab_ui-0.8.1.tar.gz
Algorithm Hash digest
SHA256 7f0a8da65e356d18c2d1d7d11aa2bc3f1e251b95afc56b210fb4b9381cd6510d
MD5 035c1d97ea590b3d156fe9cc65984ad9
BLAKE2b-256 5dad57058ad37853a849f8e51a8a1b94e8e28ef2fbc5965c64e35df64257b1fa

See more details on using hashes here.

File details

Details for the file prefab_ui-0.8.1-py3-none-any.whl.

File metadata

  • Download URL: prefab_ui-0.8.1-py3-none-any.whl
  • Upload date:
  • Size: 803.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prefab_ui-0.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 bb517f332ee0ae9d5ec75efd1bc4ce833bee97e566be5d40a3b77630e64923f5
MD5 a59eec75a6d9b9c00b392d62d2ca66fa
BLAKE2b-256 2744be9da631f6d31b966f86a2d6d6fb33c7eefcfbe8c63e1a6bb032882e1feb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page