54 Components
Data grids, charts, modals, forms, git graphs, node graphs, and more — all ready to drop into your TUI app.

54 Components
Data grids, charts, modals, forms, git graphs, node graphs, and more — all ready to drop into your TUI app.
26 Built-in Themes
Nord, Dracula, Catppuccin, Tokyo Night, Gruvbox, Rosé Pine, and many more. Switch themes at runtime with a single call.
Built on tcell
dado renders directly on gdamore/tcell
through its own widget core, adding a composable component model, theming,
and a typed event system on top of a rock-solid foundation.
Typed Event System
Focus, key, change, submit, and activate events flow through a consistent typed interface across every component.
package main
import ( "log"
"github.com/atterpac/dado/components" "github.com/atterpac/dado/layout" "github.com/atterpac/dado/theme" "github.com/atterpac/dado/theme/themes" "github.com/atterpac/dado/core")
// HomeView is a page in the app. Embedding *components.ComponentBase// supplies the nav.Component lifecycle (Name/Start/Stop/Hints) for free and// delegates rendering to the wrapped core.Widget — here a *core.Flex.// No lifecycle boilerplate required.type HomeView struct { *components.ComponentBase}
func NewHomeView() *HomeView { flex := core.NewFlex().SetDirection(core.Row)
// Drop components straight into the layout. flex.AddItem(components.NewBadge("Ready").SetVariant(components.BadgeSuccess), 0, 1, false) flex.AddItem(components.NewBadge("3").SetVariant(components.BadgeError).SetPill(true), 0, 1, false)
return &HomeView{ ComponentBase: components.NewComponentBase(flex).SetName("Home"), }}
func main() { theme.SetProvider(themes.Nord) // one of 26 built-in themes
app := layout.NewApp(layout.AppConfig{}) app.Pages().Push(NewHomeView())
if err := app.Run(); err != nil { log.Fatal(err) }}