charm-bubbles

Implements interactive Go TUI components using the Bubbles v2 library for Bubble Tea.

1|1|Updated Jul 6, 2026
One-click install
npx skills add https://github.com/gabesan21/project-of-projects --skill charm-bubbles-gabesan21
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: charm-bubbles
Source: https://github.com/gabesan21/project-of-projects/tree/main/.agents/skills/charm-bubbles
Command: npx skills add https://github.com/gabesan21/project-of-projects --skill charm-bubbles-gabesan21

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires charm.land/bubbles/v2, charm.land/bubbletea/v2, charm.land/lipgloss/v2.

What problem does it solve? Building interactive terminal user interfaces in Go requires correctly composing ready-made components like lists, viewports, and spinners, and the Bubbles v2 API breaks many v1 patterns, causing subtle bugs like frozen spinners and broken layouts. ## Core Features & Use Cases - Component usage contracts: Covers list, viewport, textinput, textarea, spinner, progress, table, paginator, help, and key components from charm.land/bubbles/v2 with correct v2 construction and message-forwarding patterns. - v1-to-v2 migration guardrails: Flags ghost v1 APIs such as tea.KeyMsg, NewModel(), direct Width/Height fields, and tea.WithAltScreen() that no longer exist in v2. - Use Case: When building a kanban board TUI in Go, use this Skill to wire a filterable list of cards with a glamour-rendered markdown viewport, async spinner feedback, and a help footer driven by a shared key.Binding map. ## Quick Start Use the charm-bubbles skill to build a Go TUI screen with a navigable list, a markdown viewport, and a spinner for async actions.

Frequently Asked Questions about charm-bubbles

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I build a TUI list in Go with Bubble Tea?▼

Use the list component from charm.land/bubbles/v2 by implementing Title, Description, and FilterValue on your item type, then call list.New with a delegate. Forward all messages to m.list.Update in the host model and resize it on tea.WindowSizeMsg.

What is the difference between Bubbles v1 and v2?▼

Bubbles v2 (charm.land/bubbles/v2) requires Bubble Tea v2 and Lip Gloss v2 and removes v1 APIs like tea.KeyMsg, NewModel(), exported Width/Height fields, and tea.WithAltScreen(). Sizes are set via SetWidth/SetHeight/SetSize, and alt screen is a field on tea.View.

Why is my Bubble Tea spinner not animating?▼

The spinner freezes when the host Update does not forward spinner.TickMsg to m.spinner.Update or discards the returned tea.Cmd. Start the animation by returning m.spinner.Tick from Init, often batched with your async command.

How do I show markdown in a Bubble Tea viewport?▼

Render the markdown to an ANSI string with glamour, then pass it to viewport.SetContent and forward messages to the viewport for scrolling. Match the glamour renderer width to the viewport width to avoid cutting escape sequences when wrapping.

Does Bubbles v2 detect light or dark terminal backgrounds automatically?▼

No, v2 does not detect the terminal background. Call DefaultStyles(isDark) on list, help, textinput, or textarea, and determine isDark via tea.RequestBackgroundColor or lipgloss.HasDarkBackground(os.Stdin, os.Stdout).

When should I use huh instead of composing textinput components?▼

Use huh for complete declarative forms such as multi-field wizards, instead of hand-composing textinput and textarea bubbles. Individual bubbles suit custom screens where you control layout and key handling directly.