A self-hosted Minecraft server management dashboard. Run and manage multiple Minecraft servers from a single web UI, with real-time console, file management, backups, and player tracking — all containerized with Docker.
- Start, stop, and monitor multiple Minecraft servers
- Real-time console with command input via WebSocket
- File manager with editor, upload, download, and conflict resolution
- World backups with modpack version detection (BCC, CurseForge, Modrinth, MultiMC)
- Player list with online count
- Import servers from Prism Launcher exports
- Supports NeoForge, Fabric, Forge, and vanilla via itzg/minecraft-server
- Docker with Compose
- Docker socket access (the dashboard manages containers on your behalf)
Create a docker-compose.yml:
services:
spawnpoint:
image: fossfrog/spawnpoint:latest
container_name: spawnpoint
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /your/data/path:/app/data
environment:
- DATA_DIR=/app/data
- PORT=3000
- DASHBOARD_USER=admin
- DASHBOARD_PASSWORD=yourpassword
# Optional — only needed on Docker Desktop (macOS/Windows):
# - HOST_DATA_DIR=/your/data/pathReplace /your/data/path with an absolute path on your host where server data will be stored.
Start it:
docker compose up -dOpen http://localhost:3000 in your browser.
git clone https://github.com/Gren-95/spawnpoint.git
cd spawnpoint
cp .env.example .env # edit as needed
docker compose up -d --build| Variable | Default | Description |
|---|---|---|
DASHBOARD_PORT |
3000 |
Port the dashboard listens on |
HOST_DATA_DIR |
./data |
Absolute path on the host for server data storage |
DASHBOARD_USER |
— | Username for dashboard access (unset = no auth) |
DASHBOARD_PASSWORD |
— | Password for dashboard access (unset = no auth) |
CORS_ORIGIN |
— | Allowed CORS origin(s), comma-separated, or *. Unset = same-origin only |
Backend (Bun + Express + TypeScript):
cd backend
bun install
bun run devFrontend (Vite + React + TypeScript):
cd frontend
npm install
npm run devThe frontend dev server proxies API requests to the backend at http://localhost:3001.
Backend
- Bun — runtime and package manager
- Express — HTTP server
- Dockerode — Docker API client
- ws — WebSocket server for real-time console
- better-sqlite3 — embedded database for server configs and backups
- archiver — backup zip creation
- yauzl — zip extraction for Prism imports
Frontend
- React — UI framework
- Vite — dev server and build tool
- Tailwind CSS — styling
- Zustand — client state management
- React Router — client-side routing
- Lucide — icons
Infrastructure
- Docker — containerisation
- itzg/minecraft-server — Minecraft server image
Spawnpoint runs as a Docker container with access to the Docker socket. When you create or start a server, it spins up a separate itzg/minecraft-server container with the appropriate configuration, bind-mounting a subdirectory of HOST_DATA_DIR as the server's data volume.
The dashboard communicates with running servers over RCON (commands) and Docker logs (console output).



