MCPcopy Index your code
hub / github.com/esengine/esengine

github.com/esengine/esengine @v2.4.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.4.2 ↗ · + Follow
17,674 symbols 42,217 edges 1,532 files 8,339 documented · 47%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

ESEngine ESEngine

Cross-platform 2D Game Engine

npm build license stars TypeScript

English | 中文

Documentation · API Reference · Download Editor · Examples


Just need ECS? The core ECS framework @esengine/ecs-framework can be used standalone with Cocos Creator, Laya, or any JS engine. View ECS Documentation

Overview

ESEngine is a cross-platform 2D game engine built from the ground up with modern web technologies. It provides a comprehensive toolset that enables developers to focus on creating games rather than building infrastructure.

Export your games to multiple platforms including web browsers, WeChat Mini Games, and other mini-game platforms from a single codebase.

Key Features

Feature Description
ECS Architecture Data-driven Entity-Component-System pattern for flexible and cache-friendly game logic
High-Performance Rendering Rust/WebAssembly 2D renderer with automatic sprite batching and WebGL 2.0 backend
Visual Editor Cross-platform desktop editor built with Tauri for scene management and asset workflows
Modular Design Import only what you need - each feature is a standalone package
Multi-Platform Export Deploy to Web, WeChat Mini Games, and more from one codebase
Physics Integration 2D physics powered by Rapier with editor visualization
Visual Scripting Behavior trees and blueprint system for designers

Tech Stack

  • Runtime: TypeScript, Rust, WebAssembly
  • Renderer: WebGL 2.0, WGPU (planned)
  • Editor: Tauri, React, Zustand
  • Physics: Rapier2D
  • Build: pnpm, Turborepo, Rollup

License

ESEngine is free and open source under the MIT License. No royalties, no strings attached.

Installation

npm

npm install @esengine/ecs-framework

Editor

Download pre-built binaries from the Releases page (Windows, macOS).

Quick Start

import {
    Core, Scene, Entity, Component, EntitySystem,
    Matcher, Time, ECSComponent, ECSSystem
} from '@esengine/ecs-framework';

@ECSComponent('Position')
class Position extends Component {
    x = 0;
    y = 0;
}

@ECSComponent('Velocity')
class Velocity extends Component {
    dx = 0;
    dy = 0;
}

@ECSSystem('Movement')
class MovementSystem extends EntitySystem {
    constructor() {
        super(Matcher.all(Position, Velocity));
    }

    protected process(entities: readonly Entity[]): void {
        for (const entity of entities) {
            const pos = entity.getComponent(Position);
            const vel = entity.getComponent(Velocity);
            pos.x += vel.dx * Time.deltaTime;
            pos.y += vel.dy * Time.deltaTime;
        }
    }
}

// Initialize
Core.create();
const scene = new Scene();
scene.addSystem(new MovementSystem());

const player = scene.createEntity('Player');
player.addComponent(new Position());
player.addComponent(new Velocity());

Core.setScene(scene);

// Game loop
function gameLoop(currentTime: number) {
    Core.update(currentTime / 1000);
    requestAnimationFrame(gameLoop);
}
requestAnimationFrame(gameLoop);

Packages

ESEngine is organized as a monorepo with 50+ modular packages. Install only what you need.

Essential

npm install @esengine/ecs-framework  # Core ECS (can be used standalone)
npm install @esengine/engine-core    # Full engine with module system

Popular Modules

Category Packages
Rendering sprite, tilemap, particle, mesh-3d, fairygui
Physics physics-rapier2d
AI & Logic behavior-tree, blueprint
Network network, network-server
Platform platform-web, platform-wechat

View all 50+ packages

Core

  • @esengine/ecs-framework - ECS framework core
  • @esengine/math - Vector, matrix utilities
  • @esengine/engine - Rust/WASM renderer
  • @esengine/engine-core - Module lifecycle

Runtime

  • @esengine/sprite - 2D sprites & animation
  • @esengine/tilemap - Tile-based maps
  • @esengine/particle - Particle effects
  • @esengine/physics-rapier2d - 2D physics
  • @esengine/behavior-tree - AI behavior trees
  • @esengine/blueprint - Visual scripting
  • @esengine/camera - Camera system
  • @esengine/audio - Audio playback
  • @esengine/fairygui - FairyGUI integration
  • @esengine/mesh-3d - 3D mesh (FBX/GLTF/OBJ)
  • @esengine/material-system - Materials & shaders
  • @esengine/asset-system - Asset management
  • @esengine/world-streaming - Large world streaming

Network

  • @esengine/network - Client (TSRPC)
  • @esengine/network-server - Server runtime
  • @esengine/network-protocols - Shared protocols

Editor Extensions

All runtime modules have corresponding -editor packages for visual editing.

Platform

  • @esengine/platform-common - Platform abstraction
  • @esengine/platform-web - Web runtime
  • @esengine/platform-wechat - WeChat Mini Game

