A simple, flexible Entity Component System (ECS) library for Lua, designed for game development and complex simulations.
Tiny-ecs is an Entity Component System library for Lua that enables developers to build complex simulations and games by separating data (entities with components) from logic (systems). It provides a lightweight, flexible framework for managing large numbers of entities efficiently, making it ideal for performance-sensitive applications like game engines.
Lua developers building games, simulations, or other complex systems where data-oriented design and entity management are important, particularly those using frameworks like LÖVE.
Developers choose tiny-ecs for its simplicity, native Lua integration, and flexibility—it works seamlessly with existing Lua code and class frameworks while providing the organizational benefits of ECS without unnecessary complexity.
ECS for Lua
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Single-file library with no external dependencies, making it easy to embed in any Lua project without bloating the codebase, as highlighted in the README.
Entities are plain Lua tables, allowing effortless mixing with existing Lua code and popular class frameworks without metatable conflicts, as noted in the philosophy section.
Supports custom Lua functions as filters, with built-in helpers like tiny.requireAll for common component-based selections, enabling complex query logic without restrictions.
Systems and entities avoid metatables, so they can be subclassed and used with Lua's OOP patterns seamlessly, as demonstrated in the demo branch examples.
The project is in maintenance mode with few recent commits, which may lead to slower bug fixes and a lack of new features or optimizations, as admitted in the README note.
The README directs users to read the source code or generate docs locally with LDoc, lacking comprehensive guides or tutorials for easier onboarding.
Relies entirely on Lua's performance, so for CPU-heavy simulations, users must manually implement caching or use LuaJIT without library-level support for advanced optimizations.