A fast desktop client for Kubernetes
Browse live clusters, follow logs, exec into pods, forward ports, manage Helm releases and drain nodes — from one window on macOS, Windows and Linux. No account, no agent in your cluster, no kubectl required.
Version 0.4.9 · Free and open source · No account required
brew install --cask kubermeister/tap/kubermeister

What it does
Everything you actually do with a cluster
Not a dashboard that shows you numbers. The operations you reach for on a bad afternoon, built so they hold up on a busy cluster.
Lists that are already live
Screens watch the API server instead of polling it. One informer serves every screen on the same kind, and rows are virtualised, so a list costs the size of your window rather than the size of your cluster.
Logs that open following
A Logs tab starts live, because a log is opened to see what is happening now. Narrow by regex or highlight in place, pick a container and a time window, and download the whole log from the API server rather than the buffer on screen.
A shell that belongs to its pod
The exec session lives in the pod’s own Shell tab: it opens when the tab does and ends with it, so a terminal is never left attached to a cluster nobody is looking at.
Port forwards that survive a rollout
Forward to a Service and the app resolves a ready endpoint per connection, so a deploy does not kill the tunnel. Every forward is listed and stopped from the top bar, wherever you started it.
Helm releases, read properly
Releases, revision history, rollback and uninstall — decoded from the Secrets Helm itself writes, and written back the same way, so a release this app rolls back is still one the Helm CLI can read.
Node drains you can watch
Cordon a node, see exactly what a drain would do before it runs, then watch each pod go. Eviction honours PodDisruptionBudgets, and stopping leaves the node cordoned rather than half-drained silently.
Rollouts you can compare
Put two revisions of a pod template side by side, canonicalised so a difference on screen is one somebody made rather than one the API server filled in — then roll back with a JSON patch that actually undoes it.
Usage without a stack to run
Charts for the cluster, each node, each workload and each pod, sampled from metrics-server while the app is open. No metrics-server means zero usage, never an error page.
Alerts derived from the cluster
Pending and failed pods, crash loops and image pull failures, found through field selectors and the kubelet’s own events — never by reading every pod in the cluster.
Your CRDs, with their own columns
Custom resources list with the additionalPrinterColumns their definition declares — the same columns kubectl get would print — and edit through the same path as any built-in kind.
Manifests, describe and exports
Read any object as YAML, describe pods and nodes as a structured document you can copy, and save a whole list selection as one file with the fields the server owns stripped out so it applies elsewhere.
Writes that fail closed
Every write carries the context the screen was rendered under and is refused if the app has switched since. Deleting a node or a CRD asks you to type its name. Nothing destructive is one click away.
Logs
A console that is already following
Live is on when the tab opens, because a log is opened to see what is happening now and a console you have to switch on first is a step in front of the answer. A controller’s Logs tab follows every pod it owns at once, merged in arrival order and coloured by pod, restarting when the set of pods changes so a replaced pod stops being followed.
- Search narrows the console by default, or highlights in place when a hit only makes sense beside what surrounds it.
- An unfinished regular expression reads as “no filter yet” instead of emptying the console mid-keystroke.
- Tens of thousands of lines cost a screenful of DOM, because only the rows in view are rendered.


Rollouts
See what changed before you roll it back
Two revisions of a pod template, side by side, both run through the same canonicalisation the rollback itself uses — keys ordered, blanks dropped, the controller’s own pod-template-hash ignored — so a difference on screen is one somebody made rather than one the API server filled in.
- A rollback restores the template with a JSON patch, not a strategic merge, so a container added since the target revision does not survive the undo.
- A revision whose template already matches the live one is reported as skipped rather than written.
- Pause, resume, scale and restart sit next to the history, and a restart stamps the same annotation kubectl writes.


Node operations
A drain that tells you what it is doing
The dialog shows the plan before anything happens, and the drain re-derives that same plan itself, so the screen can never promise one thing and the app carry out another. Then it streams: one line per pod, as it goes.
- Eviction goes through the eviction API, so PodDisruptionBudgets still have a say and a 429 means “not now” rather than “failed”.
- Stopping ends the drain at once and leaves the node cordoned — undoing that is your decision, not the app’s.
- Cordon is a patch on spec.unschedulable and nothing else, so it reads the same to every other tool.


A look around
The same window, doing other work
Every screenshot on this page is the application running against a real cluster, not a mockup.
Safety
Built so a bad click cannot become an incident
A graphical client makes destructive things easy to reach. These are the constraints that keep that from being a problem.
A write cannot land on the wrong cluster
Every write carries the context the screen was rendered under. The app compares it with the context it is on and refuses a mismatch, so a tab left open from before a context switch can never act on the new cluster.
Destructive kinds ask you to type the name
Deleting a node, a CRD or a namespace takes the object’s name, typed out. Those kinds have no bulk delete at all, because a checkbox column and an irreversible action do not belong on the same screen.
Secrets cross one key at a time
A Secret’s values are never handed to the interface as a map. A reveal asks for the single key it needs, the value is held outside the query cache, it masks itself again on a timer, and a copy never renders it at all.
The app opens no back door
No debug container, no privileged pod on a node, no files carried across the exec channel. kubectl debug and kubectl cp are where those belong, and the app does not quietly become a way around your RBAC.
The renderer is sandboxed and stays that way
Context isolation on, Node integration off, sandbox on, external links routed to your browser and everything else denied. Electron fuses are flipped at package time so the signed app cannot be started as a plain Node binary.
Nothing quits out from under a session
Quitting ends every port forward, shell, log follow and drain at once, and none of them come back — so the app asks first, in a native dialog that names what is about to stop rather than asking in the abstract.
Questions
Frequently asked
What is Kubermeister?
Kubermeister is a desktop Kubernetes client for macOS, Windows and Linux. It reads your existing kubeconfig and gives you a window onto your clusters: live resource lists, logs, shells, port forwards, Helm releases, node drains and rollouts.
Is Kubermeister free?
Yes. It is free and open source, for personal and commercial use alike. There is no account, no licence key, no seat count and no paid tier.
Do I need kubectl installed?
No. Kubermeister talks to the API server directly and runs exec credential plugins itself, so a kubeconfig written by aws eks update-kubeconfig or gcloud works without kubectl on your PATH.
Does Kubermeister install anything into my cluster?
No. It adds no deployment, no service, no agent and no credential. It uses your kubeconfig and your RBAC, so it can do exactly what you can do and nothing more.
Where does my cluster data go?
Nowhere. Kubermeister talks to your API server and to GitHub for update checks. There is no backend, no account and no telemetry service collecting what your clusters contain.
Does it work behind a corporate proxy or with a private certificate authority?
Yes. It reads HTTPS_PROXY and HTTP_PROXY per scheme the way kubectl would, honours a proxy-url in the kubeconfig, and lets you set a proxy, a bypass list or an extra CA bundle in Settings. A CA bundle is added to what is already trusted rather than replacing it.
Can I use it with more than one cluster?
Yes. Every context in your kubeconfig is listed, and switching one resets every cluster query so a screen never shows the previous cluster while writes already reach the new one.
Point it at a cluster and see.
It reads the kubeconfig you already have and changes nothing about it.
Version 0.4.9 · Free and open source · No account required
Prefer to read first? Start with theinstallation guideor browse thesource on GitHub.





