Skip to main content

MicroECS

Minimal (~500 LoC) Entity Component System in python and numpy. Examples also use raylib for rendering.

Usage:

  • Via pip: pip install microecs
  • From source code:
git clone https://gitlab.com/meehai/microecs      # clone the source code
cd microecs                                       # go in the cloned directory
python -m venv .venv && source .venv/bin/activate # make a virtual env, optional but useful
python -m pip install -e .                        # install micro ecs in this virtual env
python -m pytest test/                            # run the unit & integration tests to verify installation
python examples/01-hello-world.py                 # run the basic hello world example (others in that dir)

Docs: meehai.gitlab.io/microecs

Simple example

from dataclasses import field
import numpy as np
from microecs import World, Component

class HasPosition(Component):
    position: np.ndarray = field(metadata={"shape": (2, ), "dtype": "float32", "default": np.float32([0, 0])})
class HasVelocity(Component):
    velocity: np.ndarray = field(metadata={"shape": (2, ), "dtype": "float32", "default": np.float32([0, 0])})

world = World(components=[HasPosition, HasVelocity])
# both velocity and position (data) are optional since they have a default
eid1 = world.add_entity(components=[HasPosition, HasVelocity])
# data is passed as kwargs to add_entity
eid2 = world.add_entity(components=[HasPosition, HasVelocity],
                        velocity=np.float32([1, 1]))
world.update() # add_entity uses a command buffer internally until this is called
print(f"Added 2 entities. Id1={eid1}, Id2={eid2}")

# Querying: batch operate on all entities at once.
qr = world.query(HasVelocity) # qr is a QueryResult object, a numpy-based Structure of Arrays (SoA).
qr.velocity += np.float32([0.1, 0.5])

Documentation

  • Primitives — the five building blocks (Component, Entity, Pool, QueryResult, World), mutation timing, and how numpy-like the query views really are.
  • Systems & Per-Entity Iteration — writing systems, the three ways to touch data (vectorized, zip-rows, the Entity API), and when each is right.
  • Hello World (raylib) — a complete runnable program, walked through part by part.
  • Benchmarks — microecs vs OOP, and microecs vs other Python ECS libraries.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

microecs-0.7.0.tar.gz (15.6 kB view details)

Uploaded Source

File details

Details for the file microecs-0.7.0.tar.gz.

File metadata

  • Download URL: microecs-0.7.0.tar.gz
  • Upload date:
  • Size: 15.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.4

File hashes

Hashes for microecs-0.7.0.tar.gz
Algorithm Hash digest
SHA256 4bd3f8a32fe866b62419b2f24dc0c93e1fb9f76ae3ac00a02cc63b84bc68dc6e
MD5 3515806a1117f79df6ef3109f679ea87
BLAKE2b-256 e06846c9d21d3c78607d3ebcabf8d5fa36ecab745a8815630419c8070da7867a

See more details on using hashes here.

Release history Release notifications | RSS feed

0.8.3

1 file

0.8.2

1 file

0.8.1

1 file

0.8.0

1 file

This release

0.7.0 This release

1 file

0.6.1

1 file

0.6.0

1 file

0.5.1

1 file

0.5.0

1 file

0.4.6

1 file

0.4.5

1 file

0.4.4

1 file

0.4.3

1 file

0.4.2

1 file

0.4.1

1 file

0.4.0

1 file

0.3.9

1 file

0.3.8

1 file

0.3.7

1 file

0.3.6

1 file

0.3.4

1 file

0.3.3

1 file

0.3.2

1 file

0.3.1

1 file

0.3.0

1 file

0.2.4

1 file

0.2.3

1 file

0.2.2

1 file

0.2.1

1 file

0.2.0

1 file

0.1.1

1 file

0.1.0

1 file

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page