<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Demuxer</title>
    <description>The latest articles on DEV Community by Demuxer (@demuxer).</description>
    <link>https://dev.to/demuxer</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4237725%2Ff2133c49-c895-49da-b829-27ce686bb01a.png</url>
      <title>DEV Community: Demuxer</title>
      <link>https://dev.to/demuxer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/demuxer"/>
    <language>en</language>
    <item>
      <title>Right-size Kubernetes CPU and memory requests from 7 days of Prometheus</title>
      <dc:creator>Demuxer</dc:creator>
      <pubDate>Tue, 10 Nov 2026 20:07:11 +0000</pubDate>
      <link>https://dev.to/demuxer/right-size-kubernetes-cpu-and-memory-requests-from-7-days-of-prometheus-2o6g</link>
      <guid>https://dev.to/demuxer/right-size-kubernetes-cpu-and-memory-requests-from-7-days-of-prometheus-2o6g</guid>
      <description>&lt;p&gt;Most CPU and memory requests are set once, by a guess, and never looked at again. At Demuxer we build Kuberniq, a desktop Kubernetes client for macOS and Windows, and this article shows how it compares each container's requests with what it used over the last seven days.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;A request reserves CPU and memory on a node whether the container uses it or not. To check one, you query Prometheus by hand, something like a percentile of the CPU rate and the peak of the memory working set per pod, write the numbers down, open the manifest, compare, and edit the YAML. Doing that for every workload in a cluster takes an afternoon, so it rarely gets done.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Kuberniq does it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftdaa3simk6oftxqb8o7x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftdaa3simk6oftxqb8o7x.png" alt="The recommendation of Kuberniq for feature-store: CPU request 490m to 360m and memory limit 4 GiB to 2.9 GiB, from 7 days of Prometheus" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the Analysis tool window, choose Recommendations.&lt;/li&gt;
&lt;li&gt;Under Information, "The container requests more than it uses" lists the workloads. Select &lt;code&gt;recommendations/feature-store&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The detail says that the container requests more than it uses, with 390m of CPU left over across its 3 replicas, and a table of current and recommended values: CPU request 490m to 360m, memory request 2.6 GiB to 2.6 GiB, memory limit 4 GiB to 2.9 GiB. The table says where the numbers come from, "7 days of Prometheus at monitoring/prometheus", and how: CPU at the 95th percentile of the average per pod, memory at the peak per pod. That's the screenshot.&lt;/li&gt;
&lt;li&gt;Apply Recommendation… opens "Compare Deployment feature-store", with the 2 changes between In the cluster and After applying.&lt;/li&gt;
&lt;li&gt;Apply sends them, and Kuberniq confirms with "Recommendation applied to feature-store."&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What it doesn't do yet
&lt;/h2&gt;

&lt;p&gt;The recommendation covers the CPU request, the memory request and the memory limit. It doesn't set a CPU limit and doesn't change an autoscaler. It needs history to work from, and it changes the object in the cluster, not the manifest in your repository, so a Helm chart or a GitOps sync will put the old values back until you change them there too. There's also no Linux build; it runs on macOS and Windows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;The free license covers personal projects, study, teaching and open source, with the whole app and no account. If you size requests by hand today, we'd like to know whether the 95th percentile and the peak are the numbers you'd pick.&lt;/p&gt;

&lt;p&gt;Download Kuberniq from its page: &lt;a href="https://demuxer.dev/kuberniq?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=kuberniq-desktop&amp;amp;utm_content=dev-to%2Frightsizing" rel="noopener noreferrer"&gt;https://demuxer.dev/kuberniq?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=kuberniq-desktop&amp;amp;utm_content=dev-to%2Frightsizing&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>prometheus</category>
    </item>
    <item>
      <title>Edit Kubernetes YAML against the cluster's own schema, and see the diff before you apply</title>
      <dc:creator>Demuxer</dc:creator>
      <pubDate>Tue, 10 Nov 2026 20:00:54 +0000</pubDate>
      <link>https://dev.to/demuxer/edit-kubernetes-yaml-against-the-clusters-own-schema-and-see-the-diff-before-you-apply-4aii</link>
      <guid>https://dev.to/demuxer/edit-kubernetes-yaml-against-the-clusters-own-schema-and-see-the-diff-before-you-apply-4aii</guid>
      <description>&lt;p&gt;Changing a manifest in a live cluster is quick to do and easy to get wrong. At Demuxer we build Kuberniq, a desktop Kubernetes client for macOS and Windows, and this article shows its YAML editor, which checks each field against the schema the cluster serves and shows the diff before anything is sent.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;kubectl edit deployment web&lt;/code&gt; opens the manifest in your terminal editor, with no idea of what each field accepts. Type &lt;code&gt;replicas: "three"&lt;/code&gt; and you only find out when you save and the API server refuses it. Once the edit goes through, you don't get a view of what changed against what was in the cluster unless you keep a copy and run &lt;code&gt;kubectl diff&lt;/code&gt; on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Kuberniq does it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feeznlwj8m7hgh41lgd2p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feeznlwj8m7hgh41lgd2p.png" alt="The Compare Deployment web dialog of Kuberniq, with In the cluster against After applying and 1 change, replicas 2 to 3" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Deployments and click &lt;code&gt;web&lt;/code&gt;. The manifest opens in an editor tab, with Compare… and Apply at the top.&lt;/li&gt;
