Skip to main content

Tecnologías

Stack técnico de Xindeler. Todas las dependencias son open source.

Lenguaje

Rust (nightly)

El juego y el servidor están escritos 100% en Rust. Se usa el canal nightly porque el proyecto depende de features del compilador que aún no se estabilizaron (principalmente portable_simd y algunas macros procedurales).

El canal exacto requerido está fijado en rust-toolchain.toml en la raíz del repo.


Servidor

specs — ECS

specs es el framework de Entity Component System. Permite paralelizar sistemas automáticamente usando rayon cuando sus conjuntos de componentes no se solapan.

Quinn — QUIC transport

Quinn implementa el protocolo QUIC (RFC 9000) en Rust. El protocolo de juego corre sobre QUIC en lugar de TCP porque:

  • Multiplexing de streams sin head-of-line blocking
  • Reconexión más rápida ante pérdida de paquetes
  • Mejor comportamiento en redes móviles y con NAT

MessagePack — Persistencia

El estado del mundo (rtsim/data.dat) se serializa con MessagePack vía la crate rmp-serde. Es un formato binario compacto y rápido, compatible con serde. No hay base de datos relacional.

RON — Assets y configuración

RON (Rusty Object Notation) es el formato de texto para definir ítems, habilidades, criaturas, recetas y configuración del servidor. Es similar a JSON pero con soporte nativo para tipos Rust (enums con variantes, structs con nombres de campo).

Ejemplo de un ítem en RON:

ItemDef(
name: "Espada de Hierro",
kind: Sword(
equip_slot: Mainhand,
power: 12.0,
speed: 1.2,
),
quality: Common,
)

Cliente (Voxygen)

wgpu — Renderizado

wgpu es una abstracción de GPU que implementa el estándar WebGPU. Soporta múltiples backends:

Sistema operativoBackend
LinuxVulkan
macOSMetal
WindowsDirectX 12 / Vulkan
FallbackOpenGL (vía WGPU_BACKEND=gl)

El pipeline de renderizado renderiza chunks de vóxeles con LOD (nivel de detalle) dinámico.

egui — UI

egui maneja la interfaz de usuario del cliente: HUD, inventario, menús, ventanas de diálogo. Es una UI inmediata (immediate mode) — no hay árbol de widgets persistente.

rodio / CPAL — Audio

El sistema de audio usa rodio sobre CPAL para reproducción de música ambiental, efectos de sonido y en el futuro las voces generadas por AURORA.


Web (proceso separado)

FastAPI (Python)

El proceso web está escrito en Python con FastAPI. Expone tres endpoints REST para la lista de espera, el formulario de contribuidores, y el estado del servidor. No tiene acceso al estado del juego — consulta el servidor de juego vía un endpoint de status interno.


DevOps

HerramientaUso
GitHub ActionsCI (build + clippy + tests) y CD (rsync al VPS)
rsyncDeploy de assets estáticos al VPS
nginxReverse proxy para los sitios web (landing, wiki, docs)
certbotCertificados TLS automáticos

Dependencias notables

CratePropósito
serdeSerialización/deserialización
tokioRuntime async para el servidor
rayonParalelismo de datos (sistemas ECS)
vekTipos matemáticos (Vec2, Vec3, Mat4)
imageCarga de texturas
tracingLogging estructurado