Slide 1

Slide 1 text

Golang Prague #15, 2024 1 Build nice terminal UI with bubble tea Ladislav Prskavec, Pure Storage, @abtris

Slide 2

Slide 2 text

Golang Prague #15, 2024 2 What is Bubble Tea?

Slide 3

Slide 3 text

Golang Prague #15, 2024 3 What is Bubble Tea? The fun, functional and stateful way to build terminal apps. – A Go framework based on The Elm Architecture –

Slide 4

Slide 4 text

Golang Prague #15, 2024 4 Bubble Tea Architecture

Slide 5

Slide 5 text

Golang Prague #15, 2024 5 Model type model struct { choices []string cursor int selected map[int]struct{} }

Slide 6

Slide 6 text

Golang Prague #15, 2024 6 Methods func (m model) Init() tea.Cmd func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) func (m model) View() string

Slide 7

Slide 7 text

Golang Prague #15, 2024 7 Commands and Messages func checkServer() tea.Msg { c := &http.Client{Timeout: 10 * time.Second} res, err := c.Get(url) if err != nil { return errMsg{err} } return statusMsg(res.StatusCode) } type statusMsg int type errMsg struct{ err error } func (e errMsg) Error() string { return e.err.Error() }

Slide 8

Slide 8 text

Golang Prague #15, 2024 8 One More Thing About Commands func cmdWithArg(id int) tea.Cmd { return func() tea.Msg { return someMsg{id: id} } }

Slide 9

Slide 9 text

Golang Prague #15, 2024 9 func checkSomeUrl(url string) tea.Cmd { return func() tea.Msg { c := &http.Client{Timeout: 10 * time.Second} res, err := c.Get(url) if err != nil { return errMsg{err} } return statusMsg(res.StatusCode) } }

Slide 10

Slide 10 text

Golang Prague #15, 2024 10 Who is behind this?

Slide 11

Slide 11 text

Golang Prague #15, 2024 11 Who is behind this? - startup, NY – Charm Founders: – – Toby Padilla – Christian Rocha

Slide 12

Slide 12 text

Golang Prague #15, 2024 12 Charm

Slide 13

Slide 13 text

Golang Prague #15, 2024 13 Apps - Send emails from your terminal – Pop - AI on the command line – Mods - The SSH directory – Wishlist - Your CLI home video recorder – VHS - The mighty, self-hostable Git server for the command line – SoftServe - Render markdown on the CLI, with pizzazz! – Glow - A personal key value store – Skate - A tool for glamorous shell scripts – Gum

Slide 14

Slide 14 text

Golang Prague #15, 2024 14 SoftServe --- # Jump directly to a repo in the TUI ssh git.charm.sh -t soft-serve --- # Print out a directory tree for a repo ssh git.charm.sh repo tree soft-serve --- # Print a specific file ssh git.charm.sh repo blob soft-serve cmd/soft/main.go --- # Print a file with syntax highlighting and line numbers ssh git.charm.sh repo blob soft-serve cmd/soft/main.go -c -l

Slide 15

Slide 15 text

Golang Prague #15, 2024 15

Slide 16

Slide 16 text

Golang Prague #15, 2024 16 Demo Let's Build Simple CLI RSS Reader

Slide 17

Slide 17 text

Golang Prague #15, 2024 17

Slide 18

Slide 18 text

Golang Prague #15, 2024 18 Alternatives

Slide 19

Slide 19 text

Golang Prague #15, 2024 19 - Terminal UI library with rich, interactive widgets — written in Golang – TView – TCell - Tea provides an Elm inspired functional framework for interactive command-line programs. – GoTea - Golang terminal dashboard – TermUI

Slide 20

Slide 20 text

Golang Prague #15, 2024 20 Q+A Questions?

Slide 21

Slide 21 text

Golang Prague #15, 2024 21 Contact Ladislav Prskavec, Pure Storage Follow me on Mastodon or LinkedIn - www.prskavec.net Follow Prague Go Meetup on and - www.gomeetupprague.cz Mastodon YouTube

Slide 22

Slide 22 text

Golang Prague #15, 2024 22 Links - simple RSS reader as TUI – Demo - A powerful little TUI framework – Bubble Tea – Commands tutorial - TUI components for Bubble Tea – Bubbles - Style definitions for nice terminal layouts – LipGloss - Stylesheet-based markdown rendering for your CLI apps – Glamour - Build terminal forms and prompts – Huh - Your CLI home video recorder – VHS