Skip to content

Latest commit

 

History

1,011 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Awake

Build And Publish Kotlin License Patreon

Awake

A Kotlin Multiplatform game engine — one codebase, every platform.

Not published yet. Build from source. Nothing has shipped to Maven Central.

What it does

  • 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.

Get started

./gradlew :samples:scene3d-playground:run

A 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.

How a game fits together

  1. A Game — your code (ready, render, optional resize/pause/resume).
  2. An applicationVulkanGameApplication or WebGpuGameApplication, which builds the device/swapchain/pipelines for you.
  3. A scene, optionallysceneGame { } gives you an ECS world with Transform, MeshRenderer, Camera, and Light, 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(),
)

Modules

All modules are 0.1.0-SNAPSHOT. ✅ supported · ⚠️ compiles, not functional yet · ❌ not targeted.

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 ⚠️ Experimental 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.

Docs

./gradlew developerDocs builds the API reference and UI tutorial pages.

License

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.

Contributing

Issues and PRs welcome — github.com/awake-lab/awake.

Releases

Sponsor this project

Packages

Contributors

Languages