| Path | What it is |
|---|---|
src/ |
The client itself, kute.exe: a Rust Win32 host that creates the window, embeds CEF, injects the JS bundle and handles input, updates, Discord, the account store and the IPC with the page. The same exe is also every Chromium subprocess. |
src/frontend/ |
The JS bundle injected into krunker.io (esbuild, one file, target/bundle.js). Every client feature that lives in the page is a module in modules/, the settings come from src/cSettings.json. |
crates/render-dll |
render.dll, loaded into Chromium's GPU process: the DXGI present hook (flip swapchain, FPS limiter, frame stats) and the producer side of the OBS capture. |
crates/obs-kute-capture |
The OBS plugin that shows the game through a shared texture. |
resources/ |
Installer script (WiX), VC runtime, and the patched CEF DLL in resources/cef/ (Git LFS). |
patches/ |
The Chromium patches the CEF DLL is built with, and how to rebuild it. |
server/ |
The server behind kute.lol: clan colors and the Kute badge presence. Bun, Fastify, TypeScript, SQLite. Its own project with its own package.json. The client builds and runs without it, and plays the same when it is down. |
- Prerequisites:
- Git LFS (
git lfs installonce, before cloning, for the patched CEF DLL) - Rust & Cargo
- Microsoft Visual C++
- CMake and Ninja (the CEF wrapper is built on the first build)
- Bun
- WiX 6 (if packaging)
- Git LFS (
git clone https://github.com/NullDev/Kute.gitcd Kutebun ibun run dev(debug build with logs, then starts the client)
The first build downloads the official CEF distribution (about 900 MB) and compiles its wrapper, so it takes a while. Later builds are incremental. Close the client before building, a running one locks libcef.dll.
| Command | Does |
|---|---|
bun run start:dev |
Bundle, debug build with verbose logs, run |
bun run start:dev:realapi |
Debug build with verbose logs, run with the real API URL |
bun run start:prod |
Build and run with production settings |
bun run build |
Release build in target/release |
bun run package |
Release build with the auto-updater plus the MSI (target/kute-setup-x86_64.msi) |
bun run esbuild |
Only the JS bundle |
bun run lint / bun run typecheck |
ESLint and tsc over the client JS and the server TS |
No. The build downloads the official CEF 151 runtime on its own, and the patched libcef.dll comes out of Git LFS and is copied over the stock one by postbuild.js. Nothing to compile, nothing to configure.
- Cloned without Git LFS? The build notices the placeholder file, warns, and keeps the stock DLL. The client works, it just lacks the two fixes (aim freeze, GPU bottleneck stutter).
git lfs pullfixes that. - Building CEF yourself is only needed to change the patches or to move to a new CEF version. That is a full Chromium build: around 100 GB of disk and several hours. The two patches in
patches/are small plain diffs againstchromium/src, the README there says which version they apply to. - When the
cefcrate version changes, the DLL has to be rebuilt for that version first (or deleted, which falls back to stock). A mismatched DLL crashes on start.
Only needed when you work on the server itself.
cd serverbun ibun run generate-config(generates/copies the default configuration file)bun run start:dev(watch mode, port 3030, its own databasedata/kute.dev.db, loose rate limits)
- Settings:
config/config.template.tsholds the defaults. Put overrides (port, clan tag colors) in an untrackedconfig/config.custom.tsof the same shape. bun run start:prodruns it the way the VPS does (PM2 usespm2.ecosystem.json).- A client started with
bun run devsends its Auto-Detect reports to127.0.0.1:3030and never to the real server. - Lint and typecheck run from the repo root, see above.