Skip to content

Compatibility

Pixnop edited this page Jul 13, 2026 · 4 revisions

Compatibility

Verdict table

Empirical results from the version compatibility sweep (.github/workflows/compat.yml), which builds Atlas against each game version's own dlls and runs the full E2E suite on a real embedded server:

Version Status Notes
1.22.3 Compatible All E2E scenarios green, tested on every push
1.22.2 Compatible All E2E scenarios green, tested on every push
1.22.1 Compatible All E2E scenarios green, tested on every push
1.22.0 Compatible All E2E scenarios green, tested on every push
1.21.7 Compatible All E2E scenarios green, tested on every push (the CI-verified 1.21 version)
1.20.12 Best effort Full E2E suite green when rebuilt against its dlls; verified on the weekly sweep, not per push
1.19.8 Not supported Rejected at boot: ServerMain.PreLaunch and the ServerProgramArgs boot signature differ beyond what the shim bridges
1.18.15 Not supported Rejected at boot: same as above, plus Vintagestory.API.Common.Func collides with System.Func

Each row is the latest patch of its minor available on the stable CDN; 1.18.0 through 1.18.7 predate the game's .NET migration and ship under a different server archive entirely. The supported floor is Vintage Story 1.21.0 since Atlas 0.9.0 (issue #15): the entire compile-level gap below 1.22 was the server exit lifecycle, now owned by the runtime shim EngineCompat (exit-state field, Stop signature, network version read from the loaded engine's metadata), boot-validated fail-fast on engines whose layout drifted.

Below the floor

For 1.19.x and older, the boot API changes shape beyond what reflection can reasonably bridge (ServerMain.PreLaunch, the ServerProgramArgs signature), so Atlas rejects those versions up front with an AtlasSetupException citing the floor. One caveat below 1.22: the verified flow rebuilds Atlas against the target install's own dlls (the documented VINTAGE_STORY flow); running the prebuilt NuGet binaries on an older engine is designed for but has no CI lane yet.

How the weekly sweep works

.github/workflows/compat.yml runs on a schedule (cron: "0 6 * * 1", every Monday) across a matrix of Vintage Story versions. For each version:

  1. Download and cache that version's Linux server archive from the Vintage Story CDN.
  2. dotnet build Atlas.slnx -c Release against that version's dlls (continue-on-error: true, so a failure here does not abort the workflow, only that version's leg).
  3. If the build succeeded, run Atlas.Engine.Tests and Sample.Scenarios, both filtered to Category=E2E (also continue-on-error: true).
  4. Compute a verdict per version: compatible (build and both E2E suites passed), incompatible (API) (build failed), or partial (build succeeded but at least one E2E suite failed), with a short note naming which suite failed for partial.
  5. An aggregate job collects every version's verdict artifact and renders a consolidated table into the workflow's step summary.

Running it manually

Trigger a sweep on demand from the Actions tab (workflow_dispatch), or from the CLI:

gh workflow run compat.yml --repo Pixnop/Atlas

workflow_dispatch accepts an optional versions input (space- or comma-separated) to sweep a custom set of versions instead of the default matrix (1.18.15, 1.19.8, 1.20.12, 1.21.7, 1.22.0, 1.22.1, 1.22.2, 1.22.3):

gh workflow run compat.yml --repo Pixnop/Atlas -f versions="1.22.0,1.22.3"

Clone this wiki locally