A fast, portable Entity Component System for Luau. https://ukendio.github.io/jecs/
Find a file
2025-03-12 21:08:14 +01:00
.github Bump analysis.yaml 2025-02-02 19:06:11 -05:00
assets Cleanup repository 2024-11-23 04:42:54 +01:00
benches Devtools initial commit 2025-03-12 15:30:56 +01:00
demo Devtools initial commit 2025-03-12 15:30:56 +01:00
docs Add comprehensive documentation for jecs library 2025-02-25 05:04:54 +03:00
examples Modify example 2025-02-05 22:26:12 +01:00
test Add options to lifetime tracker 2025-03-12 18:49:18 +01:00
thesis Add tests for scheduler example 2024-08-21 01:59:25 +02:00
tools Add options to lifetime tracker 2025-03-12 18:49:18 +01:00
.gitignore Devtools initial commit 2025-03-12 15:30:56 +01:00
.luaurc Add entity visualiser 2025-03-12 16:30:19 +01:00
.prettierrc Update ts type definitions (#142) 2024-10-12 03:45:37 +02:00
bench.project.json Update changelog 2024-11-23 20:52:01 +01:00
CHANGELOG.md Fix types (#190) 2025-02-14 10:51:30 +01:00
default.project.json Cleanup repository 2024-11-23 04:42:54 +01:00
demo.rbxl decouple start 2024-09-08 19:45:49 +02:00
jecs.d.ts Change TS types for Archetype 2025-03-02 01:24:53 +01:00
jecs.luau Add options to lifetime tracker 2025-03-12 18:49:18 +01:00
LICENSE Create LICENSE 2024-06-11 21:06:27 +02:00
mirror.luau Cleanup repository 2024-11-23 04:42:54 +01:00
mkdocs.yml Add comprehensive documentation for jecs library 2025-02-25 05:04:54 +03:00
package.json Change TS types for Archetype 2025-03-02 01:24:53 +01:00
README.md Add comprehensive documentation for jecs library 2025-02-25 05:04:54 +03:00
rokit.toml fix(ci): stylua ci failing (#158) 2024-11-22 22:14:10 +01:00
selene.toml Fix style and add some micro optimizations (#27) 2024-05-05 01:52:01 +02:00
stress.project.json Add stress test 2025-02-15 21:57:30 +01:00
stylua.toml fix(ci): stylua ci failing (#158) 2024-11-22 22:14:10 +01:00
testez.d.luau Rename files to luau (#54) 2024-06-24 03:20:43 +02:00
tsconfig.json Update roblox-ts 2024-10-21 19:31:51 +02:00
wally.toml Bump 2025-03-01 20:16:26 +01:00

License: MIT Wally

Just a stupidly fast Entity Component System

  • Entity Relationships as first class citizens
  • Iterate 800,000 entities at 60 frames per second
  • Type-safe Luau API
  • Zero-dependency package
  • Optimized for column-major operations
  • Cache friendly archetype/SoA storage
  • Rigorously unit tested for stability

Example

local world = jecs.World.new()
local pair = jecs.pair

-- These components and functions are actually already builtin
-- but have been illustrated for demonstration purposes
local ChildOf = world:component()
local Name = world:component()

local function parent(entity)
    return world:target(entity, ChildOf)
end
local function getName(entity)
    return world:get(entity, Name)
end

local alice = world:entity()
world:set(alice, Name, "alice")

local bob = world:entity()
world:add(bob, pair(ChildOf, alice))
world:set(bob, Name, "bob")

local sara = world:entity()
world:add(sara, pair(ChildOf, alice))
world:set(sara, Name, "sara")

print(getName(parent(sara)))

for e in world:query(pair(ChildOf, alice)) do
    print(getName(e), "is the child of alice")
end

-- Output
-- "alice"
-- bob is the child of alice
-- sara is the child of alice

21,000 entities 125 archetypes 4 random components queried. Queries Can be found under /benches/visual/query.luau

Inserting 8 components to an entity and updating them over 50 times. Insertions Can be found under /benches/visual/insertions.luau

Installation

Using Wally

Add jecs to your wally.toml file:

[dependencies]
jecs = "ukendio/jecs@0.1.0"

Then run wally install in your project directory.

Manual Installation

Download the latest release from the releases page.

Documentation

For complete documentation, visit our documentation site.

Contributing

Contributions are welcome. Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.