skyhook-io/radar

▲ 430 stars today★ 3,356⑂ 206

The missing open-source Kubernetes UI with a built-in MCP server for AI agents. See what's broken, why, and what changed.

About skyhook-io/radar

skyhook-io/radar is an open-source project on GitHub, mainly written in Go. The missing open-source Kubernetes UI with a built-in MCP server for AI agents. See what's broken, why, and what changed. It currently holds 3,356 stars and 206 forks with 0 open issues, and was last pushed on an unknown date (repository created unknown).

Project Overview

AI Homed tracks it on the Today's Trending board.

GitHub Repository Details

Repository skyhook-io/radar · default branch - · size 0 KB · watchers 0 · source: GitHub REST API and repository README

README

Radar

https://github.com/skyhook-io/radar/blob/HEAD/Radar - The missing open-source Kubernetes UI | Product Hunt

The missing open-source Kubernetes UI.
Single binary. No account required. Free forever.

🌐 radarhq.io · Docs · Releases

Topology, resources, Helm, GitOps, traffic, audit, upgrade impact, and MCP context for AI agents — from your laptop or in-cluster.

CI CodeQL Release Downloads Helm repo downloads Discord License Go

Table of contents

https://github.com/skyhook-io/radar/blob/HEAD/Radar Screenshot

Install and run in 30 seconds:

curl -fsSL https://get.radarhq.io | sh && kubectl radar
More installation options ↓

Why Radar?

"Have Radar deployed at work. As far as Kubernetes dashboards go, this is one of the best." — u/TheRealNetroxen

---

Installation

Quick Install:

curl -fsSL https://get.radarhq.io | sh

Homebrew:

brew install skyhook-io/tap/radar

Then run: kubectl radar. Quick install, PowerShell, Homebrew, and Scoop also set up the radar shorthand. Krew and direct downloads use kubectl radar unless you add your own radar symlink.

More install options — Desktop App (macOS/Linux/Windows), Krew, Scoop, In-Cluster Helm

CLI

Krew (kubectl plugin manager):

kubectl krew install radar

Scoop (Windows):

scoop bucket add skyhook https://github.com/skyhook-io/scoop-bucket
scoop install radar

PowerShell (Windows):

irm https://get.radarhq.io/install.ps1 | iex

Direct downloadGitHub Releases for macOS, Linux, or Windows.

Desktop App

Native desktop app — no terminal needed.

Homebrew (macOS):

brew install --cask skyhook-io/tap/radar-desktop

Debian/Ubuntu — download the .deb from GitHub Releases, then:

sudo apt install ./radar-desktop_*.deb

Fedora/RHEL — download the .rpm from GitHub Releases, then:

sudo rpm -i radar-desktop_*.rpm

Scoop (Windows):

scoop bucket add skyhook https://github.com/skyhook-io/scoop-bucket
scoop install radar-desktop

Windows (direct download)GitHub Releases.

In-Cluster Deployment

Deploy to your cluster for shared team access:

helm repo add skyhook https://skyhook-io.github.io/helm-charts
helm install radar skyhook/radar -n radar --create-namespace

See the In-Cluster Deployment Guide for Gateway API and ingress exposure, authentication, and RBAC configuration.

---

Usage

# Opens browser automatically
kubectl radar

Quick install, PowerShell, Homebrew, and Scoop also set up the bare command

radar

To inspect an in-cluster Radar Cloud installation without changing it:

radar cloud status
radar cloud status --context my-cluster
radar cloud status --context my-cluster --namespace radar --release radar

The command reports installation ownership, chart and image, agent readiness, and Cloud configuration without printing the connection token. Passing both --namespace and --release selects an exact installation. Live tunnel status is reported by Radar Cloud using the token in the referenced Kubernetes Secret. If the Secret or Hub is unavailable, local installation diagnostics still run. Interactive terminals use restrained status colors; set NO_COLOR (or pipe the output) for plain text. URLs, tokens, and suggested commands remain unstyled.

CLI Flags

The table below covers common startup flags. See the full CLI reference; radar --help is authoritative for the installed version.

