Aryan SinghandClaude Fable 5 b2ff88b255 Fix gamerule toggles for 26.x renames; add map/skins/pregen + admin favors
Minecraft 26.x renamed every gamerule to snake_case (keepInventory →
keep_inventory, doDaylightCycle → advance_time, ...), so the panel's
queries hit unknown rules: reads returned nothing, toggles always
started from 'off', and sets silently failed. Rules are now defined by
candidate names resolved against the live server (works on old and new
versions), sets are verified by re-query, and failures surface the
server's actual reply. Toggles render only for rules the server reports.

Creative additions:
- Featured mods on the Mods page: BlueMap (3D web map), SkinRestorer
  (real skins in offline mode), Chunky (pregen) — verified for 26.2
- BlueMap plumbing: MAP_PORT mapping in compose, in-network detection,
  'Open the live world map' link on the Overview
- Player modal favors: heal, teleport-to-player, give item
- Broadcast box gained a full-screen title mode

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
b2ff88b255 · 2026-07-11 12:05:23 -05:00
7 Commits

Minecraft 26.2 Fabric Server + CraftDeck Panel

A production-quality, self-hosted Minecraft Java 26.2 server for friends:

  • Fabric loader with invisible server-side performance mods — any vanilla client (including TLauncher) can join, no client mods needed
  • Offline mode + gated authentication: only usernames you approve can join, each must register a password within a short window, and log in on every visit
  • CraftDeck, a full web management panel: live console, players & stats, lag diagnostics, performance graphs, mod manager with Modrinth search, backups & restore, file browser/editor, config editor, scheduled tasks, Discord alerts
  • Automatic backups with retention, one-command deployment, everything in Docker
Minecraft 26.2 (change one line to upgrade)
Loader Fabric (NeoForge/Forge/vanilla supported via config)
Server mods Fabric API, EasyAuth, spark, Lithium, FerriteCore — auto-updated
Panel Next.js, port 8080, LAN/VPN only
Host needs Linux x86_64, Docker + Compose, ~10 GB RAM

Quick start

git clone <this-repo> minecraft && cd minecraft
./scripts/setup.sh          # creates .env with generated secrets, prints your panel login
docker compose up -d        # first start downloads the server + mods (a few minutes)

Then open http://<server-ip>:8080, log in (admin / password printed by setup.sh), change the password, and you're live:

  • Minecraft: <server-ip>:25565
  • Dashboard: http://<server-ip>:8080

No setup.sh? Copy .env.example to .env and fill in RCON_PASSWORD, PANEL_SESSION_SECRET, PANEL_ADMIN_PASSWORD yourself.

Letting a friend join (the auth flow)

  1. Panel → Access & Auth → type their Minecraft username → Approve & open window
  2. Tell them to join <server-ip>:25565 right away (TLauncher: any username works, but it must match the approved name exactly)
  3. In game they run /register <password> <password> before the countdown ends (default 2 minutes — configurable in Settings)
  4. Done. On every future visit they just /login <password>

If the window lapses, the name is auto-removed from the whitelist — re-approve when they're ready. Full details: docs/auth-flow.md.

Everyday operations

Task Where
Start / stop / restart Overview page (or docker compose restart mc)
Watch console, run commands Console page
See who's lagging (them vs you) Performance & Lag page
Add/remove mods Mods page (Modrinth search built in)
Back up / restore Backups page
Change version, memory, MOTD… Configuration page → Save → Apply
Auto-restarts & scheduled backups Schedules page
Discord alerts Settings page

Documentation

Architecture

docker-compose.yml
├── mc         itzg/minecraft-server  (Fabric 26.2, offline mode, whitelist enforced,
│              RCON on the internal network only, mods resolved from Modrinth at start)
├── backup     itzg/mc-backup         (scheduled world tars + retention pruning)
└── dashboard  ./dashboard            (CraftDeck: Next.js + node:sqlite; talks to the
                                       Docker socket, RCON, and the server files)
data/
├── mc/        world, configs, mods, logs      (bind mount → survives everything)
├── backups/   world-*.tgz
└── dashboard/ panel database

The panel's registration-window enforcement, activity feed, metrics sampler, and scheduler run inside the dashboard container; state lives in data/dashboard/ and the .env file is the single source of truth for server configuration.

Security model (read this once)

  • The Minecraft port (25565) is the only thing that should ever be internet-exposed.
  • online-mode=false means Mojang doesn't verify usernames — the whitelist + EasyAuth passwords are what keep strangers out. Keep registration windows short.
  • The dashboard can start/stop containers and edit server files (it mounts the Docker socket), so treat it like root on the host: LAN or VPN only, never port-forward 8080. See docs/networking.md for the Tailscale setup.
  • RCON is not published outside the Docker network.
S
Description
No description provided
Readme
364 KiB
0 Stars 1 Watchers 0 Forks
Languages
TypeScript 96.2%
Python 1.8%
Shell 1.2%
Dockerfile 0.5%
CSS 0.3%