Skip to main content
Version: Next

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.

ComponentRole
QMLauncherGUI 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
QMServerUnified 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)
QMAdminAdmin 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
QMClientAgent 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
QMWebPublic site and account area: same QMServer accounts and API. Build: QMSERVER_API_URL, VITE_* — see env vars; install.sh, ghcr.io/<owner>/qmweb
QMDocsStatic 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 (compose, Makefile, nginx, shared tooling). App trees QMAdmin, QMClient, QMDocs, QMLauncher, QMServer, QMWeb, and QMDeploy are separate Git repositories: clone each next to the monorepo root into matching folder names (they are .gitignored in qm-project, like QMBilling). Migrating from legacy submodules: qm-project/tools/detach-qm-repos-from-monorepo.sh.

git clone <your-qm-project-url>
cd qm-project
git clone [email protected]:mindevis/QMServer.git QMServer
git clone [email protected]:mindevis/QMAdmin.git QMAdmin
git clone [email protected]:mindevis/QMClient.git QMClient
git clone [email protected]:mindevis/QMDocs.git QMDocs
git clone [email protected]:mindevis/QMLauncher.git QMLauncher
git clone [email protected]:mindevis/QMWeb.git QMWeb
git clone [email protected]:mindevis/QMDeploy.git QMDeploy

Commits and tags live in each app repository; the qm-project root does not record their SHAs. For private repos use SSH and ssh-agent (ssh-add -l, ssh -T [email protected]).

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.

ServiceDomain (example)
QMServer (API, Swagger)api.qx-dev.ru
QMAdminadmin.qx-dev.ru
QMWebweb.qx-dev.ru
Documentationqm.qx-dev.ru