| Flag | Default | Description | |------|---------|-------------| | --kubeconfig | ~/.kube/config | Path to primary kubeconfig file | | --kubeconfig-dir | | Comma-separated directories containing additional kubeconfig files | | --namespace | (all) | Initial namespace filter (supports multi-select in the UI; also used as RBAC fallback for namespace-scoped users) | | --namespaces | (all) | Initial namespace filters as a comma-separated list, e.g. --namespaces ns1,ns2,ns3. Use this when your identity can list resources in specific namespaces but cannot list namespaces cluster-wide. | | --namespace-scope | false | Pin namespaced informer caches to a single namespace for large clusters (scoping to multiple namespaces is not supported yet). Requires --namespace, a kubeconfig context namespace, or a saved local single-namespace pick. Local mode can rebuild the cache when switching namespaces; auth/cloud mode locks the shared cache to the startup namespace. | | --port | 9280 | Server port | | --listen-address | 127.0.0.1 | HTTP listen address. Use 127.0.0.1 or localhost for local-only access; use 0.0.0.0 explicitly for containers, VMs, WSL, or remote/shared access, together with authentication and network controls. | | --base-path | | Serve Radar under a URL prefix such as /radar. Use when an ingress forwards a subpath without stripping it — everything, including /api/health, moves under the prefix. Not supported with --cloud-url. | | --no-browser | false | Don't auto-open browser | | --browser | | Browser to use when opening the UI, e.g. firefox, google-chrome, or Google Chrome on macOS | | --timeline-storage | memory | Timeline storage backend: memory, sqlite, or postgres | | --timeline-db | ~/.radar/timeline.db | Path to SQLite database (when using sqlite storage) | | --timeline-max-size | 1Gi | Maximum SQLite DB + WAL size before pruning oldest events (e.g. 800Mi, 8Gi; 0 disables) | | --history-limit | 10000 | Maximum events to retain in timeline (memory only) | | --disable-exec | false | Disable terminal and debug shell | | --disable-helm-write | false | Disable Helm write operations | | --disable-local-terminal | false | Disable the host local terminal | | --debug-image | busybox:latest | Image for ephemeral debug containers and node debug pods. If built-in restricted PodSecurity rejects the default pod debug container, Radar retries with a restricted-compatible Linux security context using the target/pod non-root UID, or UID 65532 by default; point at a compatible mirror for air-gapped / private-registry clusters. | | --list-page-size | 0 (off) | Paginate the initial LIST of high-cardinality kinds (Pods, ReplicaSets) at this size. Helps very large clusters that fail to sync; only used when WatchList streaming is unavailable. Try 2000. | | --context-switch-timeout | 30s | Maximum time a kubeconfig context switch may take. Widen on high-latency control planes — see Tuning for slow clusters. Env: RADAR_CONTEXT_SWITCH_TIMEOUT. | | --first-paint-backstop | 5m | Hard upper bound on the initial critical-cache sync wait before Radar falls through to a partial-data render. Env: RADAR_FIRST_PAINT_BACKSTOP. | | --namespace-list-timeout | 5s | Timeout for the cluster-wide namespace LIST used to decide if the user is RBAC-namespace-restricted. A timeout on a slow control plane is misreported in the UI as "Limited list — RBAC". Env: RADAR_NAMESPACE_LIST_TIMEOUT. | | --max-scope-candidates | 20 | Cap on the namespace-fallback probe fanout (used by accounts that can list namespaces cluster-wide but not list a specific kind cluster-wide). Raise above 20 for clusters with more than 20 namespaces. Env: RADAR_MAX_SCOPE_CANDIDATES. | | --prometheus-url | (auto-discover) | Manual PromQL-compatible query URL, including Prometheus, VictoriaMetrics, Thanos, or Mimir (skips auto-discovery) | | --prometheus-single-cluster | false | Optional workload-metrics scope override: assert that the backend contains only this cluster. Replaces automatic identity matching; does not scope rightsizing or other metrics features. Scope and lifetime. | | --prometheus-cluster-label | (automatic matching) | Optional workload-metrics override for a shared backend, e.g. cluster=production (repeatable, ANDed). Alternative to --prometheus-single-cluster; leave both unset for automatic matching. Not persisted. | | --prometheus-header | | HTTP header sent with every Prometheus request, format Key=Value (repeatable). Required for auth-protected backends. | | --prometheus-header-from-env | | HTTP header sent with every Prometheus request, sourced from an environment variable, format Key=ENV_VAR (repeatable). | | --beyla-job-selector | (empty) | Beyla Live Traffic matcher fragment (empty matches Beyla/Alloy jobs there). Workload charts use it only with an explicit scope override and accept one job equality or regex matcher. Automatic workload matching discovers custom jobs without it. Details. | | --opencost-currency | (auto-detect, then USD) | Override the ISO 4217 currency label for OpenCost values. Radar labels values but does not convert them. | | --auth-mode | none | Authentication mode: none, proxy, or oidc (details) | | --no-mcp | false | Disable MCP server for AI tool integration | | --mcp-catalog-stdio | false | Start only the MCP catalog over stdio for registry introspection | | --version | | Show version and exit |

See Configuration Guide for details on cluster connection precedence, multiple kubeconfig files, and context switching.

Tuning for slow or high-latency clusters

The default deadlines (30 s context switch, 5 m first-paint backstop, 5 s namespace LIST, 20 scope candidates) are tuned for healthy clusters reached over fast, low-latency connections. They are too tight for clusters reached over SSH tunnels, geographically distant control planes, or accounts subject to API-server throttling, where they surface as one of three symptoms:

account has cluster-wide list permission (the LIST timed out, not RBAC) the 20-entry candidate cap

Widen the four flags via CLI or via the matching environment variables (RADAR_CONTEXT_SWITCH_TIMEOUT, RADAR_FIRST_PAINT_BACKSTOP, RADAR_NAMESPACE_LIST_TIMEOUT, RADAR_MAX_SCOPE_CANDIDATES) — env vars keep secrets out of ps and let in-cluster deployments source the values from a ConfigMap:

# CLI
kubectl radar \
  --context-switch-timeout=120s \
  --first-paint-backstop=10m \
  --namespace-list-timeout=30s \
  --max-scope-candidates=200

