"The terminal is not a fallback. It is the most powerful canvas a developer has." — Charm Engineering Philosophy
Welcome. You are about to go from writing basic fmt.Println CLI scripts to deploying multi-user, SSH-accessible, animated, physics-driven Terminal User Interfaces that run at 60fps.
This course is structured the way we onboard engineers at Charm. It is direct, technical, and complete. Every concept is explained from first principles. Every code sample runs.
charm-masterclass/
├── cmd
│ └── main.go
├── go.mod
├── internal
│ ├── config
│ │ └── config.go
│ └── ui
│ ├── app.go
│ ├── styles.go
│ └── submodels.go
├── modules
│ ├── module-1
│ │ ├── 01-mvp-architecture.md
│ │ ├── 02-lipgloss-styling.md
│ │ └── status-dashboard.go
│ ├── module-2
│ │ ├── 01-bubbles-customization.md
│ │ ├── 02-huh-forms.md
│ │ └── server-config-wizard.go
│ ├── module-3
│ │ ├── 01-harmonica-animations.md
│ │ └── animated-dashboard.go
│ └── module-4
│ ├── 01-wish-ssh.md
│ └── chat-room.go
├── pkg
│ └── models
│ └── types.go
├── README.md
└── thumbnail.png
| Module | Topic | Difficulty | Est. Time |
|---|---|---|---|
| Module 1 | The v2 Core — Engine & Aesthetics | ⭐⭐ Intermediate | 3–4 hrs |
| Module 2 | The Logic of Interaction — bubbles & huh | ⭐⭐⭐ Advanced | 4–5 hrs |
| Module 3 | Physics & Polish — harmonica & log | ⭐⭐⭐ Advanced | 3–4 hrs |
| Module 4 | Cloud & Deployment — wish & x | ⭐⭐⭐⭐ Expert | 5–6 hrs |
Before starting, make sure you have:
# Go 1.22 or later
go version
# A terminal that supports true color (iTerm2, Kitty, Wezterm, Windows Terminal)# Check 256-color support:echo$TERM# should be xterm-256color or similarecho$COLORTERM# should be truecolor or 24bitYou should be comfortable with:
- Basic Go syntax (structs, interfaces, goroutines, channels)
- Running
go run .andgo mod tidy - SSH basics (what a public key is)
You do NOT need prior TUI experience. We start from zero.
# Clone or copy the template for your own project
cp -r template/ my-tui-app
cd my-tui-app
go mod tidy
go run ./cmd/...┌─────────────────────────────────────────────────────────────┐
│ YOUR TUI APPLICATION │
├─────────────────────────────────────────────────────────────┤
│ charm.land/v2/bubbletea │ The event loop & render engine │
│ charm.land/v2/lipgloss │ Styles, colors, layout │
│ charm.land/v2/bubbles │ Ready-made UI components │
│ charm.land/v2/huh │ Forms, inputs, wizards │
├─────────────────────────────────────────────────────────────┤
│ github.com/charmbracelet/harmonica │ Spring physics │
│ github.com/charmbracelet/log │ Structured logging │
│ github.com/charmbracelet/wish │ SSH server framework │
│ github.com/charmbracelet/x │ ANSI + image utils │
└─────────────────────────────────────────────────────────────┘
Start with Module 1 →
module-01-core/01-mvp-architecture.md