Button
Clickable action control.
from trunco.daisy import Button
Button(label="Save", color="primary", size="sm")from trunco.zbuild import Button
Button(label="Save", color="primary", size="small")Live previews, source snippets, and availability — shared components use the same Python names in both kits.
| Component | Category | DaisyUI | 0build |
|---|---|---|---|
| Button | ui | yes | yes |
| Input | ui | yes | yes |
| Card | ui | yes | yes |
| Badge | ui | yes | yes |
| Alert | ui | yes | yes |
| Link | ui | yes | yes |
| Progress | ui | yes | yes |
| Avatar | ui | yes | yes |
| Table | ui | yes | yes |
| Tooltip | ui | yes | yes |
| Modal | ui | yes | yes |
| Accordion | ui | yes | yes |
| Divider | ui | yes | yes |
| Form | form | yes | yes |
| FormControl | form | yes | yes |
| Textarea | form | yes | yes |
| Select | form | yes | yes |
| Option | form | yes | yes |
| Checkbox | form | yes | yes |
| Radio | form | yes | yes |
| RadioGroup | form | yes | yes |
| Range | form | yes | yes |
| Toggle | form | yes | yes |
| Fieldset | form | yes | yes |
| Label | form | yes | yes |
| FileInput | form | yes | — |
| Breadcrumbs | layout | yes | — |
| Loading | ui | yes | — |
| Navbar | layout | yes | — |
| Tabs | layout | yes | — |
| Menu | layout | yes | — |
| List | ui | yes | — |
| Hero | layout | yes | — |
| Stat | ui | yes | — |
| Pagination | ui | yes | — |
| Dropdown | ui | yes | — |
| Spinner | ui | — | yes |
| Nav | layout | — | yes |
| Tab | layout | — | yes |
| Breadcrumb | layout | — | yes |
Switch trunco.daisy ↔ trunco.zbuild — the API stays the same.
Clickable action control.
from trunco.daisy import Button
Button(label="Save", color="primary", size="sm")from trunco.zbuild import Button
Button(label="Save", color="primary", size="small")Single-line text field.
from trunco.daisy import Input
Input(placeholder="you@example.com", color="bordered")from trunco.zbuild import Input
Input(placeholder="you@example.com")Content container with title and body.
Python components.
from trunco.daisy import Card
Card(title="Trunco", body="Python components.")from trunco.zbuild import Card
Card(title="Trunco", body="Python components.")Small status or metadata label.
from trunco.daisy import Badge
Badge("New", color="primary")from trunco.zbuild import Badge
Badge("New", color="info")Inline feedback message.
from trunco.daisy import Alert
Alert(message="Saved.", color="success")from trunco.zbuild import Alert
Alert(message="Saved.", color="success")Hyperlink styled for the kit.
from trunco.daisy import Link
Link(href="/docs", text="Read docs", color="primary")from trunco.zbuild import Link
Link(href="/docs", text="Read docs")Progress bar indicator.
from trunco.daisy import Progress
Progress(value=65, color="primary")from trunco.zbuild import Progress
Progress(value=65)User or entity image.
from trunco.daisy import Avatar
Avatar(image_src="https://img.daisyui.com/images/profile/demo/avatar-1.jpg")from trunco.zbuild import Avatar
Avatar(image_src="https://img.daisyui.com/images/profile/demo/avatar-1.jpg")Tabular data display.
| Name | Version | Status |
|---|---|---|
| Trunco | 1.0.0 | Active |
| DaisyUI kit | — | Stable |
| 0build kit | — | Stable |
| HTMX helpers | — | Optional |
| Alpine helpers | — | Optional |
from trunco.daisy import Table
from trunco.components.table import TableRowComponent, TableCellComponent
rows = [TableRowComponent(cells=[TableCellComponent("Trunco"), ...])]
Table(headers=["Name", "Version", "Status"], rows=rows, zebra=True)from trunco.zbuild import Table
from trunco.components.table import TableRowComponent, TableCellComponent
rows = [TableRowComponent(cells=[TableCellComponent("Trunco"), ...])]
Table(headers=["Name", "Version", "Status"], rows=rows, striped=True)Hover hint on a child element.
from trunco.daisy import Tooltip, Button
Tooltip(tip="Hello", child=Button(label="Hover me"))from trunco.zbuild import Tooltip, Button
Tooltip(tip="Hello", child=Button(label="Hover me"))Dialog overlay with title and actions.
from trunco.daisy import Modal, Button
trigger = Button(label="Open modal", color="primary")
trigger.add_attribute("onclick", 'document.getElementById("confirm").showModal()')
Modal(
modal_id="confirm",
title="Delete item?",
body="This action cannot be undone.",
actions=[
Button(label="Cancel", color="ghost"),
Button(label="Delete", color="primary"),
],
)from trunco.zbuild import Modal, Button
trigger = Modal.trigger("confirm", "Open modal")
cancel = Button(label="Cancel", size="small")
cancel.add_class("z-modal-close")
Modal(
modal_id="confirm",
title="Delete item?",
body="This action cannot be undone.",
footer=[cancel, Button(label="Delete", color="primary", size="small")],
)Expandable content section.
from trunco.daisy import Accordion
Accordion(title="Shipping", content="Ships in 2–3 days.", open=True, radio_name="faq")
Accordion(title="Returns", content="30-day return policy.", radio_name="faq")
Accordion(title="Support", content="Email support@example.com", radio_name="faq")from trunco.zbuild import Accordion, AccordionGroup
AccordionGroup(
Accordion(title="Shipping", content="Ships in 2–3 days.", open=True),
Accordion(title="Returns", content="30-day return policy."),
Accordion(title="Support", content="Email support@example.com"),
)Visual separator with optional label.
from trunco.daisy import Divider, Button
# horizontal=False → vertical rule between items in a flex row
Divider(text="OR", horizontal=False)
Button(label="Sign up", color="primary")from trunco.zbuild import Divider, Button
# horizontal=False → vertical rule between items in a flex row
Divider(text="OR", horizontal=False)
Button(label="Sign up", color="primary")Form container with action and method.
from trunco.daisy import Form, FormControl, Input, Button
form = Form(action="/save", gap="md")
form.add_child(FormControl(label="Name", field=Input(placeholder="Jane Doe")))
form.add_child(FormControl(label="Email", field=Input(placeholder="you@example.com")))
form.add_child(Button(label="Subscribe", color="primary"))from trunco.zbuild import Form, FormControl, Input, Button
form = Form(action="/save", gap="xl")
form.add_child(FormControl(label="Name", field=Input(placeholder="Jane Doe")))
form.add_child(FormControl(label="Email", field=Input(placeholder="you@example.com")))
form.add_child(Button(label="Subscribe", color="primary"))One labeled field with optional help text.
from trunco.daisy import FormControl, Input
FormControl(
label="Email",
field=Input(placeholder="you@example.com"),
help_text="We never share your email.",
required=True,
)from trunco.zbuild import FormControl, Input
FormControl(
label="Email",
field=Input(placeholder="you@example.com"),
help_text="We never share your email.",
required=True,
)Multi-line text input.
from trunco.daisy import Textarea
Textarea(placeholder="Message…", variant="bordered")from trunco.zbuild import Textarea
Textarea(placeholder="Message…")Dropdown selection.
from trunco.daisy import Select, Option
Select(options=[Option(value='a', display_text='A')])from trunco.zbuild import Select, Option
Select(options=[Option(value='a', display_text='A')])Select option element.
from trunco.daisy import Select, Option
Select(options=[Option(value='a', display_text='A')])from trunco.zbuild import Select, Option
Select(options=[Option(value='a', display_text='A')])Boolean checkbox input.
from trunco.daisy import Checkbox
Checkbox(label="Accept terms", checked=True)from trunco.zbuild import Checkbox
Checkbox(label="Accept terms", checked=True)Single radio input.
from trunco.daisy import RadioGroup, Radio
# direction: "vertical" (default) or "horizontal"
RadioGroup(
name="plan",
gap="md",
direction="horizontal",
options=[
Radio(name="plan", value="free", label="Free", checked=True, gap="sm"),
Radio(name="plan", value="pro", label="Pro", gap="sm"),
],
)from trunco.zbuild import RadioGroup, Radio
RadioGroup(
name="plan",
gap="md",
direction="horizontal",
options=[
Radio(name="plan", value="free", label="Free", checked=True, gap="sm"),
Radio(name="plan", value="pro", label="Pro", gap="sm"),
],
)Grouped radio inputs.
from trunco.daisy import RadioGroup, Radio
# direction: "vertical" (default) or "horizontal"
RadioGroup(
name="plan",
gap="md",
direction="horizontal",
options=[
Radio(name="plan", value="free", label="Free", checked=True, gap="sm"),
Radio(name="plan", value="pro", label="Pro", gap="sm"),
],
)from trunco.zbuild import RadioGroup, Radio
RadioGroup(
name="plan",
gap="md",
direction="horizontal",
options=[
Radio(name="plan", value="free", label="Free", checked=True, gap="sm"),
Radio(name="plan", value="pro", label="Pro", gap="sm"),
],
)Slider / range input.
from trunco.daisy import Range
Range(min_value=0, max_value=100, value=40)from trunco.zbuild import Range
Range(min_value=0, max_value=100, value=40)On/off toggle switch.
from trunco.daisy import Toggle
Toggle(label="Notifications", checked=False, variant="primary")from trunco.zbuild import Toggle
Toggle(label="Notifications", checked=False, color="primary")Grouped fields with legend.
from trunco.daisy import Fieldset, FormControl, Input
Fieldset(
legend="Account",
children=[
FormControl(label="Username", field=Input(placeholder="jane")),
FormControl(label="Email", field=Input(placeholder="you@example.com")),
],
)from trunco.zbuild import Fieldset, FormControl, Input
Fieldset(
legend="Account",
children=[
FormControl(label="Username", field=Input(placeholder="jane")),
FormControl(label="Email", field=Input(placeholder="you@example.com")),
],
)Standalone form label.
from trunco.daisy import Label
Label(text="Email address")from trunco.zbuild import Label
Label(text="Email address")File upload input.
from trunco.daisy import FileInput
FileInput(variant="bordered")Hierarchical navigation trail.
from trunco.daisy import Breadcrumbs, Link
Breadcrumbs(items=[Link(href="/", text="Home"), "Settings"])Animated loading indicator.
from trunco.daisy import Loading
Loading(style="spinner", size="md")Top navigation bar.
from trunco.daisy import Navbar, Link
Navbar(start=["Trunco"], end=[Link(href="/", text="Home")])Tab navigation links.
Vertical navigation menu.
from trunco.daisy import Menu, Link
Menu(items=[Link(href="/", text="Home"), "About"])Styled list of items.
from trunco.daisy import List
List(items=["Install trunco", "Pick a kit", "Ship it"])Large hero banner section.
World
from trunco.daisy import Hero, Button
Hero(title="Hello", subtitle="World", actions=[Button(label="Go")])Statistic highlight block.
from trunco.daisy import Stat
Stat(title="Downloads", value="31K", description="Jan 2026")Page number controls.
from trunco.daisy import Pagination
Pagination(pages=[1, 2, 3, '…', 10], active=2)Dropdown menu triggered by a button.
from trunco.daisy import Dropdown, Button, Link
Dropdown(trigger=Button(label='Menu'), items=[Link(href='#', text='Item')])Loading spinner.
from trunco.zbuild import Spinner
Spinner()Horizontal navigation list.
from trunco.zbuild import Nav, Link
Nav(items=[Link(href="/", text="Home"), "About"])Tab navigation (0build).
from trunco.zbuild import Tab
Tab(tabs=[('Tab 1', 't1', True), ('Tab 2', 't2', False)])Breadcrumb trail (singular API).
from trunco.zbuild import Breadcrumb, Link
Breadcrumb(items=[Link(href="/", text="Home"), "Settings"])