The Problem
Operators need a single UI that can view, edit, and act on resources across many Kubernetes clusters while enforcing enterprise‑grade access controls. Existing dashboards either lack multi‑cluster support or require separate tools for RBAC, audit logs, and AI‑assisted troubleshooting, forcing teams to stitch together ad‑hoc scripts.
What This Does
kite delivers a full‑stack platform: a Go‑based API server (main.go) and a React/TypeScript front‑end (ui/src). The back‑end implements OAuth, RBAC, audit logging and proxies to the Kubernetes API (see pkg/auth/handler.go, pkg/rbac/*.go, pkg/kube/client.go). The UI talks to the API via the generated client in ui/src/lib/api.ts and renders resource tables, live charts, logs and an AI chat assistant (pkg/ai/handler.go). Helm charts (charts/kite/*.yaml) and Dockerfiles (Dockerfile, Dockerfile.binary) enable containerised deployment.
How It Is Wired
- Process start –
main.go:223runsmain, which initializes the DB (InitDBinpkg/model/model.go), creates the Kubernetes client (NewClientinpkg/kube/client.go), registers HTTP routes (setupAPIRouterinpkg/auth/handler.go) and starts the HTTP server. - Routing –
setupAPIRouterregisters handlers such asNewAuthHandler,NewGenericResourceHandler, and AI endpoints (HandleChat,HandleExecute). Each route is a hub; e.g.,RegisterRoutes -> NewGenericResourceHandleroccurs 27 times, givinggeneric_resource_handler.gothe highest fan‑in (23 callers). - Core request flow – A typical resource list request follows:
HTTP → RegisterRoutes → NewGenericResourceHandler.List → Query (pkg/prometheus/client.go) → DB Exec → JSON response. TheQueryfunction is called from 12 places, making it a high‑impact node. - AI interaction –
HandleChat(entry point) creates anAgent(pkg/ai/agent.go), which builds a runtime prompt (buildRuntimePromptContext) and calls the model client (NewAnthropicClientorNewOpenAIClient). The model call is the only outbound network call from the AI path. - External effects – DB writes:
InitDB,Callback → Query,Create(resource creation). Network calls: Kubernetes client (client.Get), model APIs, Prometheus queries. * Filesystem: log streaming (pkg/kube/log.go), reading/writing config files. - Hotspots –
ui/src/pages/resource-listimports 20 other modules but is only imported once, indicating high instability* (0.95). UI componentsbuttonandcardare pure leaf nodes (Ca = 10, Ce = 0). The most connected back‑end module ispkg/handlers/resources/cr_handler.go(9 functions, called from 23 files).
No circular import cycles were detected, so static dependencies are acyclic, simplifying refactoring.
How To Use It
# Clone the repo
git clone https://github.com/moses-y/kite
cd kite
# Build the server (requires Go 1.25+)
make build # produces ./kite (binary)
# Build the UI (pnpm required)
cd ui
pnpm install
pnpm run build # outputs dist/ for the static assets
# Run locally with Docker (recommended)
docker build -t kite:local .
docker run -d -p 8080:8080 -v $(pwd)/data:/data \
-e DB_DSN=/data/db.sqlite kite:local
Configuration lives in environment variables (DB_DSN, OAuth client IDs, Prometheus URLs) as documented in docs/config/*.md. The Helm chart (charts/kite/values.yaml) provides a production‑ready manifest; install with:
helm repo add kite https://kite-org.github.io/kite/
helm install kite kite/kite -n kube-system -f myvalues.yaml
Real‑World Use
A SaaS platform runs kite as a side‑car in each customer’s management cluster. The back‑end authenticates users via the provider configured in docs/config/oauth-setup.md, enforces per‑tenant RBAC (pkg/rbac/manager.go), and exposes an AI chat that can query Prometheus metrics and suggest scaling actions, all from a single UI.
Code Health & Issues
- Critical – Privileged pull‑request checkout in
.github/workflows/build-preview-docker-image.yml. - Critical – Secrets used in a fork‑triggered workflow
.github/workflows/deploy-test-env.yml. - High – GitHub Actions not pinned to commit SHAs (
docker/setup-qemu-action@v3, etc.). - High – Release workflow pushes directly to default branch (
.github/workflows/release.yaml). - Medium – Base images referenced by mutable tags in
Dockerfile. - Medium – No dependency‑vulnerability scan step in CI.
- Medium – Checkout step retains token; should set
persist-credentials: false. - Medium – Container runs as root; no non‑root
USERdefined. - Medium – Test coverage low (9 test files vs 269 source files).
- Low – Workflow jobs lack explicit
timeout-minutes.
Additional static findings: deep nesting (max depth 8) in several UI components, duplicated logic across AI helper files, and oversized files (ui/src/lib/api.ts, pkg/ai/tools.go). These are reported by the analysis and include suggested fixes.
The Bottom Line
kite is a well‑structured, full‑stack Kubernetes dashboard with solid modular separation between UI, API, and cluster interaction. It offers the needed multi‑cluster, RBAC, and AI features, but the repository contains serious CI/CD security gaps and limited test coverage that must be addressed before production deployment. Suitable for teams comfortable with Go and React who can invest in hardening the CI pipeline.