NateTheGreatt/bitECS
NateTheGreatt/bitECS has 1,534 GitHub stars and 119 forks. GitHot measured +1 stars in 24 hours. Last checked 2026-11-06 07:15 UTC. Last push 2026-08-24.
Flexible, minimal, data-oriented ECS library for Typescript
What you can do
- 🔮 Simple, declarative API - 🍃 Lightweight (~5kb minzipped)
- 🔍 Powerful querying - 📦 Zero dependencies
- 🔗 Relational entity modeling - 🧵 Thread-friendly
- 💾 Serialization included - 💖 Made with love
Measured star growth
- in 24h
- +1
- in 7 days
- Update delayed
- in 15 days
- Update delayed
- in 1 month
- Update delayed
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
Original
❤ ❤ ❤
bitECS
Flexible, minimal, data-oriented ECS library for Typescript.
✨ Features
bitECS is a minimal, less opinionated, and powerful Entity Component System (ECS) library. It provides a lean API that enables developers to build their architecture to their liking, offering flexibility while maintaining efficiency where needed. Features include:
| 🔮 Simple, declarative API | 🍃 Lightweight (~5kb minzipped) |
| 🔍 Powerful querying | 📦 Zero dependencies |
| 🔗 Relational entity modeling | 🧵 Thread-friendly |
| 💾 Serialization included | 💖 Made with love |
💿 Install
npm i bitecs
📘 Documentation
| 🏁 Introduction |
| 💾 Serialization |
| 🧵 Multithreading |
| 📑 API Docs |
🕹 Example
import {
createWorld,
query,
addEntity,
removeEntity,
addComponent,
} from 'bitecs'
// Put components wherever you want
const Health = [] as number[]
const world = createWorld({
components: {
// They can be any shape you want
// SoA:
Position: { x: [], y: [] },
Velocity: { x: new Float32Array(1e5), y: new Float32Array(1e5) },
// AoS:
Player: [] as { level: number; experience: number; name: string }[]
},
time: {
delta: 0,
elapsed: 0,
then: performance.now()
}
})
const { Position, Velocity, Player } = world.components
const eid = addEntity(world)
addComponent(world, eid, Position)
addComponent(world, eid, Velocity)
addComponent(world, eid, Player)
addComponent(world, eid, Health)
// SoA access pattern
Position.x[eid] = 0
Position.y[eid] = 0
Velocity.x[eid] = 1.23
Velocity.y[eid] = 1.23
Health[eid] = 100
// AoS access pattern
Player[eid] = { level: 1, experience: 0, name: "Hero" }
const movementSystem = (world) => {
const { Position, Velocity } = world.components
for (const eid of query(world, [Position, Velocity])) {
Position.x[eid] += Velocity.x[eid] * world.time.delta
Position.y[eid] += Velocity.y[eid] * world.time.delta
}
}
const experienceSystem = (world) => {
const { Player } = world.components
for (const eid of query(world, [Player])) {
Player[eid].experience += world.time.delta / 1000
if (Player[eid].experience >= 100) {
Player[eid].level++
Player[eid].experience = 0
}
}
}
const healthSystem = (world) => {
for (const eid of query(world, [Health])) {
if (Health[eid] <= 0) removeEntity(world, eid)
}
}
const timeSystem = (world) => {
const { time } = world
const now = performance.now()
const delta = now - time.then
time.delta = delta
time.elapsed += delta
time.then = now
}
const update = (world) => {
timeSystem(world)
movementSystem(world)
experienceSystem(world)
healthSystem(world)
}
// Node environment
setInterval(() => {
update(world)
}, 1000/60)
// Browser environment
requestAnimationFrame(function animate() {
update(world)
requestAnimationFrame(animate)
})
🔌 Used by
🌟 Star History
Explore related projects
codecrafters-io/build-your-own-x
Master programming by recreating your favorite technologies from scratch.
560,452 starspublic-apis/public-apis
A collective list of free APIs
496,767 starsmorluto/rea
Reverse engineer anything with agents, from app behavior down to native binaries.
438,168 starsopenclaw/openclaw
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
394,078 stars