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+psearches 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.
/replaceinstalls 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.
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
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
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 -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 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ 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.
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.
- 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/settingsis 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.
