Skip to main content

File structure

Map of the Rust workspace. Xindeler is a Cargo workspace with multiple crates.

Main tree​

xindeler/
β”œβ”€β”€ Cargo.toml # Workspace root β€” lists all members
β”œβ”€β”€ rust-toolchain.toml # Pins the exact nightly channel
β”œβ”€β”€ .cargo/config.toml # Linker configuration and flags
β”‚
β”œβ”€β”€ common/ # Types and logic shared between client and server
β”œβ”€β”€ common_net/ # Shared network types (protocol messages)
β”œβ”€β”€ common_systems/ # Reusable ECS systems
β”‚
β”œβ”€β”€ server/ # Server binary (xindeler-server)
β”œβ”€β”€ client/ # Client library (not the binary β€” just the logic)
β”œβ”€β”€ voxygen/ # Graphical client binary
β”‚
β”œβ”€β”€ world/ # World generation (terrain, sites, dungeons)
β”œβ”€β”€ rtsim/ # Real-time world simulation (persistent state)
β”‚
β”œβ”€β”€ assets/ # Game assets (RON, PNG, OGG, GLSL)
└── server-cli/ # CLI wrapper for the server

Crates in detail​

common/​

The heart of the project. Defines all the game's data types:

  • ECS components: Health, Energy, Pos, Vel, Stats, Inventory, Body
  • Item, ability, and buff effect definitions
  • Terrain and chunk types
  • Pure combat logic (no side effects β€” makes testing easier)

Both the server and the client depend on common. It never depends on server or voxygen.

server/​

The xindeler-server binary. Contains:

  • The server's main loop with tokio
  • Connection handling (Quinn/QUIC)
  • All the server's ECS systems: combat, physics, AI, economy
  • Integration with rtsim, ORACLE, and AURORA
  • Admin commands (/give, /time, /oracle, etc.)

voxygen/​

The graphical client. Contains:

  • Rendering pipeline with wgpu (voxel chunks, water, sky, shadows)
  • UI with egui
  • Audio system with rodio
  • Input handling
  • Client prediction logic (entity interpolation)

world/​

Procedural world generation:

  • Terrain generation (heightmaps, biomes, erosion)
  • Site placement (cities, caves, ruins)
  • Dungeon generation
  • Creature spawn tables per biome

This crate is used by the server when generating the world for the first time, and also by rtsim for terrain queries.

rtsim/​

The real-time world simulation module:

  • Persistent NPC state (position, faction, relationships, inventory)
  • Site and faction state
  • Long-term NPC pathfinding
  • Serialization/deserialization to data.dat (MessagePack)
  • The foundation that ORACLE and AURORA run on

assets/​

Game assets organized by type:

assets/
β”œβ”€β”€ common/
β”‚ β”œβ”€β”€ items/ # RON definitions for items (weapons, armor, consumables)
β”‚ β”œβ”€β”€ abilities/ # RON definitions for abilities and combos
β”‚ β”œβ”€β”€ recipe_book/ # Crafting recipes in RON
β”‚ └── loot_tables/ # Loot tables in RON
β”œβ”€β”€ voxygen/
β”‚ β”œβ”€β”€ shaders/ # GLSL/WGSL shaders
β”‚ β”œβ”€β”€ audio/ # Music (OGG) and sound effects
β”‚ └── element/ # UI textures and assets
└── world/
└── manifests/ # Biome and site configuration

Naming conventions​

PatternMeaning
*_sys.rsECS system (implements System)
*_comp.rsComponent definitions
*_event.rsServer event types
*.ronGame asset (item, ability, creature, recipe)
data.datPersistent world state (MessagePack)
chronicle/*.jsonlWorld event log (rotated by size)

Where to start based on your task​

TaskWhere to look
Add an itemassets/common/items/ + common/src/comp/item/
Add an abilityassets/common/abilities/ + common/src/comp/ability.rs
Add an NPCassets/world/ + server/src/rtsim/
Change combat mechanicscommon/src/combat.rs + server/src/sys/combat.rs
Change the UIvoxygen/src/hud/
Change terrain generationworld/src/