Back to browse
GitHub Repository

Minimal Entity Component System (ECS) in python and numpy. Uses raylib for examples. Docs: https://meehai.gitlab.io/microecs

1 starsPython

MicroECS – entity component system library in Python/NumPy

by meehai·Jun 12, 2026·4 points·0 comments

AI Analysis

●●SolidBig BrainNiche Gem

NumPy-backed ECS with archetype pooling beats OOP inheritance for Python game loops.

Strengths
  • Columnar NumPy arrays enable vectorization and cache-friendly contiguous memory access
  • Archetype-based Pool system migrates entities between pools while preserving IDs
  • QueryResult implements NumPy interface for seamless array operations on entity batches
Weaknesses
  • Zero stars and forks suggests early stage; docs on separate GitLab instance
  • Python ECS libraries already exist (Speck, Archetype, PyECS) with more maturity
Target Audience

Python game developers, robotics simulator builders

Similar To

Speck · Archetype · PyECS

Post Description

Hi, in the last ~month I've learned a lot about ECS [1,2].

I'm currently developing a robotics simulator from scratch (python+raylib) and, due to lack of game dev experience I went "full OOP" on it. A SceneObject with a lot of inherited interfaces (e.g. Collidable, Movable etc.). These are inherited and fixed at run time.

The main loop inevitably became:

for scene_object in sim.scene_objects: scene_object.update(...) for scene_object in sim.scene_objects: scene_object.draw(...)

Well, it turns out that this can become a bottleneck if you have many scene objects because computers love contiguous memory for caching, physics/math vectorization and so on.

Having recently learned more about ECS[1,2], I started doing a bunch of experiments in a sandbox with turning the update() function into ECS. The idea is that the data is stored in columnar numpy arrays (components) + a lot of data structure optimizations for querying scene objects and fast access e.g.

qr = scene.query(HasMotion, HasPosition) # query result acting like a np array of (N, ...) shape qr.position += ... # operate like numpy / vectorized

In any case, the standalone library only needs python and numpy. Raylib is only for rendering, but the raw data structures don't need it.

I'd love some feedback on it, e.g. what is it missing or what are gotchas I'll find out later on during the simulator development.

As an anecdote: I used Claude as an 'engineering manager', I wrote the code myself, it did the code review, tasks management and tests (super useful for corner cases).

[1] https://www.youtube.com/watch?v=qglU107_DA4 hytale's ECS video (great for beginners)

[2] Casey Muratori's latest video about the first ECS in the game industry (https://www.youtube.com/watch?v=73Do0OScoOU)

Similar Projects