A Kotlin engine for 2D and 3D apps

Write scenes, systems, and UI in Kotlin. Awake renders with Vulkan and WebGPU, simulates with Jolt, and keeps platform code at the edge, so the same app runs on desktop, Android, iOS, and the web.

Early alpha. APIs and published modules can change between releases.

HarborApp.kt
val cube = generate { cube(colored = true) }

val game = app {
    window {
        title = "Harbor"
        size(1280, 720)
        backend.vulkan()
    }
    scene("harbor") {
        assets {
            mesh("cube") { renderer.createMesh(cube) }
        }
        fixedSystem("spin") { SpinSystem() }
    }
}

Take the parts you need

Awake is a set of small modules, not one framework. Start with the runtime and add scenes, rendering, physics, or UI as the app grows.

  • Runtime

    Application lifecycle and platform startup behind one app { } entry point.

    engine:bootstrap · engine:platform
  • Scenes

    A sparse-set ECS with transforms, cameras, lights, and scene documents you can save and load.

    ecs · scene:scene3d · scene:document
  • Rendering

    Backend-neutral render passes over Vulkan and WebGPU. Shaders are WGSL, compiled at runtime where needed.

    engine:render:* · backend:vulkan · backend:webgpu
  • Physics

    Rigid bodies, shapes, and a character controller, backed by Jolt on native targets.

    physics:api · backend:jolt
  • UI

    A retained, Compose-shaped UI runtime with shadcn components, drawn by the same renderer.

    compose:foundation · ui:shadcn

One codebase, four targets

Desktop

Vulkan
Linux x86-64, and Apple silicon macOS through MoltenVK.

Android

Vulkan
Android 13 (API 33) and later.

iOS

Vulkan
Through MoltenVK on Metal.

Web

WebGPU
Kotlin/Wasm in current browsers.

The WebGPU backend is published as a snapshot until its wgpu4k dependency has a stable release. Check the release notes for per-release platform details.

Install from Maven Central

  1. Add the versions and the modules you use to gradle/libs.versions.toml.
  2. Put shared code in commonMain and the Vulkan host in your platform source set.
  3. Follow the getting started guide for the desktop host.
libs.versions.toml
[versions]
awake = "0.1.0-alpha.7"
awake-vulkan = "0.1.0"

[libraries]
awake-bootstrap = { group = "com.awakekt.awake.engine", name = "bootstrap", version.ref = "awake" }
awake-shaders = { group = "com.awakekt.awake.asset", name = "shaders", version.ref = "awake" }
awake-vulkan = { group = "com.awakekt.awake.backend", name = "vulkan", version.ref = "awake-vulkan" }

Prefer to build visually?

AwakeKt Studio is the authoring app built on the engine: open a project, place assets, edit scenes, and run them without writing the setup code yourself.

Open AwakeKt Studio