MIT licensed v0.1.0 Multi-arch image · amd64 + arm64

Run your Minecraft server,
without the SaaS tax.

A self-hosted web panel for your own server — live console, mod & plugin marketplace, BlueMap, Playit tunneling, automated backups. Single Compose stack, no host tooling.

$ docker pull ghcr.io/e-scheer/hostcraft:latest
⚠️
Early personal project. Expect rough edges, breaking changes between commits, and the occasional "why is my world gone" moment. Bug reports and PRs are very welcome.

See it in action

Five clicks from docker compose up to a working server.

Dark mode by default, French & English with full parity, every action audit-logged.

Dashboard
Dashboard — server vitals, public-access status, recent activity.
Console
Console — xterm.js, Tab-completion on MC commands, copy/jump-to-latest.
Mods marketplace
Marketplace — unified Modrinth + Hangar search, version-aware install.
Network and Playit
Network — direct port forwarding or Playit.gg (guided / managed), tunnel target preview, hostname auto-detection.
Runtime tuning
Runtime — engine, Java image, memory & JVM flags with compat warnings (★ recommended Java per MC version).

What you get

The things every paid host has,
and no open-source panel does.

📦

Unified mod & plugin marketplace

One search bar across Modrinth and Hangar. Filters by your MC version + loader family. Manual upload for .jar / .mrpack / CurseForge .zip.

⌨️

Console with RCON correlation

xterm.js + WebSocket streaming. Tab autocomplete on vanilla & Paper commands. Persistent RCON socket with auto-reconnect, jump-to-latest, copy to clipboard.

🗺️

BlueMap, one click

Loader-aware version pin: BlueMap 5.x on Java 21, 3.x on Java 17 — picks the right one so it actually loads. Iframe embedded directly in the panel.

🚀

Engine-swap safety

Paper ↔ Forge ↔ Fabric with full data-dir reset on swap (recoverable from auto-backup). Recommended-Java hint with ★ badge so old modpacks boot.

🌐

Playit.gg, two modes

"Guided" — you run the agent, paste the hostname. "Managed" — panel runs a sidecar in the MC container's netns. Hostname auto-detected via Playit API.

🔒

Security by default

Non-root containers. Docker socket fronted by socket-proxy with a minimal allowlist. cap_drop:[ALL], read_only root filesystem, Argon2id passwords.

Stack

No magic. Just open tools.

Backend

Django 6 DRF Channels (ASGI) SimpleJWT SQLite Argon2 Gunicorn Docker SDK

Frontend

Vue 3 Vite TypeScript Pinia TanStack Query Tailwind v4 Reka UI xterm.js Monaco

Quick start

Three commands. No host tooling.

Bring Docker. The panel brings everything else — Python runtime, Node build, the Minecraft container, the proxy, the playit agent. Nothing touches your host.

$ git clone https://github.com/e-scheer/hostcraft && cd hostcraft
$ cp .env.example .env # set DJANGO_SECRET_KEY + MC_RCON_PASSWORD + admin password
$ docker compose up -d # open http://localhost:8080