finds.dev← search

// the find

charmbracelet/bubbletea

★ 43,118 · Go · MIT · updated Jun 2026

A powerful little TUI framework 🏗

Bubbletea is a TUI framework for Go based on the Elm Architecture — you define a model, an update function, and a view function, and the runtime handles rendering and event dispatch. It's the dominant choice in the Go TUI ecosystem, used by major tools like CockroachDB, Trufflehog, and chezmoi. If you're building an interactive terminal app in Go, this is the starting point.

The Elm Architecture maps cleanly onto Go structs and interfaces — the unidirectional data flow means TUI state is actually testable, unlike raw termbox code. The v2 renderer is cell-based with dirty-tracking, so it doesn't redraw the entire screen on every update. The ecosystem is real: Bubbles gives you ready-made components (text input, viewport, spinner, list) and Lip Gloss handles layout and styling, so you're not building from scratch. Golden-file tests for terminal output (testdata/*.golden) mean you can regression-test rendering without a real TTY.

The v1-to-v2 migration is a genuine breaking change — the import path moved to charm.land/bubbletea/v2 and the View return type changed from string to tea.View, which will silently break any community components still on v1. Composing multiple models is awkward: the standard pattern of embedding child models and routing messages through parent Update functions gets verbose fast, and there's no built-in component lifecycle (mount/unmount). Debugging is a pain — you can't use fmt.Println or standard logging to stdout while the TUI is running, and the headless Delve workflow is genuinely clunky. There's also no layout engine built in; Lip Gloss handles styling but you're still doing manual string concatenation for anything grid-like.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →