A lightweight, high-performance C# Entity Component System framework with optional Unity integration.
LeoECS is a lightweight Entity Component System framework for C# that enables data-oriented game development. It separates data (components) from logic (systems) to optimize performance and memory usage, with optional integration for Unity projects.
C# developers building high-performance games or simulations, particularly those using Unity or custom engines who want an ECS architecture without engine dependencies.
Developers choose LeoECS for its focus on zero allocations, minimal memory footprint, and engine-agnostic design, offering a clean separation of concerns and performance benefits over traditional object-oriented approaches.
LeoECS is a lightweight Entity Component System (ECS) framework for C# designed for game development. It focuses on performance, minimal memory allocations, and engine-agnostic architecture, making it suitable for high-performance game logic.
LeoECS prioritizes performance and simplicity, avoiding thread safety and engine lock-in to give developers full control over their game architecture.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Optimized for zero or minimal memory allocations and fast iteration, with internal checks removed in RELEASE builds for maximum speed, as stated in the README.
Engine-agnostic architecture with no dependencies, though optional Unity integration is provided, making it suitable for custom engines or cross-platform projects.
Systems automatically receive EcsWorld and EcsFilter instances, with support for custom type injection via EcsSystems.Inject(), simplifying setup.
One-frame components are supported with automatic clearing after one update cycle using .OneFrame<>(), reducing boilerplate code for temporary data.
Development has ceased, with the README explicitly recommending migration to EcsProto or EcsLite, posing risks for long-term support and bug fixes.
The framework is not thread-safe and never will be, requiring manual synchronization implementation for multithreaded scenarios, which adds complexity.
Filters support only up to 6 include and 2 exclude constraints, which may be insufficient for advanced queries without invasive code modifications.