p10node/k10s: Kubernetes TUI you may click on. Instantaneous search, logs/exec/port-forward, 7 themes, context-aware AI. Single Go binary. · GitHub



An actual terminal seize of k10s demo operating – simply screenshot, on the offline demo backend. Every body in these docs comes out of the operating binary, by no means hand-drawn.

A cluster dashboard is one thing you open twenty instances a day, normally whereas
one thing is on fireplace. The two issues that matter are how briskly it opens
and how little you must keep in mind.

  • Nothing is hidden behind memorised keys. The actions that apply to the
    factor you chose are listed, proper there, in their very own pane. Click one,
    or press the letter subsequent to it.
  • Your mouse works. Click a row, click on a pane, click on [ zoom ], click on
    ns default ▾, scroll the desk. Every border button is actual.
  • One search field for the entire cluster. ctrl+p searches useful resource sorts
    and objects collectively. No prefix language to study.
  • It opens immediately. Startup registers zero watches and waits for
    nothing – informers begin lazily, per sort, the primary time you have a look at
    one. Opening Pods watches pods, not each Secret and Event you personal.
    (how, and the regression guards)
  • AI that may see the display. ctrl+a, ask in plain English. The present
    context, namespace, sort and chosen object are injected into the immediate,
    so “why is that this pod unhealthy?” means this pod.
  • It updates itself. /replace installs the most recent launch over the
    operating binary – checksum-verified, atomic, gives to restart into it.
  • Your k9s-style command plugins match. Put scoped shortcuts in
    ~/.k10s/plugins.yaml; they seem beside built-in actions and obtain the
    chosen object, namespace, context and column values.

Try it in 30 seconds (no cluster required)

k10s ships an offline demo backend: a sensible cluster to click on round in,
together with a CrashLoopBackOff to poke at. It is opt-in, as a result of pattern
knowledge ought to by no means be mistaken on your machine.

git clone https://github.com/p10node/k10s && cd k10s
go run . demo     # the pattern cluster - pretend knowledge, clearly labelled
go run .          # your actual cluster, or "No cluster" if there is not one

The demo is a context, not a mode. k10s demo opens on it, /demo
switches to it from anyplace, and :ctx at all times lists it (labelled
k10s demo · pattern knowledge, with a legend underneath the listing). To depart it,
choose another context
– there isn’t any separate exit. While it’s up the
header carries a DEMO marker, so no body of it may be mistaken for an actual
cluster.

Plain k10s reads the identical kubeconfig kubectl does ($KUBECONFIG, else
~/.kube/config) and exhibits what that context can attain – and nothing else.
With no kubeconfig, or a context whose API server doesn’t reply, the principle
panel says No cluster and factors on the means in: r retries, :ctx picks
one other context, /setup has the kubectl and kubeconfig hyperlinks.
docs/cluster-setup.md is similar information, longer.

curl -fsSL https://p10node.com/k10s/install.sh | sh

macOS and Linux, amd64 and arm64. It picks the appropriate prebuilt binary,
verifies its sha256 towards the discharge manifest, and installs it into
/usr/native/bin (or ~/.native/bin when that wants a password it can’t
ask for). --dir, --version and --no-sudo are in docs/install.md,
together with find out how to learn it earlier than you run it and the matching
uninstall.sh.

With Go on the field:

go set up github.com/p10node/k10s@newest

Or from a clone, which additionally stamps the model into the binary:

git clone https://github.com/p10node/k10s && cd k10s
simply set up                 # → $GOBIN/k10s, version-stamped

Prebuilt static binaries for darwin/amd64, darwin/arm64, linux/amd64,
linux/arm64 and home windows/amd64
are revealed on each tag — Windows is the
one platform the installer script sends to the
release page as a substitute. Every later
improve is simply:

Then run it:

