Skip to content
Go to file

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

ensy: Entity System for JavaScript

ensy is a JavaScript implementation of the Entity System model as described by Adam Martin in his blog post series Entity Systems are the future of MMOs.

Component/Entity Systems are an architectural pattern used mostly in game development. A CES follows the Composition over Inheritance principle to allow for greater flexibility when defining entities (anything that's part of a game's scene: enemies, doors, bullets) by building out of individual parts that can be mixed-and-matched. This eliminates the ambiguity problems of long inheritance chains and promotes clean design. However, CES systems do incur a small cost to performance.

— From the Entity Systems Wiki


This module is available on npm as ensy. It has no dependencies.

npm install --save ensy


import EntityManager from 'ensy';

let manager = new EntityManager();

// Create a component and add it to the manager.
const PlayerComponent = {
    name: 'Player',
    description: "The player's state",
    state: {
        life: 100,
        strength: 18,
        charisma: 3,
manager.addComponent(, PlayerComponent);

// Create a new entity.
const playerId = manager.createEntity(['Player']);

// Update the player's state:
let playerData = manager.getComponentDataForEntity('Player', playerId); = 80;

// Which is equivalent to:
manager.updateComponentDataForEntity('Player', playerId, {
    life: 80,

// Which can also be done when creating the entity:
const playerId = manager.createEntity(['Player'], null, {
    Player: {
        life: 80,

// { life: 80, strength: 18, charisma: 3 }


The documentation is available on Read the docs. All methods are well documented and parameters are described.

For an overall explanation of ensy, you can read my blog post ensy - Entity System Reloaded.


There are examples in the examples directory:

For developers

Install the dependencies with npm install. The source files are in src/. The code uses es6 features, and is compiled to es5 using babel and rollup.

Building the code

$ npm run build

We use rollup and babel to compile the code from es6 to es5, and uglify to minify the source code.

Running tests

$ npm test

To have tests watch your files and re-run when they change:

$ npm run test-w

To run the tests in your browser:

$ npm run test-browser

Building the API documentation

$ npm run build_doc