&lt;li&gt;On line 15, change &lt;code&gt;replicas: 2&lt;/code&gt; to &lt;code&gt;replicas: "three"&lt;/code&gt;. Kuberniq marks the value as you type, and hovering it shows &lt;code&gt;spec.replicas&lt;/code&gt;, its type, &lt;code&gt;integer&lt;/code&gt;, and the documentation the cluster serves for it: "Number of desired pods…"&lt;/li&gt;
&lt;li&gt;Change it to &lt;code&gt;replicas: 3&lt;/code&gt; and the marker goes away.&lt;/li&gt;
&lt;li&gt;Compare… opens "Compare Deployment web", with In the cluster on the left and After applying on the right, and 1 change: &lt;code&gt;replicas: 2&lt;/code&gt; becomes &lt;code&gt;replicas: 3&lt;/code&gt;. That's the screenshot.&lt;/li&gt;
&lt;li&gt;Apply sends the change, and Kuberniq confirms with "Deployment web applied".&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What it doesn't do yet
&lt;/h2&gt;

&lt;p&gt;Kuberniq edits the object in the cluster, not the file in your Git repository. If the Deployment comes from Helm, Kustomize or a GitOps tool, the next sync puts back what the repository says, so make the same change there. There's also no Linux build; it runs on macOS and Windows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;The free license covers personal projects, study, teaching and open source, with the whole app and no account. If you edit manifests in the cluster, we'd like to know what you'd want the editor to check that it doesn't yet.&lt;/p&gt;

&lt;p&gt;Download Kuberniq from its page: &lt;a href="https://demuxer.dev/kuberniq?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=kuberniq-desktop&amp;amp;utm_content=dev-to%2Fyaml-editor" rel="noopener noreferrer"&gt;https://demuxer.dev/kuberniq?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=kuberniq-desktop&amp;amp;utm_content=dev-to%2Fyaml-editor&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>yaml</category>
    </item>
    <item>
      <title>From a failed Kubernetes pod to its log and a shell, in one window</title>
      <dc:creator>Demuxer</dc:creator>
      <pubDate>Tue, 10 Nov 2026 19:54:33 +0000</pubDate>
      <link>https://dev.to/demuxer/from-a-failed-kubernetes-pod-to-its-log-and-a-shell-in-one-window-2oih</link>
      <guid>https://dev.to/demuxer/from-a-failed-kubernetes-pod-to-its-log-and-a-shell-in-one-window-2oih</guid>
      <description>&lt;p&gt;A pod fails, and the next ten minutes go to finding out why. At Demuxer we build Kuberniq, a desktop Kubernetes client for macOS and Windows, and this article shows how it takes you from the failure to the log and to a shell in a container.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;In a terminal, you find the pod with &lt;code&gt;kubectl get pods -n shop&lt;/code&gt;, copy its name with the random suffix, run &lt;code&gt;kubectl logs worker-6c8d9b7f4-qz8mt --previous&lt;/code&gt; to see why the last run ended, and then &lt;code&gt;kubectl exec -it api-7d9f8c6b5d-m4h7c -c api -- sh&lt;/code&gt; to look from inside a neighbour pod. Every step needs the exact name of a pod that may already have been replaced.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Kuberniq does it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa0bn9fp6mjmo0owkjzh3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa0bn9fp6mjmo0owkjzh3.png" alt="The Logs tool window of Kuberniq on the pod worker-6c8d9b7f4-qz8mt in CrashLoopBackOff, ending at level=fatal" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;When a pod fails, Kuberniq shows a notification. In our demo cluster it reads "The pod worker-6c8d9b7f4-qz8mt failed", with a View log button.&lt;/li&gt;
