Void Runner
Endless 3D runner over a neon grid. Thread the gaps, grab pickups, survive the speed-up.
- genre
- Endless runner
- engine
- Three.js
- status
- playable
- input
- keyboard · mouse · touch · gamepad
- controls
- ← → / A D steer · mouse or drag to steer · P pause
- year
- 2026
- runs on
- any modern browser
Sound starts muted. Toggle it in the player bar.
▶ play
Devlog
A one-button-pair runner: steer left and right across seven lanes, don't hit anything, and see how long the speed curve lets you last.
- Speed you can feel. Speed eases from 26 towards 76 units/s on an exponential curve (time constant 55 s), so the first minute is generous and the third one is not.
- Collision that doesn't tunnel. Each frame's travel is split into sub-steps of at most 0.8 units, so fast frames can't skip through an obstacle.
- Everything is pooled. Obstacles, pickups and spark particles are created once and recycled; nothing is allocated during a run.
- Rows always have a way through. Each row blocks at most four of the seven lanes, picked at random. Past a certain speed some blocks turn red and drift.
- Lime cubes are worth +150 and burst into sparks that ride along with the world.
Screenshots


Changelog
- v1.1 · 2026-10-22 · Sound effects (muted by default), gamepad support, Three.js and fonts self-hosted, now served from play.dunoralabs.xyz.
- v1.0 · 2026-10-10 · First playable build: seven-lane track, pickups, mouse/drag steering, best score saved locally.
Built with
- Three.js r158 (WebGL), self-hosted
- Web Audio for engine-free bleeps (synthesised at runtime)
- The lab bridge (
lab-bridge.js) for pause, mute and gamepad from the player overlay
Credits & licences
- Code, art and sound: original work, made for Dunora Labs. [EDIT: licence for the game code, e.g. MIT or all rights reserved]
- Three.js: three.js authors, MIT License
- Space Grotesk font: Florian Karsten, SIL Open Font License 1.1
- JetBrains Mono font: JetBrains, SIL Open Font License 1.1