Home

Awesome

What is this?

This is a rough comparison table of all the "popular" ECS frameworks written and used in C#.

Table

Support...
:heavy_check_mark: = Full
:heavy_check_mark:Ex = Full with extension
:heavy_minus_sign: = Partial
:x: = None

FeatureLeo<br/>ECSLeo<br/>EcsLiteDefault<br/>EcsSvelto<br/>.ECSMorpehUnity<br/>ECSEntitaschrome<br/>alex<br/>/ecsNano<br/>ECSEgo<br/>CSactors<br/>.unityFeature
Archetype based:x::x::x::heavy_check_mark::x::heavy_check_mark::x::heavy_check_mark:?:x:?:x::x:Archetype based
Filter/Query operationsHas/Not<br/>(Inc/Exc)Has/Not<br/>(Inc/Exc)Has/Not<br/>Or/NorHas/Not<br/>(With/<br/>Without)Has/Not/Or<br/>(All/Any/None)Has/Not, Any<br/>(All/None)Has/Not, AnyHas/Not<br/>(With/<br/>Without)HasHasFilter/Query operations
Components Type supportstructstructstruct<br/>/class<br/>/interfacestruct<br/>/interfacestructstruct<br/>/classclassstructclassclassclass?Components Type support
Code Generation based:x::x::x::x::x::heavy_check_mark::heavy_check_mark::heavy_check_mark::x::x:Code Generation based
DependenciesNoneNoneNoneNone:heavy_minus_sign:Unity<br/>Odin InspectorUnity:heavy_minus_sign:UnityUnityUnityUnityUnityDependencies
Engine agnostic:heavy_check_mark::heavy_check_mark::x:?:heavy_check_mark::heavy_minus_sign::x::heavy_check_mark::x::x::x::x:Engine agnostic
Custom Engine Support:heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::x::heavy_minus_sign::x::x::x::x:Custom Engine Support
Threading support:heavy_check_mark:Ex:heavy_check_mark:Ex:heavy_check_mark::x::heavy_minus_sign::heavy_minus_sign:?:x::x:?:heavy_minus_sign:?Threading support
World Events/Messages:heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::x:?:x::x:?:heavy_check_mark::heavy_check_mark:World Events/Messages
One-Frame Components:heavy_check_mark::heavy_check_mark::heavy_check_mark:EX:x:?:heavy_check_mark:One-Frame Components
Dependency Injection<br/>Support:heavy_check_mark::heavy_check_mark::x::x::x::x::x::x::x:Dependency Injection<br/>Support
Shared Resource:heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:Shared Resource
Thread-safe:x::x::heavy_minus_sign::heavy_minus_sign::x::x::x::x:?:x::x::x:?Thread-safe
Reactive System:x::x::heavy_check_mark::heavy_minus_sign::x::x:?:heavy_check_mark::heavy_check_mark::heavy_check_mark:Reactive System
Multiple components of same type on entity:x::x::x::x::x::x::x::x:Multiple components of same type on entity
Components can live without entities:x::x::heavy_check_mark::x::x::x::heavy_check_mark:Components can live without entities
Entities can live without components:x::x::x::x::heavy_check_mark::heavy_check_mark:Entities can live without components
Unity Editor View support:heavy_check_mark:Ex:heavy_check_mark:Ex:x::x::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:Unity Editor View support
Unity Editor Full Integration*:x::x::x::x::heavy_minus_sign:?:x:(WIP):heavy_check_mark::heavy_check_mark::heavy_check_mark:?Unity Editor Full Integration*
Unity Burst Compatible:x::heavy_check_mark:Ex:x::heavy_check_mark::heavy_minus_sign::heavy_check_mark::x::heavy_check_mark::x:?:x:?:x:Unity Burst Compatible
Unity Jobs Compatible:x::heavy_check_mark:Ex:x::heavy_check_mark::heavy_minus_sign::heavy_check_mark::x::heavy_check_mark::x:?:x:?:heavy_minus_sign:?Unity Jobs Compatible
LicenseMITMITMIT-0MITMITUnity<br/>Companion<br/>LicenseMITMITMITMITMITLicense
Last Major Version Release DateFeb<br/>2022Feb<br/>2022Feb<br/>2022May<br/>2023May<br/>2023Sep<br/>2022Sep<br/>2022Sep<br/>2020?Dec<br/>2019Mar<br/>2017Jul<br/>2020Last Major Version Release Date
FeatureLeo<br/>ECSLeo<br/>EcsLiteDefault<br/>EcsSvelto<br/>.ECSMorpehUnity<br/>ECSEntitaschrome<br/>alex<br/>/ecsNano<br/>ECSEgo<br/>CSactors<br/>.unityFeature

*(Unity Editor) Full Integration means that systems & components can be made, disabled, enabled, and configured in Unity Editor.

How can I contribute?

Find a table cell (or multiple) that isn't filled out, and make an issue/pull request about it. While stating why it's true (explanation doesn't have to be very sophisticated or sourced/grounded, most of the time).
OR
Find a table cell (or multiple) that has a quesiton mark, and source why it's true/untrue with an issue or pull request.

FAQ

Q: Why not split the table?
A: I think the table isn't big enough for a split to be valuable, and it's easier to check for all the features you'd want with one glance, instead of going back and forth between two tables.

Q: xECS isn't here, why's that?
A: Idk, ask about it in a new issue, it might be too niche, or something.