&lt;li&gt;View log opens the Logs tool window on that pod. The screenshot shows &lt;code&gt;worker-6c8d9b7f4-qz8mt&lt;/code&gt; in CrashLoopBackOff, and its log: three attempts to reach &lt;code&gt;rabbitmq.shop.svc.cluster.local&lt;/code&gt;, then &lt;code&gt;level=fatal msg="cannot consume the queue without a broker"&lt;/code&gt;. The toolbar follows the end of the log, wraps long lines, shows timestamps and downloads the log.&lt;/li&gt;
&lt;li&gt;To look from inside another pod, open Pods, type &lt;code&gt;api-&lt;/code&gt; in the filter, right-click &lt;code&gt;api-7d9f8c6b5d-m4h7c&lt;/code&gt; and choose Open Terminal. The Terminal tool window opens a shell in the container &lt;code&gt;api&lt;/code&gt;, at &lt;code&gt;/app #&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Pods table also shows the CPU and memory of each pod and how they compare with its requests and limits, so a pod near its memory limit stands out before you open anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it doesn't do yet
&lt;/h2&gt;

&lt;p&gt;Kuberniq shows the log the cluster still keeps for the container. When the pod is deleted, its log goes with it, and Kuberniq doesn't store logs anywhere of its own or search across them over time. There's also no Linux build; it runs on macOS and Windows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;The free license covers personal projects, study, teaching and open source, with the whole app and no account. If you debug pods from the terminal today, we'd like to know which step you'd still do there after trying Kuberniq.&lt;/p&gt;

&lt;p&gt;Download Kuberniq from its page: &lt;a href="https://demuxer.dev/kuberniq?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=kuberniq-desktop&amp;amp;utm_content=dev-to%2Flogs-terminal" rel="noopener noreferrer"&gt;https://demuxer.dev/kuberniq?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=kuberniq-desktop&amp;amp;utm_content=dev-to%2Flogs-terminal&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>debugging</category>
    </item>
    <item>
      <title>Find what's broken across every namespace of a Kubernetes cluster</title>
      <dc:creator>Demuxer</dc:creator>
      <pubDate>Tue, 10 Nov 2026 19:48:14 +0000</pubDate>
      <link>https://dev.to/demuxer/find-whats-broken-across-every-namespace-of-a-kubernetes-cluster-55b4</link>
      <guid>https://dev.to/demuxer/find-whats-broken-across-every-namespace-of-a-kubernetes-cluster-55b4</guid>
      <description>&lt;p&gt;When a service misbehaves, the first question is where in the cluster the problem is. At Demuxer we build Kuberniq, a desktop Kubernetes client for macOS and Windows, and this article shows its analysis, which answers that question for the whole cluster at once.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Without a tool, the search is a round of commands. You run &lt;code&gt;kubectl get pods -A&lt;/code&gt; and scan for anything that isn't Running, &lt;code&gt;kubectl describe pod&lt;/code&gt; on each suspect to read its events, &lt;code&gt;kubectl get nodes&lt;/code&gt; to see whether a node dropped out, and then you look up what &lt;code&gt;ImagePullBackOff&lt;/code&gt; or &lt;code&gt;OOMKilled&lt;/code&gt; means in that case and what to do about it. On a cluster with a couple of hundred pods spread over dozens of namespaces, the one canary that can't pull its image is easy to miss.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Kuberniq does it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbb6l4oeao77kbyp0bvin.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbb6l4oeao77kbyp0bvin.png" alt="Kuberniq Overview of the whole cluster over 7 days, with the Analysis window open on the finding &amp;quot;The image cannot be pulled&amp;quot;" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the cluster and set the namespace dropdown to All namespaces.&lt;/li&gt;
