2025-12-08 21:47:47 +08:00
<h1 align="center">
<img src="https://raw.githubusercontent.com/esengine/esengine/master/docs/public/logo.svg" alt="ESEngine" width="180">
<br>
ESEngine
</h1>
<p align="center">
<strong>Cross-platform 2D Game Engine</strong>
</p>
<p align="center">
<a href="https://www.npmjs.com/package/@esengine/ecs -framework"><img src="https://img.shields.io/npm/v/@esengine/ecs -framework?style=flat-square&color=blue" alt="npm"></a>
2025-12-13 20:56:22 +08:00
<a href="https://github.com/esengine/esengine/actions"><img src="https://img.shields.io/github/actions/workflow/status/esengine/esengine/ci.yml?branch=master&style=flat-square" alt="build"></a>
2025-12-08 21:47:47 +08:00
<a href="https://github.com/esengine/esengine/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-green?style=flat-square" alt="license"></a>
<a href="https://github.com/esengine/esengine/stargazers"><img src="https://img.shields.io/github/stars/esengine/esengine?style=flat-square" alt="stars"></a>
2025-12-13 20:56:22 +08:00
<img src="https://img.shields.io/badge/TypeScript-5.0+-blue?style=flat-square&logo=typescript&logoColor=white" alt="TypeScript">
2025-12-08 21:47:47 +08:00
</p>
<p align="center">
<b>English</b> | <a href="./README_CN.md">中文</a>
</p>
<p align="center">
2025-12-09 09:09:45 +08:00
<a href="https://esengine.cn/">Documentation</a> ·
<a href="https://esengine.cn/api/README">API Reference</a> ·
2025-12-08 21:47:47 +08:00
<a href="https://github.com/esengine/esengine/releases">Download Editor</a> ·
<a href="./examples/">Examples</a>
</p>
---
2025-10-18 23:45:34 +08:00
2025-12-23 18:00:21 +08:00
> **Just need ECS?** The core ECS framework [`@esengine/ecs-framework`](./packages/core/) can be used standalone with Cocos Creator, Laya, or any JS engine. [View ECS Documentation](./packages/core/README.md)
2025-12-13 20:56:22 +08:00
## Overview
2025-10-18 23:45:34 +08:00
2025-12-13 20:56:22 +08:00
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.
2025-10-18 23:45:34 +08:00
2025-12-13 20:56:22 +08:00
Export your games to multiple platforms including web browsers, WeChat Mini Games, and other mini-game platforms from a single codebase.
2025-10-18 23:45:34 +08:00
2025-12-13 20:56:22 +08:00
## Key Features
2025-10-18 23:45:34 +08:00
2025-12-13 20:56:22 +08:00
| 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
2025-10-18 23:45:34 +08:00
2025-12-13 20:56:22 +08:00
ESEngine is **free and open source ** under the [MIT License ](LICENSE ). No royalties, no strings attached.
2025-10-18 23:45:34 +08:00
2025-12-13 20:56:22 +08:00
## Installation
2025-10-18 23:45:34 +08:00
2025-12-13 20:56:22 +08:00
### npm
2025-10-18 23:45:34 +08:00
2025-12-03 22:15:22 +08:00
```bash
2025-12-08 21:26:35 +08:00
npm install @esengine/ecs -framework
2025-12-03 22:15:22 +08:00
```
2025-08-06 17:04:02 +08:00
2025-12-13 20:56:22 +08:00
### Editor
2025-08-06 17:04:02 +08:00
2025-12-13 20:56:22 +08:00
Download pre-built binaries from the [Releases ](https://github.com/esengine/esengine/releases ) page (Windows, macOS).
2025-06-07 20:32:43 +08:00
2025-12-03 22:15:22 +08:00
## Quick Start
2025-06-07 20:32:43 +08:00
```typescript
2025-12-03 22:15:22 +08:00
import {
Core, Scene, Entity, Component, EntitySystem,
Matcher, Time, ECSComponent, ECSSystem
2025-12-08 21:26:35 +08:00
} from '@esengine/ecs -framework';
2025-06-07 20:32:43 +08:00
2025-09-28 12:26:51 +08:00
@ECSComponent ('Position')
class Position extends Component {
2025-12-03 22:15:22 +08:00
x = 0;
y = 0;
2025-06-07 20:32:43 +08:00
}
2025-06-09 13:25:10 +08:00
2025-09-28 12:26:51 +08:00
@ECSComponent ('Velocity')
class Velocity extends Component {
2025-12-03 22:15:22 +08:00
dx = 0;
dy = 0;
2025-06-09 13:25:10 +08:00
}
2025-09-28 12:26:51 +08:00
@ECSSystem ('Movement')
2025-08-14 18:38:09 +08:00
class MovementSystem extends EntitySystem {
constructor() {
2025-09-28 12:26:51 +08:00
super(Matcher.all(Position, Velocity));
2025-08-14 18:38:09 +08:00
}
2025-06-12 09:42:35 +08:00
2025-09-28 12:26:51 +08:00
protected process(entities: readonly Entity[]): void {
for (const entity of entities) {
2025-12-03 22:15:22 +08:00
const pos = entity.getComponent(Position);
const vel = entity.getComponent(Velocity);
pos.x += vel.dx * Time.deltaTime;
pos.y += vel.dy * Time.deltaTime;
2025-09-28 12:26:51 +08:00
}
2025-08-11 09:31:44 +08:00
}
}
2025-06-10 13:12:14 +08:00
2025-12-13 20:56:22 +08:00
// Initialize
2025-09-28 12:26:51 +08:00
Core.create();
2025-12-03 22:15:22 +08:00
const scene = new Scene();
scene.addSystem(new MovementSystem());
2025-06-10 13:12:14 +08:00
2025-12-03 22:15:22 +08:00
const player = scene.createEntity('Player');
player.addComponent(new Position());
player.addComponent(new Velocity());
2025-06-10 13:12:14 +08:00
2025-12-03 22:15:22 +08:00
Core.setScene(scene);
2025-12-03 22:48:22 +08:00
// Game loop
function gameLoop(currentTime: number) {
2025-12-13 20:56:22 +08:00
Core.update(currentTime / 1000);
2025-12-03 22:48:22 +08:00
requestAnimationFrame(gameLoop);
}
requestAnimationFrame(gameLoop);
2025-10-18 23:45:34 +08:00
```
2025-12-13 20:56:22 +08:00
## Packages
2025-06-10 13:12:14 +08:00
2025-12-24 23:33:12 +08:00
ESEngine is organized as a monorepo with 50+ modular packages. Install only what you need.
2025-06-10 13:12:14 +08:00
2025-12-24 23:33:12 +08:00
### Essential
2025-10-16 22:45:08 +08:00
2025-12-24 23:33:12 +08:00
```bash
npm install @esengine/ecs -framework # Core ECS (can be used standalone)
npm install @esengine/engine -core # Full engine with module system
```
2025-10-16 22:45:08 +08:00
2025-12-24 23:33:12 +08:00
### 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` |
<details>
<summary><b>View all 50+ packages</b></summary>
#### 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
</details>
2025-10-16 22:45:08 +08:00
2025-12-03 22:15:22 +08:00
## Editor
2025-10-16 22:45:08 +08:00
2025-12-13 20:56:22 +08:00
The ESEngine Editor is a cross-platform desktop application built with Tauri and React.
2025-10-16 22:45:08 +08:00
2025-12-03 22:15:22 +08:00
### Features
2025-10-16 22:45:08 +08:00
2025-12-03 22:15:22 +08:00
- Scene hierarchy and entity management
2025-12-13 20:56:22 +08:00
- Component inspector with custom property editors
- Asset browser with drag-and-drop
- Tilemap editor with paint and fill tools
2025-12-03 22:15:22 +08:00
- Behavior tree visual editor
- Blueprint visual scripting
- Material and shader editing
- Built-in performance profiler
2025-12-13 20:56:22 +08:00
- Localization (English, Chinese)
2025-10-16 22:45:08 +08:00
2025-12-03 22:15:22 +08:00
### Screenshot
2025-10-16 22:45:08 +08:00
2025-12-03 22:15:22 +08:00

2025-06-10 13:12:14 +08:00
2025-12-13 20:56:22 +08:00
## Platform Support
2025-06-07 20:32:43 +08:00
2025-12-03 22:15:22 +08:00
| Platform | Runtime | Editor |
2025-12-13 20:56:22 +08:00
|----------|:-------:|:------:|
| Web Browser | ✓ | - |
| Windows | - | ✓ |
| macOS | - | ✓ |
2025-12-03 22:15:22 +08:00
| WeChat Mini Game | In Progress | - |
| Playable Ads | Planned | - |
| Android | Planned | - |
| iOS | Planned | - |
2025-06-07 20:32:43 +08:00
2025-12-03 22:15:22 +08:00
## Building from Source
2025-06-07 20:32:43 +08:00
2025-12-03 22:15:22 +08:00
### Prerequisites
2025-06-07 20:32:43 +08:00
2025-12-13 20:56:22 +08:00
- Node.js 18+
- pnpm 10+
2025-12-03 22:15:22 +08:00
- Rust toolchain (for WASM renderer)
- wasm-pack
2025-06-09 13:25:10 +08:00
2025-12-03 22:15:22 +08:00
### Setup
2025-06-10 13:12:14 +08:00
2025-12-03 22:15:22 +08:00
```bash
2025-12-08 21:23:37 +08:00
git clone https://github.com/esengine/esengine.git
2025-12-08 21:47:47 +08:00
cd esengine
2025-10-18 23:45:34 +08:00
2025-12-03 22:15:22 +08:00
pnpm install
pnpm build
2025-10-18 23:45:34 +08:00
2025-12-13 20:56:22 +08:00
# Optional: Build WASM renderer
2025-12-03 22:15:22 +08:00
pnpm build:wasm
```
2025-10-18 23:45:34 +08:00
2025-12-13 20:56:22 +08:00
### Run Editor
2025-10-18 23:45:34 +08:00
2025-12-03 22:15:22 +08:00
```bash
cd packages/editor-app
pnpm tauri:dev
```
2025-10-18 23:45:34 +08:00
2025-12-03 22:15:22 +08:00
### Project Structure
2025-06-09 13:25:10 +08:00
2025-12-03 22:15:22 +08:00
```
2025-12-08 21:47:47 +08:00
esengine/
2025-12-23 18:00:21 +08:00
├── 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
2025-12-03 22:15:22 +08:00
```
2025-06-09 13:25:10 +08:00
2025-12-23 18:00:21 +08:00
> **Looking for ECS source code?** The ECS framework is in `packages/core/`
2025-12-03 22:15:22 +08:00
## Documentation
2025-10-18 21:48:44 +08:00
2025-12-09 09:09:45 +08:00
- [Getting Started ](https://esengine.cn/guide/getting-started.html )
- [Architecture Guide ](https://esengine.cn/guide/ )
- [API Reference ](https://esengine.cn/api/README )
2025-10-18 21:48:44 +08:00
2025-12-03 22:15:22 +08:00
## Community
2025-10-18 21:48:44 +08:00
2025-12-24 23:35:43 +08:00
- [Discord ](https://discord.gg/gCAgzXFW ) - Chat with the community
2025-12-08 21:23:37 +08:00
- [GitHub Issues ](https://github.com/esengine/esengine/issues ) - Bug reports and feature requests
- [GitHub Discussions ](https://github.com/esengine/esengine/discussions ) - Questions and ideas
2025-10-18 23:45:34 +08:00
2025-12-03 22:15:22 +08:00
## Contributing
2025-10-18 23:45:34 +08:00
2025-12-03 22:15:22 +08:00
Contributions are welcome. Please read the contributing guidelines before submitting a pull request.
2025-10-18 21:48:44 +08:00
2025-12-03 22:15:22 +08:00
1. Fork the repository
2025-12-13 20:56:22 +08:00
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
2025-10-18 21:48:44 +08:00
2025-12-03 22:15:22 +08:00
## License
2025-06-07 20:32:43 +08:00
2025-12-03 22:15:22 +08:00
ESEngine is licensed under the [MIT License ](LICENSE ).
2025-12-13 20:56:22 +08:00
---
<p align="center">
Made with ❤️ by the ESEngine team
</p>