Radix is a full-stack, multi-engine game server infrastructure orchestrator that lets you dynamically allocate, run, monitor, and manage dedicated game processes across 3 game engines — Godot, Unity, and Unreal — all from a single, premium web dashboard. Built with NestJS on the backend and Next.js on the frontend, Radix handles the entire server lifecycle: binary discovery and extraction, engine-specific process spawning, real-time log streaming, and resource telemetry.
| Capability | Description |
|---|---|
| Multi-Engine Orchestration | Native support for Godot, Unity, and Unreal dedicated servers via a modular engine-adapter plugin system. Upload a ZIP; Radix auto-detects the engine type and applies the correct binary discovery & startup logic. |
| Dynamic Process Spawning | Upload game server ZIPs; Radix extracts, discovers binaries (server.console.exe, godot.linuxbsd.server.x86_64, .pck files), and spawns managed child processes with engine-specific arguments. |
| Full Lifecycle Control | Start, Stop, Restart, and Force Kill servers on demand. |
| Real-Time Log Streaming | WebSocket-driven console output via Socket.IO — tail every stdout line in-browser. |
| Resource Metrics | CPU, RAM, tick rate, and network I/O tracking loop with live Recharts visualizations. |
| Role-Based Access | Granular permission system — Super Admin, Owner, Admin, Moderator, Support, Read Only. |
| PostgreSQL / SQLite | TypeORM-backed persistence; uses PostgreSQL in production, auto-falls back to SQLjs (file‑based) in development. |
| Restful API | Full CRUD for servers, builds, users, players, bans, backups, and audit logs. |
| Ultra-Premium UI | Obsidian/dark violet theme with glassmorphism, neon glow effects, and smooth Framer Motion transitions. |
┌──────────────────────────────────────┐
│ Radix Dashboard │
│ (Next.js / React) │
│ :3000 │
└──────────┬───────────────────────────┘
│ HTTP / WebSocket
▼
┌──────────────────────────────────────┐
│ Radix API Gateway │
│ (NestJS / Express) │
│ :3001 │
└─────┬──────────────┬─────────────────┘
│ │
┌────────────▼──┐ ┌──────▼──────────────┐
│ PostgreSQL │ │ Game Servers │
│ / SQLite │ │ (Child Processes) │
│ (TypeORM) │ │ stdin/stdout pipes │
└───────────────┘ └─────────────────────┘
- Upload — Admin uploads a
.zipcontaining the dedicated server build for any supported engine (Godot, Unity, Unreal). - Engine Detection — Radix inspects the extracted file tree against engine-specific signatures to determine the correct engine adapter.
- Extract — Backend decompresses the archive using
adm-zip. - Discover — The engine adapter recursively scans for known binaries (
server.console.exefor Godot/Unity,godot.linuxbsd.server.x86_64,.pckasset packages, Unreal'sGameServer.exe, etc.). - Persist — Server metadata (port, region, build version, password, etc.) is written to the database.
- Spawn — On
Start, Radix forks a child process via Node'schild_process.spawn, pipingstdout/stderrto the log gateway. - Monitor — A metrics loop reads CPU/RAM at intervals; updates are pushed to the dashboard via Socket.IO.
- Control — Stop sends
SIGTERM; Kill sendsSIGKILL; Restart stops then re-spawns.
| Tool | Version | Purpose |
|---|---|---|
| Node.js | >= 18.x | Runtime |
| npm | >= 9.x | Package manager |
| PostgreSQL | >= 14.x | Production database (optional for dev — falls back to SQLjs) |
git clone https://github.com/IYanel-DEV/Radix.git
cd radixcd backend
# Install dependencies
npm install
# Copy environment file and edit as needed
cp .env.example .env
# ── Database ──────────────────────────────────────
# For development, Radix defaults to SQLjs (file-based).
# To use PostgreSQL, set DB_TYPE=postgres in .env
# and ensure PostgreSQL is running.
# ── Seed (optional) ────────────────────────────────
# Creates default roles & an admin user:
npm run seed
# ── Start ──────────────────────────────────────────
# Development (hot-reload):
npm run start:dev
# The API will be available at http://localhost:3001cd frontend
# Install dependencies
npm install
# Copy environment file
cp .env.example .env.local
# ── Start ──────────────────────────────────────────
npm run dev
# The dashboard will be available at http://localhost:3000Open http://localhost:3000 and log in with the credentials displayed by the seed script (or register a new account).
| Variable | Default | Description |
|---|---|---|
NODE_ENV |
development |
Environment mode |
PORT |
3001 |
API server port |
DB_TYPE |
sqljs |
Database type (postgres or sqljs) |
DB_HOST |
localhost |
PostgreSQL host |
DB_PORT |
5432 |
PostgreSQL port |
DB_USERNAME |
postgres |
PostgreSQL user |
DB_PASSWORD |
— | PostgreSQL password |
DB_DATABASE |
radix |
PostgreSQL database name |
JWT_SECRET |
— | JWT signing secret (64+ chars recommended) |
JWT_REFRESH_SECRET |
— | Refresh token secret (64+ chars) |
ENCRYPTION_KEY |
— | AES-256 key (exactly 32 chars) |
CORS_ORIGIN |
http://localhost:3000 |
Allowed CORS origin |
| Variable | Default | Description |
|---|---|---|
NEXT_PUBLIC_API_URL |
http://localhost:3001 |
Backend API base URL |
NEXT_PUBLIC_WS_URL |
http://localhost:3001 |
WebSocket server URL |
npm run start:dev # Development with hot-reload
npm run build # Compile to dist/
npm run start:prod # Run compiled production build
npm run seed # Seed database with roles & admin user
npm run lint # Lint source files
npm run test # Run testsnpm run dev # Development with HMR
npm run build # Production build
npm run start # Start production build
npm run lint # Lint source files
npm run typecheck # TypeScript type checkingBackend
- NestJS — Node.js framework
- TypeORM — ORM (PostgreSQL / SQLjs)
- Socket.IO — Real-time WebSocket gateway
- Passport — JWT authentication
- adm-zip — ZIP extraction
- Swagger — API documentation (
/api/docs)
Frontend
- Next.js 14 — React framework (App Router)
- Tailwind CSS — Utility-first styling
- Radix UI — Headless primitives
- Framer Motion — Animations
- Recharts — Charts & metrics
- Zustand — State management
- Lucide — Icons
We welcome contributions! Please see our Contributing Guide for details.
- Fork the repository
- Create a feature branch (
git checkout -b feat/amazing-feature) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feat/amazing-feature) - Open a Pull Request
Distributed under the Apache License 2.0. See LICENSE for more information.
