Open source · TypeScript · WebGPU
Ignite your next game.
ignifx is an open-source TypeScript game engine built on WebGPU. Write your game as code, run it in the browser or on the desktop, and ship with physics, audio, input, UI and animation already in the box.
WebGPU: checking…See browser support
Runs wherever WebGPU does: Chrome and Edge 113+, Safari 26+, Firefox 141+ on Windows and 145+ on Apple Silicon. Desktop through Electron.

Why ignifx
Code first
Your game is TypeScript, not a project file. Entities, components and scripts with typed, schema-declared fields. One obvious way to do each thing, and no decorators, globals or magic.
WebGPU only, by design
ignifx renders through Babylon Lite on WebGPU alone. One render path means PBR materials, image-based lighting, shadows and post-processing that behave the same everywhere WebGPU runs, and nothing to test twice.
Batteries included
3D physics on Havok. 2D physics on Rapier. Spatial audio with a real mixer. Action-based input with rebinding. A DOM UI layer. Animation state machines, navigation meshes, sprites and tilemaps. Each one is a line in
createApp.Browser, desktop and headless
The same game runs in a browser tab, in a hardened Electron window, and headlessly in Node for your tests and tools. Saves, settings and rebinds persist on all three.
Open source, from a studio that ships with it
Apache-2.0, developed in the open, and used by Astrum Forge Studios for its own games and projects.
This is a complete ignifx app
A camera, a shadow-casting light, a ground plane and a spinning cube, every asset created in code. There is no hidden project file behind it. This sample is compiled and run by the engine's documentation checks, so it cannot go stale.
- Typed fields, no decorators.
Script.define({ speed: f32(90) })is a serialisable, inspectable field. - One frame, six phases. A fixed step for simulation,
updatefor the rest, and every callback in a documented order. - Extensions in one line.
createApp({ extensions: [input(), physics(), audio()] }).
import { Camera, Light, MeshAsset, MeshRenderer, Script, createApp, createMaterialAsset, f32, pbrMaterialDefinition,} from "@ignifx/core";import type { ScriptCallbacks } from "@ignifx/core";class Spinner extends Script.define({ speed: f32(90) }) implements ScriptCallbacks { static typeId = "demo/Spinner"; // `speed` is a serialized field, degrees per second update(dt: number): void { this.transform.rotate({ x: 0, y: this.speed * dt, z: 0 }); }}const canvas = document.querySelector("canvas");if (!(canvas instanceof HTMLCanvasElement)) { throw new Error("ignifx needs a <canvas> element on the page.");}// Shadows are a Babylon Lite opt-in, declared before the scene is registered (IGX-0704).const app = await createApp({ canvas, settings: { rendering: { features: { shadows: true } } } });app.registerComponents([Spinner]);const eye = app.world.createEntity("Main Camera");eye.transform.localPosition.set(0, 2.5, -4.5);eye.transform.lookAt({ x: 0, y: 0.6, z: 0 });eye.addComponent(Camera, { fov: 55, far: 100 });const sun = app.world.createEntity("Sun");sun.transform.localPosition.set(3, 6, -2);sun.transform.lookAt({ x: 0, y: 0, z: 0 });const light = sun.addComponent(Light, { type: "directional", intensity: 3 });light.shadows.enabled = true;const ground = app.world.createEntity("Ground");ground.addComponent(MeshRenderer, { mesh: MeshAsset.ground(app, { width: 20, height: 20 }), castShadows: false,});const ember = createMaterialAsset( app, pbrMaterialDefinition({ name: "ember", baseColor: { r: 0.93, g: 0.42, b: 0.16, a: 1 }, roughness: 0.35 }), [],);const cube = app.world.createEntity("Cube");cube.transform.localPosition.set(0, 0.65, 0);cube.addComponent(MeshRenderer, { mesh: MeshAsset.box(app, { size: 1.3 }), materials: [ember] });cube.addComponent(Spinner, { speed: 120 });await app.start();Everything a game needs
Twelve subsystems, one API style, one version number. Add the ones you use.
@ignifx/coreRendering
PBR materials, image-based lighting, shadows, bloom and SMAA through Babylon Lite.
See it@ignifx/coreScenes and prefabs
One JSON format for scenes and prefabs; instances keep their overrides.
See it@ignifx/coreAssets
Addressed, typed, reference-counted, cancellable, and hot-swappable in development.
See it@ignifx/physics3D physics
Rigid bodies, colliders, triggers, a character controller and queries, on Havok.
See it@ignifx/physics-2d2D physics
Bodies, colliders, one-way platforms and a platformer controller, on Rapier.
See it@ignifx/2dSprites and tilemaps
Atlases from TexturePacker and Aseprite, tilemaps from Tiled and LDtk, pixel-perfect.
See it@ignifx/3dCharacters and cameras
Third- and first-person rigs, an orbit camera that stays out of walls.
See it@ignifx/3dAnimation and navigation
State machines with blend trees on glTF skeletons; navmesh agents on Recast.
See it@ignifx/inputInput
Keyboard, mouse, gamepad and touch become named actions you can rebind at runtime.
See it@ignifx/audioAudio
A bus tree, positional one-shots, music, and browsers that start locked, handled.
See it@ignifx/uiUI
Menus, dialogs, toasts, HUD and world-space text, virtual gamepad, translations.
See it@ignifx/electronDesktop
A hardened Electron window, a typed bridge, and file-system saves. One flag to build.
See it
Start from a playable game
Four templates, each a small finished game: title screen, pause menu, settings, rebinding, saves, and keyboard, gamepad and touch controls. Copy one and replace the game.

2D top-down
A tilemap with collision, Y-sorted props, a dead-zoned camera and shrines to light.
- Keyboard
- Gamepad
- Touch
- Mouse

2D side-scroller
Parallax bands, slopes and one-way platforms, coins, and a pixel-perfect camera.
- Keyboard
- Gamepad
- Touch
- Mouse

3D third-person
A character on a capsule, an orbit camera that avoids walls, an animated rig, a companion.
- Keyboard
- Gamepad
- Touch
- Mouse

3D first-person
Walk, sprint, crouch and jump with pointer lock, a view model, and things to push.
- Keyboard
- Gamepad
- Touch
- Mouse
Built by a studio that ships with it
ignifx is developed by Astrum Forge Studios, an independent game studio, and it is the engine behind the studio's own games and projects. Features arrive because a game needed them, and they stay because a game still does.
astrumforge.comGet started in a minute
git clone https://github.com/astrum-forge/ignifx.gitcd ignifx && pnpm install && pnpm buildpnpm --filter ignifx-template-3d-third-person devignifx is not on npm yet. Until the first release, clone the repository and run a template from the workspace. Watch the repository to hear when the packages ship.
Runs wherever WebGPU does: Chrome and Edge 113+, Safari 26+, Firefox 141+ on Windows and 145+ on Apple Silicon. Desktop through Electron.





