A simple Entity-Component-System (ECS) that is implemented using Memory Arenas
Go to file
2026-01-23 16:37:29 +08:00
examples/example1 Update: build script and add comment in example1.bat 2026-01-23 15:41:35 +08:00
test Update: make some linux specific changes 2026-01-22 20:50:56 +08:00
.clangd Update: Implement becs3.h in C89 2026-01-21 17:15:51 +08:00
.editorconfig Update: Implement becs3.h in C89 2026-01-21 17:15:51 +08:00
.gitignore initial commit 2026-01-16 17:36:44 +08:00
.gitmodules Fix: becs.h had a few bugs that I didn't catch around deleting entities 2026-01-22 18:05:43 +08:00
becs.h Update: switch over to all arrays being allocated by my own memory arena. Prevents stack overflow for high entity counts 2026-01-23 16:37:29 +08:00
build.bat Update: Change build script to have a run option 2026-01-22 10:49:56 +08:00
build.sh Update build.sh 2026-01-22 08:22:03 +08:00
README.md Update README 2026-01-23 13:04:07 +08:00

Barcelli Entity-Component-System (BECS)

This is an header only library implementing a Entity-Component-System in C89 using memory arenas. You can look at tests/main.c for an example of an implementation. This is an educational library, done in my free time. If you are interested in improving the design of this ECS, feel free to submit a pull request. I am by no means an expert and ECS design, this was just a fun problem solving exercise.

Demo (Particle System)

[!TODO] Add Video

Instructions on Usage

Include becs.h and in exactly one file define BECS_IMPLEMENTATION before the include.

To setup your Maximum Entity Count and Maximum component count, define BECS_MAX_ENTITIES and BECS_MAX_COMPONENTS before including becs.h

Example:

#define BECS_MAX_ENTITIES 100
#define BECS_MAX_COMPONENTS 10

#define BECS_IMPLEMENTATION
#include <becs.h>

int main(void)
{
    /* your program goes here */
}

Systems

When writing systems try to write them such that you operate on the dense array of the individual components. Take a look at the implementation in example 1 for more detail. (Example 1's implementation lags at high particle counts due to my quick and shoddy writing of the render code. If you comment out the RenderSystem call in the loop, the ECS can handle 100000 entities being simulated at the same time with no issues)