
Code-first engine for building interactive 2D and 3D applications with a composable runtime: ECS, rendering, physics, retained UI, scene DSL, and multiple backend renderers.
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.
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 version currently available there is
0.1.0-alpha.1; add it and only the modules your application uses to gradle/libs.versions.toml:
[versions]
awake = "0.1.0-alpha.1"
[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:
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.
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.
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.
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 version currently available there is
0.1.0-alpha.1; add it and only the modules your application uses to gradle/libs.versions.toml:
[versions]
awake = "0.1.0-alpha.1"
[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:
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.
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.