Loading skill
Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generate Bubble Tea (Go) TUI application structure with models, commands, and views using the Elm architecture.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✓→✓ | = Same ✓ | -20% | 0% |
| case-01 | ✗→✗ | = Same ✗ | 32% | 0% |
| case-02 | ✗→✗ | = Same ✗ | -30% | 0% |
| case-03 | ✗→✗ | = Same ✗ | -14% | 0% |
| case-04 | ✗→✗ | = Same ✗ | 178% | 0% |
Generate Bubble Tea TUI applications with Go and Elm architecture.
Invoke this skill when you need to:
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | projectName | string | Yes | Project name | | modulePath | string | Yes | Go module path | | components | array | No | Component definitions |
gopackage main import ( "fmt" "os" tea "github.com/charmbracelet/bubbletea" ) func main() { p := tea.NewProgram(initialModel(), tea.WithAltScreen()) if _, err := p.Run(); err != nil { fmt.Printf("Error: %v", err) os.Exit(1) } }
gopackage main import ( "github.com/charmbracelet/bubbles/list" "github.com/charmbracelet/bubbles/textinput" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/lipgloss" ) type model struct { list list.Model textInput textinput.Model err error quitting bool } func initialModel() model { ti := textinput.New() ti.Placeholder = "Enter search term..." ti.Focus() items := []list.Item{ item{title: "Option 1", desc: "First option"}, item{title: "Option 2", desc: "Second option"}, } l := list.New(items, list.NewDefaultDelegate(), 0, 0) l.Title = "Select an option" return model{ textInput: ti, list: l, } } func (m model) Init() tea.Cmd { return textinput.Blink } func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case tea.KeyMsg: switch msg.String() { case "ctrl+c", "q": m.quitting = true return m, tea.Quit case "enter": // Handle selection return m, nil } case tea.WindowSizeMsg: m.list.SetSize(msg.Width, msg.Height-4) } var cmd tea.Cmd m.list, cmd = m.list.Update(msg) return m, cmd } func (m model) View() string { if m.quitting { return "Goodbye!\n" } return lipgloss.JoinVertical( lipgloss.Left, m.textInput.View(), m.list.View(), ) }
gopackage main type item struct { title string desc string } func (i item) Title() string { return i.title } func (i item) Description() string { return i.desc } func (i item) FilterValue() string { return i.title }
gopackage main import "github.com/charmbracelet/lipgloss" var ( titleStyle = lipgloss.NewStyle(). Bold(true). Foreground(lipgloss.Color("205")). MarginBottom(1) selectedStyle = lipgloss.NewStyle(). Foreground(lipgloss.Color("170")). Bold(true) normalStyle = lipgloss.NewStyle(). Foreground(lipgloss.Color("252")) helpStyle = lipgloss.NewStyle(). Foreground(lipgloss.Color("241")) )
gorequire ( github.com/charmbracelet/bubbletea v0.25.0 github.com/charmbracelet/bubbles v0.17.0 github.com/charmbracelet/lipgloss v0.9.0 )
Other measured skills in the registry, with their headline benchmark lift.