Voxel RPG and survival sandbox in a medieval fantasy world bound by twelve elements and unravelled by a thirteenth. Rust + Vulkan engine, Lua-moddable gameplay, server-authoritative QUIC multiplayer.
Find a file
Serkyo 29372fd184
All checks were successful
CI / Rust Check & Lint (push) Successful in 32m22s
CI / Rust Tests (push) Successful in 33m5s
CI / Lua Lint & Format (push) Successful in 7s
CI / LFS Pointer Guard (push) Successful in 6s
ci(workspace): fix OOM crashes and stylua auth error
2026-08-07 02:02:49 +02:00
.forgejo ci(workspace): fix OOM crashes and stylua auth error 2026-08-07 02:02:49 +02:00
assets feat(renderer): fade distant geometry into the sky colour 2026-08-05 01:29:06 +02:00
crates fix(renderer): align mesher vertex placement with floor() block convention 2026-08-05 04:19:23 +02:00
docs docs(workspace): rewrite the subsystem notes and ADRs 2026-08-06 22:52:57 +02:00
mods/example_mod chore(workspace): add SPDX identifiers to source files 2026-05-17 21:06:39 +02:00
tools chore(workspace): remove remaining em-dashes from gitattributes and tooling 2026-06-28 03:29:49 +02:00
.gitattributes chore(renderer): compile shaders at build time 2026-08-04 02:41:33 +02:00
.gitignore chore(workspace): ignore the headroom MCP marker file 2026-08-06 22:52:57 +02:00
AGENTS.md docs(workspace): split contributor guidance from agent rules 2026-08-06 22:52:57 +02:00
Cargo.lock chore(renderer): compile shaders at build time 2026-08-04 02:41:33 +02:00
Cargo.toml feat(client): accumulate frame and host statistics 2026-08-01 23:18:52 +02:00
CLA.md docs(workspace): add CONTRIBUTING.md and CLA 2026-07-09 16:05:31 +02:00
CLAUDE.md docs(workspace): split contributor guidance from agent rules 2026-08-06 22:52:57 +02:00
CONTRIBUTING.md docs(workspace): split contributor guidance from agent rules 2026-08-06 22:52:57 +02:00
DEVELOPMENT.md docs(workspace): split contributor guidance from agent rules 2026-08-06 22:52:57 +02:00
LICENSE.md docs(workspace): fix comma splice in license asset note 2026-06-28 03:29:49 +02:00
rustfmt.toml chore(workspace): configure linters and format codebase 2026-05-12 11:43:17 +02:00
selene.toml fix(workspace): remove std from selene to avoid feature errors 2026-05-12 12:30:52 +02:00
stylua.toml chore(workspace): configure linters and format codebase 2026-05-12 11:43:17 +02:00

Documentation

This is the technical, implementation-facing documentation for Synvael. You can think of this directory as the code-side counterpart to the game-design specification. It describes exactly how subsystems are built under the hood, not what the game should feel like to play.

How documentation is layered

Our documentation lives at three different altitudes. Each layer answers a distinct type of question, and we keep content strictly at the layer it belongs to. This ensures no single file turns into an unreadable monolith.

Layer Location Answers Churn
Project conventions DEVELOPMENT.md "What rules apply no matter which feature I touch?" Slow, a finite set of cross-cutting invariants
Subsystem technical docs this docs/ tree + Rust module docs (//!, ///) "How does this subsystem work?" Grows with features, distributed across files
Architecture decisions docs/adr/ "Why was this chosen over the alternatives?" Append-only, one file per decision

We use a strict rule to keep DEVELOPMENT.md lean: if a piece of documentation is specific to only one subsystem, it does not go in DEVELOPMENT.md. It belongs in that subsystem's module docs or a docs/<subsystem>.md note, and DEVELOPMENT.md only links to it. DEVELOPMENT.md is an index and a rulebook, not a dumping ground for feature specs.

Where to put a new piece of documentation

Not every subsystem gets a dedicated document. You should default to using module documentation unless the technical design spans across multiple modules.

  • A rule that is true across the whole project (like a convention or an invariant) goes in DEVELOPMENT.md.
  • How a specific subsystem is implemented belongs in Rust module docs right next to the code (//! at the top of the module). These docs can't drift far from the code and they render cleanly with cargo doc.
  • Cross-file technical designs that are just too large for a doc comment (like the rendering frame graph, the network protocol, or the worldgen pipeline) get a dedicated docs/<subsystem>.md note.
  • The reasoning behind a specific, hard-to-reverse choice becomes an ADR in docs/adr/.

Relationship to the design specification

The canonical design specification (which covers intent, world rules, gameplay-system behavior, and unresolved questions) is maintained entirely separately and is not part of this repository. This docs/ tree exists strictly to record how the engine implements those designs.

To maintain the link between intent and implementation, each subsystem note should explicitly name the design topic it implements (by title, like "Design source: Worldgen"). This lets us trace the path from design to code without tightly coupling the repository to an external location. If the implementation and the design ever diverge, make sure to document that discrepancy clearly in the relevant subsystem note or ADR, rather than just silently resolving it in code.

Index

Subsystem notes:

  • packs.md: Data packs and resource packs (load order, layout, resolution).
  • rendering.md: Rendering and coordinate gotchas (Vulkan clip space, Blender/glTF import).
  • chunk_streaming.md: Chunk streaming and the async worker pipeline.
  • meshing.md: Greedy meshing, the mesh worker pool, and frustum culling.
  • diagnostics.md: Runtime statistics collection and the debug panel.
  • save_format.md: Chunk persistence, region-file layout, save actor, and load pipeline.

We will add further subsystem notes here as those systems are implemented and locked down.