Skip to main content

The agentic frontend framework that even a human can use.

Project description

Prefab 🎨

Prefab

The agentic frontend framework that even a human can use.

Made with 💙 by Prefect

PyPI - Version Tests License

Docs · Playground · GitHub


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.

🚧 Prefab is in early development. The API is unstable and likely to change. 🚧

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. Try an interactive version in the Prefab docs.

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.

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 ToolCall 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 import ToolCall

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=ToolCall("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, ToolCall, ShowToast

Button("Save", on_click=[
    SetState("saving", True),
    ToolCall(
        "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.

Contributing

git clone https://github.com/prefecthq/prefab && cd prefab
uv sync
uv run pytest

License

Apache 2.0 — see LICENSE for details.

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.1.0.tar.gz (3.7 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.1.0-py3-none-any.whl (771.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: prefab_ui-0.1.0.tar.gz
  • Upload date:
  • Size: 3.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","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.1.0.tar.gz
Algorithm Hash digest
SHA256 4baa591cb1b087e3423234e8c9b81436991eaca85eae237cd98622670777509a
MD5 cf7c98b7bc74ea1d0b38943aeac1a75d
BLAKE2b-256 12dc300af27f1744ec84efb9c2fab7a7efdde8aaa3d20fe1a25e55c28da24de7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: prefab_ui-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 771.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2e436ca77e2ca6ca314fa448428bc508f5a656b1b988de233c467a2a2808117d
MD5 d601f9cc5fde3486d8132e0a8b47fded
BLAKE2b-256 39b166bb7ca4140df05b884491adc7d9f6a694e3defb76df86616fa1f991dde4

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