This is the maintained classic Atrinik game implementation in one monorepo. It combines the complete, path-preserving histories of the former client, server, editor, libatrinik, and protocol repositories so coordinated maintenance can happen in one branch and pull request.
The next-generation MIT implementation remains in separate repositories. Consolidating Atrinik Classic does not change that direction or this repository's GPL-2.0-or-later distribution terms. Those terms are not a blanket outbound reuse ban. Under the canonical provenance policy, an MIT destination may inspect exact, independently separable material as source reference, copy it, migrate or port it, translate or adapt it, or relicense it only after the canonical audit proves each selected contribution is the applicable named grantor's original work. Each contribution must be solely authored by that grantor and fall within the row's temporal scope. Distinct contributions may cite different rows only when each independently satisfies one row. Rows cannot be combined to cover jointly authored contributions, generated output, or inseparable mixed work. Later material needs contemporaneous compatible permission. This does not change the source license here or approve a GPL dependency or bundle.
| Path | Ownership |
|---|---|
client/ |
SDL3 C17 graphical client |
server/ |
C17 game server and classic scripting runtime |
editor/ |
Gridarta packaging utility |
libatrinik/ |
Shared C17 libraries |
protocol/ |
Classic command schema and bindings |
Authored maps and gameplay content remain in
atrinik/content. Classic builds select
the immutable classic runtime target derived from main; replacement
development consumes the corresponding main target. Sound and resources also
remain external so both implementations can consume compatible releases.
Use the thin atrinik/atrinik wrapper. A
normal initialization clones replacement development only; add classic
explicitly when needed:
./atrinik init --with classic
./atrinik status
./atrinik topology show classicCreate a full monorepo worktree for coordinated work:
./atrinik worktree create classic my-change --branch feat/my-change
./atrinik profile create my-change --from classic
./atrinik profile set my-change classic --worktree my-change
./atrinik build server --profile my-change --test
./atrinik build client --profile my-change --test./atrinik build all --profile my-change --test uses the supported integrated
CMake graph. That graph configures protocol/ and libatrinik/ once, then
links the client and server to the same Atrinik::Protocol and
Atrinik::Core targets. The root presets expose equivalent native builds:
cmake --preset linux-debug
cmake --build --preset linux-debug
ctest --preset linux-debugThe linux-release, linux-coverage, and linux-sanitizers root presets use
the same graph. Shared warning, coverage, sanitizer, and precompiled-header
options are explicit across both consumers. Use
ATRINIK_CLIENT_ENABLE_PRECOMPILED_HEADERS and
ATRINIK_SERVER_ENABLE_PRECOMPILED_HEADERS to control the target-scoped PCH
policies independently. Coverage and sanitizers are rejected together because
they would request incompatible instrumentation;
the coverage preset disables precompiled headers to retain the conventional
diagnostic path. Consumer-specific behavior such as ENABLE_PYTHON_PLUGIN
remains scoped to its target. The component presets in client/, server/,
and libatrinik/ remain the supported standalone, packaging, and
installed-consumer paths.
See CONTRIBUTING.md, docs/ARCHITECTURE.md,
and the nearest component AGENTS.md before editing.
The import rewrote each source history below its destination path, so ordinary path history remains useful:
git log --follow -- client/src/client/main.c
git log --follow -- server/src/server/main.cOriginal-to-rewritten commit maps and verification instructions are in docs/history/README.md. The former repositories remain available as read-only release and closed-issue archives.
After the documented post-merge rehearsal and activation step, one successful
Classic validation result on main drives the complete repository through
semantic-release. The first unified version is v5.6.0; later tags remain on
the unprefixed v5.x.x line and are derived from the squash-merge title.
Source archives, the protocol wheel, portable Windows packages, SPDX,
checksums, locked runtime-input evidence, attestations, and
ghcr.io/atrinik/classic-server are built from the same commit. See
docs/RELEASING.md for the artifact,
digest-pinned durable dependency bundle, offline rehearsal, recovery, and
rollback contracts.