Introduction
QM Project is a platform for game infrastructure: a launcher (including for Minecraft), a unified REST API, an admin panel, a public site, the QMClient agent on dedicated Linux hosts, and this documentation. QMAdmin manages dedicated hosts, directory scans, optional Minecraft process control (run.sh) and logs via QMClient supervise, and agent binary updates; SteamCMD-based install/update flows are in development.
Components and how they connect
QMLauncher, QMWeb, and QMAdmin call a single QMServer (/api/v1); QMServer uses MySQL. QMAdmin toggles modules and client integrations (QMLauncher, QMWeb), which affects parts of the API — see QMServer. A separate mod/plugin (QXSync, coming soon) posts inventory snapshots to QMServer when the Minecraft module and QMWeb integration are enabled — see Inventory sync.
| Component | Role |
|---|---|
| QMLauncher | GUI launcher (Wails), native only on the desktop (no Docker): instances, mods, Microsoft sign-in, polling QMServer; Linux amd64 releases from GitHub v* tags — see QMLauncher |
| QMServer | Unified REST API (/api/v1), JWT, game accounts, skins, news, settings, server-side modpacks; Linux x86_64 only; repo QMServer. Install: install.sh — see QMServer. QXSync accepts inventory only with the Minecraft module and QMWeb integration (see inventory-sync) |
| QMAdmin | Admin panel: cloud users, game and dedicated servers, mods, news, keys (CurseForge, inventory sync), Ely.by. Build: QMSERVER_API_URL — see env vars; install.sh, ghcr.io/<owner>/qmadmin |
| QMClient | Agent on a dedicated Linux host (native only: binary + systemd, no Docker): periodic work_dir scan, optional --supervise (start/stop/run.sh, logs in QMAdmin), qmclient --upgrade; install from QMAdmin — see QMClient |
| QMWeb | Public site and account area: same QMServer accounts and API. Build: QMSERVER_API_URL, VITE_* — see env vars; install.sh, ghcr.io/<owner>/qmweb |
| QMDocs | Static site (Docusaurus 3): documentation is public; the Sign in button in the navbar goes to /login (QMServer, X-QM-Client: qmdocs). /licensing (Pro token issuance where QMSERVER_LICENSE_ISSUER_SEED is set) requires is_super_admin. Client activation — QMAdmin → Pro license and QMSERVER_LICENSE_PUBLIC_KEY. Build: npm run build in QMDocs |
Production API is usually at https://api.qx-dev.ru (see Deployment).
Monorepo Git
The qm-project root is one Git repository. QMAdmin, QMClient, QMDocs, QMLauncher, QMServer, QMWeb, and QMDeploy are submodules (see .gitmodules). QMServer may be private: use SSH and ssh-agent for git submodule update (ssh-add -l, test GitHub: ssh -T [email protected]).
git clone --recurse-submodules <your-qm-project-url>
git submodule update --init --recursive
To move submodule pointers to remote branch tips (changes the superproject): git submodule update --remote --merge. Commit inside the submodule directory, then commit the updated submodule pointer at the repo root.
The QXMods/ directory at the root is not tracked (.gitignore).
Quick start (monorepo)
# In .env or .env.cloud set GHCR_OWNER (ghcr.io owner — see .env.example)
make build-all # QMLauncher + docker compose pull qmserver (qmserver:latest image)
make run-all # up qmserver + deps from docker-compose.yaml
# cloud stack: make run-qmserver-cloud (compose docker-compose.cloud.yaml)
make deploy # prod: rsync + build/run (QMServer from ghcr.io)
Environments and production ports — Deployment.
Environment links
| Service | Domain (example) |
|---|---|
| QMServer (API, Swagger) | api.qx-dev.ru |
| QMAdmin | admin.qx-dev.ru |
| QMWeb | web.qx-dev.ru |
| Documentation | qm.qx-dev.ru |