&lt;li&gt;Open Overview and pick a range: 1 h, 6 h, 24 h or 7 d. The summary shows nodes ready, pods running, pending and failed, CPU and memory requested against allocatable and used, and restarts, with charts of CPU and memory from the cluster's Prometheus. In the screenshot, 13 of 14 nodes are ready, 242 pods are running and 3 have failed.&lt;/li&gt;
&lt;li&gt;The Analysis tool window at the bottom groups the findings into Errors, Warnings and Information, and the tabs narrow them to Failures, Reliability or Recommendations.&lt;/li&gt;
&lt;li&gt;Select a finding to read it. In the screenshot, under Errors (6), "The image cannot be pulled" points at &lt;code&gt;search/search-api-canary-rrql5bqvl-mmlmx&lt;/code&gt;. The detail says that the container cannot pull &lt;code&gt;ghcr.io/shop/search-api:2.15.0-rc.1&lt;/code&gt;, then Why: "the name or the tag does not exist, the registry asks for a credential the pod does not have, or the registry does not answer", and What to do: "Check the name and the tag of the image and, for a private registry, the imagePullSecrets of the pod."&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The same list has a node that is not ready, a container that restarts in a loop and a container that went past its memory limit, each with its own Why and What to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it doesn't do yet
&lt;/h2&gt;

&lt;p&gt;The analysis says what to do, and you make the fix yourself; the exception is the CPU and memory recommendations, which you apply through a diff. It reads the cluster when you open it and when you analyze again, so it doesn't watch the cluster while Kuberniq is closed and doesn't send alerts to chat or to a pager. The rules are the ones Kuberniq ships with, and you can't write your own.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;The free license covers personal projects, study, teaching and open source, with the whole app and no account. If you try the analysis on one of your clusters, we'd like to know which finding it missed and which one you'd rather not see.&lt;/p&gt;

&lt;p&gt;Download Kuberniq from its page: &lt;a href="https://demuxer.dev/kuberniq?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=kuberniq-desktop&amp;amp;utm_content=dev-to%2Fanalysis" rel="noopener noreferrer"&gt;https://demuxer.dev/kuberniq?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=kuberniq-desktop&amp;amp;utm_content=dev-to%2Fanalysis&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>sre</category>
    </item>
    <item>
      <title>Open every cluster in your kubeconfig, with no account</title>
      <dc:creator>Demuxer</dc:creator>
      <pubDate>Tue, 10 Nov 2026 19:47:24 +0000</pubDate>
      <link>https://dev.to/demuxer/open-every-cluster-in-your-kubeconfig-with-no-account-2jdf</link>
      <guid>https://dev.to/demuxer/open-every-cluster-in-your-kubeconfig-with-no-account-2jdf</guid>
      <description>&lt;p&gt;Most people who run Kubernetes keep several clusters in one kubeconfig: production, staging, one on the laptop, sometimes one per region or per customer. At Demuxer we build Kuberniq, a desktop Kubernetes client for macOS and Windows, and this article shows how it opens those clusters.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;In a terminal, moving between clusters means changing the current context. You run &lt;code&gt;kubectl config get-contexts&lt;/code&gt; to see the names, &lt;code&gt;kubectl config use-context shop-prod&lt;/code&gt; to pick one, and from then on every command in every shell goes to that cluster until someone changes it again. kubectx makes the switch shorter, but the current context is still one setting that all your terminals share. Some desktop clients add a step of their own before you see anything, such as signing in to an account with them.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Kuberniq does it
&lt;/h2&gt;

&lt;p&gt;Kuberniq reads the same kubeconfig as kubectl, from &lt;code&gt;KUBECONFIG&lt;/code&gt; or &lt;code&gt;~/.kube/config&lt;/code&gt;, and asks for no account.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpuihk9m95vw5aty6vpxi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpuihk9m95vw5aty6vpxi.png" alt="Kuberniq with the shop-prod cluster open in All namespaces, showing the Resources tree and 49 Deployments" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The welcome screen lists every context in the file, each with its cluster and the address of its API server. In our demo, &lt;code&gt;shop-prod&lt;/code&gt; is an EKS context, shown with its ARN and its &lt;code&gt;eks.amazonaws.com&lt;/code&gt; endpoint. With many contexts, Search clusters narrows the list, and Reload reads the file again after you change it.&lt;/li&gt;
&lt;li&gt;Select the context and click Open.&lt;/li&gt;
&lt;li&gt;A window opens on that cluster. On the left, the Resources tree groups the kinds into Workloads, Network, Configuration, Storage, Access control, Cluster and Custom resources, with a count next to each kind. At the top, the namespace dropdown picks one namespace or All namespaces, and the status bar shows the version the cluster reports, here &lt;code&gt;Kubernetes v1.33.1-eks-7b0f2a1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Pick All namespaces and every table covers the whole cluster. The screenshot shows &lt;code&gt;shop-prod&lt;/code&gt; that way: 246 pods and 49 Deployments, listed with their namespace, ready replicas and age.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The credentials stay where they are: Kuberniq reads them from the kubeconfig and doesn't copy them to an account or a service of ours.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it doesn't do yet
&lt;/h2&gt;

