Skip to content

Installation

golem-engine has two parts to install: the golem-bake CLI that generates code from your schemas, and the runtime packages your project imports. Server projects need the CLI plus the Go runtime; client projects add the runtime for whichever language or engine they target.

  • Go 1.25.4 or newer for the CLI and any Go server or client.
  • Node.js (current LTS) and npm if you are building a browser client with the JavaScript runtime.
  • A working go toolchain on your PATH. go install binaries land in $(go env GOBIN) (or $(go env GOPATH)/bin), so make sure that directory is on your PATH too.

golem-engine is open source. The code, issue tracker, and tagged releases live on GitHub:

Install the golem-bake binary with Go’s toolchain. Run this once and it lands on your PATH:

Terminal window
go install github.com/demiurgos-hub/golem-engine/cmd/golem-bake@latest

Verify it’s available:

Terminal window
golem-bake
# usage: golem-bake

The only command is golem-bake. Run it from your project root whenever schemas change.

Add the runtime as a module dependency in your game server:

Terminal window
go get github.com/demiurgos-hub/golem-engine

Your server imports the golem package:

import "github.com/demiurgos-hub/golem-engine/golem"

Generated go-server code imports the same package internally; the golem_import key in golem.yaml tells generated files where to find it (defaults to github.com/demiurgos-hub/golem-engine/golem, so no change is needed unless you re-export it).

If you’re building a browser client, add the JS runtime package:

Terminal window
npm install golem-engine

Generated js-client code imports from this package. The golem_import key under js-client in golem.yaml controls the specifier (defaults to golem-engine).

If you’re building a Go client or an Ebiten game, add the Go client runtime:

Terminal window
go get github.com/demiurgos-hub/golem-engine/golem-go-client

Generated go-client code imports from this package by default. Ebiten games also use the Ebiten helper package and Ebiten itself:

Terminal window
go get github.com/demiurgos-hub/golem-engine/golem-ebiten
go get github.com/hajimehoshi/ebiten/v2

Physics and navigation backends (optional)

Section titled “Physics and navigation backends (optional)”

Physics and navigation are pluggable, and their backends ship as separate modules you add only when you need them. For example, the grid pathfinders are pulled in on demand:

Terminal window
go get github.com/demiurgos-hub/golem-engine/golem/nav/pathing
# or
go get github.com/demiurgos-hub/golem-engine/golem/nav/kelindar

You wire these into the server through SetNavBackend and the physics world API. See Navigation backends and the Physics overview for which module to pick and how to connect it.

With the CLI and runtime in place:

  1. Create golem.yaml and at least one entity schema, then run golem-bake. Typical workflow walks through that loop and a sample project layout; the golem.yaml reference lists every key.
  2. Wire golem.Server through the generated integration and call Run. See Minimal server wiring.