gcla
gowid
Go

Compositional widgets for terminal user interfaces, written in Go, inspired by urwid.

Last updated Jun 27, 2026
713
Stars
34
Forks
8
Issues
0
Stars/day
Attention Score
28
Language breakdown
No language data available.
Files click to expand
README

# Terminal User Interface Widgets in Go

Gowid provides widgets and a framework for making terminal user interfaces. It's written in Go and inspired by urwid.

Widgets out-of-the-box include:

- input components like button, checkbox and an editable text field with support for passwords - layout components for arranging widgets in columns, rows and a grid - structured components - a tree, an infinite list and a table - pre-canned widgets - a progress bar, a modal dialog, a bar graph and a menu - a VT220-compatible terminal widget, heavily cribbed from urwid :smiley:

All widgets support interaction with the mouse when the terminal allows.

Gowid is built on top of the fantastic tcell package.

There are many alternatives to gowid - see Similar Projects

The most developed gowid application is currently termshark, a terminal UI for tshark.

Installation

go get github.com/gcla/gowid/...

Examples

Make sure $GOPATH/bin is in your PATH (or ~/go/bin if GOPATH isn't set), then tab complete "gowid-" e.g.

gowid-fib

Here is a port of urwid's palette example:

Here is urwid's graph example:

And urwid's fibonacci example:

A demonstration of gowid's terminal widget, a port of urwid's terminal widget:

Finally, here is an animation of termshark in action:

Hello World

This example is an attempt to mimic urwid's "Hello World" example.

package main

import ( "github.com/gcla/gowid" "github.com/gcla/gowid/widgets/divider" "github.com/gcla/gowid/widgets/pile" "github.com/gcla/gowid/widgets/styled" "github.com/gcla/gowid/widgets/text" "github.com/gcla/gowid/widgets/vpadding" )

//======================================================================

func main() {

palette := gowid.Palette{ "banner": gowid.MakePaletteEntry(gowid.ColorWhite, gowid.MakeRGBColor("#60d")), "streak": gowid.MakePaletteEntry(gowid.ColorNone, gowid.MakeRGBColor("#60a")), "inside": gowid.MakePaletteEntry(gowid.ColorNone, gowid.MakeRGBColor("#808")), "outside": gowid.MakePaletteEntry(gowid.ColorNone, gowid.MakeRGBColor("#a06")), "bg": gowid.MakePaletteEntry(gowid.ColorNone, gowid.MakeRGBColor("#d06")), }

div := divider.NewBlank() outside := styled.New(div, gowid.MakePaletteRef("outside")) inside := styled.New(div, gowid.MakePaletteRef("inside"))

helloworld := styled.New( text.NewFromContentExt( text.NewContent([]text.ContentSegment{ text.StyledContent("Hello World", gowid.MakePaletteRef("banner")), }), text.Options{ Align: gowid.HAlignMiddle{}, }, ), gowid.MakePaletteRef("streak"), )

f := gowid.RenderFlow{}

view := styled.New( vpadding.New( pile.New([]gowid.IContainerWidget{ &gowid.ContainerWidget{IWidget: outside, D: f}, &gowid.ContainerWidget{IWidget: inside, D: f}, &gowid.ContainerWidget{IWidget: helloworld, D: f}, &gowid.ContainerWidget{IWidget: inside, D: f}, &gowid.ContainerWidget{IWidget: outside, D: f}, }), gowid.VAlignMiddle{}, f), gowid.MakePaletteRef("bg"), )

app, _ := gowid.NewApp(gowid.AppArgs{ View: view, Palette: &palette, }) app.SimpleMainLoop() }

Running the example above displays this:

Documentation

- The beginnings of a tutorial - A list of most of the widgets - Some FAQs (which I guessed at...) - Some gowid programming tricks

Similar Projects

Gowid is late to the TUI party. There are many options from which to choose - please read https://appliedgo.net/tui/ for a nice summary for the Go language. Here is a selection:

- urwid - one of the oldest, for those working in python - tview - active, polished, concise, lots of widgets, Go - termui - focus on graphing and dataviz, Go - gocui - focus on layout, good input options, mouse support, Go - clui - active, many widgets, mouse support, Go - tui-go - QT-inspired, experimental, nice examples, Go

Dependencies

Gowid depends on these great open-source packages:

  • urwid - not a Go-dependency, but the model for most of gowid's design
  • tcell - a cell based view for text terminals, like xterm, inspired by termbox
  • asciigraph - lightweight ASCII line-graphs for Go
  • logrus - structured pluggable logging for Go
  • testify - tools for testifying that your code will behave as you intend

Contact

  • The author - Graham Clark (grclark@gmail.com)

License

License: MIT

🔗 More in this category

© 2026 GitRepoTrend · gcla/gowid · Updated daily from GitHub