{
  "markdown": "<div align=\"center\">\n\n<img src=\"frontend/public/favicon.svg\" alt=\"Fabricator Logo\" width=\"92\" height=\"92\" />\n\n# Fabricator\n\n**Self-hosted web dashboard for managing Minecraft servers.**\n\n[![License: AGPL-3.0](https://img.shields.io/badge/license-AGPL--3.0-blue?style=flat-square)](LICENSE)\n[![Stars](https://img.shields.io/github/stars/philderks/Fabricator?style=flat-square)](https://github.com/philderks/Fabricator/stargazers)\n[![Platform](https://img.shields.io/badge/platform-Linux%20%7C%20Docker-lightgrey?style=flat-square)](https://github.com/philderks/Fabricator)\n[![Docker](https://img.shields.io/badge/ghcr.io-philderks%2Ffabricator-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/philderks/Fabricator/pkgs/container/fabricator)\n\n[Website](https://fabricator.site/) | [Documentation](https://docs.fabricator.site/) | [MCP server for AI clients](mcp/README.md)\n\n</div>\n\n---\n\n<div align=\"center\">\n  <img width=\"2560\" height=\"1313\" alt=\"Overview\" src=\"https://github.com/user-attachments/assets/7ed784e6-eb1d-4305-bc98-3800a785fbc1\" />\n</div>\n\n\n---\n\n## Features & Roadmap\n\n| | Feature | Status |\n|---|---|---|\n| 🧩 | **Loaders**: Fabric, Quilt, NeoForge, Forge, Paper, Purpur, Folia, Pufferfish, Vanilla | ✅ Available |\n| 📦 | **Mod & plugin management**: install, remove, and browse Modrinth mods and plugins | ✅ Available |\n| 📋 | **Logs & monitoring**: live log stream, TPS and RAM graphs | ✅ Available |\n| 👥 | **Player management**: online players, player heads, custom actions | ✅ Available |\n| 💾 | **Backups & restore**: manual snapshots, restore from any backup | ✅ Available |\n| 🌍 | **World import**: upload a world archive and swap it in | ✅ Available |\n| 🖥️ | **Multiple servers**: manage several instances from one dashboard | ✅ Available |\n| ▶️ | **Auto-start**: always, never, or last-state restore | ✅ Available |\n| ☕ | **Managed Java runtimes**: downloaded and pinned per server | ✅ Available |\n| 🌐 | **playit.gg tunnels**: public access without port forwarding | ✅ Available |\n| 🐳 | **Docker**: single multi-arch (amd64/arm64) image, runs non-root | ✅ Available |\n| ⌨️ | **CLI** (`fabricator`): `status`, `start`/`stop`, `update`, `version`, `uninstall` | ✅ Available |\n| ⬆️ | **Self-update**: from the web UI, or via the CLI or install script | ✅ Available |\n| ⌨️ | **CLI**: expanded server and mod management commands | 📋 Planned |\n| ⏰ | **Scheduled commands** | 📋 Planned |\n| 🔄 | **One-click Minecraft / Fabric server upgrades** | 📋 Planned |\n| 📊 | **Metrics tab**: CPU, RAM, and usage over time | 📋 Planned |\n| 🔐 | **User roles and permissions** | 📋 Planned |\n| ✏️ | **Editor & files**: better text editor, view archived logs | 📋 Planned |\n| 📥 | **More install targets**: Proxmox VE, CasaOS, Umbrel, Unraid, Coolify/Dokploy | 📋 Planned |\n\n---\n\n## Quick Start\n\n### Docker (recommended)\n\nA single multi-arch image is published to GHCR for every release. It runs as a\nnon-root user and keeps all state on one `/data` volume.\n\n```bash\n# Grab the compose file and start\ncurl -fsSL https://raw.githubusercontent.com/philderks/Fabricator/main/docker-compose.yml -o docker-compose.yml\ndocker compose up -d\n```\n\nThe packaged `docker-compose.yml` publishes the panel to **host loopback only**\n(`127.0.0.1:5000`). On first use you'll be prompted to create the operator password.\nMinecraft server ports aren't published by default; use the built-in playit.gg tunnel,\nor map each server's port explicitly (e.g. `25565:25565`).\n\nTo update, pull the new image and recreate the container — your data persists in\nthe named volume:\n\n```bash\ndocker compose pull && docker compose up -d\n```\n\nDocker is the simplest way to run Fabricator on **Linux, macOS, or Windows** (via\nDocker Desktop / WSL2).\n\n### One-line installer\n\nThe script downloads a **release tarball** from [GitHub Releases](https://github.com/philderks/Fabricator/releases), installs dependencies, creates a `fabricator` user and systemd unit, and starts the app. Supported distros: Debian/Ubuntu (and derivatives), Arch, Fedora/RHEL family. **systemd** and **curl** are required.\n\n```bash\ncurl -fsSL https://fabricator.site/install.sh | bash\n```\n\nBy default this installs the **latest** published release.\n\n**Updating.** The easiest way is from the panel itself: Fabricator checks GitHub Releases and you can update from the sidebar. You can also re-run the installer, which detects an existing install and updates in place (backing up `servers.json` and `fabricator.env`, keeping your data under `/var/lib/fabricator`):\n\n```bash\ncurl -fsSL https://fabricator.site/install.sh | bash\n```\n\nOr update from the CLI:\n\n```bash\nfabricator update\n```\n\nAfter install, open `http://<host>:5000` (the default packaged config binds to all interfaces — use a firewall or reverse proxy if the host is reachable from untrusted networks).\n\nFor local development, the app defaults to loopback-only; see `.env.example`.\n\n<details>\n<summary>Manual installation</summary>\n\n```bash\n# Clone\ngit clone https://github.com/philderks/Fabricator.git\ncd Fabricator\n\n# Backend\npython3 -m venv venv\nsource venv/bin/activate\npip install -r requirements.txt\n\n# Frontend\ncd frontend\nnpm install\nnpm run build\ncd ..\n\n# Run (development — serves API + built frontend from frontend/dist)\npython3 run.py\n```\n\nEnvironment variables are documented in `.env.example`. For production-like paths, set `FLASK_ENV=production`, `SERVER_ROOT`, and `SERVER_INDEX_FILE` (see Configuration).\n\n</details>\n\n---\n\n## Requirements\n\n| | Requirement |\n|---|---|\n| Docker | Any OS with Docker Engine or Docker Desktop (recommended path) |\n| OS | Linux (Debian/Ubuntu, Arch, or Fedora/RHEL, systemd) for the native installer |\n| Python | 3.11+ (manual/native install) |\n| Node.js | 20.x (frontend build only) |\n\n> The native installer targets Linux. On macOS and Windows, run Fabricator via Docker.\n\n---\n\n## Configuration\n\nWith Docker, set these as `environment:` entries in `docker-compose.yml`; the image already pins every data path onto the `/data` volume. For the native install, the installer writes `/etc/fabricator/fabricator.env` (group `fabricator`, mode `0640`). Common variables:\n\n```env\n# Listen address — packaged default is all interfaces; use a reverse proxy in production\nHOST=0.0.0.0\nPORT=5000\nFLASK_ENV=production\n\n# Server instances and index (paths must be writable by the fabricator user)\nSERVER_ROOT=/var/lib/fabricator/servers\nSERVER_INDEX_FILE=/var/lib/fabricator/servers.json\n\n# Optional: comma-separated origins for a separate dev UI or external frontends (no *)\n# CORS_ORIGINS=https://dashboard.example.com\n\n# playit.gg tunnel agent — set to \"true\" to start the agent automatically on boot.\n# The agent creates a public tunnel so the server is reachable without port-forwarding.\nPLAYIT_ENABLED=false\n```\n\nThe playit.gg tunnel makes a server reachable without port forwarding. The installer\nprovisions the pinned, sha256-verified `playit` and `playit-cli` binaries automatically —\nno separate step. Turn the tunnel on per server under **Server → Settings → Network** (or\n**Overview → Public access**), which walks you through the one-time playit.gg account claim.\nSet `PLAYIT_ENABLED=true` above only if you want it to auto-start on boot.\n\nManaged Java runtimes are stored under `/var/lib/fabricator/java` by default when `FLASK_ENV=production`.\n\nAfter editing, restart the service:\n\n```bash\nsudo systemctl restart fabricator\n```\n\n<details>\n<summary>Filesystem layout</summary>\n\n```\n/opt/fabricator/app              # Application code (fabricator:fabricator)\n/opt/fabricator/venv             # Python virtualenv (fabricator:fabricator)\n/var/lib/fabricator              # Server data, backups, managed Java\n/etc/fabricator/fabricator.env   # Config (root:fabricator, 0640)\n/etc/systemd/system/fabricator.service\n```\n\n</details>\n\n### Authentication\n\nThe management panel requires a login by default. On **first boot** (no\ncredential configured yet) it starts in a locked **setup mode**: open the panel\nand you'll be taken to a one-time page to create the operator password — in the\nbrowser, the same on Linux and Docker (no terminal needed).\nUntil a password is set, only that page is reachable.\n\nThe session signing key is generated and persisted automatically on first boot;\nthe password is stored, hashed, in a `0600` `auth.json` in the data directory\nnext to `servers.json` (`/var/lib/fabricator` under systemd, `/data` in Docker).\n\n**Advanced / declarative setup.** You can skip the setup page by providing the\ncredential up front — useful for Docker/automation and recommended on untrusted\nnetworks (see the security note):\n\n1. Optionally pin `SECRET_KEY` to a fixed value (otherwise auto-generated):\n   `python -c \"import secrets; print(secrets.token_hex(32))\"`\n2. Generate a password hash and set `FABRICATOR_AUTH_PASSWORD_HASH`:\n   - systemd install: `fabricator hash-password`\n   - Docker / source: `python -m backend.auth hash`\n\nPrecedence: env hash > persisted file > setup mode (and for the signing key:\nenv > file > auto-generated).\n\nTo run **without** the built-in login (only if you front Fabricator with your\nown reverse-proxy authentication), set `FABRICATOR_DISABLE_AUTH=1`. This is the\nonly supported way to disable it.\n\n**Change or reset the password.** Once logged in, change it from the panel header\n(**Change password**). Forgot it / locked out? Delete `auth.json` from the data\ndirectory and restart — the app drops back into setup mode so you can set a new\none. The file lives next to `servers.json`: `/var/lib/fabricator/auth.json` under\nsystemd, `/data/auth.json` in Docker. (Deleting it only resets the password/key;\nyour servers are untouched.)\n\n> **Security note (trust-on-first-use).** The first-boot setup page is reachable\n> by anyone who can reach the panel until the password is set. On an untrusted\n> network, set `FABRICATOR_AUTH_PASSWORD_HASH` before first exposure instead of\n> relying on the open setup page.\n\nWhen Fabricator is served behind TLS, also set `FABRICATOR_SESSION_COOKIE_SECURE=1`\nso the session cookie carries the `Secure` flag.\n\n---\n\n## CLI\n\nThe native (systemd) install ships a `fabricator` command for managing the service from the shell:\n\n```bash\nfabricator status            # systemd state + Flask/Minecraft API reachability (--json available)\nfabricator start | stop      # control the systemd service\nfabricator update            # update to the latest GitHub release (runs the installer)\nfabricator version           # show the installed version\nfabricator hash-password     # generate a password hash for FABRICATOR_AUTH_PASSWORD_HASH\nfabricator uninstall         # remove app, data, config, systemd unit, and service user\nfabricator help              # list all commands\n```\n\nThe read commands (`status`, `version`, `help`) accept `--json` for scripting. The CLI is currently minimal and will grow to cover server and mod management.\n\n---\n\n## Contributing\n\nBug reports and pull requests are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines. For larger changes, open an issue first.\n\n---\n\n## License\n\n[AGPL-3.0](LICENSE)\n",
  "bytes": 11105,
  "sha": "18fc44097d1be1bdbd8504c228f5f2161db74af95101304c5b58e087d691cff3",
  "repo_slug": "philderks/fabricator",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_philderks_fabricator_panel_mcp_1f0e6c46/readme"
}