Babylon Lite
June 25, 2026 ยท View on GitHub
A WebGPU-exclusive, tree-shakable 3D engine that produces pixel-identical output to Babylon.js โ in a fraction of the bundle size.
๐ Documentation โ Start with Welcome, then Getting Started, the Feature Comparison, and the Porting Guide
๐ค Contributing โ How to add scenes, tests, and contribute code
Prerequisites
- Node.js โฅ 18
- pnpm โฅ 9 (
corepack enableto activate the version pinned inpackage.json) - A browser with WebGPU support (Chrome 113+, Edge 113+, or recent Firefox and Safari)
Getting Started
# 1. Install all workspace dependencies (links the babylon-lite package)
pnpm install
# 2. Install Playwright browsers (needed for parity & bundle-size tests)
pnpm exec playwright install
# 3. Start the dev server (builds bundle scenes, then launches Vite on port 5174)
pnpm dev:lab
Open http://localhost:5174 to browse the scene gallery.
Available Scripts
| Command | Description |
|---|---|
pnpm dev:lab | Build bundle scenes + start the lab dev server |
pnpm dev:playground | Start the Lite Playground dev server (http://localhost:5175) |
pnpm build:playground | Build the Lite Playground into playground/dist |
pnpm build | Build the babylon-lite library |
pnpm build:bundle-scenes | Generate production bundles + per-scene manifest/ for the gallery |
pnpm test | Build bundle scenes, then run parity and bundle-size tests |
pnpm test:parity | Run Playwright visual parity tests against golden references |
pnpm test:perf | Run Playwright performance benchmarks |
pnpm test:bundle-size | Run bundle-size ceiling tests |
pnpm lint | Run ESLint, then type-check with tsc --noEmit |
Project Structure
packages/babylon-lite/ # The engine library
lab/ # Scene gallery & internal dev harness (Vite)
playground/ # Lite Playground โ public editor/runner app (see playground/README.md)
tests/lite/unit/ # Vitest unit tests (pure Node.js, no GPU)
tests/lite/plumbing/ # Playwright GPU integration tests (dispose, material-swap)
tests/lite/parity/scenes/ # Playwright visual parity tests (pixel-diff)
tests/lite/perf/ # Playwright performance benchmarks
reference/lite/ # Golden reference screenshots (immutable)
scripts/ # Build & bundling utilities
docs/lite/architecture/ # One-shot architecture docs
Adding Tests
Test Structure
tests/lite/
unit/ # Vitest โ pure Node.js shader/math tests (no GPU)
plumbing/ # Playwright โ dispose, material-swap (requires WebGPU)
parity/
scenes/ # Playwright โ pixel-diff against golden references (requires WebGPU)
compare-utils.ts # Shared image comparison helpers
perf/ # Playwright โ RAF performance benchmarks (requires WebGPU)
Unit Tests (vitest)
For pure logic tests (shaders, math, composition) that don't need a browser or GPU:
- Create
tests/lite/unit/my-feature.test.ts - Use vitest APIs (
describe,it,expect) - Run:
pnpm exec vitest run
Plumbing Tests (Playwright + WebGPU)
For GPU integration tests (dispose, material-swap, lifecycle):
- Create a test page:
lab/lite/my-test.html+lab/lite/src/my-test.ts - Add the HTML entry to
lab/vite.config.ts(auto-detected if in root) - Create
tests/lite/plumbing/my-test.spec.ts - Run:
pnpm exec playwright test tests/lite/plumbing/my-test.spec.ts
CI uses Chrome's SwiftShader Vulkan backend โ WebGPU works without a real GPU.
Scene Parity Tests (Playwright + WebGPU)
For pixel-diff visual regression tests against Babylon.js golden references:
- Create the Lite scene:
lab/lite/sceneN.html+lab/lite/src/lite/sceneN.ts - Create the BJS reference:
lab/lite/babylon-ref-sceneN.html+lab/lite/src/bjs/sceneN.ts - Add entries to
lab/vite.config.tsrollup inputs - Capture a golden reference and save to
reference/lite/sceneN-<slug>/babylon-ref-golden.png - Save a downscaled JPG thumbnail (โค720p) of the golden to
lab/public/thumbnails/sceneN.jpg - Add scene config to
scene-config.jsonwithid,slug,name,maxMad - Create
tests/lite/parity/scenes/sceneN-<slug>.spec.tsusingcompare-utils.tshelpers - Add a bundle-size ceiling in
tests/lite/parity/bundle-size.spec.ts(never raise without approval) - Run:
pnpm exec playwright test tests/lite/parity/scenes/sceneN-<slug>.spec.ts
CI Workflows
| Workflow | Trigger | What it runs |
|---|---|---|
| Lint | PR โ master | ESLint + tsc --noEmit |
| Unit | PR โ master | Vitest + plumbing tests |
| Bundle Size | PR โ master | Runtime KB ceiling checks |
| Parity | manual | Scene pixel-diff vs golden refs |
| Perf | manual | RAF performance benchmarks |
Troubleshooting
Vite can't resolve "babylon-lite"
Run pnpm install โ the workspace symlink is missing.
Playwright "did not expect test() to be called here"
A rogue node_modules/playwright/ directory (not managed by pnpm) conflicts with the pnpm-managed copy. Fix:
rm -rf node_modules/playwright
Important: always use pnpm exec for Playwright commands (not npx or npm), e.g. pnpm exec playwright install. Using npx can recreate the rogue directory.
404 for /bundle/manifest.json
Run pnpm build:bundle-scenes (or use pnpm dev:lab which does this automatically).
404 for test-actual.png images
These are generated by parity tests. Run pnpm test:parity once to create them.
404 for /perf-manifest.json
Run pnpm test:perf to generate performance data for the dashboard.