Cross-platform Kubernetes desktop console (Avalonia). Lens-style catalog, navigator, resource tables, YAML apply, logs, exec, port-forward, Helm releases, and Dapr CRDs. Talks to the cluster through the official **KubernetesClient** NuGet package and the same kubeconfig/RBAC as kubectl.
Go to file
2026-08-21 19:46:53 +02:00
.cursor (feature): init 2026-08-19 21:27:38 +02:00
src (bugfix): refresh resource tables in place and stream logs follow 2026-08-21 19:46:53 +02:00
utils (bugfix): refresh resource tables in place and stream logs follow 2026-08-21 19:46:53 +02:00
.editorconfig (feature): init 2026-08-19 21:27:38 +02:00
.gitignore (feature): init 2026-08-19 21:27:38 +02:00
AGENTS.md (feature): init 2026-08-19 21:27:38 +02:00
CHANGELOG.md (bugfix): refresh resource tables in place and stream logs follow 2026-08-21 19:46:53 +02:00
CONTRIBUTING.md (bugfix): refresh resource tables in place and stream logs follow 2026-08-21 19:46:53 +02:00
LICENSE.md (feature): init 2026-08-19 21:27:38 +02:00
README.md (bugfix): refresh resource tables in place and stream logs follow 2026-08-21 19:46:53 +02:00

MaksIT.ClusterConsole

Line Coverage Branch Coverage Method Coverage .NET License Platform

Desktop console for Kubernetes clusters. Native Avalonia app on Windows and Linux: browse resources, apply YAML, follow logs, exec into pods, and reach workload UIs through localhost.

Cluster access uses the official Kubernetes .NET client and the same kubeconfig and RBAC as any other API client. Contexts are edited in-process; the kubeconfig file on disk is the source of truth.

See LICENSE.md (Apache 2.0). Changes: CHANGELOG.md. Contributing: CONTRIBUTING.md.

If you find this project useful, please consider supporting its development:

Buy Me A Coffee

Highlights

Capabilities that are first-class in ClusterConsole, not afterthoughts:

  • Port-forward, then open the UI — forwards live under Network → Port Forwarding. Double-click a live row to open http://127.0.0.1:{port} in the default browser. Enabled forwards persist, restore on reconnect, survive pod recreation (owner or stable labels), and can rebind the local port without recreating the tunnel.
  • Local Ollama chat on the selection — diagnose the highlighted resource with an on-machine model. The assistant can read cluster issues, YAML, logs, and events. Nothing is sent to a cloud AI API. Chat cannot apply, restart, or delete.
  • Dapr in the navigator — Components, Configurations, Subscriptions, Resiliency, HTTPEndpoints, sidecars, and control-plane pods as catalog views, not a generic CRD dump.
  • Volume files — browse, edit, download, and upload files on persistent volumes and claims from the desktop.
  • Limits you can fix — overview shows container CPU and memory against node capacity and can patch limits that oversubscribe the node.
  • Connections stay in the app — wizard to add or update a context (token, client certificate, or basic auth). A catalog radio sets kubectl current-context.

Features

  • Contexts — catalog of kubeconfig contexts; radio selects kubectl current-context
  • Navigator — Cluster, Nodes, Applications, Workloads, Config, Network, Storage, Namespaces, Events, Helm, Dapr, Access Control, Custom Resources
  • Resource tables — list and refresh any catalogued type; per-column filters and row sort persisted per cluster
  • Inspect and apply — YAML view, apply, create, delete; force-delete (grace period 0 and strip finalizers), including namespaces whose objects are already gone
  • Workloads — scale, restart, CronJob trigger; node cordon and drain
  • Pods — follow logs, exec
  • Applications — one row per instance and namespace from standard application labels
  • Helm — releases discovered from cluster secrets
  • Metrics — CPU and memory columns when the metrics API is available

Requirements

  • .NET 10 SDK
  • A kubeconfig (KUBECONFIG or ~/.kube/config) with permission to the target cluster
  • Windows or Linux
  • Optional: a local Ollama daemon for Chat

Getting started

From src/ so global.json applies:

cd src
dotnet build MaksIT.ClusterConsole.slnx
dotnet run --project MaksIT.ClusterConsole.UI

Connect a context from the catalog, pick a navigator item, then use the table, details pane, and footer actions for the selected row.

Configuration

Defaults live in src/MaksIT.ClusterConsole.Shared/appsettings.json (copied next to the UI). Notable keys under Configuration:

Key Role
OllamaEndpoint Chat API, default http://127.0.0.1:11434
OllamaModel Chat model, default qwen3:8b
PortForwards Enabled localhost forwards; restored when the cluster reconnects
Layout Window and pane sizes, last navigator item, per-cluster table layout (Tables)

Port-forwards are saved when you start them in the UI. Chat cannot apply, restart, or delete.

Pull the default Chat model once:

ollama pull qwen3:8b

Tests

utils\Invoke-TestEngine.bat

From src/:

dotnet test MaksIT.ClusterConsole.Tests

Tests use kubeconfig fixtures and do not require a live cluster. Coverage shields at the top of this file are maintained by the test engine (CoverageBadges).

Release

  1. Update CHANGELOG.md and bump <Version> in src/Directory.Build.props.
  2. Tag v{version} on main.
  3. Run utils\Invoke-ReleasePackage.bat.

Solution layout

utils/                              # RepoUtils test and release engines
src/
  MaksIT.ClusterConsole.slnx
  MaksIT.ClusterConsole.Client/     # Kubernetes API client
  MaksIT.ClusterConsole.Shared/     # catalog, workspace, configuration
  MaksIT.ClusterConsole.UI/         # Avalonia desktop host
  MaksIT.ClusterConsole.Tests/

Scope

ClusterConsole is a desktop operator console for the Kubernetes API. It is not a CLI, a cluster installer, or a replacement for admission, GitOps, or secret-management systems. Helm listing and Dapr views cover objects in the cluster; they do not install charts or administer Dapr building blocks.

License

Apache 2.0 — see LICENSE.md.

© Maksym Sadovnychyy (MAKS-IT)