LittleJS is a free, open source gaming project written in JavaScript and released under MIT. It has 4,197 GitHub stars, 233 forks and 3 open issues, and was last pushed 5 hours ago. On this registry it ranks #34 of 52 tracked projects in Gaming, with 5 head-to-head comparisons available.

What is LittleJS?

LittleJS is a tiny, dependency-free 2D and 3D HTML5 game engine written in JavaScript and TypeScript, aimed at web game developers who want a small footprint without giving up rendering, physics, audio, and tooling.

What it is

LittleJS is a fully open source, MIT licensed game engine for the web platform, published as an npm package and documented on littlejsengine.com alongside demos, a docs site, a reference, and a FAQ. It targets modern browsers and mobile devices, ships with TypeScript and ES Module support plus example projects for both, and describes itself as a fast, lightweight engine with a comprehensive feature set in a small footprint — a combination that matters for size-coding competitions such as Js13kGames.

The concrete problem it addresses is the usual trade-off between a small engine and a capable one. Rather than assembling a renderer, a physics library, an input layer, and an audio system from separate pieces, LittleJS bundles them: a hybrid WebGL2 + Canvas2D rendering system, arcade physics alongside full Box2D integration, particle and sound systems, and input handling for mouse, keyboard, gamepad, and touch. It lives in the browser game engine ecosystem and, on the rendering side, includes an optional Three.js plugin that serves as an alternative renderer to the built-in 3D engine.

Key capabilities

  • Hybrid WebGL2 + Canvas2D rendering with Shadertoy-style shaders applied for post-processing effects or on any object or draw, plus 2D lights with soft shadows, tinted glass, and emissive objects.
  • A built-in 3D renderer that shares the canvas with a 2D game, with OBJ and glTF model loading, height map terrain, voxel maps with collision and raycasts, shadow maps, reflections of a sky box or the scene, and orbit, chase, and first person cameras with mouse picking.
  • Two physics tiers: a fast arcade physics system with tilemap collision and raycasting that stays fast with thousands of objects, and full Box2D v2.3.1 wasm integration for realistic physics, plus a grid-based A* pathfinding plugin with optional path smoothing.
  • Sound and music from mp3, ogg, or wave files, a ZzFX sound generator for sounds without asset files, spatial audio with stereo panning, and an audio effects plugin with filter, reverb, delay, distortion, and compressor.
  • Sprite and animation loading into texture sheets at runtime, with import of TexturePacker and Aseprite atlases, plus a particle effect system with a library of ready-made effects and a dedicated effect design tool.
  • A customizable on-screen gamepad for mobile devices, pinch to zoom read the same way as the mouse wheel, and comprehensive handling of mouse, keyboard, gamepad, and touch input.
  • A 3D level editor and prefab system whose 3D levels and prefabs load with one call, alongside a live example browser for developer tooling.

Who uses it and how

  • Developers building browser games that must run across all modern web browsers and mobile devices from one codebase.
  • Size-coding entrants targeting Js13kGames, where the engine's small footprint is a design constraint rather than a nice-to-have.
  • Teams that want TypeScript from the start, using the TypeScript and Module support with the included example projects.
  • Solo developers and jam participants, such as entrants to the annual LittleJS Game Jam, who start from the Vite starter template.
  • Projects that want 3D content in a primarily 2D game, sharing one canvas, physics, children, and timers between both.

Getting started

Install the engine from npm, or clone the repository and start from the bundled Vite starter template, which gives an instant dev server with hot reload.

How it compares

Three.js is the named peer in these facts, and LittleJS relates to it in two ways: Three.js is offered as an optional plugin acting as an alternative renderer rather than as a competing engine, and LittleJS supplies its own 3D renderer so that 3D objects share physics, children, and timers with 2D ones. In other words, it covers the engine layer — input, physics, audio, levels, tooling — that a rendering library alone does not.

When to use it — and when not

It suits projects that must stay small and run anywhere in the browser, and the MIT licence and absence of dependencies keep deployment simple. Developers who need a heavier 3D pipeline, or who are unwilling to run the 3D level editor, particle design tool, and physics plugins alongside their own code, may prefer a fuller framework instead; note also that the README excerpt is dense with feature lists and links, so expect to lean on the separate reference, docs, and FAQ pages rather than a single walkthrough.

project readme (upstream, from github) — read inline

LittleJS - The Tiny Fast JavaScript Game Engine

LittleJS Logo

NPM Package Build Size NPM Downloads DeepScan MIT License Discord

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

🚀 Join the LittleJS Game Jam

