KilledByAPixel/LittleJS

Tiny fast HTML5 game engine with many features and no dependencies.

★ 4,187Forks 233JavaScriptGitHub ↗Compare

Project website ↗

box2dgame-developmentgame-enginegamedevjavascriptjs13klittlejsopen-sourcethreejstypescriptwebgl

README

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.

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.

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 and effect design tool
  • 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 with collision and raycasts
  • Shadow maps, colored lights, specular, emissive glow and fog
  • 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

💥 Physics

  • Robust arcade physics system with collision handling
  • Fast tilemap collision and raycasting
  • 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
  • Import level editor data from Tiled or other JSON
  • UI system with buttons, sliders, text input and nine-slice skins
  • Tween system with easing curves
  • 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 LittleJS package from GitHub 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

Here is a minimal Hello World example game, with the script path pointing at the engine file from the download or npm package.

<!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 - 80+ 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
  • Stress Test - Sprite rendering benchmark and music system demo
  • 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 100 KB gzipped: the core engine is about 36 KB of that and the 3D plugins about 40 KB. 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

Contributors

KilledByAPixeljwigertLukenickersonCopilotcodyebbersonClementCarioutzwelEthanSuperiormoreiramirakuloitspoliceSomeUnusualGamesSepci0RomanMinivrishavspebutler3matthijsgroenlopisFunFetchedjimubajubaeoinmcghockduduThatOneBroCyklanpaxperscientiamAndreaPravato

Issues