Skip to content

Releases and downloadable builds

Every tag that starts with v (for example v0.1.0-alpha) produces a GitHub Release with ready-to-run builds of the engine's demos:

File Platform
kk-engine-<version>-windows-x86_64.zip Windows 10/11, 64-bit
kk-engine-<version>-linux-x86_64.tar.gz Linux, 64-bit, glibc 2.39+ (Ubuntu 24.04, Debian 13, Fedora 40 or newer)

Each archive has a .sha256 next to it. Unpack it anywhere and start kke_demo (double-click on Windows). Both need a CPU with AVX2 and a Vulkan 1.3 GPU driver. README.txt inside the archive says the same for players.

Making a release

git tag v0.1.0-alpha
git push origin v0.1.0-alpha

.github/workflows/release.yml then:

  1. builds Linux (Release, FEMFX on, warnings as errors, libstdc++ static) and runs the unit tests;
  2. packages it with tools/packaging/package.sh, unpacks the archive in another folder and runs every demo from an unrelated working directory under Xvfb and lavapipe;
  3. cross-compiles Windows with MinGW-w64 (C++ runtime linked statically, so no MinGW DLLs ship), packages it, and runs the unit tests on a real Windows runner;
  4. publishes both archives as a Release. A tag with a - in it (-alpha, -rc1) becomes a pre-release.

Without pushing a tag, the same release can be made from the Actions tab: run Release with the version (e.g. v0.1.0-alpha) and tick publish; GitHub creates the tag on that commit as it publishes.

To try the pipeline without publishing anything, run the Release workflow by hand from the Actions tab: the archives are kept as run artifacts, and ticking draft also puts them in a draft release that only maintainers see.

Packaging locally from any build tree:

tools/packaging/package.sh --bin build/bin --platform linux \
    --version dev --out dist --deps build/_deps

Warnings in release builds

Optimized builds warn where Debug doesn't (GCC's -Warray-bounds only runs with the optimizer), and -Werror covers only the engine's own code. So the CI workflow also has a release-build job, and both release jobs end the same way: tools/ci/check_warnings.sh fails on any compiler, linker or CMake warning in the configure and build logs, third-party code included. Fixed so far: RmlUi's flat_map::operator[] (cmake/patch_rmlui.cmake), and SDL's "XML failed validation" from Ubuntu's old wayland-scanner (cmake/wayland_scanner.cmake builds 1.26).

What goes in a package

Everything CMake puts in bin/ (demos, tools, compiled shaders, fonts, branding, game manifests) except the unit-test binary, logs, imgui.ini and link by-products, plus README.txt, LICENSE.txt and THIRD_PARTY_LICENSES.txt (the licence of every bundled library, collected by tools/packaging/third_party_licenses.sh from the build's _deps/, external/FEMFX, the fonts, LICENSES/ and, on Windows, the MinGW-w64 runtime; the full list is DEPENDENCIES.md).

Paid art packs are never shipped. Synty packs are found at run time from assets/synty/ or KKE_ASSETS_DIR and are never copied into bin/; package.sh also refuses to package if any FBX, Unity file or Synty/Polygon folder is found in bin/. The asset-pack demos (sandbox, synty_demo) show their "assets not found" screen in a download.

Running from any folder

Games open shaders, fonts and manifests by relative path. When the working directory has no shaders/ folder but the executable's folder does, kke::Application switches to the executable's folder before anything is loaded (engine/src/Application.cpp, enterRuntimeDirectory), and logs that it did. So ./build/bin/kke_demo from the repository root, a desktop launcher, or a file manager's double-click all work.

Not done yet

  • macOS .app bundles (the Platforms workflow builds macOS but nothing packages it).
  • Code signing: Windows SmartScreen warns on first start.
  • A bundled software Vulkan driver for machines without a GPU driver.