π Web panel
Voidium Web Control Panel is a React 19 + Vite 6 + TypeScript SPA bundled into the mod JAR. It provides a full admin dashboard for server status, quick actions, AI assistance, and live config editing β no external dependencies needed.
Access is protected by a oneβtime token in the URL. The token changes on every server start and is stored in a session cookie after first load.
Jump to
β Setup
- Enable the module in
config/voidium/general.json:enableWeb: true
- Configure
config/voidium/web.json(port, language, hostname) - Restart the server
Youβll see an access link in logs, or you can use /voidium web inβgame.
βοΈ Configuration
File: config/voidium/web.json
portβ HTTP port (default:8081)languageβ panel language:enorczpublicHostnameβ hostname/IP used in the access URL
If
publicHostname is localhost / 127.0.0.1, Voidium tries to detect a LAN IP when generating the URL.
π Access & auth
- The Web panel URL includes a token, for example:
http://HOST:PORT/?token=UUID - The token is generated on every server start.
- After the first successful load, a
sessioncookie is set and used for future requests. - Without a valid token or cookie, the panel returns 401 Unauthorized.
π§© API & actions
The panel exposes a few HTTP endpoints:
Static assets
GET /β React SPA entry (index.html, requires auth)GET /assets/*β hashed JS/CSS bundles (immutable cache)
Dashboard
GET /api/dashboardβ full server telemetry JSON (auth required)GET /api/feedsβ chat + console feed snapshotGET /api/eventsβ Server-Sent Events (SSE) stream, pushes dashboard data every 3 seconds
Actions (POST)
POST /api/action(JSON payload withactionfield):restart,reload,announce,maintenance_on/offentitycleaner_preview/all/items/mobs/xp/arrowsvote_payout/clear/payout_all/clear_allticket_close/note/transcript
Config Studio API
GET /api/config/schemaβ field definitions for all modulesGET /api/config/valuesβ current config valuesGET /api/config/defaultsβ factory defaultsGET /api/config/localeβ locale preset (en/cz)POST /api/config/previewβ preview changes with impact flagsPOST /api/config/diffβ diff current vs proposed valuesPOST /api/config/applyβ apply changes (creates backup)POST /api/config/rollbackβ rollback to last backupPOST /api/config/reloadβ reload configs from disk
AI API
POST /api/ai/adminβ admin AI conversationPOST /api/ai/admin/suggestβ AI config suggestionsGET /api/ai/playersβ player AI conversation history
Console
POST /api/console/executeβ execute allowlisted commands
Schema export
GET /api/config/schema/exportβ full config schema in JSON Schema draft-07 format
Server management
GET /api/server-iconβ server favicon (PNG, no auth required)GET /api/server-propertiesβ read server.properties as JSON key-value pairsPOST /api/server-propertiesβ write server.properties (JSON body with key-value pairs)
Discord roles
GET /api/discord/rolesβ role list (requires Discord bot running)
π Security notes
- The panel runs over plain HTTP; keep it on a trusted network or behind a reverse proxy.
- Donβt share the token URL.
- Restarting the server invalidates old tokens.- Rate limiting: AI endpoints (
/api/ai/*) enforce 120 requests/minute per IP. Exceeding the limit returns HTTP 429 withRetry-Afterheader. - Theme & locale: Dark/light theme and language preference are stored in
localStorage(client-side only).π§― Troubleshooting
Panel doesnβt start
- Ensure
enableWebis true ingeneral.json - Check if the port is already in use
401 Unauthorized
- Use a fresh URL from logs or
/voidium web - The token changes after every server restart
Stats/Discord data missing
- Stats require
enableStats - Discord roles require Discord module to be enabled and connected