* feat(script-runtime): 添加服务器端蓝图执行模块 - ServerBlueprintVM: 服务器端蓝图虚拟机 - CPULimiter: CPU 时间和步数限制 - IntentCollector: 意图收集系统 - FileMemoryStore: 文件系统持久化 - ServerExecutionContext: 服务器执行上下文 * refactor(script-runtime): 分离引擎接口与游戏逻辑 - 重构 IntentTypes.ts 只保留基础 IIntent 接口和通用常量 - IntentCollector 改为泛型类,支持任意意图类型 - ServerExecutionContext 改为泛型类,支持任意游戏状态类型 - ServerBlueprintVM 改为泛型类,使用 TGameState 和 TIntent 类型参数 - 移除游戏特定类型(IUnitState, ISpawnerState 等),由游戏项目定义 - 添加 IntentKeyExtractor 机制用于防止重复意图 * feat(script-runtime): 添加服务器端游戏循环框架 - PlayerSession: 封装单个玩家的 VM、蓝图和 Memory 状态 - TickScheduler: 管理所有玩家会话,调度每 tick 的蓝图执行 - IIntentProcessor: 意图处理器接口,由游戏项目实现 - IntentProcessorBase: 意图处理器基类,提供常用处理模式 - IntentProcessorRegistry: 按类型注册意图处理器 - GameLoop: 完整的游戏主循环,协调各组件工作 * feat(script-runtime): 添加通用蓝图节点 Memory 节点: - GetMemory: 读取玩家 Memory - SetMemory: 写入玩家 Memory - HasMemoryKey: 检查键是否存在 - DeleteMemory: 删除 Memory 键 Log 节点: - Log: 记录日志 - Warn: 记录警告 - Error: 记录错误 Game 信息节点: - GetTick: 获取当前 tick - GetPlayerId: 获取玩家 ID - GetDeltaTime: 获取增量时间 - GetGameState: 获取游戏状态 提供 registerScriptRuntimeNodes() 用于批量注册节点 * fix(script-runtime): 修复 CI 构建错误 - 更新 tsconfig.json 继承 tsconfig.base.json - 添加 references 到 core 和 blueprint 包 - 更新 pnpm-lock.yaml * fix(script-runtime): 修复 DTS 构建错误 - 添加 tsconfig.build.json 用于 tsup 构建 - 更新 tsup.config.ts 使用 tsconfig.build.json - 分离构建配置和类型检查配置
ESEngine
Cross-platform 2D Game Engine
English | 中文
Documentation · API Reference · Download Editor · Examples
Just need ECS? The core ECS framework
@esengine/ecs-frameworkcan 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
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
- Discord - Chat with the community
- GitHub Issues - Bug reports and feature requests
- GitHub Discussions - Questions and ideas
Contributing
Contributions are welcome. Please read the 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
License
ESEngine is licensed under the MIT License.
Made with ❤️ by the ESEngine team
