Files
SCOPENET-MC/README.md
T
Claude 5dc8a4f2f1 Add Docker image, Compose, CI/CD workflows and docs
- Multi-arch (amd64/arm64) panel image: static musl binary on scratch,
  cross-compiled with cargo-zigbuild (no QEMU), non-root, healthcheck
- docker-compose.yml + .env.example for one-command deployment
- CI: fmt, clippy, tests, web type-checks, Windows launcher build,
  real-network installs of vanilla/Fabric/Quilt/Forge/NeoForge,
  Docker build
- Release: Windows NSIS installer with baked-in panel URL, GHCR image
  push and GitHub release (tag push or manual dispatch)
- README, admin guide, Microsoft auth setup, architecture, development
- rustfmt config and formatting pass

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011ARcGWxLx21FwXJ3yfGriS
2026-09-28 05:19:36 +00:00

122 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<div align="center">
<img src="launcher/src-tauri/icons/128x128.png" width="96" alt="" />
# ScopeNet
**A fast, fully customisable Minecraft launcher — and the self-hosted admin panel that controls it.**
Brand it, publish vanilla versions or modpacks, manage players, and push changes to every launcher instantly.
</div>
<p align="center">
<img src="docs/screenshots/launcher-home.webp" width="49%" alt="Launcher home" />
<img src="docs/screenshots/panel-design.webp" width="49%" alt="Panel launcher designer" />
</p>
## What's inside
| | |
|---|---|
| **Launcher** (Windows) | Tauri 2 + Rust + Svelte. Uses the system WebView2 instead of bundling Chromium, so the installer stays small and memory use low. |
| **Admin panel** (Docker) | Rust (Axum) + SQLite + Svelte. 14 MB image; measured ~2 MB RAM at idle. |
| **Engine** | `scopenet-core`: installs Minecraft, Java, Fabric/Quilt/Forge/NeoForge and launches the game. |
### Launcher features
- **Accounts** — panel accounts (username + password, offline-mode play), **Microsoft** sign-in, and local **offline** usernames. Tokens are encrypted with a key stored in Windows Credential Manager.
- **Instances** — every instance the admin publishes shows up in the sidebar; group-restricted ones only for the right players.
- **One-click play** — downloads the right **Java automatically**, the game, the mod loader and the modpack, with live speed/ETA. Files are shared between instances and verified by SHA-1.
- **Built-in server** — the instance's server is added to the multiplayer list, **auto-joined** (Quick Play on 1.20+), and its live status (players, MOTD, ping) is shown on the home screen.
- **Settings** — memory with a recommendation for your PC, resolution, fullscreen, what happens on launch, Java path, GC presets (G1 / ZGC), JVM args, **Minecraft keybind editor** (applied to every instance), custom accent colour, glass/animation toggles, UI scale, storage manager, per-instance overrides.
- **Quality of life** — game console, crash dialog with plain-English hints, repair files, offline launch from cache, self-updates from GitHub Releases, single-instance window, `Ctrl+Enter` to play.
- **Branding from the panel** — name, logo, colours, font, corner radius, glass, image/video background, news feed, social links, custom CSS. No rebuild needed.
### Admin panel features
- **Instances** — pick a Minecraft version + loader, or import a modpack from **Modrinth**, **CurseForge** or a **.zip** (`.mrpack`, CurseForge export, or any instance folder). Upload extra mods/configs. CurseForge mods that block third-party downloads are flagged with a download link.
- **Access control** — public, signed-in players, or specific **groups**.
- **Players** — create/approve/disable accounts, roles, groups; sign-ups closed / approval / open.
- **Launcher design** — every branding option with a **live preview** and 7 colour presets.
- **Dashboard** — launches per day, active players, popular instances, recent activity.
<p align="center">
<img src="docs/screenshots/launcher-install.webp" width="32%" alt="" />
<img src="docs/screenshots/launcher-controls.webp" width="32%" alt="" />
<img src="docs/screenshots/panel-dashboard.webp" width="32%" alt="" />
</p>
## Quick start
### 1. Run the panel
```bash
curl -O https://raw.githubusercontent.com/scopeddlol/SCOPENET-MC/main/docker-compose.yml
curl -o .env https://raw.githubusercontent.com/scopeddlol/SCOPENET-MC/main/.env.example
# edit .env → set ADMIN_PASSWORD
docker compose up -d
```
Open `http://your-server:8080`, sign in as `admin`, then:
1. **Launcher design** → name, logo, colours, news.
2. **Instances** → *New instance* → a version, or a Modrinth / CurseForge / .zip modpack.
3. **Settings** → how players sign in.
> Put the panel behind HTTPS (Caddy, Traefik, nginx, Cloudflare Tunnel…) before sharing it. See [docs/admin-guide.md](docs/admin-guide.md).
### 2. Build your branded launcher
1. In GitHub → **Settings → Secrets and variables → Actions → Variables**, add:
- `PANEL_URL` = `https://panel.example.com` (players connect automatically)
- `LOCK_PANEL` = `1` (optional: hide the "change server" option)
- `LAUNCHER_NAME` = `MyServer Launcher` (optional)
2. **Actions → Release → Run workflow**, enter a version like `1.0.0` — or push a tag `v1.0.0`.
The workflow builds the **Windows installer**, pushes the **panel image to GHCR** (`ghcr.io/<owner>/scopenet-mc-panel`, amd64 + arm64) and publishes a **GitHub release**. Installed launchers pick up new releases automatically.
> The GHCR package is private by default the first time — make it public under your GitHub profile → Packages if you want `docker pull` without logging in.
## Repository layout
```
crates/shared Wire types shared by launcher and panel (manifest, branding, auth)
crates/core Launcher engine: Mojang/Java/loaders, file sync, launch, MS auth, ping
panel/server Admin panel API (Axum + SQLite)
panel/web Admin panel UI (Svelte 5)
launcher/ Desktop launcher UI (Svelte 5)
launcher/src-tauri Desktop launcher shell (Tauri 2)
Dockerfile Panel image (static binary on scratch)
docker-compose.yml Panel deployment
.github/workflows CI + release (installer, GitHub release, GHCR image)
```
## Documentation
- [Admin guide](docs/admin-guide.md) — deploying, HTTPS, modpacks, players, backups
- [Microsoft sign-in setup](docs/microsoft-auth.md) — Azure app registration
- [Architecture](docs/architecture.md) — how the pieces fit, API reference
- [Development](docs/development.md) — running everything locally, tests
## Configuration reference
**Panel (environment variables)**
| Variable | Default | |
|---|---|---|
| `ADMIN_USERNAME` | `admin` | First admin account (created on first start) |
| `ADMIN_PASSWORD` | random, printed in logs | First admin password |
| `JWT_SECRET` | auto-generated in `/data` | Signs login tokens |
| `CURSEFORGE_API_KEY` | – | Also settable in the panel |
| `MAX_UPLOAD_MB` | `2048` | Largest modpack upload |
| `SCOPENET_BIND` | `0.0.0.0:8080` | Listen address |
| `SCOPENET_DATA_DIR` | `/data` | Database, hosted files, uploads |
**Launcher (build-time, via repository variables)** — `PANEL_URL`, `LOCK_PANEL`, `LAUNCHER_NAME`.
## Notes
- Minecraft is a trademark of Mojang Studios. ScopeNet is not affiliated with Mojang or Microsoft. Offline mode is intended for your own community servers.
- No license has been chosen yet — add a `LICENSE` file before distributing.