k10s                  # your present kubeconfig context
k10s demo             # the built-in pattern cluster, no cluster wanted
k10s --readonly       # look, by no means contact: nothing that adjustments the cluster
k10s --version        # which construct is that this

Every useful resource, grouped the best way you concentrate on them

30 sorts throughout Workloads · Network · Config · Storage · RBAC · Cluster ·
Custom Resources
, every with a stay row rely for the present namespace.
Your CRDs are found routinely – no configuration.

Groups fold: area, left or a click on on the header, remembered throughout
restarts, with Config/Storage/RBAC folded to start with. A folded group additionally
asks your cluster for nothing – the sidebar is what decides which sorts get
counted, and counting is one restrict=1 request per seen sort, six at a
time, with refusals remembered.

Pods · Deployments · ReplicaSets · StatefulSets · DaemonSets · Jobs ·
CronJobs · HPAs · Services · Endpoints · Ingresses · NetworkInsurance policies ·
ConfigMaps · Secrets · ResourceQuotas · LimitRanges · PDBs · PVCs · PVs ·
StorageLessons · ServiceAccounts · Roles · RoleBindings · ClusterRoles ·
ClusterRoleBindings · Nodes · Namespaces · Events · CRDs · Custom Resources

The complete day-2 toolkit, on single keys

d describe actual kubectl describe output, from the API
y YAML the stay object
l logs follows (-f), latest on the backside, scroll again 500 traces
s shell an actual interactive exec session – uncooked TTY, resize-aware, in-panel
p port-forward actual SPDY ahead, begin/cease from the pane
m high pod/node metrics, per container, with requests vs limits
e edit · r restart · c scale rollout restart, scale, $EDITOR
o / u cordon-uncordon / drain – provided solely when Nodes is chosen
D delete purple affirm modal, as a result of it ought to be scary

Add your individual scoped actions with the core k9s plugins.yaml format. They can
run foreground or background instructions, request affirmation, override a
built-in shortcut intentionally, and are clickable in the identical pane. See the
plugin guide and installable example.

Logs that comply with, within the pane you had been already (z to zoom)

╭─ logs -f billing-worker-6f8d9c5b7-qq91x ────────────────────────────────── [ close ] [ restore ] ╮
│   8 2026-08-25T08:12:18.331Z INFO  http          GET  /v1/customers/me         200 3.1ms             │
│     hint=44b1e2f9                                                                               │
│   7 2026-08-25T08:12:21.660Z INFO  employee        flushed batch measurement=250 dur=41ms                 │
│   6 2026-08-25T08:12:25.019Z INFO  http          GET  /healthz             200 0.3ms             │
│   5 2026-08-25T08:12:31.402Z INFO  http          DELETE /v1/classes/9a1   204 5.7ms             │
│     hint=7c0d19ba                                                                               │
│   4 2026-08-25T08:12:33.881Z WARN  gc            pause=18ms heap=412Mi                           │
│   3 2026-08-25T08:12:40.117Z INFO  http          GET  /v1/orders/88213     200 7.4ms             │
│     hint=e21f8b05                                                                               │
│   2 2026-08-25T08:12:44.590Z INFO  metrics       scrape okay sequence=1842                           │
│   1 2026-08-25T08:12:51.008Z INFO  http          GET  /healthz             200 0.3ms             │
│ ● following  latest at backside                                        500 loaded · ↑ for older    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯

An AI immediate that already has the context

╭─ Prompt · plain textual content → AI · /instructions nonetheless work · esc shut ─ [ grow ] [ AI · claude-sonnet-5 ] ╮
│ ✦ ask about your cluster…   ·   /settings to alter supplier/mannequin                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
 ● AI mode — plain textual content goes to claude-sonnet-5    tab panes · enter open · ctrl+p search · f discover…

