npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@codexo/exojs

v0.19.1

Published

A TypeScript-first browser 2D runtime for games and interactive apps.

Readme

Latest release npm version CI on main Coverage on main MIT license

A TypeScript-first 2D runtime for browser games and interactive applications.

Try the Playground · Read the Guide · Browse the API

Benchmarks · Release notes · Download the Full ZIP

ExoJS brings scenes, rendering, input, audio, UI, and asset lifetimes into one application model. Build a game, a visualization, or an interactive canvas inside an existing web application. Keep the surrounding page in your web framework; use ExoJS for the canvas.

Pre-1.0: minor releases may change public APIs. Pin exact package versions, keep official runtime packages on a compatible release line, and read the release notes before upgrading. main tracks the latest release; next can contain work that is not yet published on npm. The CI and coverage badges above describe main.

Start a project

npm create exo-app@latest my-game -- --template minimal
cd my-game
npm install
npm run dev

The starter is a Vite + TypeScript project with a visible, animated scene. Choose minimal, game-starter, platformer, top-down, ui-app, or audio-reactive. The Setup guide explains the templates, project layout, and installation into an existing application.

A scene contains ordinary TypeScript state and renders whatever is attached to its root; override draw when it should render something else. This example needs no external assets:

import { Application, Color, Graphics, Scene, type Seconds } from '@codexo/exojs';

class MainScene extends Scene {
  private readonly box = new Graphics();

  override init(): void {
    this.box.fillColor = Color.white;
    this.box.drawRectangle(-40, -40, 80, 80);
    this.box.setPosition(this.app.width / 2, this.app.height / 2);
    this.root.addChild(this.box);
  }

  override update(delta: Seconds): void {
    this.box.rotate(90 * delta);
  }
}

const app = new Application({
  scenes: { MainScene },
  canvas: { width: 800, height: 600, mount: 'body' },
  clearColor: new Color(0x6495ed),
});

await app.start(MainScene);

Follow Your first scene for the walkthrough. Use the Playground to experiment and the API reference to check exact contracts.

Why ExoJS

| Capability | What it means for your project | | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | | One runtime, explicit lifetimes | Scene-scoped assets, input, systems, animation, and audio follow scene teardown. Application-level resources can outlive an individual scene. | | WebGPU and WebGL2 | Choose a backend or use automatic selection. Share the high-level scene API and check capability-specific features on target devices. | | Rendering beyond sprites | Compose text, geometry, masks, filters, render targets, multiple views, and custom materials. Reach for the renderer SDK when the high-level paths do not fit. | | Optional gameplay and visual systems | Add physics, tilemaps, pathfinding, particles, lighting, or editor-format adapters without making them mandatory Core dependencies. | | TypeScript throughout | Typed scene navigation, asset loading, extension contracts, and declarations fit an ordinary editor and build pipeline. | | Measured performance | Structural gates and browser benchmark profiles describe specific workloads, with provenance and limitations alongside the results. |

ExoJS is a code-first runtime, not a visual game editor. Its benchmarks describe particular workloads, not a guarantee that every application will be faster than one built with another engine.

Packages

Core owns the application, scenes, scene graph, rendering, input, UI, asset loading, and basic audio. Install only the optional systems you use. Runtime packages follow the Core release line; check their declared peer dependencies when choosing versions.

Runtime and integrations

| Package | Purpose | Documentation | | ---------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | | @codexo/exojs | Core runtime: scenes, rendering, input, UI, assets, and audio | Guide | | @codexo/exojs-physics | 2D rigid bodies, colliders, joints, and queries | README | | @codexo/exojs-particles | Particle emitters, CPU simulation, and eligible WebGPU compute paths | README | | @codexo/exojs-tilemap | Format-neutral tilemaps, chunk rendering, and world loading | README | | @codexo/exojs-tiled | Tiled JSON maps, tilesets, and authored objects | README | | @codexo/exojs-ldtk | LDtk worlds, levels, IntGrid data, and level streaming | README | | @codexo/exojs-aseprite | Aseprite sprite sheets and tagged animations | README | | @codexo/exojs-tilemap-physics | Static physics colliders from tilemap geometry | README | | @codexo/exojs-lighting | Forward, shadowed lightmap, and radiance-cascade lighting | README | | @codexo/exojs-pathfinding | A* search over weighted grids and waypoint graphs | README | | @codexo/exojs-audio-fx | Audio effects, analysis, worklets, and beat detection | README | | @codexo/exojs-react | React canvas hosting, declarative scenes, and hooks | README |

Project tooling

| Package | Purpose | Documentation | | ------------------------------------------------------------------------------------------ | -------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | | create-exo-app | Project scaffolding and maintained starters | README | | @codexo/exojs-cli | Static serving, project checks, scaffolding, and asset packs | README | | @codexo/exojs-build | Vite/Rollup transforms for shaders, workers, and AudioWorklets | README | | @codexo/eslint-plugin-exojs | Lifecycle and engine-specific correctness checks | README |

Package names open npm; documentation links describe the released packages. In a checkout of next, read the matching local package README for unreleased changes. Runtime libraries such as physics and pathfinding are constructed directly; renderer and asset extensions use explicit application descriptors. Each package documents its setup.

Installation and distribution

For a bundler-based application:

npm install --save-exact @codexo/exojs

The package provides ESM and TypeScript declarations. It also includes script-tag bundles:

| Bundle | Contents | | ----------------------- | ---------------------------------------------------------------------------------------------------- | | dist/exo.iife.js | Core runtime on the Exo global | | dist/exo.full.iife.js | Core plus the official runtime extensions except React and tilemap physics, on the same Exo global |

Minified variants are provided alongside them. Use one Core instance per application; do not load both bundles into the same page.

The Full Release ZIP includes a built runtime, examples, and documentation. See Deployment for static hosting and script-tag setup.

Performance evidence

The benchmark pages show measured scenarios and their limitations. The versioned profiles preserve provenance, and the harness documentation explains reproduction. Structural counters and browser timings answer different questions; neither produces an overall engine winner.

Contributing

Repository development requires Node 24 and the pnpm version pinned in package.json:

pnpm bootstrap:dev
pnpm doctor

Read CONTRIBUTING.md for package boundaries, code conventions, and change-specific validation. Product changes belong in the relevant Guide, package README, or source JSDoc; development history belongs in pull requests, releases, CHANGELOG.md, and Git.

Report a reproducible problem in GitHub Issues.

License

MIT © Codexo