LittleJS - The Tiny Fast JavaScript Game Engine
🚂 All Aboard!
LittleJS is a fast, lightweight, and fully open source HTML5 game engine designed for simplicity and performance.
Its small footprint is packed with a comprehensive feature set including 2D and 3D rendering, physics, particles, sound, and input handling.
The code is very clean and well documented with many examples to get you started quickly.
New here? Open the example browser and change the code of any example while it runs, or jump to Quick Start and have a game on screen in a minute.
LittleJS Features
✨ Graphics
- Blazing fast WebGL2 + Canvas2D hybrid rendering system
- Apply Shadertoy style shaders for post-processing effects, or on any object or draw, with values the game sets each frame
- 2D lights with soft shadows, tinted glass and emissive objects, a sun with long shadows, spotlight cones and gels, and normal maps
- Robust particle effect system with a library of ready made effects and an effect design tool
- Parallax background layers that repeat across a level of any size
- Follow cameras with smoothing, a dead zone, look ahead and level bounds, and camera shake
- Your own icons inline in text, like a coin beside the score, written by name
- Load sprites and animations into texture sheets at runtime, or import TexturePacker and Aseprite atlases
🧊 LittleJS 3D
- Built-in 3D renderer that shares the canvas with your 2D game
- 3D objects with the same physics, children and timers as 2D
- Shape builders, extruded sprites and text, and OBJ and glTF model loading
- Height map terrain, voxel maps and mesh colliders, with collision and raycasts
- 3D levels and prefabs, built in the 3D level editor and loaded with one call
- Shadow maps, colored lights, spotlights, lens flares, specular, emissive glow and fog
- Reflections of a sky box or the scene itself, from mirror sharp to rough
- Particles, trails, lit billboards and instanced drawing of thousands of meshes
- Orbit, chase and first person cameras with mouse picking
- Custom shaders on any object, with vertex code, uniforms and data for each instance
- Optional Three.js plugin as an alternative renderer
🔊 Audio
- Sound and music with mp3, ogg, or wave files
- Use ZzFX sound generator to play sounds without asset files
- Spatial audio with stereo panning
- Audio effects plugin with filter, reverb, delay, distortion and compressor
🎮 Input
- Comprehensive input handling for mouse, keyboard, gamepad, and touch
- Customizable on screen gamepad designed for mobile devices
- Pinch to zoom on touch screens, read the same way as the mouse wheel
💥 Physics
- Robust arcade physics system with collision handling
- Fast tilemap collision and raycasting, with one-way platforms that turn with their tiles
- Swept bullet collision, so small fast objects never pass through a wall
- Object collision that stays fast with thousands of objects
- Full Box2D integration for realistic physics using Box2D v2.3.1 wasm
🧩 Game Systems
- UI system with buttons, sliders, text input and nine-slice skins
- Tween system with easing curves, and a scene system for titles, menus and game states
- Timers, seeded random numbers, and save data that persists between visits
- Grid-based A* pathfinding plugin with optional path smoothing
- Medals, leaderboards and cloud saves on Newgrounds and Wavedash
🚀 Flexibility
- Compatible with all modern web browsers and mobile devices
- Full TypeScript and Module support with example projects for both
- Vite starter template for instant dev server with hot reload
- Great for size coding competitions like Js13kGames
- Open Source and MIT licensed
🛠️ Developer Tools
- Live example browser with a code editor and a write-up for every example
- Built-in 2D and 3D level editors that edit your game while it runs, with undo, autosave and prefabs
- Make the editors your own with your game's own object types, keys, buttons and tools, see the editor guide
- 2D levels load and save as Tiled JSON, so Tiled can edit them too
- Debug overlay, debug drawing, and a tweakables panel to change your game's values while it runs
- Asserts and logging in the debug build, stripped from the release builds
This is the beginning of the README. Read the rest at the original. Read the full README ↗