The Third Annual LittleJS Game Jam will take place from Oct 2 to Nov 2! Unleash your creativity and develop amazing games using the LittleJS game engine.

Demos | Arcade | Docs | Reference | FAQ | Trailer | Discord | AI

LittleJS Screenshot1

LittleJS Screenshot2

LittleJS Features

✨ Graphics

  • Blazing fast WebGL2 + Canvas2D hybrid rendering system
  • Apply Shadertoy style shaders for post-processing effects, or on any object or draw
  • 2D lights with soft shadows, tinted glass and emissive objects
  • 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
  • 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 and voxel maps 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, billboards and instanced drawing
  • Orbit, chase and first person cameras with mouse picking
  • Custom shaders on any object
  • 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
  • Object collision that stays fast with thousands of objects
  • Full Box2D integration for realistic physics using Box2D v2.3.1 wasm
  • Grid-based A* pathfinding plugin with optional path smoothing

🚀 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 code editor
  • 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
  • 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
  • Debug overlay and primitive rendering system
  • Medal tracking system with Newgrounds support
  • Node.js build system

🤖 AI Friendly

  • The entire API is small and well documented so LLMs can produce high quality results
  • LittleJS AI Tools - Templates, examples, and prompts tuned for AI + LittleJS workflows
  • LittleJS GPT - Build LittleJS games right inside ChatGPT

How To Use LittleJS

To get started download the latest release from GitHub, the engine's builds and source as npm has them (the examples are in the repository), or install via npm:

npm install littlejsengine

or use degit for an empty Vite template

npx degit KilledByAPixel/LittleJS/examples/vite-starter my-game
cd my-game
npm install
npm run dev

The examples are only in the repository: clone it, or use Download ZIP on its GitHub page; the npm package and the release zip hold the engine alone. A page that loads images or modules needs a local web server, as browsers block them from a file on disk: serve the repository's root, for example with npx http-server, then open http://localhost:8080/examples/starter/, the place to start. The FAQ has more.

Here is a minimal Hello World example game, with the script path pointing at the engine file from the download or npm package; it loads nothing, so it runs straight from the file.

<!DOCTYPE html>
<script src="node_modules/littlejsengine/dist/littlejs.js"></script>
<script>
function gameInit() {}
function gameUpdate() {}
function gameUpdatePost() {}
function gameRender() {}
function gameRenderPost() { drawTextScreen('Hello World!', mainCanvasSize.scale(.5), 80); }
engineInit(gameInit, gameUpdate, gameUpdatePost, gameRender, gameRenderPost);
</script>

Tutorials

Examples

LittleJS comes with several demos both for learning and using as starter projects to create new games.

  • Example Browser - Live example browser with all examples and editable source
  • LittleJS Arcade - Over 50 example games you can use as starter projects
  • Short Examples - 100+ single-file demos showing off individual engine features
  • Breakout - Block breaking game with post-processing effects
  • Puzzle Game - Match 3 puzzle game with HD rendering and high score tracking
  • Platformer - Platformer/shooter demo that loads level data
  • Box2D Demo - Box2D plugin demonstration and testbed
  • 3D Example - The 3D plugin in one scene: terrain, shadows, lights, sprites, particles and bloom
  • 3D Racing Game - Built-in 3D plugin: terrain, shadows and a chase camera in one short file
  • Three.js Platformer - 3D platformer with LittleJS gameplay and Three.js rendering
  • Particle System Designer - Particle system editor and visualizer

Builds

File Mode Module Use case
littlejs.js Debug No Debug mode with asserts
littlejs.release.js Release No Optimized for release
littlejs.min.js Release No Optimized for release and minified
littlejs.esm.js Debug ESM Debug mode with asserts
littlejs.esm.min.js Release ESM Optimized for release and minified

Every build includes the plugins. littlejs.min.js is about 135 KB gzipped, and the 3D plugins are a large part of that. A bundler like Vite leaves out the plugins a game does not use, so a small 2D game comes to about 26 KB gzipped, and a lit 3D scene to about 47 KB.

Games Made With LittleJS

Here are a few of the many amazing games created with LittleJS...

A collage of screenshots from games made with LittleJS

A sample of games built with LittleJS.

LittleJS pixel-art favicon

Frequently asked questions

Is LittleJS free to use?

LittleJS is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does LittleJS do?

Tiny fast 2D/3D HTML5 game engine with many features and no dependencies.

What is LittleJS written in?

LittleJS is primarily written in JavaScript. Its source is publicly available at https://github.com/KilledByAPixel/LittleJS, and it has 4,197 GitHub stars.