# Getting Started ## Installation ### Installing Standalone Navigate to the [releases page](https://github.com/Ukendio/jecs/releases) and download `jecs.rbxm` from the assets. ![jecs.rbxm](rbxm.png) ### Using Wally Add the following to your wally configuration: ::: code-group ```toml [wally.toml] jecs = "ukendio/jecs@0.2.3" ``` ::: ### Using npm (roblox-ts) Use one of the following commands on your root project directory: ::: code-group ```bash [npm] npm i https://github.com/Ukendio/jecs.git ``` ```bash [yarn] yarn add https://github.com/Ukendio/jecs.git ``` ```bash [pnpm] pnpm add https://github.com/Ukendio/jecs.git ``` ::: ## Example Usage ::: code-group ```luau [Luau] local world = jecs.World.new() local pair = jecs.pair local Wildcard = jecs.Wildcard local Name = world:component() local function getName(e) return world:get(e, Name) end local Eats = world:component() -- Relationship objects local Apples = world:component() -- components are entities, so you can add components to components world:set(Apples, Name, "apples") local Oranges = world:component() world:set(Oranges, Name, "oranges") local bob = world:entity() -- Pairs can be constructed from two entities world:set(bob, pair(Eats, Apples), 10) world:set(bob, pair(Eats, Oranges), 5) world:set(bob, Name, "bob") local alice = world:entity() world:set(alice, pair(Eats, Apples), 4) world:set(alice, Name, "alice") for id, amount in world:query(pair(Eats, Wildcard)) do -- get the second target of the pair local food = world:target(id, Eats) print(string.format("%s eats %d %s", getName(id), amount, getName(food))) end -- Output: -- bob eats 10 apples -- bob eats 5 pears -- alice eats 4 apples ``` ```ts [Typescript] import { Wildcard, pair, World } from "@rbxts/jecs" const world = new World() const Name = world.component() function getName(e) { return world.get(e, Name) } const Eats = world.component() // Relationship objects const Apples = world.component() // components are entities, so you can add components to components world.set(Apples, Name, "apples") const Oranges = world.component() world.set(Oranges, Name, "oranges") const bob = world.entity() // Pairs can be constructed from two entities world.set(bob, pair(Eats, Apples), 10) world.set(bob, pair(Eats, Oranges), 5) world.set(bob, Name, "bob") const alice = world.entity() world.set(alice, pair(Eats, Apples), 4) world.set(alice, Name, "alice") for (const [id, amount] of world.query(pair(Eats, Wildcard))) { // get the second target of the pair const food = world:target(id, Eats) print(string.format("%s eats %d %s", getName(id), amount, getName(food))) } // Output: // bob eats 10 apples // bob eats 5 pears // alice eats 4 apples ```