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
2026-08-04 00:34:07 +02:00
.github ci(workspace): extract inline run steps to script files 2026-08-04 00:34:07 +02:00
assets feat(assets): size and tint debug raster passes in the vertex shader 2026-07-27 21:36:14 +02:00
crates perf(server): budget per-tick chunk delivery 2026-08-02 22:58:31 +02:00
docs docs(workspace): index the new notes and refresh chunk streaming 2026-08-03 03:12:56 +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(workspace): remove remaining em-dashes from gitattributes and tooling 2026-06-28 03:29:49 +02:00
.gitignore chore(workspace): ignore tmp/ scratch specs 2026-07-11 23:52:20 +02:00
AGENTS.md docs(workspace): standardize function doc sections and enforce # Errors 2026-07-13 21:09:27 +02:00
Cargo.lock feat(client): accumulate frame and host statistics 2026-08-01 23:18:52 +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): replace em-dashes with plain punctuation across docs 2026-06-28 03:19:59 +02:00
CONTRIBUTING.md docs(workspace): add CONTRIBUTING.md and CLA 2026-07-09 16:05:31 +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

Technical, implementation-facing documentation for the Synvael engine. This directory is the code-side counterpart to the game-design specification; it describes how subsystems are built, not what the game should feel like.

How documentation is layered

Documentation lives at three altitudes. Each layer answers a different question, and content is kept at the layer it belongs to so that no single file accretes everything.

Layer Location Answers Churn
Project conventions AGENTS.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

The rule that keeps AGENTS.md lean: if a piece of documentation is specific to one subsystem, it does not go in AGENTS.md. It goes in that subsystem's module docs or a docs/<subsystem>.md note, and AGENTS.md only links to it. AGENTS.md is an index and a rulebook, not a container for feature specs.

Where to put a new piece of documentation

  • A rule true across the whole project (a convention, an invariant) → AGENTS.md.
  • How one subsystem is implemented → prefer Rust module docs next to the code (//! at the top of the module). They cannot drift far from the code and render with cargo doc.
  • Cross-file technical design too large for a doc comment (e.g. the rendering frame graph, the network protocol, the worldgen pipeline) → a docs/<subsystem>.md note.
  • The reasoning behind a specific, hard-to-reverse choice → an ADR in docs/adr/.

Relationship to the design specification

The canonical design specification (intent, world rules, gameplay-system behaviour, and unresolved questions) is maintained separately and is not part of this repository. This docs/ tree records how the engine implements those designs.

Each subsystem note should name the design topic it implements (by title, e.g. "Design source: Worldgen"), so the trail from intent to implementation exists without coupling the repository to an external location. When the implementation and the design disagree, surface the disagreement rather than silently resolving it in code.

Index

Subsystem notes:

  • packs.md: data packs & resource packs (load order, layout, resolution).
  • rendering.md: rendering & coordinate gotchas (Vulkan clip space, Blender/glTF import).
  • chunk_streaming.md: chunk streaming and 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.

Further subsystem notes are added here as systems are implemented and locked.