Web UI & Desktop App
KSail ships one web UI that runs in three places: locally in your browser, as a native desktop window, or inside a cluster served by the KSail operator. All three talk to the same REST API, so the experience is identical — pick the surface that fits how you work.
flowchart LR
UI["🖥️ KSail Web UI"]
UI --- Local["ksail open web<br/>local server · 127.0.0.1"]
UI --- Desktop["ksail open desktop<br/>native window"]
UI --- Operator["KSail operator<br/>in-cluster · OIDC optional"]
Local -->|"REST API"| Docker["🐳 Local clusters via Docker"]
Desktop -->|"REST API"| Docker
Operator -->|"REST API"| CRs["☸️ Cluster custom resources"]
style UI fill:#2ec4e622,stroke:#2ec4e6
style Local fill:#10b98122,stroke:#10b981
style Desktop fill:#10b98122,stroke:#10b981
style Operator fill:#7c3aed22,stroke:#7c3aed
Choosing a Surface
Section titled “Choosing a Surface”| Surface | Command | Best for |
|---|---|---|
| Browser | ksail open web |
Quick visual management of local clusters without installing anything extra |
| Desktop app | ksail open desktop |
A dedicated window outside the browser, launchable from your dock |
| In-cluster | Helm chart with ui.enabled=true |
Team-shared dashboards over operator-managed clusters, with optional OIDC sign-in |
Running Locally
Section titled “Running Locally”ksail open web starts a small local web server and opens the UI in your browser. The server binds to 127.0.0.1 only — it is never exposed to your network — and serves both the UI and a REST API backed by your local cluster lifecycle. It runs until you press Ctrl+C.
ksail open web # pick a free port and open the browserksail open web --port 8080 # serve on a fixed portksail open web --no-browser # start the server without opening a browserThis is the same UI the KSail operator serves in-cluster, but here it provisions and manages clusters locally via Docker.
The desktop app wraps the web UI in a native window — no browser required. It ships as a separate download from the releases page, or build it from source with make desktop.
ksail open desktopksail open desktop launches the app from, in order: a ksail-desktop binary next to the ksail executable, the same binary on your PATH, or (on macOS) an installed KSail app.
Enable the UI when installing the KSail operator Helm chart:
helm upgrade --install ksail-operator oci://ghcr.io/devantler-tech/charts/ksail-operator \ --namespace ksail-system --create-namespace \ --set ui.enabled=trueThe in-cluster UI manages Cluster custom resources instead of local Docker containers, and supports OIDC authentication and a server-enforced read-only mode. See Kubernetes Operator for the full setup.
Install on iPhone or iPad
Section titled “Install on iPhone or iPad”You can add the UI to an iPhone or iPad Home Screen, or to the Dock on a Mac, and open it in its own window with the KSail name and icon, like an app.
To reach it from a phone or tablet, serve it from the cluster: install the KSail operator with ui.enabled=true, expose the UI through the chart’s Ingress, and turn on OIDC sign-in so only signed-in users can reach the API. Securing with OIDC shows the settings.
- Open the UI’s address in Safari and sign in.
- Tap Share, then Add to Home Screen. On a Mac, choose File → Add to Dock.
The installed app shows live cluster state, so it needs a connection to the operator. Nothing is cached for offline use.
Read-Only Mode for GitOps
Section titled “Read-Only Mode for GitOps”In GitOps-enforced environments the Git repository should stay the single source of truth. Deploy the in-cluster UI with ui.readOnly=true to lock it to inspection: the restriction is enforced server-side by the REST API, not just hidden in the frontend.
CLI Reference
Section titled “CLI Reference”ksail open web, ksail open desktop
Related
Section titled “Related”- Kubernetes Operator — deploy the UI in-cluster with OIDC and read-only mode
- OIDC Authentication — KSail’s native OIDC support for cluster access
- VSCode Extension — manage clusters from your editor instead