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>
<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>
</p>
<p align="center">
<b>English</b> | <a href="./README_CN.md">中文</a>
</p>
<p align="center">
<a href="https://esengine.github.io/ecs-framework/">Documentation</a> ·
<a href="https://esengine.github.io/ecs-framework/api/">API Reference</a> ·
<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-03 22:15:22 +08:00
ESEngine is a cross-platform 2D game engine for creating games from a unified interface. It provides a comprehensive set of common tools so that developers can focus on making games without having to reinvent the wheel.
2025-10-18 23:45:34 +08:00
2025-12-03 22:15:22 +08:00
Games can be exported to multiple platforms including Web browsers, WeChat Mini Games, and other mini-game platforms.
2025-10-18 23:45:34 +08:00
2025-12-03 22:15:22 +08:00
## Free and Open Source
2025-10-18 23:45:34 +08:00
2025-12-03 22:15:22 +08:00
ESEngine is completely free and open source under the MIT license. No strings attached, no royalties. Your games are yours.
2025-10-18 23:45:34 +08:00
2025-12-03 22:15:22 +08:00
## Features
2025-10-18 23:45:34 +08:00
2025-12-03 22:15:22 +08:00
- **Data-Driven Architecture**: Built on Entity-Component-System (ECS) pattern for flexible and performant game logic
- **High-Performance Rendering**: Rust/WebAssembly 2D renderer with sprite batching and WebGL 2.0 backend
- **Visual Editor**: Cross-platform desktop editor with scene management, asset browser, and visual tools
- **Modular Design**: Use only what you need. Each feature is a separate module that can be included independently
- **Multi-Platform**: Deploy to Web, WeChat Mini Games, and more from a single codebase
2025-10-18 23:45:34 +08:00
2025-12-03 22:15:22 +08:00
## Getting the Engine
2025-10-18 23:45:34 +08:00
2025-12-03 22:15:22 +08:00
### Using 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-03 22:15:22 +08:00
### Building from Source
2025-08-06 17:04:02 +08:00
2025-12-03 22:15:22 +08:00
See [Building from Source ](#building-from-source ) for detailed instructions.
2025-06-10 13:12:14 +08:00
2025-12-03 22:15:22 +08:00
### Editor Download
2025-06-07 20:32:43 +08:00
2025-12-08 21:23:37 +08:00
Pre-built editor binaries are available on the [Releases ](https://github.com/esengine/esengine/releases ) page for Windows and 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-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
let lastTime = 0;
function gameLoop(currentTime: number) {
const deltaTime = (currentTime - lastTime) / 1000;
lastTime = currentTime;
Core.update(deltaTime);
requestAnimationFrame(gameLoop);
}
requestAnimationFrame(gameLoop);
2025-10-18 23:45:34 +08:00
```
2025-12-03 22:15:22 +08:00
## Modules
2025-06-10 13:12:14 +08:00
2025-12-03 22:15:22 +08:00
ESEngine is organized into modular packages. Each feature has a runtime module and an optional editor extension.
2025-06-10 13:12:14 +08:00
2025-12-03 22:15:22 +08:00
### Core
2025-10-16 22:45:08 +08:00
2025-12-03 22:15:22 +08:00
| Package | Description |
|---------|-------------|
2025-12-08 21:26:35 +08:00
| `@esengine/ecs-framework` | Core ECS framework with entity management, component system, and queries |
2025-12-03 22:15:22 +08:00
| `@esengine/math` | Vector, matrix, and mathematical utilities |
| `@esengine/engine` | Rust/WASM 2D renderer |
| `@esengine/engine-core` | Engine module system and lifecycle management |
2025-10-16 22:45:08 +08:00
2025-12-03 22:15:22 +08:00
### Runtime Modules
2025-10-16 22:45:08 +08:00
2025-12-03 22:15:22 +08:00
| Package | Description |
|---------|-------------|
| `@esengine/sprite` | 2D sprite rendering and animation |
| `@esengine/tilemap` | Tile-based map rendering with animation support |
| `@esengine/physics-rapier2d` | 2D physics simulation powered by Rapier |
| `@esengine/behavior-tree` | Behavior tree AI system |
| `@esengine/blueprint` | Visual scripting runtime |
| `@esengine/camera` | Camera control and management |
| `@esengine/audio` | Audio playback |
| `@esengine/ui` | UI components |
| `@esengine/material-system` | Material and shader system |
| `@esengine/asset-system` | Asset loading and management |
2025-10-16 22:45:08 +08:00
2025-12-03 22:15:22 +08:00
### Editor Extensions
2025-10-16 22:45:08 +08:00
2025-12-03 22:15:22 +08:00
| Package | Description |
|---------|-------------|
| `@esengine/sprite-editor` | Sprite inspector and tools |
| `@esengine/tilemap-editor` | Visual tilemap editor with brush tools |
| `@esengine/physics-rapier2d-editor` | Physics collider visualization and editing |
| `@esengine/behavior-tree-editor` | Visual behavior tree editor |
| `@esengine/blueprint-editor` | Visual scripting editor |
| `@esengine/material-editor` | Material and shader editor |
| `@esengine/shader-editor` | Shader code editor |
2025-10-16 22:45:08 +08:00
2025-12-03 22:15:22 +08:00
### Platform
2025-10-16 22:45:08 +08:00
2025-12-03 22:15:22 +08:00
| Package | Description |
|---------|-------------|
| `@esengine/platform-common` | Platform abstraction interfaces |
| `@esengine/platform-web` | Web browser runtime |
| `@esengine/platform-wechat` | WeChat Mini Game runtime |
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-03 22:15:22 +08:00
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
- Component inspector with custom editors
- Asset browser with drag-and-drop support
- Tilemap editor with paint, fill, and selection tools
- Behavior tree visual editor
- Blueprint visual scripting
- Material and shader editing
- Built-in performance profiler
- Localization support (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-03 22:15:22 +08:00
## Supported Platforms
2025-06-07 20:32:43 +08:00
2025-12-03 22:15:22 +08:00
| Platform | Runtime | Editor |
|----------|---------|--------|
| Web Browser | Yes | - |
| Windows | - | Yes |
| macOS | - | Yes |
| WeChat Mini Game | In Progress | - |
| Playable Ads | Planned | - |
| Android | Planned | - |
| iOS | Planned | - |
| Windows Native | Planned | - |
| Other Platforms | 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-03 22:15:22 +08:00
- Node.js 18 or later
- pnpm 10 or later
- 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
# Clone repository
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
# Install dependencies
pnpm install
2025-10-18 23:45:34 +08:00
2025-12-03 22:15:22 +08:00
# Build all packages
pnpm build
2025-10-18 23:45:34 +08:00
2025-12-03 22:15:22 +08:00
# Build WASM renderer (optional)
pnpm build:wasm
```
2025-10-18 23:45:34 +08:00
2025-12-03 22:15:22 +08:00
### Running the 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-03 22:15:22 +08:00
├── packages/ Engine packages (runtime, editor, platform)
├── docs/ Documentation source
├── examples/ Example projects
├── scripts/ Build utilities
└── thirdparty/ Third-party dependencies
```
2025-06-09 13:25:10 +08:00
2025-12-03 22:15:22 +08:00
## Documentation
2025-10-18 21:48:44 +08:00
2025-12-03 22:15:22 +08:00
- [Getting Started ](https://esengine.github.io/ecs-framework/guide/getting-started.html )
- [Architecture Guide ](https://esengine.github.io/ecs-framework/guide/ )
- [API Reference ](https://esengine.github.io/ecs-framework/api/ )
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-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
2. Create a feature branch
3. Make changes with tests
4. Submit 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 ).