Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/Chillu1/CSharpECSComparison

Comparison chart for C# ECS solutions/frameworks
https://github.com/Chillu1/CSharpECSComparison

csharp data-oriented ecs ecs-framework entity-component-system game-development unity unity3d

Last synced: 2 months ago
JSON representation

Comparison chart for C# ECS solutions/frameworks

Lists

README

        

# 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**

[//]: # (TODO: Link the names to URLS)
[//]: # (TODO: Ease of use?)
[//]: # (TODO: Performance benchmarks?)
[//]: # (TODO: https://github.com/scellecs/morpeh/pull/88)
[//]: # (TODO: https://github.com/Doraku/DefaultEcs/issues/137)

| Feature | [Leo
ECS] | [Leo
EcsLite] | [Default
Ecs] | [Svelto
.ECS] | [Morpeh] | [Unity
ECS] | [Entitas] | [chrome
alex
/ecs] | [Nano
ECS] | [Ego
CS] | [actors
.unity] | Feature |
|--------------------------------------------|-----------------------|-----------------------|----------------------------------|-----------------------|--------------------------------------------|---------------------------------|-----------------------------|----------------------------|---------------------------------|---------------------|---------------------|--------------------------------------------|
| Archetype based | :x: | :x: | :x: | :heavy_check_mark: | :x: | :heavy_check_mark: | :x: | :heavy_check_mark:? | :x:? | :x: | :x: | Archetype based |
| Filter/Query operations | Has/Not
(Inc/Exc) | Has/Not
(Inc/Exc) | Has/Not
Or/Nor | | Has/Not
(With/
Without) | Has/Not/Or
(All/Any/None) | Has/Not, Any
(All/None) | Has/Not, Any | Has/Not
(With/
Without) | Has | Has | Filter/Query operations |
| Components Type support | struct | struct | struct
/class
/interface | struct
/interface | struct | struct
/class | class | struct | class | class | class? | 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 |
| Dependencies | None | None | None | None | :heavy_minus_sign:Unity
Odin Inspector | Unity | :heavy_minus_sign:Unity | Unity | Unity | Unity | Unity | Dependencies |
| 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
Support | :heavy_check_mark: | :heavy_check_mark: | :x: | | :x: | :x: | :x: | :x: | :x: | :x: | | Dependency Injection
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 |
| License | MIT | MIT | MIT-0 | MIT | MIT | Unity
Companion
License | MIT | MIT | MIT | MIT | MIT | License |
| Last Major Version Release Date | Feb
2022 | Feb
2022 | Feb
2022 | May
2023 | May
2023 | Sep
2022 | Sep
2022 | Sep
2020? | Dec
2019 | Mar
2017 | Jul
2020 | Last Major Version Release Date |
| | | | | | | | | | | | | |
| Feature | [Leo
ECS] | [Leo
EcsLite] | [Default
Ecs] | [Svelto
.ECS] | [Morpeh] | [Unity
ECS] | [Entitas] | [chrome
alex
/ecs] | [Nano
ECS] | [Ego
CS] | [actors
.unity] | Feature |

*(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.

[Leo
ECS]: https://github.com/LeoECSCommunity/ecs
[Leo
EcsLite]: https://github.com/LeoECSCommunity/ecslite
[Entitas]: https://github.com/sschmid/Entitas-CSharp
[Morpeh]: https://github.com/scellecs/morpeh
[Default
Ecs]: https://github.com/Doraku/DefaultEcs
[Unity
ECS]: https://docs.unity3d.com/Packages/com.unity.entities@latest/index.html
[Nano
ECS]: https://github.com/SinyavtsevIlya/NanoECS
[Ego
CS]: https://github.com/andoowhy/EgoCS
[Svelto
.ECS]: https://github.com/sebas77/Svelto.ECS
[actors
.unity]: https://github.com/PixeyeHQ/actors.unity
[chrome
alex
/ecs]: https://github.com/chromealex/ecs