Show HN: MicroECS – entity component system library in Python/NumPy

meehai1 pts0 comments

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)

numpy scene_object https youtube watch python

Related Articles