LinuxCommandLibrary
GitHubF-DroidGoogle Play Store

k10s

Clickable terminal UI for Kubernetes

TLDR

Open the cluster in your current kubeconfig context
$ k10s
copy
Open the built-in sample cluster (no API server)
$ k10s demo
copy
Look around without changing the cluster
$ k10s --readonly
copy
Replace this binary with the newest release
$ k10s update
copy
Print the build version
$ k10s --version
copy

SYNOPSIS

k10s [--readonly | --read-only] [demo | --demo]k10s update | upgrade | self-update | --updatek10s -v | --version | versionk10s -h | --help

DESCRIPTION

k10s is a terminal user interface for Kubernetes. It lists workloads, network objects, config, storage, RBAC, nodes, and custom resources discovered from the cluster, and it can describe them, follow logs, exec a shell, port-forward, show metrics, edit YAML, restart, scale, cordon, drain, and delete. The mouse works: rows, panes, and action buttons are clickable. The same actions have single-key shortcuts.Startup does not open watches. Informers start the first time a resource kind is shown. With no kubeconfig, or a context whose API server does not answer, the main panel says No cluster. Press `r` to retry, `:ctx` to pick another context, or `/setup` for kubectl and kubeconfig links.`k10s demo` (or `k10s --demo`) opens a bundled sample cluster, labelled DEMO, including a CrashLoopBackOff. It is a context, not a separate mode. Leave it by picking any other context with `:ctx`. Plain `k10s` never shows that sample data.Inside the TUI, `/` is k10s itself (`/theme`, `/settings`, `/mouse`, `/update`, `/version`, `/demo`, `/setup`, `/help`). `:` is the cluster, in the k9s vocabulary (`:po`, `:deploy`, `:svc`, `:ns`, `:ctx`, and the other kind aliases). Anything that is not a `/` or `:` command runs as a shell command through `$SHELL`, capped at 30 seconds, and its output opens in the main panel. An interactive shell in a pod is `s`, not that prompt. Detach from the pod shell with `ctrl+]`.

PARAMETERS

--readonly, --read-only

Refuse changes before they leave the machine. Blocks edit, scale, restart, cordon, drain, delete, shell, port-forward, dangerous plugins, and typed shell commands. May appear anywhere among the arguments, including next to demo.
-v, --version, version
Print the running build and exit. Does not open the TUI.
-h, --help
Print usage and exit.

CONFIGURATION

Settings are written immediately to `~/.k10s/config.yaml` (mode `0600`). Override the path with K10S_CONFIG. A missing file is not an error.theme

Built-in name or a custom theme. Default `tokyo-night`. Others: `catppuccin-mocha`, `dracula`, `nord`, `gruvbox-dark`, `solarized-dark`, `solarized-light`, `matrix`. Drop a YAML palette in `~/.k10s/themes` (or K10S_THEME_DIR) and it appears in `/theme` after restart.
namespace
Restored only when context matches the context being opened. On any other cluster, that context's own namespace is used. k10s always *opens* on kubeconfig's current context. `:ctx` switches for this session and does not rewrite kubeconfig. Change the next launch with `kubectl config use-context`.
collapsed
Sidebar groups that are folded. Default on a new file: Config, Storage, RBAC. The value `-` means none are folded. Fold with `space`, `left`, or a click on the group header.
zoomed
Whether the main pane was zoomed.
cli
kubectl-compatible binary used for some actions. Default `kubectl`.
ai.provider, ai.base_url, ai.model, ai.api_key
AI prompt settings. The API key is stored as plain text and masked in the UI.
update.disabled, update.repo, update.skip
Turn off the daily update check, point it at another GitHub repo, or silence one version. Absent `disabled` means the check runs.
Command plugins use the k9s `plugins.yaml` format in `~/.k10s/plugins.yaml` and snippets under `~/.k10s/plugins/`. They are listed after built-in actions and receive the selected object, namespace, context, and column values. A built-in key wins unless the plugin sets `override: true`. k10s does not rewrite plugin files.

COMMANDS

demo, --demo

Start on the built-in sample cluster. Combine with --readonly.
update, --update, upgrade, self-update
Download the newest GitHub release for this OS and CPU, verify its checksum, and replace the running binary. Prints a progress percent. If this build is already current, it says so and exits. These forms work without a TTY, so a broken screen can still be upgraded from the shell. `/update` inside the TUI does the same install and can offer to restart.

KEYS

tab / shift+tab

Cycle Resources, the main pane, and the command box. The actions pane is not a tab stop; each action already has a key and a clickable row.
ctrl+p
Search resource kinds and objects in one box. Kinds not yet opened match by kind name only.
f
Filter every column of the open table. esc clears.
d / y / l
Describe, show live YAML, or follow logs (newest line at the bottom). A kind with no logs falls back to describe.
s / p / m
Shell into a pod, toggle a port-forward, or show metrics (needs metrics-server). Pods and services can port-forward. Metrics apply to pods and nodes.
e / r / c
Edit live YAML in `$EDITOR`, rollout-restart a deployment, statefulset, or daemonset, or scale.
o / u / D
Cordon or uncordon a node, drain a node (confirm), or delete (confirm). enter or `y` confirms; esc or `n` cancels.
z
Zoom or restore the main pane.
T / ctrl+t
Cycle themes. `/theme` previews each theme live; esc restores the previous one.
ctrl+s or /mouse
Release the mouse so the terminal can drag-select and copy. Press again to restore clicking.
ctrl+a
AI prompt. The current context, namespace, kind, and selected object are added to the question. Nothing is sent until you press enter. Bring an OpenAI-compatible or Anthropic key; leave it empty and this mode stays off.
q / ctrl+c
Quit. `q` does not quit while a search box or prompt is focused.

ENVIRONMENT

KUBECONFIG

Kubeconfig file. When unset, `~/.kube/config`, the same default as kubectl.
K10S_CONFIG
Path of the settings file. Default `~/.k10s/config.yaml`.
K10S_THEME_DIR
Directory of custom theme YAML files. Default `~/.k10s/themes`.
EDITOR
Editor used by the `e` action on live YAML.

CAVEATS

The author had not smoke-tested this tree against a production cluster when it was published. Try it on [kind](/man/kind) first. Read-only mode is the safe way to look at a cluster you must not change.The sample cluster is opt-in. A header DEMO marker stays on screen for as long as that context is selected.k10s captures the mouse. Copy mode (`ctrl+s`) is how drag-select works. `Cmd` shortcuts are not available: macOS terminals do not send the Command key to the TTY.The AI key sits in the config file in plain text. Leave ai.api_key empty if that is not acceptable. The only other network call k10s makes on its own is a once-a-day GitHub version check, which can be disabled.Typed text that is not a `/` or `:` command is executed in your shell. Read-only mode blocks that path. The pod shell (`s`) is a real TTY and is also blocked in read-only mode.Prebuilt binaries cover darwin/amd64, darwin/arm64, linux/amd64, linux/arm64, and windows/amd64. The install script covers macOS and Linux and sends Windows users to the GitHub release page. `go install github.com/p10node/k10s@latest` builds the `k10s` binary from the module root.

SEE ALSO

k9s(1), kubectl(1), kubectx(1), stern(1), kind(1), helm(1)

RESOURCES

Copied to clipboard
Kai