An automated, local desktop management ecosystem for Minecraft server runtimes, featuring an Aternos-inspired management workflow.
This section is dynamically updated by the development team after every feature sprint.
- Overall Progress: 94% Completed
- Current Sprint Phase: Phase 3 (Core Stabilization & UX Overhaul)
- Target Deadline: July 10, 2026
- Last Updated: June 27, 2026
- Initial Electron window configuration wrapper.
- Base Node.js Express server framework setup.
- Server creation dashboard overhauled into a multi-step Aternos-style wizard.
- The Ghost Server Bug fixed: Database now populates and triggers a state update via real API calls.
- Deletion Constraint Fault fixed: SQLite
ON DELETE CASCADEapplied. - Zero-State Server Fix: Dashboard dynamically redirects to wizard when zero servers are present.
- Dynamic Version APIs: Replaced mock data with real-time Mojang/PaperMC API version fetching.
- CRUD Capabilities UI: Settings tab now supports renaming, online-mode premium toggles, and deletion.
- Scheduler Crash Patch: Fixed fatal UI crash during scheduler unboxing.
- Deep Player Analytics: Engine to parse
.datand.jsonfiles for rich user analytics and player inventory tracking. - Aternos Dashboard Overhaul: Live animated Speedometers for hardware metrics and a Connected Players panel.
- Safe App Environment Fix: Resolved unhandled
ReferenceError: Cpu is not definedcrash on launch. ImplementedErrorBoundaryfor application-wide crash resilience and updated software tab data maps to resolvemojangVersionserrors.
- Cross-platform testing for Electron builds and auto-updater.
- Plugin marketplace integration with Hangar and Modrinth.
- UI improvements for player analytics and inventory viewer.
(No active blockers! Server Library, player tracking, TPS parsing, connection verification, Playit status, auto-recovery, and local-first data persistence completed in v1.0.41.)
- Framework: React 18, TypeScript, Vite, Tailwind CSS
- State Management: Isolated Context Providers for Socket connections and telemetry tracking.
- Runtime: Node.js, Express, Socket.IO
- Database: SQLite via
better-sqlite3(Prepared statements enforced) - Process Lifecycle: Native
child_process.spawnfor intercepting PaperMC, Fabric, and Forge jar streams.
- Container: Electron 28 with strict
contextIsolation: trueand secure whitelisted IPC preload bridges. - Resource Boundary: Configured for low-overhead operation to guarantee stable development testing alongside heavy local Java instances.
Latest version: v1.0.41 — [Auto-updates from within the app]
| Platform | Download |
|---|---|
| Windows 10/11 (x64) | Download Installer |
| macOS (Intel) | Download DMG |
| macOS (Apple Silicon) | Download DMG |
| Linux | Download AppImage |
The desktop app bundles everything — no Node.js, no separate backend. Install and run.
- Missing Dependencies Fix — Properly saved
prismarine-nbtandreact-gauge-chartto package.json to resolve Rollup build failures on GitHub Actions runner. - TypeScript Build Fixes — Resolved strict compilation errors preventing successful production builds of the backend analytics server.
- CI Build Fix — Downgraded Node.js to v20 LTS in GitHub Actions to fix better-sqlite3 native build failures during app packaging.
- Deep Player Analytics Engine — Extracts and visualizes raw NBT (
.dat) and.jsonplayer data into a clean UI (Inventory, Health, Location, Statistics). - Speedometer Dashboard — An Aternos-style hardware UI overhaul replacing standard charts with elegant animated gauges and a live Connected Players panel.
- Robust Server Deletion — Re-engineered database relations with
ON DELETE CASCADEpreventing any UI ghosting or database lock crashes.
- Massive UX Overhaul — Entire creation flow was redesigned to mirror Aternos-style wizards with centralized creation/import points.
- Critical Bug Fixes — Fixed the "Ghost Server" bug where created servers didn't show up in the UI, and the server deletion constraints bug by adding ON DELETE CASCADE cascades to the SQLite database.
- Settings Menu Purge — Removed Version Selection and Connection Mode from Settings, shifting these configurations natively into the Creation Wizard.
- Task Scheduler — Automate server commands, backups, and state changes with a full
node-cronsystem and a dedicated UI tab. - Modrinth Marketplace Integration — Search, browse, and install server plugins directly from Modrinth within the app.
- Java Runtime Detector — Automatically scans your system (Windows/macOS/Linux) to find and list all installed Java versions.
- Aikar's JVM Flags — Automatically applies highly optimized garbage collection flags for maximum performance on Paper and Purpur servers.
- In-App Notifications — Real-time event notifications (player joins, crashes, backups) stored in a new database-backed panel.
- Release & Documentation Refresh — All version strings, badges, and docs aligned to v1.0.24.
- CI/CD Ready — GitHub Actions
release.ymlautomatically builds Windows, macOS, and Linux binaries on every new tag.
- Start / Stop / Restart — One-click server control from the Dashboard.
- Auto-restart on crash — Automatically recovers from crashes (max 3 attempts).
- Port conflict detection — Auto-detects if port 25565 is in use and kills orphaned Java processes.
- EULA auto-accept — Accepts Minecraft EULA automatically.
- Java pre-check — Validates Java installation before starting.
- Version auto-download — Switch PaperMC versions without manual downloads.
- Multi-server library — Create, switch between, and delete multiple server instances.
- Role-based access — Owner / Admin / Moderator / Trusted Member / Member / Guest.
- Player tracking — Online/offline status, join/leave history, real-time coordinates.
- Ban / Kick / Mute / Temp-Ban — Full moderation toolkit.
- Whitelist — Control who can join.
- Chat log — Message history with search.
- Cracked Mode — TLauncher / any launcher, no Mojang account needed.
- Premium Mode — Official Minecraft accounts only.
- Playit.gg Tunnel — No port forwarding required. Works behind CGNAT.
- Switch with one click — Toggle in Settings, restart server.
- Live Dashboard — CPU, RAM (MC + System), TPS, Disk, Player count.
- 30-min charts — System resources and performance trends.
- Real-time Console — See server output as it happens.
- Real-Time Player Cards — Username, world, coordinates, health, ping, gamemode.
- Live Events Feed — Join, leave, death, and chat events.
- Create worlds — Custom seed, gamemode, difficulty.
- Clone worlds — Duplicate existing worlds.
- Download / Upload — Transfer worlds as
.zipfiles. - World seed setting — Configure in Settings.
- Local-only — All backups stored on your machine (no cloud).
- Auto-backup — Configurable interval (default: every hour).
- Manual backup — One-click backup creation.
- Restore — Roll back to any backup point.
- Encryption — Optional backup encryption.
- One-click install — Quick-install popular plugins (LuckPerms, EssentialsX, WorldEdit, Vault, etc.).
- Custom install — Add any plugin by URL or
.jarfile. - Enable / Disable — Toggle plugins without removing them.
- Installable — Windows, macOS, Linux native builds.
- Auto-update — App updates itself from GitHub releases.
- System tray — Minimize to tray, background operation.
- JWT authentication — Token-based login.
- Role-based permissions — Granular access control.
- Password management — Change your password from Settings.
- Audit log — Track all admin actions.
- Launch the app → click Start Server.
- Wait for the server to be Online.
- Open Minecraft → Multiplayer → Add Server.
- Address:
localhost:25565 - Click Join Server.
- Go to Connection tab in MineControl OS.
- Set up Playit.gg tunnel (see Settings).
- Share your Playit.gg DNS address (e.g.
minecontrol.playit.gg). - Friend connects using that address — no router configuration needed.
- Works even if your ISP uses CGNAT (Jio, Airtel, BSNL).
- Share your Public IP from the Connection page.
- Set up port forwarding on your router: TCP 25565 → your laptop.
- Friend connects using your public IP.
- No port forwarding needed.
- Friends connect using your LAN IP shown on the Connection page.
| Setting | Location | Description |
|---|---|---|
| Server Version | Settings | Paper 1.20.1 through latest |
| Playit.gg Token | Settings | Tunnel token from playit.gg |
| Playit.gg DNS | Settings | Your custom tunnel address |
| Server Name (MOTD) | Settings | Message shown in server list |
| Connection Mode | Settings | Cracked / Premium / Playit.gg |
| World Seed | Settings | Seed for new world generation |
| Max Players | Settings | Player slot limit |
| Difficulty | Settings | Peaceful / Easy / Normal / Hard |
| Gamemode | Settings | Survival / Creative / Adventure / Spectator |
| PvP | Settings | Toggle player combat |
| Server Port | Settings | Default: 25565 |
| View Distance | Settings | Chunks loaded per player |
| Min / Max RAM | Settings | Java heap allocation |
| Whitelist | Settings | Only allowed players can join |
| Auto Backup | Settings | Automatic world backups |
| Map Plugin | Settings | BlueMap / Dynmap configuration |
git clone https://github.com/Harsha240105/Mine-Control.git
cd Mine-Control
npm install
npm run dev| Username | Password |
|---|---|
owner |
OXK@6126 |
- Web UI: http://localhost:5173 (dev) or http://localhost:3001 (production)
- API: http://localhost:3001/api
- Minecraft Server:
localhost:25565
Mine-Control/
├── .github/workflows/ # CI/CD release pipeline
├── electron/ # Electron desktop app
│ ├── main.ts # Main process (window, tray, menus, auto-updater)
│ └── preload.ts # Context bridge for IPC
├── server/ # Express.js backend
│ ├── index.ts # Entry point (Express + Socket.IO)
│ ├── routes/ # API route handlers
│ │ ├── auth.ts # Login, password change
│ │ ├── server.ts # Status, start/stop, config, versions, diagnostics, connection, events
│ │ ├── players.ts # Player management, roles, whitelist
│ │ ├── worlds.ts # World CRUD, clone, download/upload
│ │ ├── plugins.ts # Plugin management
│ │ ├── backup.ts # Backup create/restore/delete
│ │ ├── claims.ts # Land claim system
│ │ ├── builds.ts # Build tagging system
│ │ └── github.ts # Bug reports & feature requests
│ ├── services/
│ │ ├── minecraftServer.ts # Java process manager, version management, diagnostics
│ │ └── backup.ts # Backup engine
│ ├── middleware/
│ │ └── auth.ts # JWT + role-based permissions
│ ├── database.ts # SQLite schema + seed
│ └── paths.ts # Path resolution helpers
├── src/ # React frontend
│ ├── pages/ # Route-level page components
│ │ ├── Dashboard.tsx
│ │ ├── Connection.tsx
│ │ ├── Console.tsx
│ │ ├── Players.tsx
│ │ ├── Worlds.tsx
│ │ ├── MapView.tsx
│ │ ├── Plugins.tsx
│ │ ├── Backups.tsx
│ │ ├── Diagnostics.tsx
│ │ ├── Guide.tsx
│ │ ├── GitHub.tsx
│ │ ├── Settings.tsx
│ │ ├── Servers.tsx
│ │ ├── Compatibility.tsx
│ │ └── Import.tsx
│ ├── components/ # Reusable components
│ │ ├── Layout.tsx
│ │ ├── UpdateBanner.tsx
│ │ └── NotificationPanel.tsx
│ ├── hooks/ # React hooks + contexts
│ │ ├── useAuth.tsx
│ │ ├── useSocket.ts
│ │ └── useNotifications.ts
│ └── lib/
│ └── api.ts # Typed API client
├── minecraft/ # Server runtime directory
│ ├── server.jar # PaperMC (version selectable)
│ ├── plugins/ # Server plugins
│ ├── worlds/ # World data
│ ├── backups/ # Local backups
│ └── logs/ # Server logs
├── package.json # Root package + npm scripts
├── electron-builder.yml # Packaging config
├── tailwind.config.js # Tailwind theme
└── README.md # This file
| Method | Endpoint | Permission | Description |
|---|---|---|---|
| POST | /api/auth/login |
None | Login, get JWT |
| GET | /api/server/status |
auth | Status + system resources |
| POST | /api/server/start |
server.start | Start Minecraft server |
| POST | /api/server/stop |
server.stop | Stop server |
| POST | /api/server/restart |
server.restart | Restart server |
| GET | /api/server/versions |
auth | List available PaperMC versions |
| POST | /api/server/version |
server.start | Download and switch Paper version |
| POST | /api/server/gamemode |
server.start | Switch survival/creative/adventure/spectator |
| GET | /api/server/connection |
auth | Local, LAN, Public IP, Playit.gg info |
| GET | /api/server/diagnostics |
auth | Firewall, port binding, CGNAT checks |
| POST | /api/server/health-check |
auth | Full connectivity test |
| GET | /api/server/properties |
auth | Read server.properties |
| PUT | /api/server/properties |
server.start | Update server.properties |
| GET | /api/server/config |
auth | Read app config (SQLite) |
| PUT | /api/server/config |
server.start | Update app config |
| POST | /api/server/command |
console.send | Send console command |
| GET | /api/server/logs |
console.read | Get server logs |
| GET | /api/players |
auth | List all players |
| GET | /api/backups |
auth | List backups |
| GET | /api/plugins |
auth | List plugins |
| GET | /api/worlds |
auth | List worlds |
| GET | /api/claims |
auth | List land claims |
| POST | /api/claims |
world.manage | Create a claim |
| DELETE | /api/claims/:id |
world.manage | Delete a claim |
| GET | /api/builds |
auth | List build tags |
| POST | /api/builds |
auth | Create a build tag |
| DELETE | /api/builds/:id |
world.manage | Delete a build tag |
| POST | /api/github/bug-report |
auth | Submit bug report |
| POST | /api/github/feature-request |
auth | Submit feature request |
| GET | /api/github/issues |
auth | List all reports |
Available from the Plugins page:
- LuckPerms — Advanced permissions
- EssentialsX — Essential commands
- WorldEdit — In-game world editing
- Vault — Economy/permissions API
- ClearLag — Lag reduction
- CoreProtect — Block logging and rollback
- BlueMap — 3D world map viewer
- Dynmap — Google-maps-style world map
The app checks GitHub for new releases on startup. When an update is found:
- A banner appears: "Update vX.X.X available".
- Click Download → progress bar appears.
- Click Restart & Update → app installs and relaunches.
- No manual uninstall/reinstall needed.
- Server Library Landing — Server selection screen now opens first. Shows all locally created servers with version, status, players, world size, dates, and action buttons (Start/Stop/Open/Settings/Delete). "Create New Server" modal with software/version/RAM/gamemode/difficulty/seed fields. Import and search support. Empty state with CTA.
- Player Tracking Enrichment — Automatically reads
playerdata/*.dat,stats/*.json, andadvancements/*.jsonwhen players join. Stores health, food, XP, position, dimension, inventory, armor, ender chest, death count, kills, statistics, advancements, first_join, last_disconnect, playtime. Data survives server and application restart. - TPS Parsing — TPS is now parsed from Minecraft console output instead of hardcoded 20.0. Parses Vanilla, Paper, and plugin TPS reports. Updates stats database and dashboard in real-time.
- Server Status Persistence — Server state (running/stopped/starting/failed) is now stored in the database. Closing and reopening the app preserves the last known state.
- Backend Auto-Recovery — Electron main process monitors backend health every 10 seconds. If the API becomes unreachable, it automatically restarts the backend server. Frontend shows "Backend Offline" or "Reconnecting..." banner while recovering.
- API Health Endpoint — New
GET /api/server/healthlightweight check (no auth). Frontend uses it for 5-second health polling. - Connection Verification — New
GET /api/server/verify-connectionendpoint performs TCP port tests to 127.0.0.1, 0.0.0.0, and LAN address with latency measurement. - Playit Tunnel Status — New
GET /api/server/playit-statusendpoint checks if playit agent process is running and DNS resolves. Returns tunnel address, auth status, agent state. - Server Config File Management — New endpoints for
ops.json,whitelist.json,banned-players.json,banned-ips.json,usercache.jsonwith GET/PUT for read/write access. - Data Directory Standardization — Data now stored under
MineControl OS/folder with proper subdirectories:data/,servers/,downloads/,java/,playit/,cache/,temp/. - Connection Status Indicators — Layout top bar now shows real-time "Backend Offline" or "Reconnecting..." badges based on health polling.
- Updated documentation and version badges for v1.0.41 release.
- Fixed
/api/players/bannedreturning 404 — Route ordering bug fixed: moved/banned,/chat, and/rolesroutes before the/:idcatch-all route inplayers.ts. Also added missingtemp-banroute. - Socket.IO Reconnection & Error Handling — Frontend
useSockethook now logs connection errors, implements exponential backoff reconnection, and exposes error state. Server-side Socket.IO now logs engine errors and emitsplayers:update,server:update, andconsole:updateevents. - Fixed Playit.gg Tunnel Click-Jacking — Removed click-to-toggle from the entire Playit.gg card, keeping toggle only on the chevron button. Added
stopPropagationon the config panel so clicking input fields or Save button no longer closes the panel. - Fixed Plugins Marketplace Search — Fixed response destructuring bug where
{ data }was expected but Modrinth API returns{ hits }. - API Request Timeouts — Added 15-second AbortController timeout to all API requests to prevent infinite loading states.
- Backend Stability — Socket.IO server now properly handles connection errors with logging. Added
players:updateandserver:updatesocket events for real-time telemetry. - Dashboard Error State — Dashboard now shows a clear "Backend Unavailable" message with retry button when server cannot be reached, instead of infinite spinner.
- Updated documentation and version badges for v1.0.40 release.
- Complete State Machine Rewrite — The Minecraft server process manager (
minecraftServer.ts) has been fully rewritten with a proper 5-state lifecycle (STOPPED → STARTING → RUNNING → STOPPING → STOPPED, withFAILEDfor error states). All old booleanthis.running/this.startingflags have been removed. State transitions are now atomic, emitserver:stateevents via Socket.IO, and are reflected in real-time on the Dashboard. - Automatic Java Runtime Resolution —
resolveJava()scans the server jar's.classfiles to determine the required Java version, then checks the configured path. If it's absent or too old, it auto-selects a compatible JDK from all installed runtimes (viaJavaDetector.scan()). If none is found, the error message lists every installed JDK with versions and direct download links. - Pre-Flight Validation Before Starting —
validatePreFlight()checks jar existence (with download-in-progress wait), EULA auto-accept, and port availability (with auto-kill of orphaned Java processes) before the server enters the STARTING state. This ensures the Dashboard never gets stuck at "Starting..." when validation fails. - Dashboard Handles All States — The status indicator now shows the correct color and text for all 5 states: green "Online" (running), yellow pulsing "Starting..." / "Stopping...", red "Failed", and gray "Offline". The Dashboard subscribes to
server:stateSocket.IO events for instant UI updates. - Child Process Error Handling — When the Java process exits with a non-zero code, the state transitions to
FAILEDand the error message is captured. Crash logs are preserved. The close handler correctly defers to a gracefulstop()when already in the STOPPING state, preventing race conditions. - Server Status API Enhancement — The
/api/server/statusendpoint now includes thestatefield (one ofstopped,starting,running,stopping,failed) alongside the existingrunning/startingbooleans, enabling the frontend to distinguish between "stopped", "failed", and other states. - Fixed Dashboard crash on null status — When
/api/server/statusreturns a 500 error (e.g., brokenrequirepath for package.json), the Dashboard no longer crashes withCannot read properties of null (reading 'onlinePlayers'). Added a null-status guard that shows "Unable to connect to server. Retrying..." instead of crashing. All null guards changed from!== null(which fails forundefined) to!= null(which catches both). - Fixed production
package.jsonpath resolution — The/api/server/statusendpoint usedrequire('../../package.json')which resolves todist/package.jsonin the production ASAR bundle, causing a 500 error. Added a try-catch fallback chain that works in both development (tsx watch) and production (Electron ASAR) environments. - Null-safe Dashboard rendering — All computed values (
cpuPercent,ramPercent,sysRamPercent,diskPercent) now use optional chaining with??fallbacks, so they never crash whenstatusisnullor partially initialized.
- Automatic Java Version Detection —
minecraftServer.start()now scans all installed JDKs viaJavaDetector.scan()when the configured Java is too old. If the server jar requires Java 25+ (class version 69.0) but the defaultjavaon PATH is only Java 21, MineControl will automatically find a compatible JDK among installed runtimes and use it. If none is found, the error message lists every installed JDK with versions and provides direct download links. - Dashboard "Connecting..." State — Dashboard now shows a spinner with "Connecting to server..." on initial load, instead of immediately rendering placeholder values. Once the first
/api/server/statusresponse arrives, real data is shown. If an error occurs during startup, the RepairFlow appears immediately. - Error Propagation Fix —
POST /api/server/startnow awaits theminecraftServer.start()promise directly, so pre-check failures (missing jar, incompatible Java) return an HTTP 400 with the error message instead of being silently swallowed bycatch(). Combined with the Socket.IOserver:errorhandler fix, start errors always reach the frontend. - Socket.IO Error Handler Fix — The Dashboard's
server:errorlistener no longer filters out errors whenstatus.startingis true. Start-time errors (Java mismatch, port conflicts) now display the RepairFlow instead of being hidden. - Enhanced Diagnostics — The
/api/server/diagnosticsendpoint now runsJavaDetector.scan()to list all installed JDKs, compares their versions against the required Java version detected from the server jar's class files, and reports exactly which version is needed vs. what's available. The health-check endpoint also reports detailed Java status. - useSocket Hook Enhancement — The
useSockethook now exposes anon<T>(event, handler)method that returns an unsubscribe function, enabling cleaner subscription management in components. - Null-Safe Dashboard Rendering — Replaced all
||fallback operators (which masked null/offline values) with??nullish coalescing, ensuring the Dashboard never shows "20.0 TPS", "0 GB RAM", or "0/4 players" when the server is offline.
- Atomic Server Provisioning — Server creation now downloads the jar BEFORE creating the database record. If the download fails, no orphaned server record is created and the directory is cleaned up. The wizard sends all data in a single API call.
- Forge 404 Fix — Forge download now returns "This Forge version is unavailable. Choose another version." when a version has no matching build in the Forge API, instead of a cryptic error.
- Dashboard Offline State — Dashboard now shows "Server Offline" / "Not yet started" instead of fake zero values for CPU, RAM, TPS, and Players when the server is not running. The version display shows "Not configured" when no version is selected.
- Global JSON Error Handler — Added JSON parse error middleware for malformed request bodies and an API 404 handler that returns
application/jsonfor unknown API routes. Existing global error handler now respectserr.statusfor proper HTTP status codes. - Software Installation Badges — Software page now shows granular badges per version: "Active" (currently in use), "Downloaded" (on disk but not active), and "Install" button. Software type cards show "Active", "Downloaded", "Not Installed", or "Popular" as appropriate.
- Plugin Install Progress — Plugin install buttons now show a spinner and "Downloading..." text during installation, with disabled state to prevent duplicate clicks. Works for both popular plugins and Modrinth marketplace.
- Plugin Directory Resolution — Fixed
plugins.tsto resolve the plugins directory at request time instead of module load time, ensuring plugins are always installed to the correct server directory when switching between servers. - Expanded Diagnostics — Added 8 new diagnostic checks: World Data, server.properties, Disk Space, Java Memory, Folder Permissions, Download Cache, Minecraft Version, and Server Software Type detection. All checks now include detailed messages.
- Download Service Refactor — Extracted all download functions into a shared
server/services/download.tsmodule, eliminating code duplication betweenserver.tsandservers.ts. The module exports type-safe functions for Paper, Fabric, Purpur, Forge, and Vanilla downloads. - Startup Jar Validation — Improved
minecraftServer.start()error message to show the exact missing jar filename and suggest running a Repair or downloading from the Software page, instead of hardcoding "PaperMC server jar".
- Dashboard Live Stats Reliability — Fixed CPU seeding to use a 100ms delay (not same-tick) so the first dashboard load shows real CPU, not NaN. Removed outer try-catch that silently killed all stats. Switched disk detection from deprecated
wmicto PowerShellGet-CimInstance. Changed\|\|to??for CPU fallback to preserve legitimate zero values. - Plugin Download Fixes — Replaced Safe Sources external links (
<a target="_blank">) with info cards so users stop downloading plugins to their browser's Downloads folder. Fixed the Modrinth Marketplace "View / Install" button to actually download via the backend API. Fixed hardcoded "60s" timeout message to show the actual 120s timeout. - Settings Save Reliability —
handleSave()no longer fails entirely whenserver.propertiesdoesn't exist (pre-first-start state); gracefully skips the properties write instead. Button text changed from "Save & Restart Server" to "Save Settings". - viewDistance Persistence —
getConfig()now returnsviewDistancefrom the database, so the Settings page loads your saved value instead of always falling back to 10. - Java Version Detection —
detectRequiredJava()now scans ALL.classfiles in the jar and returns the highest class version, catching Fabric bundles where the main class is Java 21-compatible butnet/minecraft/bundler/Mainrequires Java 25. - Wizard Download Errors — The silent
catch {}around the server jar download in the wizard now shows an error toast when the download fails, instead of silently showing "Server Ready!" with no jar. - Dashboard Software Badge — Dashboard now shows the software source (Paper, Fabric, Purpur, etc.) alongside the Minecraft version in the connection info section.
- Multi-Server Management — Server cards on the Servers page now have a delete button for quick deletion. The server list dropdown in the sidebar already supports switching between servers.
- Java Version Validation — Server jar is now scanned for its class file version before starting. If the jar requires a newer Java (e.g. Java 25+ for Minecraft 1.21.11), a clear error is shown with the required version and a download link to Adoptium.
- Plugin Download Fix — Fixed variable shadowing bug where the
https.getcallback parameter shadowed the Express response object, causing plugin downloads to silently fail and hang the frontend. - Dashboard Server Name — Dashboard now shows the wizard-configured server name even before the first server start, falling back to the
serversdatabase table when the runtime config is empty. - Dashboard CPU on First Load — Seeded the CPU stats baseline so the Dashboard shows real CPU usage on the very first page load, instead of 0% until the 5-second tick fires.
- Fabric Version Filtering — Fabric version list now only shows Minecraft game versions (e.g. 1.21.11), excluding Fabric Loader version entries (e.g. 26.2) that were previously mixed in.
- Fabric Download Reliability — Changed Fabric download to use the game-version-specific loader endpoint, ensuring the installed loader is compatible with the selected Minecraft version.
- View Distance Cap Raised — Settings view distance input now supports values up to 128 (was capped at 32).
- Discord Field Cleanup — Removed the spurious Voice Chat Invite Link field from Discord settings, leaving only Bot Token, Chat Channel ID, and Voice Channel ID.
- Wizard Version Filtering — Server creation wizard now correctly filters versions by selected software type (Paper, Fabric, Purpur, Forge, Vanilla, etc.) instead of showing all versions regardless of selection.
- Live Dashboard Telemetry — Dashboard now shows live CPU usage from
os.cpus()even when the Minecraft server is offline, eliminating 0% CPU / 0GB RAM / 0GB DISK readings. - Auto-Download on Creation — Server jar is now automatically downloaded immediately after the wizard creates a server, eliminating the "Server jar not found" error on first start.
- Discord Voice Channel ID — Added separate Voice Channel ID field alongside Chat Channel ID in Discord settings, enabling independent chat and voice channel configuration.
- Download Timeout Increased — Increased download timeout from 60s to 120s for server jars and plugins, preventing timeout failures on slow connections.
- Path Import Cleanup — Replaced dynamic
require('path')calls with static imports in server creation route.
- Path Resolution Fix — Fixed
resolveMinecraftDir()to prefer the active server directory over theMINECRAFT_DIRenv var, resolving the "Server jar not found" error when starting servers on Windows. - Forge Download Support — Added
downloadForgeVersion()handler for automatic Forge server jar downloads via the Forge maven repository. - Software Catalog Unlocked — All software types (NeoForge, Quilt, Bedrock, Pocketmine-MP) are now enabled and ready for selection, removing all "Coming Soon" placeholders.
- Plugin Download Reliability — Fixed Modrinth plugin version selection to prefer
releasetype versions over potentially unstable builds. - Dashboard Telemetry — Added Windows disk usage fallback via
wmicwhensysteminformationfails, ensuring dashboard shows live hardware specs (CPU, RAM, DISK) without zeros. - Version Source Mapping — Fixed
/api/server/versionto correctly save the software source name (PaperMC, Fabric, Purpur, Forge, Mojang) instead of always defaulting to "PaperMC" or "Mojang".
- Import Existing Server UI — Easily import existing Minecraft servers from ZIP files or uncompressed folders.
- GitHub Release Automation — Full CI/CD pipeline with GitHub Actions for Windows, macOS, and Linux builds.
- In-App Auto-Updater UI — One-click update installation.
- Beginner's Guide Tab — Step-by-step guide covering start server, versions, plugins, map, connection, and modes.
- GitHub Community Hub — Submit bug reports and feature requests from within the app.
- Land Claim System — Track player claims and boundaries.
- Build Tagging System — Tag buildings and locations (house, base, farm, spawn, shop).
- Live World Map Tab — Embedded BlueMap/Dynmap viewer.
- Server Diagnostics Tab — Configuration checks, port binding analysis, CGNAT detection.
- Connection Manager Tab — Localhost, LAN, Public IP, and Playit.gg addresses.
- Game Mode Quick Switch — Survival / Creative / Adventure / Spectator toggles.
- Minecraft Version Selector — PaperMC versions from 1.20.1 through latest.
- Codebase Cleanup — Removed stale duplicate directories.
| Layer | Technology |
|---|---|
| Frontend | React 18, TypeScript, Vite, Tailwind CSS, Recharts |
| Backend | Node.js, Express, Socket.IO |
| Database | SQLite (better-sqlite3) |
| Desktop | Electron 28, electron-builder, electron-updater |
| Minecraft | PaperMC (version selectable: 1.20.1 - latest) |
| Tunneling | Playit.gg |
| World Maps | BlueMap / Dynmap |
For the full Software Requirements Specification and Product Requirements Document, see SPECIFICATION-v1.0.17.md.
MIT
100% Free. No paid tiers. No subscriptions. Self-hosted on your hardware.
- Bug Fixes: Fixed jar download race condition, resolved plugin download 404s, synchronized dashboard server name, and optimized background performance.
- New Features: Added Aternos-style Software tab for seamless version hot-swapping.
- Discord Integration: Complete integration to sync game chat, logs, and events to Discord.
- Hotfix: Fixed global React Error Boundary and Discord Bot safe initialization to prevent black screens.
- Deadlock Fixes: Resolved infinite loading on login and async execution of server start to prevent Express hangs.
- Performance: Optimized dashboard gauges with React.memo() to prevent full-app UI lag.
- Software: Fabric metadata parsing integrated into the backend versions API.
- UI: Added Import Server button and dynamic app version display.
- Stability: Refactored server launch sequence with strict Java 21+, Port availability, and EULA validations.
- Repair Flow: Introduced a dedicated UI to seamlessly handle and resolve startup errors (RepairFlow).
- Discord Settings: Added dedicated Discord configuration UI for easily modifying the bot token and channel ID.
- Forge Integration: Expanded server software versions to fetch and support Forge dynamically.
- Import Scanning: Import flow now scans existing files to automatically detect
server.propertiesand EULA acceptance. - Reliability: Implemented magic-byte verification on downloads to prevent JAR corruption, and added timeout fallbacks.
- Modrinth Transition: Replaced broken Hangar endpoints with Modrinth API for seamless plugin downloads.
- UI Optimization: Memoized the Dashboard telemetry pipeline to eliminate lag spikes during continuous updates.
- Discord Voice Link: Added Discord Voice Invite Link appending to Server Start messages.
- Purpur & Expanded Catalog: Fully integrated Purpur API fetching and prepared placeholders for Bedrock, Pocketmine, NeoForge, and Quilt.
- Portable Executable Pathing: Fixed roaming AppData issue by forcing the server structure directly into the executable installation path.
- Wizard Version Filtering: Wizard now filters versions by selected software type.
- Live Dashboard Telemetry: CPU/RAM/DISK now show live OS stats when server is offline.
- Auto-Download on Creation: Server jar auto-downloaded after wizard finishes.
- Discord Voice Channel ID: Added separate voice channel ID field in Discord settings.
- Download Timeout Increased: 60s → 120s for jars and plugins.
- Path Resolution Fix: Fixed resolveMinecraftDir() to prefer the active server directory, fixing "Server jar not found" errors.
- Forge Download Support: Added downloadForgeVersion() for automatic Forge server jar downloads.
- Software Catalog Unlocked: All software types enabled (NeoForge, Quilt, Bedrock, Pocketmine-MP), no more "Coming Soon".
- Plugin Download Reliability: Modrinth version selection now prefers release builds.
- Dashboard Telemetry: Windows disk fallback via wmic when systeminformation fails; no more zeros.
- Version Source Mapping: /api/server/version correctly saves the software source name.