Official game template catalog for Gametainer.
This repository contains the game-specific metadata that gametainer uses to
create and run containerized self-hosted game servers. Templates describe how a
game is installed, configured, launched, persisted, exposed on the network, and
checked for readiness.
The catalog is intentionally separate from the main gametainer application so
game support can evolve without requiring a new controller binary release.
catalog.yaml
index.yaml
games/
<game>/
definition.yaml
settings.spec.yaml
settings.template.yaml
catalog.yamldescribes catalog identity, compatibility, recommended image tag, release tag policy, and metadata location.index.yamllists supported games and points to each game directory.definition.yamldefines install mode, image profile, ports, persistent paths, process launch details, lifecycle steps, readiness checks, and file-backed logs.settings.spec.yamldefines user-facing settings and how they map to config files or process arguments.settings.template.yamlis the default generatedgamerconfig input for a game.
From the main gametainer repository, this catalog is expected at:
../gametainer-catalogYou can override that path with:
GAMETAINER_CATALOG_ROOT=/path/to/catalogor per command:
gametainer catalog validate --templates /path/to/catalog
gametainer games list --templates /path/to/catalog
gametainer servers create factorio my-factorio --templates /path/to/catalogThis catalog is independent of the gametainer source repository. If the
gametainer CLI is installed and available on PATH, validate this checkout
from the catalog root with:
gametainer catalog validate --templates .
gametainer catalog doctor --templates .
gametainer catalog doctor --templates . --baseline ../baseline-catalogThe included Justfile is only a convenience wrapper around the installed CLI:
just validate
just doctor
just doctor-baseline ../baseline-catalog
just games
just show factorioThe catalog should validate before template changes are merged. When reviewing a
change against another checkout, pass that checkout as --baseline; doctor will
classify medium/high-risk template changes and warn when they do not have
complete changelog release and Compatibility notes.
The current catalog schema is v1. catalog.yaml records the minimum
Gametainer version expected to consume this catalog, the recommended controller
version, and the recommended image tag for the current development channel.
CI validates the catalog with the pinned Gametainer version in
.gametainer-version, then runs gametainer update check --json against this
checkout and fails if the selected catalog schema is not supported by that
binary.
Update CHANGELOG.md whenever template behavior changes. Use the
Compatibility section for runtime support, migration policy, image profile,
portability, persistent path, or operator-impacting changes.
Catalog releases use calendar tags:
vYYYY.MM.DD
vYYYY.MM.DD.N
Use vYYYY.MM.DD for the first catalog release on a date. Use
vYYYY.MM.DD.N for same-day patches or hotfixes, for example
v2026.07.02.1.
Before tagging a release:
- Set
catalog.yamlandindex.yamlrevisionto the exact Git tag. - Move relevant
CHANGELOG.mdentries fromUnreleasedinto a matching## [vYYYY.MM.DD]or## [vYYYY.MM.DD.N]section. - Keep a
Compatibilitysubsection for runtime, migration, image profile, data-portability, persistent-path, or operator-impacting changes. - Run
gametainer catalog doctor --templates . --baseline <previous-release>.
Keep revision: local-dev while the catalog is unreleased or in normal
development.
The GitHub validation workflow also runs on v* tag pushes. Tag builds fail if
the tag does not match vYYYY.MM.DD or vYYYY.MM.DD.N, or if index.yaml
or catalog.yaml revision does not exactly match the pushed tag.
factorio: archive-based Linux dedicated server.palworld: SteamCMD Linux dedicated server.valheim: SteamCMD Linux dedicated server.vrising: SteamCMD Windows dedicated server through Wine.
Templates should keep game-specific behavior in catalog files whenever possible.
The gamer container shim and gametainer controller should remain generic.
When adding or changing a game template:
- Include source/provenance links in template metadata when available.
- Prefer normalized user-facing setting names.
- Keep defaults close to the upstream server defaults.
- Declare all required ports and persistent paths.
- Declare runtime compatibility and migration policy.
- Add readiness metadata when the server has a reliable startup signal.
- Add
runtime.logs.filesfor important game log files, especially when a game writes useful startup or runtime output to a file instead of stdout/stderr. - Update
CHANGELOG.mdwith notable template changes. - Validate the catalog before opening a pull request.
Readiness and logs are related but separate:
runtime.readinesstells Gametainer how to decide that a server is ready.runtime.logs.filestellsgamerwhich game-owned log files should be streamed or exposed through operator log commands.
If a readiness check watches a file, declare that file under
runtime.logs.files as well. Current Gametainer builds keep a fallback for
older templates, but explicit log metadata is the catalog contract going
forward.