Skip to content

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.

FeatureDetail
Component catalog26+ production-ready widgets
Theme system26 built-in themes, runtime switching
Event systemTyped focus / key / change / submit events
Layout helpersFlex and grid layouts built on tview primitives
Data bindingSliceSource and Changeset for live data updates

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.

  • A web framework — dado is terminal-only
  • An abstraction over multiple TUI backends — dado targets tcell/tview
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:

  1. Constructcomponents.NewFoo()
  2. Configure — chain Set* methods
  3. Mount — add to a layout or set as root
  4. Event — react via OnChange, OnSubmit, OnFocus, …

See Lifecycle for the full picture.