ctrl+a toggles it. Bring your individual key – OpenAI-compatible (so additionally
Groq, Together, OpenRouter, vLLM, Ollama, LM Studio, any native gateway) or
Anthropic. Answers open as a traditional textual content view you may scroll, zoom and
shut. No cluster knowledge leaves your machine except you press enter in AI
mode. The solely different community name k10s makes by itself is the once-a-day
replace verify, which asks GitHub for a model quantity and nothing else.

Eight built-in themes, plus your individual — previewed stay

tokyo-night (default) · catppuccin-mocha · dracula · nord ·
gruvbox-dark · solarized-dark · solarized-light · matrix

T cycles, /theme opens a picker that applies every theme as you progress
by the listing
– you decide it on the actual UI, not on a reputation – and esc
places again no matter you had. Drop a YAML palette into ~/.k10s/themes, restart,
and it seems in the identical picker — no rebuild wanted. See the
custom-theme guide and installable demo.

Details that solely present up after an extended day

  • Copy mode (ctrl+s) releases the mouse so your terminal can drag-select
    and duplicate – the one factor each mouse-capturing TUI breaks.
  • An sincere loading state as a substitute of “no sources discovered” whereas a watch
    remains to be syncing.
  • Namespace and context pickers that by no means ask you to kind a reputation.
  • No setup display. First run opens the cluster; each setting has a
    working default and /settings is one keystroke away while you need it.
  • A grow-able immediate (ctrl+z) – as a result of an extended kubectl line or an AI
    query doesn’t slot in a one-row area that scrolls sideways.
  • A terminal-too-small discover as a substitute of a garbled format.

k10s exists due to k9s. Credit the place
it’s due: k9s is mature, huge in scope, plugin-extensible, and it’s the
motive an entire technology of us stopped typing kubectl get pods all day.

k10s is youthful and intentionally narrower. The distinction is philosophy:

k9s k10s
Primary enter keyboard-first, command-driven mouse and keyboard, equally
Discovery you study the instructions the actions for the chosen object are listed on display
Search per-view filter, plus : to leap between views one field (ctrl+p) over sorts and objects
AI plugin territory in-built, with cluster context injected
Scope very massive, plugin ecosystem small, opinionated, core command-plugin compatibility
Upgrades your bundle supervisor k10s replace, self-replacing

Use k9s if you need the largest function floor, its full plugin ecosystem,
and years of manufacturing mileage. Use k10s if you need one thing you may hand
to a teammate who has by no means opened a TUI, and have them discover logs on their
personal in ten seconds.

The brief model – the full reference is here.

Key Action
tab / shift+tab cycle panes
↑↓ (j/ok) · pgup/pgdn · g/G transfer · web page · first/final
kind (Resources centered) instantaneous sort filter · esc clears
f discover: search each column of the open desk
ctrl+p search all the pieces – sorts and objects in a single field
enter / double-click open it: logs if it has them, else describe
z zoom / restore the centre pane
: / / command immediate (with a strategies popup)
ctrl+a AI immediate mode ✦
T / ctrl+t cycle themes
ctrl+s copy mode – launch the mouse to pick out & copy
click on / wheel anyplace in a pane selects it, clean area included
q / ctrl+c stop

Two prefixes, and each solely ever exhibits its personal set. / is k10s itself
(theme, settings, updates). : is the cluster, within the k9s vocabulary
– a
useful resource view, the namespace, the context, or one thing performing on what’s on
display. enter runs the highlighted suggestion instantly – no second journey
by the immediate.

/theme  /settings  /mouse  /replace  /model  /demo  /setup  /assist    k10s itself

:po  :deploy  :rs  :sts  :ds  :job  :cj  :hpa      workloads
:svc  :ep  :ing  :netpol                           community
:cm  :sec  :quota  :limits  :pdb                   config
:pvc  :pv  :sc                                     storage
:sa  :position  :rb  :crole  :crb                      rbac
:no  :ns  :ev  :crd  :cr                           cluster + customized

