kite-desktop: the desktop framework it is built on is an alpha, and it carries a web framework and the kubectl library
kite-desktop,一个基于 Wails v3 打造、面向桌面端的 K8S 多集群管理工具 🪁
At a glance
- What is it?
- A desktop rework of an open source Kubernetes console, with a Go backend, a React interface and a native shell. It is a fork that says it is separating from its upstream, licensed AGPL-only over inherited Apache code, and shipping four platform packages of which none is Linux.
- Who is it for?
- kite-desktop suits someone who wants a cluster console as a native window rather than a browser tab, and who is comfortable tracking an alpha framework and an AGPL licence. Three things to check before you build on it.
- Can I use it commercially?
- Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
- Is it still maintained?
- Yes. The repository last received commits 125 days ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 3, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The framework everything is built on is an alpha release
The readme names the desktop runtime as the key infrastructure behind the whole transformation, which is the right characterisation: it provides the native window, the system integration and the packaging, and the five future capabilities listed under it, window behaviour adaptations, local file access, system file pickers, opening external links in the system browser, and the desktop build and release workflow, are all things that runtime has to supply.
The dependency list pins that runtime to an alpha version of its third major line. Not a release candidate, not a release.
The build system is arranged around that. The makefile resolves the runtime binary at parse time, first by looking for it on the path, and if that fails by searching a Go version manager's package directory for a binary of that name, and only then falls back to the bare command name. So a developer without the tool installed gets a confusing error from a shell rather than a message telling them to install it, and a developer with several tool versions available gets whichever the search finds first.
The dependency list also pins a specific Kubernetes minor version across nine separate modules, all on the same version, which is the right way to keep a client surface consistent. That part of the manifest is disciplined.
Two frontends, two package managers, and stamp files that hide stale installs
The repository has two interface trees and the makefile installs them differently.
One is a shared web interface directory with its own package manifest, its own lockfile, its own bundler config and three separate TypeScript configurations. The other is a frontend nested inside the desktop directory, with a different lockfile format and no visible bundler config.
The install for the first is a frozen lockfile install through one package manager, run against that directory. The install for the second is a clean install through the other package manager, against the nested directory. So one makefile drives two package managers with two lockfile formats, which is a choice someone made deliberately and which nobody has documented in the readme.
Both installs are guarded by a stamp file placed inside the dependency directory itself. If the stamp exists, the install is skipped. The stamp's prerequisites are the manifest and the lockfile, so editing either re-triggers it.
The consequence of putting the stamp inside the dependency directory is that deleting that directory silently re-enables installation, which is convenient, and that a partially failed install can leave a stamp behind, which is not.
There is a help target that parses the makefile's own comment conventions to print a target list, a lint target, a format target, a test target, a pre-commit target and a clean target. The default goal is build, so a bare make invocation compiles the application.
The three commands the readme documents are one word each:
make depsmake devmake buildA web framework and the command line library are direct dependencies
The module's direct requirements are worth reading as a description of what the application is.
A web framework is there. For a desktop application whose pitch is a native window, that is either a leftover from the upstream server-oriented codebase or a deliberate choice to serve the web interface locally, and the readme does not say which.
The Kubernetes command line library is a direct dependency. Depending on that library rather than on the client library pulls a large part of a command line program into a desktop binary, which is a substantial size and maintenance cost for functionality a cluster console mostly does not need.
Also present: the controller runtime, the gateway API types, the metrics client and two of its transitive packages, an object relational mapper with drivers for two server databases plus an embedded one, an embedded database driver, a caching library, a generic utility library, a test assertion library, a compression middleware, a templating engine with a Python-compatibility module, a semantic version library, and two model provider SDKs.
Those last two are the interesting entry. The readme says the project will explore deeper integration with AI capabilities, in the future tense, while both a commercial provider's Go SDK and another one are already pinned as direct requirements.
AGPL-only layered over inherited Apache code
The licence line says this repository is licensed under the copyleft licence version three with the only suffix, which removes the option of upgrading to a later version. The repository record carries the same licence without that suffix, so the two differ on a point that matters in practice.
Then there is the note, which is the most careful paragraph in the readme. It says the repository is a deeply modified derivative of the upstream project and may still contain code inherited from upstream under a different, permissive licence, along with the corresponding attribution obligations, and points at a notice file and at a copy of that licence stored in a directory in the repository.
That is the correct way to handle a relicensed fork: name the inherited licence, keep the attribution, and ship the text. The root listing has all three, the notice file, the licences directory, and the readme line.
What is not there is a statement about which parts are which. A reader who wants to know whether a given file carries the copyleft grant or the permissive one has to trace it to the upstream project, and the notice file's contents are not summarised anywhere in the readme.
The copyleft choice itself is defensible for a tool that talks to a cluster, where the server side of any hosted variant would be the thing people wanted to keep closed.
It is a fork that says it is separating, and means it
The readme opens with an acknowledgement naming the original project and its organisation, and then says the upstream already provided a solid foundation: Kubernetes resource management, cluster management workflows, backend capabilities, and the overall product direction. The desktop transformation in this repository is built directly on top of those results.
It then makes a distinction worth taking seriously. This is not a mirror of the original repository and not a thin shell around it; it is the result of a substantial desktop-oriented rework whose goal is to reshape something originally web and server oriented into a truly installable, distributable, locally usable desktop tool.
The project direction section commits to the separation in five bullet points: desktop-native capabilities keep being enhanced, interaction flows and feature boundaries are adjusted for desktop use, parts no longer suitable get trimmed or refactored or replaced, new capabilities with stronger desktop value get introduced, and a dedicated release, installation and upgrade system will be built for the desktop app.
That last one is a roadmap item, not a feature, and it is the one a user notices first: there is no documented upgrade path yet.
The module path has already moved, which is the concrete part of the separation. It is under this repository's own path rather than the upstream organisation's, so the two can diverge without collision.
Four target platforms, none of them Linux, and nothing released since May
The release targets are listed as macOS on Intel, macOS on Apple silicon, Windows on x64, and Windows on ARM64, and the framing is gradual support for those four.
There is no Linux target in the list, and no other Unix. For a tool whose subject is Kubernetes clusters, that is an unusual omission, since the machines most administrators run clusters from, and often administer them from, are Linux.
The release list is three versions, all on the zero one line, and they move in fives: zero one ten, then zero one fifteen, then zero one twenty, about seventeen and twenty-one days apart. So the project's own patch counter is being used as a coarse progress marker rather than as a sequence of fixes.
The newest tag was cut one second after the last commit, which is the expected shape. Nothing has been committed since, and the current date is about four months later.
Two more small things in the header and the footer. There is an anchor element with an empty target and a security attribute but no content, so it renders as an empty link. And the sponsorship table has a second column for a mainland payment route that contains no link in either of its two rows, while the left column holds a single payment link.
Two distribution hosts and one privacy document
The readme recommends a mirror repository on a third-party code hosting service for users in mainland China, and gives the full address.
That is a pragmatic call and it is also a supply chain consideration worth naming plainly. There are now two places to fetch this code from, one of them operated by the author on the primary host and one a mirror on a different service, and nothing in the readme says whether the mirror is a push mirror, a pull request mirror, or a manual copy. The tag identifiers are the only thing tying the two together.
The release assets have the same property. Four platform packages are promised, and the licence note points at a notice file, so at least the provenance of the code is documented. Whether the signed binaries correspond to those tags is not something the readme addresses.
The privacy document is the other thing worth finding. There is a desktop analytics privacy notice in the documentation directory, linked from the readme under its own heading. For a cluster administration tool, a telemetry disclosure that exists as a separate document and is linked rather than embedded is a reasonable choice, and its presence tells you the project considered the question.
The rest of the repository root is a conventional Go layout with a command directory, internal packages, a public package directory, an entry point file, a desktop directory, a scripts directory, an agent instruction file, a contributing guide, a linter configuration and a workflow directory.
Editorial conclusion
kite-desktop suits someone who wants a cluster console as a native window rather than a browser tab, and who is comfortable tracking an alpha framework and an AGPL licence. Three things to check before you build on it. The desktop runtime is a pre-release framework version, so an upstream breaking change arrives as a dependency bump rather than a deliberate one. The dependency list includes a web server framework and the Kubernetes command line library, which means the binary is large and the attack surface is a network server even in a desktop app. And the readme lists four release targets with no Linux among them, which is the wrong shape for the machine most cluster administrators work on.
Frequently asked questions
What is kite-desktop built on?
Go for backend logic and Kubernetes integration, React for the interface, and a third-generation desktop framework for the native runtime, windowing, system integration and packaging. That desktop framework is pinned to an alpha version of its third major line, and the makefile searches for its binary on the path and then inside a Go version manager directory.
Is kite-desktop a fork of the Kite project?
Yes. The readme acknowledges the original project and its organisation, calls this a deeply modified derivative, and says the goal is to reshape something originally web and server oriented into a desktop tool. Its Go module path has already moved to this repository's own path so the two can diverge independently.
Which platforms does kite-desktop build for?
Four, with gradual support: macOS on Intel, macOS on Apple silicon, Windows on x64, and Windows on ARM64. Linux is not in the list. The most recent releases are zero one ten, zero one fifteen and zero one twenty, and nothing has been committed since the last one in May 2026.
How do I build and run kite-desktop locally?
Three make targets, all single words: one to install dependencies, one to run the desktop app in development mode, and one to build it. The default goal is build, so a bare invocation compiles the application. The repository contains two interface trees that the makefile installs with two different package managers and two lockfile formats.
What licence is kite-desktop under?
The readme states the copyleft licence version three with the only suffix, and points at a notice file explaining that code inherited from the upstream project may still carry a permissive licence with attribution obligations, alongside a copy of that licence stored in the repository. The repository record records the licence without the only suffix.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/eryajf-kite-desktop)