Awesome Go

Ark

CategoryGame Development
SubcategoryGame Development
Stars0

Archetype-based Entity Component System (ECS) for Go

About Ark

Test status codecov Go Report Card User Guide Go Reference GitHub DOI:10.5281/zenodo.14994239 MIT license Apache 2.0 license Mentioned in Awesome Go

Ark is an archetype-based Entity Component System (ECS) for Go.

——

Features   •   Installation   •   Usage   •   Tools

Features

Installation

To use Ark in a Go project, run:

go get github.com/mlange-42/ark

Usage

Below is the classical Position/Velocity example that every ECS shows in the docs.

See the User Guide, API docs and examples for details.

package main

import (
	"math/rand/v2"
	"github.com/mlange-42/ark/ecs"
)

// Position component
type Position struct {
	X, Y float64
}

// Velocity component
type Velocity struct {
	DX, DY float64
}

func main() {
	// Create a new World
	world := ecs.NewWorld()

	// Create a component mapper
	// Save mappers permanently and re-use them for best performance
	mapper := ecs.NewMap2[Position, Velocity](world)

	// Create entities with components
	for range 1000 {
		_ = mapper.NewEntity(
			&Position{X: rand.Float64() * 100, Y: rand.Float64() * 100},
			&Velocity{DX: rand.NormFloat64(), DY: rand.NormFloat64()},
		)
	}

	// Create a filter
	// Save filters permanently and re-use them for best performance
	filter := ecs.NewFilter2[Position, Velocity](world)

	// Time loop
	for range 5000 {
		// Get a fresh query and iterate it
		query := filter.Query()
		for query.Next() {
			// Component access through the Query
			pos, vel := query.Get()
			// Update component fields
			pos.X += vel.DX
			pos.Y += vel.DY
		}
	}
}

Tools

  • ark-serde provides JSON serialization and deserialization for Ark's World.
  • ark-tools provides systems, a scheduler, and other useful stuff for Ark.
  • ark-pixel provides OpenGL graphics and live plots via the Pixel game engine.

Cite as

Lange, M. & contributors (2025): Ark – An archetype-based Entity Component System for Go. DOI: 10.5281/zenodo.14994239, GitHub repository: https://github.com/mlange-42/ark

License

Ark and all its sources and documentation are distributed under the MIT license and the Apache 2.0 license, as your options.

Frequently Asked Questions

What is Ark?

Ark is a Game Development library for the Go programming language. Archetype-based Entity Component System (ECS) for Go

How do I install Ark?

Install Ark with the Go module system using `go get mlange-42/ark`. Check the repository for the current installation instructions.

What category does Ark belong to?

Ark is listed under Game Development, specifically Game Development.

← Back to Game Development