Introduction
dado is a Go library for building terminal UIs. It provides a curated set of ready-made components — data grids, charts, modals, forms, graphs, and more — built on top of rivo/tview and gdamore/tcell.
What dado gives you
Section titled “What dado gives you”| Feature | Detail |
|---|---|
| Component catalog | 26+ production-ready widgets |
| Theme system | 26 built-in themes, runtime switching |
| Event system | Typed focus / key / change / submit events |
| Layout helpers | Flex and grid layouts built on tview primitives |
| Data binding | SliceSource and Changeset for live data updates |
When to use dado
Section titled “When to use dado”dado is a good fit when you need:
- A polished internal tool, CLI dashboard, or DevOps TUI
- Consistent theming across many components without hand-rolling styles
- A component you’d otherwise spend days building from tview primitives
dado is not a replacement for tview itself. You can mix dado components with
plain tview primitives freely — dado types embed tview’s Box and satisfy
tview.Primitive.
What dado is not
Section titled “What dado is not”- A web framework — dado is terminal-only
- An abstraction over multiple TUI backends — dado targets tcell/tview
Architecture overview
Section titled “Architecture overview”your app └── dado.App (tview.Application wrapper) ├── theme.Provider (resolves colours, fonts) ├── navigation.Stack (push/pop page stack) └── components.* (the widget catalog)Each component follows the same lifecycle:
- Construct —
components.NewFoo() - Configure — chain
Set*methods - Mount — add to a layout or set as root
- Event — react via
OnChange,OnSubmit,OnFocus, …
See Lifecycle for the full picture.