A Kotlin Multiplatform game engine — one codebase, every platform.
Not published yet. Build from source. Nothing has shipped to Maven Central.
- Renders — Vulkan on Desktop/Android/iOS, WebGPU on the Web. Shadows, PBR materials, glTF loading with GPU skinning.
- Simulates — a sparse-set ECS, a
scene { }DSL, scenes authored as JSON instead of hand-rolled demo code. - Draws UI — an immediate-mode, shadcn-styled UI stack, ~80 components across three owned layers (layout, unstyled widgets, styled design system).
- Handles physics — a backend-neutral API with a Jolt Physics implementation.
./gradlew :samples:scene3d-playground:runA rotating cube, a glTF viewer, and a skinned-mesh demo, with camera and material
controls. For the Web build (Chrome/Edge 113+): :samples:scene3d-playground:wasmJsBrowserDevelopmentRun,
then open the printed URL.
Also runnable: samples/ui-showcase (every UI component in one
gallery) and samples/studio (a small editor shell). Desktop and Web
have app wrappers today; iOS and Android build the shared framework/AAR only, no app
wrapper yet.
- A
Game— your code (ready,render, optionalresize/pause/resume). - An application —
VulkanGameApplicationorWebGpuGameApplication, which builds the device/swapchain/pipelines for you. - A scene, optionally —
sceneGame { }gives you an ECS world withTransform,MeshRenderer,Camera, andLight, plus the systems that drive them.
class MyGame : Game {
override suspend fun ready(renderer: Renderer) { /* load meshes/materials */ }
override fun render(delta: Float, viewportWidth: Float, viewportHeight: Float) { /* draw */ }
}
val app = VulkanGameApplication(
shaderSet = gameShaderSet("triangle"),
vertexFormat = VertexFormat.PositionNormalColor,
game = MyGame(),
)All modules are 0.1.0-SNAPSHOT. ✅ supported ·
| Module | Type | Status | 📱 Mobile | 🖥️ Desktop | 🌐 Web | What it does |
|---|---|---|---|---|---|---|
base |
Core | 🧪 Alpha | ✅ | ✅ | ✅ | Math, assets, input |
ecs |
Core | 🧪 Alpha | ✅ | ✅ | ✅ | Sparse-set ECS runtime |
engine |
Runtime | 🧪 Alpha | ✅ | ✅ | ✅ | Bootstrap and app lifecycle |
engine:ui |
UI | 🧪 Alpha | ✅ | ✅ | ✅ | Immediate-mode UI stack |
scene |
Runtime | 🧪 Alpha | ✅ | ✅ | ✅ | Scene graph and components |
physics:api |
API | 🧪 Alpha | ✅ | ✅ | ✅ | Backend-neutral physics contract |
backend:vulkan |
Backend | 🧪 Alpha | ✅ | ✅ | ❌ | Main renderer |
backend:webgpu |
Backend | ❌ | ❌ | ✅ | Web renderer | |
backend:jolt |
Backend | 🧪 Alpha | ✅ | ✅ | Jolt Physics implementation (Web stub only) | |
backend:opengl |
Backend | 🧊 Frozen | ✅ | ✅ | ❌ | The old engine's renderer. Compiles, not wired in. |
CHANGELOG.md— what changeddocs/MVP_PLAN.md— near-term statusdocs/reference/developer-docs.md— build/test/docs workflowdocs/reference/ui-validation.md— how UI/icon fidelity is verifiedtools/README.md— asset generators and the parity toolchain
./gradlew developerDocs builds the API reference and UI tutorial pages.
Apache License, Version 2.0 — free for everyone, indie or enterprise, no royalties, no revenue threshold. Awake has no company behind it and no other revenue source: development is funded entirely by Patreon and GitHub Sponsors. If Awake is useful to you, that's what keeps it maintained.
Issues and PRs welcome — github.com/awake-lab/awake.