the brief type is what the popup lists; all types additionally solutions to its
plural and singular - :pods, :pod, :deployments, :persistentvolumes ...
and `:aliases` prints the lot

:po kube-system                 that sort, in that namespace (`all` works)
:svc api                        an argument that isn't a namespace filters
:ns   :ctx                      namespace / context picker
:ns    :ctx         change both outright
:aliases  :search   :filter   :scale   :q

/ is k10s, : is the cluster – namespace and context are :ns and
:ctx, not /ns and /context. :aliases prints the entire : vocabulary.

Anything that isn’t a / or : command runs as a shell command and its
output opens in the principle panel – date, kubectl get pods -o huge,
helm listing. Run by your individual $SHELL, capped at 30s, with no terminal
hooked up (use s on a pod for an interactive shell).
Full command reference.

k10s opens on kubeconfig’s current-context — the cluster kubectl would
discuss to. :ctx switches for the session with out touching kubeconfig;
kubectl config use-context is what adjustments the place it opens subsequent time.

Theme, namespace, folded sidebar teams, AI settings and the replace verify
persist to ~/.k10s/config.yaml (override with K10S_CONFIG), saved on
each change.
See config.md.

Note: the AI API secret’s saved as plain textual content in that file (mode 0600)
and masked within the UI. If that isn’t acceptable in your surroundings, depart
it empty and AI mode merely stays off.

architecture.md packages, the Source boundary, render pipeline, mouse zones
performance.md lazy watches, low cost counts, and the guards that preserve it quick
ui.md format, panes, focus, zoom, overlays
keybindings.md full key + mouse reference
commands.md immediate modes, slash instructions, AI settings
themes.md theme listing, picker, palette contract
config.md · update.md what persists · how self-update works
cluster-setup.md no cluster? putting in kubectl and getting a ~/.kube/config
backends.md · dev.md stay vs demo backend · construct, exams, headless renderer
roadmap.md what is completed, what’s lacking, and the recognized limits
marketing.md · build-in-public.md how this mission is being shared

The barrier is low on function. simply lists each recipe:

simply dev            # run from supply
simply shot 140 44    # render one body headlessly - no TTY, no cluster
simply screenshot     # seize the README hero from an actual terminal (vhs)
simply verify          # fmt + vet + check, within the order that fails quickest

cmd/shot is why UI work right here is nice: you may iterate on format, replay
keystrokes (simply shot 140 44 j,j,d) and diff frames with no terminal or a
cluster. Nothing in these docs is drawn by hand – the frames come from that
renderer, the hero picture from simply screenshot driving the actual binary in a
actual terminal.

Good first points stay in roadmap.md → possible next
steps
: extra sorts, click-to-sort
columns, multi-select bulk delete, grep contained in the log stream, saved views.

Honest standing: each stay path is applied towards the actual
client-go/kubectl APIs and coated by exams with pretend clientsets, however this
tree has not but been smoke-tested towards a manufacturing cluster by its
writer. Try it on sort first. The recognized limits are listed
in the roadmap moderately than buried.

To my colleagues – the folks whose questions, over-the-shoulder debugging
classes and “are you able to simply verify if that pod is up?” pings are the complete
motive this exists. k10s was not constructed to be a mission; it was constructed in order that
our clusters would cease being the annoying a part of your day. Every
pane in it’s a solution to one thing one in every of you requested me. Thank you for the
inspiration, the endurance, and for being the primary customers.

Cảm ơn các đồng nghiệp của tôi – repo này được viết ra để phục vụ các bạn,
và chính các bạn là nguồn cảm hứng cho k10s.

To @derailed and k9s, for proving a
Kubernetes TUI may very well be one thing you really need to open.

To Charm – Bubble Tea, Lip Gloss,
Bubbles – and to BubbleZone,
which is the explanation any of that is clickable in any respect.

Apache-2.0 – the identical license as Kubernetes, Helm and k9s. Use it,
fork it, ship it inside your organization.



Source link