Frontend — Rust + Bevy
| Technology | Role | Rationale |
|---|
| Rust | Primary language | Type safety, performance, shared with backend |
| Bevy 0.15+ | Game engine | ECS maps naturally to zones/species/events; WASM target |
| bevy_ecs_tilemap | Tilemaps | Industry standard for top-down 2D in Bevy |
| bevy_asset_loader | Asset pipeline | Clean loading states, hot-reload support |
| bevy_ui / egui | UI | egui for rapid prototyping; migrate to bevy_ui for polish |
| WASM | Web target | cargo build --target wasm32-unknown-unknown |
Important: Always check crates.io/crates/bevy for the latest version before starting a new project. Bevy releases breaking changes frequently — pin the version and upgrade deliberately.
Backend — Rust + Axum (Phase 3+)
| Technology | Role | Rationale |
|---|
| Axum | HTTP + WebSocket server | Async, composable, Tokio-native |
| Tokio | Async runtime | Standard for Rust async |
| SQLx + PostgreSQL | Primary database | Compile-time checked queries, async |
| Redis | Cache + pub/sub | Session cache; ecosystem event broadcasting |
| MinIO | Asset storage | Self-hostable S3-compatible; sprites, AI variants |
| nginx | Reverse proxy | TLS termination, routing |
MVP Storage — SQLite (local)
For Phase 0–2 (offline-first):
- SQLite via
sqlx (sqlite feature)
- Stores: player data, inventory, caught Faerals, Codex entries, ecosystem state
- Migration path to PostgreSQL when Phase 3 online mode is introduced
Wiki
- Docusaurus 3 in
/wiki
- Deployed on the developer's homelab (ZTNA/mTLS protected)
- CI/CD: push to main → auto-deploy
- Docs live in the same repo as code (
/wiki/docs/)
| Phase | Platform |
|---|
| MVP | Desktop (Linux, Windows, macOS) |
| Phase 2 | + WebAssembly (browser) |
| Phase 4 | + Mobile (iOS, Android) |
| Later | Consoles (TBD) |