Environment (e.g. in a Deployment manifest)

RADAR_CONTEXT_SWITCH_TIMEOUT=120s \ RADAR_FIRST_PAINT_BACKSTOP=10m \ RADAR_NAMESPACE_LIST_TIMEOUT=30s \ RADAR_MAX_SCOPE_CANDIDATES=200 \ kubectl radar

Defaults are preserved when neither the flag nor the env var is set, so existing deployments are unaffected.

---

Views

Topology

Interactive graph showing how your Kubernetes resources are connected in real-time.

https://github.com/skyhook-io/radar/blob/HEAD/Topology View
Topology View — Visualize resource relationships

Resources

Table-based resource browser with smart columns per resource kind.

https://github.com/skyhook-io/radar/blob/HEAD/Resources View
Resources View — Browse and filter all cluster resources

Image Filesystem Viewer

Inspect container image filesystems directly from the Pod view — no need to pull images locally or exec into containers.

https://github.com/skyhook-io/radar/blob/HEAD/Image Filesystem Viewer
Image Filesystem Viewer — Browse container image contents

Timeline

Unified timeline of Kubernetes events and resource changes.

https://github.com/skyhook-io/radar/blob/HEAD/Timeline View
Timeline View — Track cluster activity in real-time

Helm

Manage Helm releases deployed in your cluster — inspect values and rendered manifests, diff revisions, identify failed upgrades and rollback-after-failure patterns, diagnose failed hooks, upgrade, rollback, and uninstall. Radar tracks available chart upgrades (from your configured repos or your own OCI registries) and lets you pick a specific target version. See Helm Support for the detailed behavior and limits.

https://github.com/skyhook-io/radar/blob/HEAD/Helm View
Helm View — Manage your Helm deployments

Compare Resources

Diff any two Kubernetes resources of the same kind side-by-side — like comparing a staging Deployment to its production sibling, or two pods that should be identical but aren't.

https://github.com/skyhook-io/radar/blob/HEAD/Compare View
Compare View — Side-by-side YAML diff with field-level highlighting

https://github.com/skyhook-io/radar/blob/HEAD/Compare Mode Tray
Compare mode in the resource table — pick two rows, hit Compare

TLS Certificate Management

View TLS certificate details and expiry dates across all namespaces — catch expiring certificates before they cause outages.

GitOps

Monitor, diagnose, and manage FluxCD and ArgoCD resources from a dedicated GitOps workspace.

https://github.com/skyhook-io/radar/blob/HEAD/GitOps fleet view
GitOps fleet view — Argo + Flux applications side-by-side with sync, health, source, destination, and lifecycle state

See the GitOps guide for the full feature matrix, RBAC requirements, demo cluster, and single-cluster scope notes.

Traffic

Visualize live network traffic between services using Hubble, Caretta, Istio, or Beyla.

https://github.com/skyhook-io/radar/blob/HEAD/Traffic View
Traffic View — See how services communicate in real-time

Workload Metrics

Open a Deployment, StatefulSet or DaemonSet's Metrics tab to investigate request rate, HTTP errors, latency, CPU, memory and throttling. Radar reads an existing Prometheus-compatible backend; resource charts do not require HTTP instrumentation, and request charts use supported Beyla or Istio observations.

See Workload metrics for screenshots, prerequisites, supported configurations and local multi-cluster setup limitations.

Capacity (Karpenter)

Read-only diagnosis for Karpenter-managed fleets — why is my pod pending, which NodePool could take it, why aren't my nodes joining, what is disruption doing to my fleet? Appears automatically when Karpenter NodePools are detected (RBAC-gated).

See docs/capacity.md for the full reference.

Cost Insights

Track Kubernetes spending from OpenCost metrics in a PromQL-compatible backend or a Kubecost 3 Aggregator. Auto mode keeps working Prometheus cost metrics, then discovers a local Kubecost Aggregator; a federated agent-only cluster can use its central Aggregator URL in Setting

GitHub Stars & Activity

3,356Stars
206Forks
0Open issues
GoLanguage

GitHub Popularity

GitHub stars3,356
Forks206
Open issues0
Primary languageGo
License-
Stars gained today430
Created-
Last pushed-

Trending History

Monthly boardrank #68 · ▲ 430 stars

Related AI Projects

1

ollama / ollama

Go★ 181,115⑂ 17,903▲ 140 stars
2

JuliusBrussee / caveman

Go★ 105,894⑂ 6,127▲ 233 stars
3

alibaba / open-code-review

Go★ 30,370⑂ 2,163▲ 3,215 stars
4

Tencent / WeKnora

Go★ 24,858⑂ 3,442▲ 696 stars
5

googleapis / mcp-toolbox

Go★ 16,433⑂ 1,721▲ 8 stars
6

coder / coder

Go★ 14,547⑂ 1,475▲ 31 stars
7

TencentCloud / CubeSandbox

Go★ 12,546⑂ 1,123▲ 259 stars
8

kubernetes-sigs / agent-sandbox

Go★ 3,908⑂ 513▲ 37 stars

More AI Rankings