Skip to content

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 ui<br/>local server · 127.0.0.1"]
    UI --- Desktop["ksail 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
SurfaceCommandBest for
Browserksail uiQuick visual management of local clusters without installing anything extra
Desktop appksail desktopA dedicated window outside the browser, launchable from your dock
In-clusterHelm chart with ui.enabled=trueTeam-shared dashboards over operator-managed clusters, with optional OIDC sign-in

ksail ui 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.

Terminal window
ksail ui # pick a free port and open the browser
ksail ui --port 8080 # serve on a fixed port
ksail ui --no-browser # start the server without opening a browser

This is the same UI the KSail operator serves in-cluster, but here it provisions and manages clusters locally via Docker.

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.

ksail ui, ksail desktop