Ark.jl is an archetype-based Entity Component System (ECS) for Julia. It is a port of the Go ECS Ark.
——
- Designed for performance and highly optimized.
- Well-documented, type-safe API.
- Blazing fast batch entity creation.
- No systems. Just queries. Use your own structure.
- Minimal dependencies, 100% test coverage.
Run this to add Ark.jl to a Julia project:
using Pkg
Pkg.add("Ark")Here is the classical Position/Velocity example that every ECS shows in the docs.
See the Manual, API docs and demos for more details.
using Ark
"""Position component"""
struct Position
x::Float64
y::Float64
end
"""Velocity component"""
struct Velocity
dx::Float64
dy::Float64
end
# Create a world with the required components
world = World(Position, Velocity)
for i in 1:1000
# Create an entity with components
entity = new_entity!(world, (Position(i, i * 2), Velocity(1, 1)))
end
# Time loop
for i in 1:10
# Iterate a query (archetypes)
for (entities, positions, velocities) in @Query(world, (Position, Velocity))
# Iterate entities in the current archetype
@inbounds for i in eachindex(entities)
# Get components of the current entity
pos = positions[i]
vel = velocities[i]
# Update an (immutable) component
positions[i] = Position(pos.x + vel.dx, pos.y + vel.dy)
end
end
endArk.jl and all its sources and documentation are distributed under the MIT license and the Apache 2.0 license, as your options.