● Modern Kubernetes TUI

Your cluster,
in plain sight.

Navigation only when you ask. kute makes the cluster's actual state visible without digging — every view answers a question instead of leaving you to assemble it from scattered objects, events, and describe pages.

g d — three keys from anywhere to Deployments. No chords, no modifier keys, no memorizing.
01 · the problem

Kute turns Kubernetes data into operational answers.

Each view brings together the relevant resources, events, conditions, and relationships to explain what is happening, why it matters, and where to investigate next.

“Where is it broken?”

all-namespaces triage

Unhealthy sorts first, healthy namespaces collapse — the whole cluster's problems on one screen.

“Why is it broken?”

pod detail & logs

Last termination on top — exit 137, OOMKilled, 4m ago — with logs across restart boundaries.

“What changed?”

incident timeline

Rollouts, restarts, and warnings from the last 30 minutes in one deduped, ordered stream.

02 · the approach

Data by default. Navigation on demand.

The resting state is one full-width table of live resources. Where you are lives in a one-line breadcrumb; where you can go lives behind a single key. Press g and a jump palette appears — fuzzy search across every kind, resource name, namespace, and context, with the eight daily kinds ranked on top, each aliased by its highlighted first letter.

  • g — jump anywhere. Kinds, resources, namespaces, contexts — one fuzzy corpus.
  • n — switch namespace. Live health per namespace · opens pre-selected on the last one, so n ↵ alt-tabs straight back.
  • c — switch context. Pre-probed reachability · each context remembers its place.

One palette shell, three scopes. Every one opens pre-selected on the most recently visited other entry — alt-tab semantics, like editor Ctrl-Tab — so alone toggles back. Same input, same selection, same keys — learn it once.

03 · principles

Six rules that hold on every screen.

Not a checklist to consult — the same six decisions, applied consistently, everywhere.

01

One skeleton everywhere

Header bar · body · keybar. Errors, empty states, and loading are not a different-looking app — the shell paints in the first frame and only the rows change.

02

Never blank out what you have

Connection lost mid-incident? The last snapshot stays browsable, desaturated, with an age stamp and a visible retry countdown. Stale data beats no data.

03

Errors are inline and actionable

No modal ever blocks browsing. A 403 is a card with the verbatim message and four ways out — jump elsewhere, switch context, copy the error, ask who-can.

04

Answer “why is it broken?” first

A crashlooping pod opens with its last termination — never buried under labels. Unhealthy sorts first in every list; condition messages render verbatim.

05

Kinds are data, not code

Every resource kind — built-in or CRD — is a registry entry: columns, status derivation, verbs. New kind support is data entry, not a new screen.

06

Zero chrome until earned

No forwards, no chip, no mark column. The header, strips, and keybar grow indicators only while the state they describe exists.

04 · the surface

One skeleton, forty screens.

Every view is the same recipe — header bar · body · keybar — rendered from a kind registry and a command table. Pods, nodes, Helm releases, and a CRD kute has never seen all arrive through the same machinery.

Browse

  • Resource tablespods, deployments, nodes, every kind
  • Jump paletteg · fuzzy + first-letter aliases
  • All-namespaces triageunhealthy first, healthy collapsed
  • Cluster overviewa routing layer, not a dashboard
  • CRDs + custom resourcesdiscovered, never configured

Diagnose

  • Pod & node detailtermination reason on top
  • Live logsfollow, filter, restart boundaries
  • Events, dedupedwarnings first · ↵ routes to object
  • Incident timelinewhat changed in the last 30m
  • RBAC who-cananswers from the watch cache

Act

  • Exec & port-forwardwill-run lines · session registry
  • YAML view + editdry-run before apply, conflicts surfaced
  • Scale & rollout restartinline, reversible, no modal
  • Set image & resourcestag-first prompt, limits next to live usage
  • Labels, annotations & config dataedit with joins and consumers visible
  • Bulk operationsfilter-then-mark grammar
  • Secret decodein memory only, re-masked on exit

Extend

  • Helm releasesbrowse without the helm binary
  • Ingress routing tableslive backends, not describe pages
  • Gateway APIroute ⇄ gateway joined both ways
  • Dark + light themesone semantic token struct
  • Degrades gracefully256-color, ASCII glyph fallbacks
  • Update noticeambient chip, never self-updates
05 · trust

No magic, friction where it counts.

Every action shows its command. Exec, forward, scale, bulk delete — the exact kubectl equivalent is printed before anything runs. Copyable documentation, not abstraction.

will run kubectl scale deploy/nebula-qa --replicas=6
reversible cordon — executes immediately
delete, rollout restart inline y/N in the keybar — no modal
prod / drain type-the-name modal — the only red border in the app

PROD comes from the prodContexts list in ~/.config/kute/config.yaml, never a name heuristic. Secrets decode in memory only and re-mask on exit.

06 · non-goals

What kute refuses to be.

not a dashboard

The overview screen routes you to existing views; the pods table stays the resting state. No charts for their own sake.

not a terminal emulator

Exec suspends kute and hands the tty to kubectl, like git hands off to your editor. Exit restores exactly where you were.

not a deployment pipeline

Helm rollback yes; install-from-repo no — shipping software is CI's job, and kute won't pretend otherwise.

not a config project

No setup wizard, no plugin system, no per-CRD layout files. Discovery and sensible defaults over knobs.

An operator's screen belongs to the cluster, not the tool. If every view answers a question instead of listing objects — and every action shows exactly what it will run — kute becomes the most honest window into a cluster: nothing hidden, nothing to dig for. the bet
SINGLE BINARY

Install kute.

Explore the full Kute experience with kute --demo—a built-in fake cluster with no setup or configuration.

$curl -fsSL https://kute.dev/install.sh | sh

Or install with Homebrew

$brew install kute-dev/tap/kute