&lt;p&gt;Kuberniq doesn't discover clusters on its own. If a cluster isn't in your kubeconfig, or kubectl can't reach it from there, it won't show up in Kuberniq either. There's also no Linux build; it runs on macOS and Windows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;The free license covers personal projects, study, teaching and open source, with the whole app and no account. If you keep many contexts in one kubeconfig, we'd like to hear how you move between them today and where Kuberniq gets in the way.&lt;/p&gt;

&lt;p&gt;Download Kuberniq from its page: &lt;a href="https://demuxer.dev/kuberniq?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=kuberniq-desktop&amp;amp;utm_content=dev-to%2Fkubeconfig" rel="noopener noreferrer"&gt;https://demuxer.dev/kuberniq?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=kuberniq-desktop&amp;amp;utm_content=dev-to%2Fkubeconfig&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>kubectl</category>
    </item>
    <item>
      <title>Lens and Headlamp didn't fit how we debug Kubernetes, so we built a desktop client</title>
      <dc:creator>Demuxer</dc:creator>
      <pubDate>Tue, 10 Nov 2026 18:57:21 +0000</pubDate>
      <link>https://dev.to/demuxer/lens-and-headlamp-didnt-fit-how-i-debug-kubernetes-so-i-built-a-desktop-client-3llk</link>
      <guid>https://dev.to/demuxer/lens-and-headlamp-didnt-fit-how-i-debug-kubernetes-so-i-built-a-desktop-client-3llk</guid>
      <description>&lt;p&gt;At Demuxer we build Kuberniq, a desktop Kubernetes client for macOS and Windows, and this post is about why we wrote it when Lens and Headlamp already exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we didn't like
&lt;/h2&gt;

&lt;p&gt;This is our opinion, as a team that used both. Lens was our client for a long time, and we tried Headlamp when it shipped a desktop app. Both list resources, show logs and open a shell well, and many people are happy with them. Our problem was usability, for the one thing we do most.&lt;/p&gt;

&lt;p&gt;A pod fails. In either app we'd find it, and then our hands went back to the terminal anyway: &lt;code&gt;kubectl describe pod&lt;/code&gt; for the events, &lt;code&gt;kubectl logs --previous&lt;/code&gt; for the run that died, &lt;code&gt;kubectl edit deployment&lt;/code&gt; to fix it. If a field had the wrong type, we learned it when the API server refused the save. On top of that, Lens asks for a Lens ID to register the app, and we wanted to open the kubeconfig we already had and nothing else.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Kuberniq does instead
&lt;/h2&gt;

&lt;p&gt;It reads &lt;code&gt;~/.kube/config&lt;/code&gt; and &lt;code&gt;KUBECONFIG&lt;/code&gt; without an account and without copying credentials, and each context opens as a window on that cluster.&lt;/p&gt;

&lt;p&gt;The analysis goes over every namespace and lists findings such as a container restarting in a loop, a container killed for going past its memory limit, an image that cannot be pulled, or a node that is not ready. Each finding says what was seen, why it happens and what to do.&lt;/p&gt;

&lt;p&gt;The YAML editor validates against the OpenAPI schema the cluster serves. Write &lt;code&gt;replicas: "three"&lt;/code&gt; and it is marked as you type, next to the documentation of &lt;code&gt;spec.replicas&lt;/code&gt;. Before anything reaches the cluster, Compare shows the diff between what's there and what you're about to apply.&lt;/p&gt;

&lt;p&gt;The recommendations compare each container's requests with 7 days of Prometheus: CPU at the 95th percentile of the average per pod, memory at the peak per pod. Applying one goes through the same diff.&lt;/p&gt;

&lt;p&gt;There's also logs per pod or per workload, a terminal, scale, restart, rollback to a revision, a timeline and a topology.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting it
&lt;/h2&gt;

&lt;p&gt;The free license covers personal projects, study, teaching and open source, with the whole app and no account. There's no Linux build, which both Lens and Headlamp have.&lt;/p&gt;

&lt;p&gt;If you use Lens or Headlamp, we'd like to know which part of their usability works for you and which part sends you back to kubectl.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://demuxer.dev/kuberniq?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=kuberniq-desktop&amp;amp;utm_content=dev-to" rel="noopener noreferrer"&gt;https://demuxer.dev/kuberniq?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=kuberniq-desktop&amp;amp;utm_content=dev-to&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
