Install
pip install chirp-ui==0.6.0
# or
uv add chirp-ui==0.6.0
With Chirp:
pip install "bengal-chirp[ui]"
What's New
Application composition gauntlet
This release adds a browser gauntlet for the kinds of UI compositions real apps try to build: dense navigation, forms, tables, workflow regions, contextual popovers, linkable records, state matrices, hostile content, and mobile/tablet pressure.
The goal is not just "components render." The gauntlet checks whether composed components still avoid page-level horizontal overflow, keep control heights coherent, preserve touch targets, avoid obvious overlap, and survive large text or long-token content.
Elbysodic-driven primitives
Several primitives were shaped by the Elbysodic play-by-post forum app, then lifted into general ChirpUI contracts:
nav_tree(branch_mode="linked")for link-first section trees where parent rows route normally and branch expansion is server/context controlled.- Server-controlled open branches, item badges, and item state hooks for active, branch, child, and muted styling.
- Linkable file tree branches and timeline title links without overlay-link conflicts.
- Contextual-detail hints for nav entries and timeline titles, including hover/focus/touch coverage.
- Rendered mentions via
chirpui-mention, avatar support for cast faces, and latest-line metadata tooltips.
Responsive app-shell hardening
Phone and tablet layouts now get more explicit coverage across app shell, navigation strips, rendered content, data tables, and action rows. Controls also share a tighter height rhythm across buttons, icon buttons, segmented controls, small toggles, selects, and dropdown triggers.
This should reduce the little shifts that make a topbar feel unstable when a select, toggle, and route/action button all sit next to each other.
App theme starter
templates/themes/app-theme-starter.cssgives apps a token-only theme layer to
place afterchirpui.css. It demonstrates the intended override contract for
light, dark, and system tokens without forking ChirpUI component CSS.
Manifest and registry quality
The component manifest now exposes more of the real composition contract: composite metadata, forwarded slots, yielded slots, runtime requirements, maturity, and public metadata checks. Registry categories were tightened so agents and app authors can ground suggestions against actual component capabilities instead of guessing from template names.
Changed
- Kida template dependency floor is now
>=0.8.0. - README and component docs were refreshed around the current registry, manifest, and development workflow.
- Navigation guidance is stricter:
route_tabsare for local views of one object/workspace, not broad cross-feature navigation.
Fixed
- Button and icon button HTMX fragment requests default to
hx-select="unset"so boosted app-shell selection does not leak into local swaps. - Control height tokens now line up across the common topbar/action-row mix.
- Long card titles and badge/count text wrap instead of escaping narrow containers.
- Shell-frame boosted navigation preserves same-route scroll and lands hash links below the sticky topbar.
- Split panel drag state now emits JavaScript booleans so Alpine can resize panes reliably.
Upgrade Notes
This should be a low-disruption upgrade for apps already on0.5.x, but it is
worth checking any custom app-shell navigation and local HTMX fragments:
- If a local fragment swap lives inside a boosted shell, prefer
hx-select="unset"or a ChirpUI macro that emits it for you. - If you were hacking nav tree parents to behave as links, try
nav_tree(branch_mode="linked"). - If you have custom CSS targeting newly exposed nav/tree/timeline state hooks,
keep overrides in
@layer app.overrides.
Verification
Release prep passed:
uv run poe ciuv run poe ci-browsermake release-preflightmake build