A code-first Kotlin Multiplatform engine for building interactive 2D and 3D applications.
Awake gives Kotlin applications a small, composable runtime for scenes, rendering, physics, and retained UI. Author your application in Kotlin, keep platform code at the edge, and share the same game or tool code across desktop, mobile, and the web.
Awake is early alpha software. APIs and published artifacts can change between releases.
- Kotlin Multiplatform — share application and scene code across supported targets.
- Code-first scenes — author entities, systems, assets, and lifecycle in Kotlin.
- Composable runtime — combine ECS, rendering, physics, input, and UI as needed.
- Multiple backends — Vulkan for native targets and WebGPU for the web.
- Native UI runtime — build retained UI with Awake's own UI and Shadcn component modules.
Clone the repository and run the engine showcase:
./gradlew :samples:engine-showcase:runThe repository also includes a UI component showcase. See the engine showcase README for the available demos and web commands.
Awake artifacts are published to Maven Central. The latest release is 0.1.0-alpha.4; add it and
only the modules your application uses to gradle/libs.versions.toml:
[versions]
awake = "0.1.0-alpha.4"
[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" }For a desktop JVM target, use the lifecycle and shared shader contract in commonMain, and the
Vulkan host in desktopMain:
kotlin {
jvm("desktop")
sourceSets {
commonMain.dependencies {
implementation(libs.awake.bootstrap)
implementation(libs.awake.shaders)
}
named("desktopMain").dependencies {
implementation(libs.awake.vulkan)
}
}
}Create an application with the bootstrap DSL:
import com.awakekt.awake.engine.bootstrap.dsl.app
val game = app {
window {
title = "My Awake App"
size(1280, 720)
backend.vulkan()
}
}The getting started guide shows the desktop host and render-plan setup. The engine showcase is the complete working example.
| Area | Modules | Purpose |
|---|---|---|
| Runtime | engine:bootstrap, engine:platform |
Application lifecycle and platform startup |
| ECS | ecs |
Entity storage, components, and systems |
| Scenes | scene:scene-core, scene:scene3d, scene:authoring |
Transforms, cameras, lights, and scene DSL |
| Rendering | engine:render:*, backend:vulkan, backend:webgpu |
Backend-neutral passes and platform backends |
| Content | asset:gltf, asset:shaders, asset:shader-pack |
Models, textures, and shader definitions |
| Physics | physics:api, backend:jolt |
Physics contracts and Jolt integration |
| UI | ui:ui-core, ui:headless, ui:shadcn |
Retained UI, controls, styling, and components |
You do not need every module. Start with the smallest runtime for your target, then add scene, rendering, physics, asset, or UI modules as your application grows. The module guide contains the complete module map.
Awake is designed for Kotlin Multiplatform projects targeting:
- Desktop JVM
- Android
- iOS
- WebAssembly/browser
Backend and platform availability is still expanding during the alpha releases. Use the examples and release notes as the compatibility reference for the version you are using.
- Getting started
- Documentation index
- Module guide
- Release process
- Architecture decisions and references
Issues and pull requests are welcome on GitHub. Please read the contribution guide and release guidance before making a change. Security issues should follow the security policy.
Awake is available under the Apache License 2.0.