Modular Game Framework for TypeScript
English | 中文
Documentation · API Reference · Examples
ESEngine is a collection of engine-agnostic game development modules for TypeScript. Use them with Cocos Creator, Laya, Phaser, PixiJS, or any JavaScript game engine.
The core is a high-performance ECS (Entity-Component-System) framework, accompanied by optional modules for AI, networking, physics, and more.
npm install @esengine/ecs-framework| Module | Description |
|---|---|
| ECS Core | Entity-Component-System framework with reactive queries |
| Behavior Tree | AI behavior trees with visual editor support |
| Blueprint | Visual scripting system |
| FSM | Finite state machine |
| Timer | Timer and cooldown systems |
| Spatial | Spatial indexing and queries (QuadTree, Grid) |
| Pathfinding | A* and navigation mesh pathfinding |
| Procgen | Procedural generation (noise, random, sampling) |
| RPC | High-performance RPC communication framework |
| Network | Client networking with prediction, AOI, delta compression |
| Database | Game database with Redis/Memory storage |
| World Streaming | Open world chunk loading and streaming |
All modules are engine-agnostic and work with any rendering engine.
The easiest way to add ECS to your existing project:
# In your project directory
npx @esengine/cli initThe CLI automatically detects your project type (Cocos Creator 2.x/3.x, LayaAir 3.x, or Node.js) and generates the necessary integration code.
import{Core,Scene,Entity,Component,EntitySystem,Matcher,Time,ECSComponent,ECSSystem}from'@esengine/ecs-framework';// Define components (data only)
@ECSComponent('Position')classPositionextendsComponent{x=0;y=0;}
@ECSComponent('Velocity')classVelocityextendsComponent{dx=0;dy=0;}// Define system (logic)
@ECSSystem('Movement')classMovementSystemextendsEntitySystem{constructor(){super(Matcher.all(Position,Velocity));}protectedprocess(entities: readonlyEntity[]): void{for(constentityofentities){constpos=entity.getComponent(Position);constvel=entity.getComponent(Velocity);pos.x+=vel.dx*Time.deltaTime;pos.y+=vel.dy*Time.deltaTime;}}}// InitializeCore.create();constscene=newScene();scene.addSystem(newMovementSystem());constplayer=scene.createEntity('Player');player.addComponent(newPosition());player.addComponent(newVelocity());Core.setScene(scene);// Integrate with your game loopfunctiongameLoop(currentTime: number){Core.update(currentTime/1000);requestAnimationFrame(gameLoop);}requestAnimationFrame(gameLoop);ESEngine's framework modules are designed to work alongside your preferred rendering engine:
import{ComponentasCCComponent,_decorator}from'cc';import{Core,Scene,Matcher,EntitySystem}from'@esengine/ecs-framework';import{BehaviorTreeExecutionSystem}from'@esengine/behavior-tree';const{ ccclass }=_decorator;
@ccclass('GameManager')exportclassGameManagerextendsCCComponent{privateecsScene!: Scene;start(){Core.create();this.ecsScene=newScene();// Add ECS systemsthis.ecsScene.addSystem(newBehaviorTreeExecutionSystem());this.ecsScene.addSystem(newMyGameSystem());Core.setScene(this.ecsScene);}update(dt: number){Core.update(dt);}}import{Core,Scene}from'@esengine/ecs-framework';import{FSMSystem}from'@esengine/fsm';const{ regClass }=Laya;
@regClass()exportclassECSManagerextendsLaya.Script{privateecsScene=newScene();onAwake(): void{Core.create();this.ecsScene.addSystem(newFSMSystem());Core.setScene(this.ecsScene);}onUpdate(): void{Core.update(Laya.timer.delta/1000);}onDestroy(): void{Core.destroy();}}All packages are engine-agnostic with zero rendering dependencies:
npm install @esengine/ecs-framework # Core ECS
npm install @esengine/ecs-framework-math # Math utilities
npm install @esengine/behavior-tree # AI behavior trees
npm install @esengine/blueprint # Visual scripting
npm install @esengine/fsm # State machines
npm install @esengine/timer # Timers & cooldowns
npm install @esengine/spatial # Spatial indexing
npm install @esengine/pathfinding # Pathfinding
npm install @esengine/procgen # Procedural generation
npm install @esengine/rpc # RPC framework
npm install @esengine/network # Client networking
npm install @esengine/server # Game server
npm install @esengine/database # Database abstraction
npm install @esengine/transaction # Transaction system
npm install @esengine/world-streaming # World streaminggit clone https://github.com/esengine/esengine.git
cd esengine
pnpm install
pnpm build
# Type check framework packages
pnpm type-check:framework
# Run tests
pnpm test- GitHub Issues - Bug reports and feature requests
- GitHub Discussions - Questions and ideas
- Discord - Chat with the community
Contributions are welcome! Please read our contributing guidelines before submitting a pull request.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
ESEngine is licensed under the MIT License. Free for personal and commercial use.
Made with care by the ESEngine community






