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.
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
- Add the versions and the modules you use to
gradle/libs.versions.toml. - Put shared code in
commonMainand the Vulkan host in your platform source set. - Follow the getting started guide for the desktop host.
[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.