Skip to content

TUI stack: Charm

CLAUDE.md keeps the rule: Charm v2 libraries, charm.land/... import paths, never the v1 github.com/charmbracelet/... paths (Harmonica has no v2).

The TUI is built on Charm libraries. Every library except Harmonica is on v2, and the v2 releases use the charm.land/... vanity import paths, not github.com/charmbracelet/.... Don't mix in v1 imports. Many examples online still show the old paths and v1 APIs.

Library Import path GitHub Role in Labmill
Bubble Tea charm.land/bubbletea/v2 https://github.com/charmbracelet/bubbletea TUI framework (Elm-style model/update/view) for the chat pane and job dashboard
Bubbles charm.land/bubbles/v2 https://github.com/charmbracelet/bubbles Ready-made components: textarea for chat input, viewport, list, table, spinner, progress
Huh charm.land/huh/v2 https://github.com/charmbracelet/huh Forms and prompts: the confirm-before-moving-data step, choosing a cluster, the clusters.yaml setup wizard, and asking for the inputs a skill needs
Lip Gloss charm.land/lipgloss/v2 https://github.com/charmbracelet/lipgloss Styling and layout (panes, borders, colors)
Glamour charm.land/glamour/v2 https://github.com/charmbracelet/glamour Renders markdown in the terminal: Claude's replies, skill reference docs, and generated scripts shown for review
Log charm.land/log/v2 https://github.com/charmbracelet/log Logging, especially for headless Agent mode
Harmonica github.com/charmbracelet/harmonica (v0.2, no v2) https://github.com/charmbracelet/harmonica Spring-physics animation for progress and transitions
Wish charm.land/wish/v2 https://github.com/charmbracelet/wish Serves Bubble Tea apps over SSH. Using it would add a server component, which conflicts with the "nothing left running permanently" rule in CLAUDE.md ("Design constraints to preserve"). Get it decided before relying on it.

The current Charm v2 go.mod files declare go 1.25–1.26, which is why the project minimum is Go 1.26.