koota
Koota ECS
Use Koota for data-oriented Entity Component System architecture with React bindings.
When setting up or undertaking important changes with Koota, fetch the documentations:
https://raw.githubusercontent.com/pmndrs/koota/refs/heads/main/README.md
Technique
Define traits (components) with trait(), create a world, spawn entities with traits, and query entities in systems. Use useQuery to reactively render entities and useTraitEffect to respond to trait changes.
Key Concepts
trait()defines component schemas with default valuesworld.spawn()creates entities with traitsworld.query()finds entities matching traitsuseQuery()hook for reactive entity lists in ReactuseTraitEffect()for responding to trait changes without re-rendering- Systems are React components that use
useFrameto update entities (they returnnull, not views)
Usage
const Position = trait({ x: 0, y: 0 })
const IsCharacter = trait()
const world = createWorld()
// Spawn
world.spawn(Position({ x: 1, y: 2 }), IsCharacter)
// Query in system
world.query(Position).updateEach(([position]) => {
position.x += 0.01
})
// React component
const characters = useQuery(Position, IsCharacter)
This skill is part of verekia's r3f-gamedev.
More from verekia/r3f-gamedev
smooth-interpolation
Animate values smoothly using exponential decay instead of linear interpolation.
12ui-useframe
Sync UI elements outside the Canvas with the render loop using R3F v10's external useFrame.
8r3f-setup
Set up a React Three Fiber project with WebGPU support.
7reactive-polling
Poll for changes to any value and trigger React re-renders when it changes.
7miniplex
Use Miniplex for minimalistic Entity Component System with TypeScript support.
6bone-attachment
Attach meshes to bones of a skinned mesh, such as attaching a sword to a character's hand.
6