Skip to content

The TUI

kubelings (in cmd/kubelings) is a bubbletea terminal UI. It is UI-only — every action delegates to the bash runner, so the TUI and CLI stay in lockstep.

Terminal window
just tui # build + launch
# or
go run ./cmd/kubelings
  • Welcome splash on launch (project, author, how-it-works, cluster lifecycle). Any key enters; a reopens it.
  • Left — lessons grouped by module with progress markers ◌ / ◐ / ✓.
  • Right — the selected lesson: description, status, and a Cluster block (local kind context, node count, k8s version, namespace kubelings, and the iximiuz playground it mirrors).
  • Footer — the key bar and a spinner while a task runs.
KeyAction
↑/↓ j/knavigate lessons
/ spaceplay — cluster up (if needed) → init → drop into shell
iinit the scenario
vverify your fix
rreset (wipe namespace + re-init)
hshow hint
sshow solution (asks to confirm)
tshell wired to the cluster
u / dcluster up / down
grefresh status & progress
aabout / welcome
?help
qquit (cluster stays up)

Pressing on a lesson does the whole setup in one keystroke:

  1. brings the kind cluster up if it isn’t already,
  2. runs the lesson’s init tasks (builds the broken scenario),
  3. drops you into a shell wired to the cluster (context kind-kubelings, namespace kubelings) that prints the task.

Inside that shell you have helper commands:

task · hint · verify · solution · klreset · k=kubectl

Type verify to run the check without leaving the shell; exit returns to the TUI and the marker updates.

Starting a different scenario while one is still active prompts destroy / keep / cancel — so you don’t clobber in-progress work by accident.

Markers are persisted in .labctl/progress.tsv and shared with the CLI, so whether you run a lesson from the TUI or run-challenge-local.sh, the state stays in sync.