Skip to content

Loupe

Loupe is a desktop client for Kubernetes, licensed Apache-2.0. It reads the kubeconfig kubectl already uses and issues requests directly to the API server from your machine.

It is a Tauri application: a React and TypeScript frontend over a Rust core that holds the client connection. Builds are published for macOS, Linux and Windows, and it works against any conformant Kubernetes cluster — managed, self-hosted, or a local kind or OrbStack cluster.

Loupe has no in-cluster component. There is no operator to install, no service account to create, and no telemetry.

Every request originates from the machine running the app, using the credentials in the selected kubeconfig context. Authorisation is therefore whatever RBAC already grants that user: Loupe can read what kubectl can read, and is refused the same things.

Resource types are resolved through the API server’s discovery endpoints rather than a compiled-in list, and lists are requested as application/json;as=Table;g=meta.k8s.io;v=v1 so the server returns the same rows and printer columns that kubectl get renders. Custom resources are handled by the same path as built-in kinds, which is why a CRD installed after the binary was built needs no upgrade to browse.

Loupe ships as a native binary for macOS, Linux and Windows. The current release is v0.1.0.

The cask resolves the correct architecture:

Terminal window
brew install --cask kryptonhq/tap/loupe

Alternatively, download a .dmg from the latest releaseaarch64 for Apple Silicon, x64 for Intel. The architectures are built separately rather than as a universal binary, so each download contains one slice.

  1. Start Loupe. It reads ~/.kube/config — the same file kubectl uses — and lists every context it finds.

  2. Pick a context. Loupe connects using that context’s credentials. Whatever kubectl can see, Loupe can see; whatever RBAC forbids, Loupe cannot.

  3. Browse. Nodes, namespaces and pods have dedicated views. All other kinds are listed from the server-rendered table.

Connections are held per context, so switching cluster does not restart the application or discard the previous connection.

  • Kubeconfig context discovery, connection, and switching between contexts
  • Dedicated views for nodes, namespaces and pods, with search and paging
  • Workloads, networking, config and storage — deployments, statefulsets, daemonsets, replicasets, jobs, cronjobs, services, ingresses, network policies, config maps, secrets, service accounts and persistent volume claims
  • Custom resources, resolved through API discovery and rendered with the printer columns declared in the CRD
  • Pod — containers, termination reasons, conditions, labels, events and the full manifest
  • Node — allocated CPU and memory against allocatable, taints, pressure conditions, and the pods bound to the node
  • Namespace — pod phase counts, ResourceQuota utilisation, remaining finalizers on a terminating namespace, and the resources it contains

Node detail showing allocated CPU and memory against allocatable

  • Pod logs streamed from the API server, with container selection, timestamps, and previous for a terminated container’s logs
  • Keys and byte sizes are listed without retrieving values. Each value is fetched individually on request, and the YAML view redacts data.
  • Release values, rendered manifests, notes and revision history are decoded from the release Secrets. The helm binary is not invoked.
  • The YAML view writes back with a full replace, so a concurrent modification is rejected by the API server rather than silently overwritten
  • Light, dark, or system-following, persisted in settings.json alongside the application’s other configuration

As of v0.1.0:

  • Deletion. Intentionally deferred until it can name the objects it will remove in a confirmation step.
  • exec into a container.
  • Multiple simultaneous clusters. One context is connected at a time.
  • Owner-reference navigation — from a deployment to its pods, a service to its endpoints, a claim to its volume.
Terminal window
git clone https://github.com/kryptonhq/loupe
cd loupe
pnpm install
pnpm tauri dev

pnpm dev alone serves the frontend in a browser, where the Tauri bridge is absent. In that case the UI falls back to the fixtures in src/dev/fixtures.ts, allowing layout work without a cluster. That path is development-only and is excluded from production builds.

Loupe uses the DCO rather than a CLA. Sign commits with git commit -s; contributors retain their copyright.

The project follows the CNCF Code of Conduct.

Apache 2.0. See LICENSE.