Editor

The ESEngine Editor is a cross-platform desktop application built with Tauri and React.

Features

  • Scene hierarchy and entity management
  • Component inspector with custom property editors
  • Asset browser with drag-and-drop
  • Tilemap editor with paint and fill tools
  • Behavior tree visual editor
  • Blueprint visual scripting
  • Material and shader editing
  • Built-in performance profiler
  • Localization (English, Chinese)

Screenshot

ESEngine Editor

Platform Support

Platform Runtime Editor
Web Browser -
Windows -
macOS -
WeChat Mini Game In Progress -
Playable Ads Planned -
Android Planned -
iOS Planned -

Building from Source

Prerequisites

  • Node.js 18+
  • pnpm 10+
  • Rust toolchain (for WASM renderer)
  • wasm-pack

Setup

git clone https://github.com/esengine/esengine.git
cd esengine

pnpm install
pnpm build

# Optional: Build WASM renderer
pnpm build:wasm

Run Editor

cd packages/editor-app
pnpm tauri:dev

Project Structure

esengine/
├── packages/
│   ├── core/                    # ECS Framework (@esengine/ecs-framework)
│   ├── math/                    # Math library (@esengine/math)
│   ├── engine-core/             # Engine lifecycle management
│   ├── sprite/                  # 2D sprite rendering
│   ├── tilemap/                 # Tilemap system
│   ├── physics-rapier2d/        # Physics engine
│   ├── behavior-tree/           # AI behavior trees
│   ├── editor-app/              # Desktop editor (Tauri)
│   └── ...                      # Other modules
├── docs/                        # Documentation source
├── examples/                    # Example projects
├── scripts/                     # Build utilities
└── thirdparty/                  # Third-party dependencies

Looking for ECS source code? The ECS framework is in packages/core/

Documentation

Community

Contributing

Contributions are welcome. Please read the contributing guidelines before submitting a pull request.

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

ESEngine is licensed under the MIT License.


Made with ❤️ by the ESEngine team

Extension points exported contracts — how you extend this code

IDisposable (Interface)
* Disposable interface * 可销毁接口 [132 implementers]
packages/fairygui/src/core/ServiceContainer.ts
IPhysicsSystem (Interface)
* 物理系统接口 * Physics system interface [73 implementers]
packages/runtime-core/src/GameRuntime.ts
ITilemapTool (Interface)
(no doc) [10 implementers]
packages/tilemap-editor/src/tools/ITilemapTool.ts
INodeExecutor (Interface)
(no doc) [50 implementers]
packages/behavior-tree/src/execution/NodeExecutor.ts
IRuntimeModule (Interface)
(no doc) [13 implementers]
packages/engine-core/src/EnginePlugin.ts
IParticleModule (Interface)
(no doc) [70 implementers]
packages/particle/src/modules/IParticleModule.ts
IPropertyControl (Interface)
(no doc) [31 implementers]
packages/editor-app/src/components/inspector/types.ts
IAssetLoader (Interface)
(no doc) [16 implementers]
packages/asset-system/src/interfaces/IAssetLoader.ts

Core symbols most depended-on inside this repo

push
called by 1806
packages/network/src/sync/IStateSnapshot.ts
log
called by 1048
packages/core/src/Utils/Logger/ConsoleLogger.ts
set
called by 987
packages/asset-system/src/interfaces/IAssetManager.ts
get
called by 966
packages/asset-system/src/interfaces/IAssetManager.ts
map
called by 743
packages/core/src/ECS/Utils/SparseSet.ts
createEntity
called by 473
packages/editor-core/src/Services/PreviewSceneService.ts
join
called by 444
packages/asset-system/src/utils/PathValidator.ts
now
called by 428
packages/engine/src/platform/web.rs

Shape

Method 11,573
Class 2,595
Function 1,998
Interface 1,350
Enum 158

Languages

TypeScript94%
Rust6%

Modules by API surface

docs/public/demos/worker-system/assets/index-CrID--xK.js995 symbols
packages/rapier2d/pkg/rapier_wasm2d.js596 symbols
packages/platform-common/src/IPlatformSubsystems.ts128 symbols
packages/rapier2d/src/geometry/collider.ts115 symbols
packages/core/tests/ECS/Systems/EntitySystem.test.ts107 symbols
packages/rapier2d/src/dynamics/rigid_body.ts104 symbols
packages/ecs-engine-bindgen/src/core/EngineBridge.ts98 symbols
packages/engine/src/core/engine.rs94 symbols
packages/core/tests/ECS/EntitySystemDI.test.ts88 symbols
packages/fairygui/src/core/GObject.ts87 symbols
packages/engine/src/lib.rs86 symbols
packages/editor-app/src/services/EngineService.ts83 symbols

For agents

$ claude mcp add esengine \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact