Full visual design out of the box. Override--chirpui-*CSS variables to customize.
chirp-ui
Gorgeous Chirp components — htmx-native, Kida macros, Alpine.js for interactivity
Explore Chirp UI macros for forms, cards, navigation, overlays, marketing pages, and application chrome.
Translate product, media, forum, and documentation ideas into composable Chirp UI primitives.
Track shipped contracts, migration notes, and the latest Bengal theme adoption work.
HTML Over the Wire, Gorgeous by Default
Kida macros. htmx-native. Alpine.js for interactivity.
chirp-ui is an optional companion design system for Chirp. It provides Kida template macros — cards, modals, forms, layouts — that render as HTML. Use them with htmx for swaps, SSE for streaming, and View Transitions for polish. Zero JavaScript for layout.
{% from "chirpui/layout.html" import container, grid, block %}
{% from "chirpui/card.html" import card %}
{% call container() %}
{% call grid(cols=2) %}
{% call block() %}{% call card(title="Hello") %}<p>Card one.</p>{% end %}{% end %}
{% call block() %}{% call card(title="World") %}<p>Card two.</p>{% end %}{% end %}
{% end %}
{% end %}
What's good about it
Interactive components use htmx or native HTML. Dropdown, modal, tray, tabs use Alpine.js for declarative behavior.
{% slot %}for content injection. Components nest freely. No wrapper classes.
:has(), container queries, fluid typography, prefers-color-schemedark mode.
Quick Install
pip install chirp-ui
# or
uv add chirp-ui
Requires Python 3.14+. When used with Chirp, components are auto-detected — no configuration needed.
The Bengal Ecosystem
A structured reactive stack — every layer written in pure Python for 3.14t free-threading.
| ᓚᘏᗢ | Bengal | Static site generator | Docs |
| ∿∿ | Purr | Content runtime | — |
| ⌁⌁ | Chirp | Web framework | Docs |
| ʘ | chirp-ui | Component library ← You are here | Docs |
| =^..^= | Pounce | ASGI server | Docs |
| )彡 | Kida | Template engine | Docs |
| ฅᨐฅ | Patitas | Markdown parser | Docs |
| ⌾⌾⌾ | Rosettes | Syntax highlighter | Docs |
Python-native. Free-threading ready. No npm required.