Zero install on your cluster โ runs on your laptop, talks to the K8s API directly. Single binary โ no dependencies, no agents, no CRDs. Fast on big clusters โ tested on tens of thousands of pods, with responsive views and live updates under real cluster churn
Tools
Tools
No tool list yet. Remote servers get one after the first health check.
FAQ
Kubernetes MCP server for diagnosis, resource management, GitOps, and RBAC-enforced operations.
Copy the stdio config for Cursor, Claude Desktop, Claude Code, or VS Code on this page. It uses the publisher's install, not a PlugMCP proxy.
Does Radar Kubernetes MCP Server need an API key?
No required environment variable is listed on this record.
What transport does Radar Kubernetes MCP Server use?
Radar Kubernetes MCP Server runs locally over stdio.
When was Radar Kubernetes MCP Server last checked?
Last checked 2026-11-10. Zero install on your cluster โ runs on your laptop, talks to the K8s API directly. Single binary โ no dependencies, no agents, no CRDs. Fast on big clusters โ tested on tens of thousands of pods, with responsive views and live updates under real cluster churn
From the publisher
Documentation
Radar
The missing open-source Kubernetes UI.
Single binary. No account required. Free forever.
Zero install on your cluster โ runs on your laptop, talks to the K8s API directly
Single binary โ no dependencies, no agents, no CRDs
Fast on big clusters โ tested on tens of thousands of pods, with responsive views and live updates under real cluster churn
Private by design โ your cluster data stays on your machine. No account, no agents, no cloud sync. Usage reporting is off unless you opt in, and then sends only anonymous usage counts and coarse cluster facts: Kubernetes version, platform, node-count range, known integrations (what Radar sends)
Airgapped-friendly โ runs as a single binary against the Kubernetes API and works in locked-down environments with outbound egress blocked
Real-time โ watches your cluster via informers, pushes updates to the browser via SSE
Works everywhere โ GKE, EKS, AKS, minikube, kind, k3s, or any conformant cluster
AI-ready โ built-in MCP server lets AI agents inspect, investigate, and operate your cluster through Radar
In-cluster option โ deploy with Helm for shared team access with RBAC-scoped permissions
"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 kubectl-radar
Also available from our tap: 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.
curl -fsSL https://get.radarhq.io | INSTALL_DIR="$HOME/.local/bin" sh
Quick install writes to /usr/local/bin unless INSTALL_DIR says otherwise. The directory is created if missing, and needs to be on your PATH for radar and kubectl radar to resolve.
Direct download โ GitHub 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:
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.
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 IP address (IPv4 or IPv6), or localhost. Bind a specific local IP or use 0.0.0.0 for all interfaces. Non-loopback access needs 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.
--allowed-hosts
Comma-separated hostnames, besides localhost, IP addresses and Kubernetes Service names, that an unauthenticated non-loopback listener answers, e.g. radar.internal. Other hostnames are refused so DNS rebinding cannot reach Radar. Exact names, or *.example.com for names under a domain (not the domain itself); * turns the check off. Env: RADAR_ALLOWED_HOSTS. See HTTP Listener
--trusted-origins
Comma-separated origins, besides the address Radar is opened at, that may use Radar's API, including changes and terminals, e.g. http://radar.internal. Set this when a proxy in front of Radar rewrites the Host header and changes fail with "Radar refused this request". Exact origins, no wildcards. Does not apply to /mcp (see RADAR_MCP_TRUSTED_ORIGINS). Env: RADAR_TRUSTED_ORIGINS
--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 pod terminal, debug shells and pod file browsing
--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). In local CLI/Desktop mode, applies only to the launch's initial context and never inherits saved headers.
--prometheus-single-cluster
false
Declare the backend dedicated to this cluster for workload metrics and PVC usage, replacing automatic identity matching. Other metrics do not use this override. Scope and lifetime.
--prometheus-cluster-label
(automatic matching)
Optional workload/PVC 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. In local CLI/Desktop mode, requires --prometheus-url in the same launch and applies only to the launch's initial context.
--prometheus-header-from-env
HTTP header sent with every Prometheus request, sourced from an environment variable, format Key=ENV_VAR (repeatable). In local CLI/Desktop mode, requires --prometheus-url in the same launch and applies only to the launch's initial context.
--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 all MCP endpoints
--mcp-read-only
false
Expose only read-only MCP tools; disable /mcp (env: RADAR_MCP_READ_ONLY)
--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:
"Context switch timed out" toasts when the cache eventually does sync
"Limited list โ RBAC doesn't allow listing all namespaces" even though the
account has cluster-wide list permission (the LIST timed out, not RBAC)
Kinds silently marked denied because the namespace they live in fell past
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:
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.
Two modes: Resources (full hierarchy) and Traffic (network flow path)
Group by namespace, app label, or view ungrouped
Filter by resource kind โ click any node for full details
Auto-layout powered by ELK.js, live updates via SSE
Resources
Table-based resource browser with smart columns per resource kind.
Browse all resource types including CRDs
Search by name, filter by status or problems (CrashLoopBackOff, ImagePullBackOff, etc.)
Add custom columns from any label or annotation โ sortable, filterable, and resizable
Click any resource for YAML manifest, related resources, logs, and events
Set regular or init-container images on Deployments, StatefulSets, DaemonSets, and Argo Rollouts, with live rollout progress in tables, drawers, workload views, and Applications
Image Filesystem Viewer
Inspect container image filesystems directly from the Pod view โ no need to pull images locally or exec into containers.
Click any container image in a Pod to browse its complete filesystem
Tree view with file sizes, permissions, and symlink targets
Search files by name across the entire image
Download individual files for inspection
Works with public images (Docker Hub, Quay, GHCR) and private registries (GCR, ECR, ACR) using your cluster's ImagePullSecrets
Disk-based layer caching for fast repeated access
Timeline
Unified timeline of Kubernetes events and resource changes.
Filter by event type (all or warnings only)
Resource change diffs showing what changed (replicas, images, etc.)
Real-time updates as new events occur
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.
View all releases across namespaces with status, chart version, app version, resource health, storage namespace, and Flux ownership
Inspect values, compare revisions across values/manifests/notes/resources, and view release history
Correlate failed/running hooks with remaining Job, Pod, Event, and redacted log evidence
Upgrade, rollback, or uninstall releases directly from the UI
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.
Two entry points: a Compare button in the resource detail drawer, or compare mode in the resource table (toggle, pick two rows, hit Compare)
Side-by-side or unified view, with one-click swap of A โ B
Diff-only mode collapses unchanged regions so you only see what differs
Spec-only mode drops status fields to focus on intent rather than observed state
Server-assigned noise (managedFields, resourceVersion, kubectl.kubernetes.io/last-applied-configuration) is stripped automatically so the diff stays signal โ flip Raw metadata on if you actually want to see it
Same-namespace candidates are surfaced first in the picker โ usually the resource you want to compare against
Lifecycle awareness โ Terminating chip replaces stale Sync/Health badges; severity ramps with deletion age; mutating ops refuse on zombies
Cross-linked from the rest of Radar โ Managed by chip in resource drawers, GitOps routing from Topology + Timeline + Helm view, Consumed by panel on Flux source CRs
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.
Auto-detects Hubble (Cilium), Istio, Caretta, or Grafana Beyla as traffic data sources
Beyla (standalone or via Grafana Alloy) provides eBPF L4 + HTTP visibility with no service mesh, read from Prometheus
Beyla needs its network feature enabled, and per-port edges additionally need dst.port and transport named in attributes.select โ both are off by default, and Radar says so in the Traffic view rather than showing partial edges silently
Animated flow graph showing requests per second between services
Filter by namespace, protocol, or status code
Built for large clusters: hidden traffic is filtered at the source, each refresh keeps a bounded number of the newest flows and says how much of the window it covers, and the flow list fetches the records behind a selected node or edge
Hubble traffic is drawn per workload (Deployment, StatefulSet, โฆ) rather than per pod; the flow list keeps the pods. A map too large to lay out is listed as its connections, failures first, with ways to narrow it
Focus on a workload (/, a node's details, or Live traffic on its page once a traffic source is detected) to see only it and what it talks to; the focus is in the URL, so it can be shared
Setup wizard to install a traffic source if none is detected
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.
Workload history includes previous replicas when metrics and ownership are retained
Compare current Pods to find resource outliers
Automatic discovery and identity checks, with missing or partial data labeled explicitly
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).
Overview โ fleet KPIs with claim lifecycle detail, a cluster scheduling-capacity bar (requests vs allocatable, in-flight beyond the edge, pending demand as an honest not-to-scale count), prioritized operational signals, and the NodePool inventory
NodePool detail โ the capacity ledger (configured limit, provisioned, headroom, allocatable, scheduled requests, unallocated, actual usage), claim lifecycle, fleet composition, and workload attribution
Demand โ pending pods grouped by scheduling signature, each group evaluated against every NodePool's declared constraints with per-predicate evidence; filterable by state, pool, and workload
Activity โ provisioning / disruption / interruption episodes classified from Karpenter's exact event vocabulary, with per-evidence confidence
Every quantity carries per-value certainty (= โฅ โค ?) โ unavailable is never rendered as zero, partial is never rendered as exact
Issues, Pending-pod drawers, and the Home posture card deep-link into the right diagnosis
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 Settings, config, or Helm. Radar
reads the configured currency from a running OpenCost or Kubecost workload when available and
otherwise uses USD. Source changes are tested and applied separately from the display-currency
preference, which can be saved even when a source is unavailable. Radar labels values but does not
convert them.
Allocated workload cost with namespace scope called out separately from cluster-wide node capacity cost
Cost trend charts with 6h/24h/7d range selector when Prometheus history is available
Namespace and workload-level cost breakdowns with efficiency scoring
Node costs with instance type and region pricing
Appears automatically when compatible Prometheus metrics or Kubecost current allocation data is detected
Cluster Audit
Proactive best-practices scanner with 44 checks across security, reliability, and efficiency โ inspired by Polaris, Kubescape, Trivy, and NSA/CISA guidelines. Runs instantly against cached data with zero cluster-side installation.
Reliability: missing probes, image tag latest, single-replica deployments, missing PDB/topology spread, pod HA risk (all replicas on same node), orphan services/ingresses, deprecated API versions
Efficiency: missing CPU/memory requests and limits, orphan ConfigMaps/Secrets, PVCs with no consumer observed, long-Pending PVCs, Released PVs that are retained or failing deletion, and Failed PVs
Check-grouped remediation queue with search and category, severity, and framework filters; expand a check to see affected resources
Each finding includes description and remediation guidance, with inline hide actions for a check or category
Per-resource opt-out via the radarhq.io/ignore-checks annotation (comma-separated check IDs) โ set on the resource a finding is attributed to, so the exclusion travels with the manifest instead of living in one operator's local settings
Framework labels: NSA/CISA, CIS benchmarks
MCP tool (get_cluster_audit) for AI-assisted cluster analysis
Network Path Diagnose
Hop-ordered diagnosis for Service, Ingress, HTTPRoute, GRPCRoute, and Gateway - answering "if traffic is sent toward this resource, does it reach a healthy process, and if not which hop breaks first?"
Composes the detections Radar already runs (missing backend Service, port mismatches, no-ready-endpoints, route not Accepted by parent Gateway, readiness probe targeting the wrong port) into a path shape ordered along the traffic flow
Upstreams (Ingresses / Routes pointing at a Service) are judged independently - one broken Ingress doesn't condemn the other delivery paths
First critical hop is named explicitly so the operator can localize the break without reading the whole list; each finding ships a kubectl reproducer
Optional one-shot reachability test runs DNS / TCP / TLS / HTTP probes against the declared path - direct TCP when Radar is in-cluster, K8s API server proxy when running from a laptop - so the same button works regardless of where Radar runs. Probes never override the static verdict; they add evidence.
NetworkPolicies that select the subject's pods are statically evaluated for their caller-independent ingress rules: a "would block" WARNING prediction when no rule admits the path's port, a source-restricted advisory, or an outbound egress note. It's a prediction, never a verdict - the CNI is the only enforcement authority, so the live in-cluster probe confirms or downgrades it
Static trace is pure functions over the in-memory informer cache. Active probing from a laptop uses the cluster's normal RBAC (get services/proxy, get pods/proxy); in-cluster mode goes directly to the data path.
Exposed via the Reachability tab in the resource detail view (and via the network branch of the MCP diagnose tool for AI consumers) - see docs/reachability.md
Kubernetes Upgrade Impact
Open Checks โ Upgrade impact before upgrading the control plane. Radar compares the current cluster with a target Kubernetes minor and orders evidenced compatibility, health, admission, drain, runtime, and configuration checks by required action. Release-specific checks appear only when their Kubernetes minor lies in the selected upgrade path; the current catalog is reviewed through Kubernetes 1.37.
Finds blockers such as skipped minor versions, APIs removed in the target release, unsupported kubelet or kube-proxy skew, overlapping PodDisruptionBudgets, the gitRepo volume driver disabled in Kubernetes 1.36, and removed or locked Kubernetes 1.37 feature gates or scheduling.k8s.io/v1alpha2 objects
Flags likely operational impact such as FlexVolume exposure and renamed control-plane metrics as warnings, while intent-dependent configuration such as deprecated Service externalIPs remains review
Inspects live resources, aggregated API availability, Helm release manifests, kubectl last-applied configuration, API server usage metrics, and PrometheusRule expressions
Distinguishes Passed, Review, Warning, Blocked, Incomplete, and Not applicable instead of flattening advisory findings, likely impact, and missing evidence into one state
Scans every namespace the current identity can read; the header namespace picker remains a browsing filter and does not narrow upgrade analysis
Shows the bundled catalog boundary and the evidence scope for sampled or unavailable data
Inspect what any ServiceAccount can actually do โ without three kubectl describe calls.
ServiceAccount detail: direct bindings, effective permissions (per-binding and deduplicated flat view), inherited grants via implicit groups (system:authenticated, system:serviceaccounts), and "Used by Pods" closing the loop
Pod detail: "Permissions" section showing the most-permissive rules the Pod's SA grants, plus a blast-radius alert when the SA has wildcards, cluster-admin, escalation verbs, or cluster-wide create pods
Workload detail (Deployment / StatefulSet / DaemonSet): same Permissions section framed at the workload level โ every Pod the workload spawns inherits these grants
Namespace detail: RBAC summary with RoleBindings configured here + ClusterRoleBindings whose subjects reference this namespace
Role / ClusterRole detail: who is bound to this role, with subject summaries inline
RoleBinding detail: inline preview of the rules the binding grants + warnings when subjects include wide groups (system:authenticated, system:unauthenticated, system:masters)
"My Permissions" panel: namespace-scoped live SelfSubjectRulesReview for the current user โ for fast "why can't I do X" debugging
MCP: get_subject_permissions tool exposes the same data to AI agents for "is this SA over-privileged?" / "blast radius if compromised?" queries
Read-only visibility ships first; the considered follow-ups (RBAC audit checks, verb ร resource matrix, subject explorer, graph view, in-UI edits, "can-i" queries) are tracked in #1090.
AI Integration (MCP)
Radar includes a built-in Model Context Protocol (MCP) server that lets AI agents โ Claude Code, Codex, Cursor, GitHub Copilot (VS Code and CLI), OpenCode, Google Antigravity, and any other MCP client โ inspect, investigate, and operate your cluster through Radar.
Instead of raw kubectl output (verbose YAML that burns through LLM context windows), your AI gets pre-processed, token-optimized data: topology graphs, health assessments, deduplicated events, and filtered logs. Diagnosis is read-only by default; optional in-cluster route probing uses short-lived, self-deleting probe pods. Write operations such as restart, scale, apply, and rollback are identified for client confirmation and enforced through Kubernetes RBAC.
Enabled by default. Disable all MCP endpoints with --no-mcp, or expose only
read-only MCP tools with --mcp-read-only and connect to /mcp-readonly.
This setting does not restrict UI or REST API writes. See the
MCP Guide for setup and configuration precedence.
Authentication
For shared in-cluster deployments, Radar supports optional user authentication with per-user Kubernetes RBAC.
Proxy mode โ works with oauth2-proxy, Pomerium, Cloudflare Access, or any auth proxy that sets forwarded headers
OIDC mode โ built-in login via Google, Okta, Dex, Keycloak, or any OIDC provider
Per-user namespace scoping and write authorization via K8s impersonation
UI adapts automatically โ buttons only appear if the user has RBAC permission
Radar auto-discovers any CRD in your cluster. Popular tools get dedicated integrations with topology edges, detail views, and AI summaries.
Default chart RBAC covers the built-in Kubernetes kinds listed below โ Workloads, Networking (including NetworkPolicies and PodDisruptionBudgets), Configuration, Storage (PersistentVolumes, PersistentVolumeClaims, StorageClasses), HorizontalPodAutoscalers, ServiceAccounts, LimitRanges, ResourceQuotas, Nodes, Namespaces, and Events. On Kubernetes 1.37, Radar also surfaces the Workload, PodGroup, CompositePodGroup, PodCertificateRequest, and ClusterTrustBundle APIs when the API server advertises them; the scheduling APIs are feature-gated, while the certificate APIs are stable and enabled by default. These use the generic resource browser rather than dedicated renderers. RBAC objects (Roles, ClusterRoles, RoleBindings, ClusterRoleBindings) are opt-in via rbac.viewRBAC=true. CRD-based integrations (Gateway API, VerticalPodAutoscaler, Calico, ArgoCD, FluxCD, cert-manager, etc.) need both the CRD installed in your cluster and read access granted โ most groups are default-on under rbac.crdGroups.<name> (e.g. gatewayApi, verticalPodAutoscaler, calico); check values.yaml or add custom rules via rbac.additionalRules.
Upgrade impact also gets list-only access to CSIStorageCapacities, FlowSchemas, PriorityLevelConfigurations, and PodSecurityPolicies on clusters where those kinds are served. These reads inspect source-manifest evidence and do not add the kinds to Radar's resource browser.
Namespace/workload/node cost via compatible Prometheus metrics or the Kubecost 3 Aggregator (no CRDs)
CRDs
Any Custom Resource Definition in your cluster (auto-discovered)
Keyboard Shortcuts
Shortcut
Action
g then a letter
Switch view โ g h Home, g r Resources, g i Issues, g t Topology, g a Applications, g l Timeline, g f Traffic, g m Helm, g o GitOps, g u Checks, g c Cost
t
Toggle dark/light theme
?
Show keyboard shortcuts
โK
Open command palette
/
Focus search (context-aware)
f
Fit topology to screen
+ / - / 0
Zoom in / out / reset (topology)
j / k
Navigate rows (resources, helm)
g g / G
Jump to first / last row
Enter / d
Open selected resource detail
y
Open YAML view
l
Open logs (pods/workloads)
[ / ]
Previous / next resource kind
Escape
Close panel/modal/search
Topology: Pan (drag), Zoom (scroll), Select (click), Multi-select (Shift+click)
Security
Radar reads your cluster through your own credentials and keeps cluster data local. It does not upload manifests, logs, events, metrics, or resource data to Skyhook, and it does not require an account, agent, or cloud backend. Found a vulnerability? Please report it privately to [email protected] โ see SECURITY.md for the process and response timelines.
git clone https://github.com/skyhook-io/radar.git
cd radar
make deps
# Terminal 1: Frontend with hot reload (port 9273)
make watch-frontend
# Terminal 2: Backend with hot reload (port 9280)
make watch-backend
Contributing
Contributions are welcome! Please read our Contributing Guide for details on the development workflow, pull request process, and coding standards.
Radar is built and maintained by Skyhook (YC W23) and is open source under Apache-2.0. The OSS version is fully featured and the recommended way to run Radar.
For teams that want hosted multi-cluster Radar with SSO and shared dashboards, we also offer Radar Cloud.