Codync
A free, open-source 1:1 alternative to Grok Bot and Muse. Message Claude Code, Codex, Cursor and 40+ coding agents as persistent bots from your iPhone, Mac or Linux desktop. Group chats, threads, appr
Self-hosted game & app server control panel (Docker). One binary, one-command install, one-click Runes.
Translation pending
Developer toolsGo · HTMLGitHub @kristianwindOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Open-source, self-hosted control panel for apps and game servers — one-click deploy and manage Minecraft, DayZ, Rust and 30+ more from one place. Go · Svelte · SQLite · Docker.
Taken from the repository README
Loading the full README.
Read the full README ↗Yggdrasil Panel is a self-hosted game & app server control panel for Debian/Ubuntu (Docker) — think AMP + Pterodactyl, but radically easier to install, update and maintain, and not just for games: run databases and homelab apps (Vaultwarden, Gitea, Uptime Kuma, Grafana, WordPress, Nextcloud…) from the same one-click "Runes".
📖 Documentation · 🌐 yggdrasilpanel.com · 💬 Discord
community-runes/
to import in one click.A hobby project, maintained by one person, in the open. The latest release is the supported one — fixes ship forward instead of being backported, and the panel can update itself in place. The releases are the changelog; SECURITY.md has the threat model and how to report a vulnerability.
🤖 Built with Claude Code. Provided as‑is, with no warranty and no liability whatsoever — you use it entirely at your own risk. See the Disclaimer below.
curl -fsSL https://raw.githubusercontent.com/kristianwind/yggdrasil/main/install.sh | sudo bash
The installer detects your distro, installs Docker if missing, creates a dedicated service user, drops a systemd unit, and prints your login URL and a generated admin password. Re-running it upgrades or repairs an existing install.
Updating later is just: swap the binary + restart the service (or re-run the one-liner — it's idempotent).
Yggdrasil Panel phones home, on by default, and this is the whole of it:
{ "instance_id": "a random uuid generated on this install", "version": "v0.3.0" }
Once a day, to https://beacon.yggdrasilpanel.com/api/beacon. No server names, no addresses, no
configuration, no user data — and the collector stores no IP. The id identifies an install to nobody;
it exists only so repeat pings can be counted as one, so the project can see roughly how many people
run it.
The panel tells you this itself the first time an admin signs in, with a one-click way to decline.
You can also turn it off, or point it at your own collector, under Settings → Beacon, which shows
the literal payload. Setting beacon_enabled to 0 is respected permanently — upgrades never turn it
back on.
Nothing else in the panel reports anything anywhere.
📖 Full documentation — or jump straight to Getting started, which takes you from a bare box to a running game server.
Guides for servers, runes, users & permissions, backups & schedules, networking, monitoring & alerts, notifications, and Kvasir, the AI assistant. Reference: configuration, HTTP API, rune schema.
Servers & runtime
installing → starting → running → stopped with a clear
starting state until the server logs it's actually ready to accept playersSIGKILL'd mid-save on a restartLive admin & moderation (rune-declared, generic across games)
Kvasir — the AI assistant (optional; a fresh install has no AI at all)
Games & apps (gameskills / "Runes")
community-runes/,
grouped into databases/ apps/ games/); or upload a .yaml yourselfdata_path (where the volume mounts),
user (run-as uid) and keep_entrypoint (use the image's own entrypoint) make
off-the-shelf app images first-classOrganize & control access
view / control / console / files / create / delete / backup / schedule at global / realm / game-type /
single-server scopeyggdrasil reset-password break-glass CLI for a lockoutNetworking & connectivity
[ygg:…] so it only ever touches its own forwards)host:port players join onapp.example.com without touching a routerAutomation & operations
{{minutes}},
{{server_name}}) and a "skip if players online" guardMigrate, import & move
.wpress archive, or files plus a database dumpAnti-cheat & moderation
Security
Light and dark themes; the UI is fully responsive and installable as a PWA.
| Term | Meaning |
|---|---|
| Yggdrasil | the whole panel |
| Gameskill (UI: Rune) | a declarative game definition (YAML). You "carve new runes" to add games. |
| Realm | a group/category of servers. Default grouping is by game type; custom realms supported. |
Each game server runs as its own Docker container — giving per-server CPU/RAM limits, clean isolation, and portable per-game runtimes (JRE, SteamCMD) without polluting the host.
Yggdrasil is a plain HTTP app on :8080 (configurable). Put any reverse proxy in
front for HTTPS. The console, live logs, and install output are WebSockets, so
your proxy must forward WebSocket upgrades — this is the #1 cause of "it loads
but the console is blank".
In Proxy Hosts → Add/Edit:
| Field | Value |
|---|---|
| Domain Names | yggdrasil.example.com |
| Scheme | http (Yggdrasil terminates no TLS itself) |
| Forward Hostname / IP | the host running Yggdrasil, e.g. 192.168.1.50 |
| Forward Port | 8080 |
| Websockets Support | ✅ ON ← required for console / logs / install |
| Block Common Exploits | ON (fine) |
| SSL tab | request a Let's Encrypt cert, Force SSL + HTTP/2 ON (fine) |
Long-running consoles can sit idle longer than a proxy's default read timeout. Yggdrasil now sends WebSocket keepalive pings every 30 s, but if you still see the console drop after a while, paste this into the host's Advanced tab:
location / {
proxy_pass http://192.168.1.50:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 86400s; # don't time out idle consoles
proxy_buffering off; # stream install/log output immediately
}
server.host in the config is 0.0.0.0 (not 127.0.0.1), and from the
proxy host run curl http://192.168.1.50:8080 to confirm it answers.proxy_read_timeout
as above.Verified: page load, login, and the WebSocket
101 Switching Protocolsupgrade all pass through an NGINX reverse proxy — no app-side changes are needed beyond enabling WebSocket forwarding on the proxy.
Requirements: Go 1.26+, and Node 20+ for the frontend.
The frontend (web/dist) is git-ignored and embedded at build time via
//go:embed all:web/dist, so build it before go build — otherwise the binary
serves an empty UI (it still compiles, thanks to a tracked .gitkeep). CI and
the release workflow build it automatically.
# Build the frontend once (rebuild after changing anything under web/src)
cd web && npm ci && npm run build && cd ..
# Run the backend against a local config (Docker optional; it degrades gracefully)
go run ./cmd/yggdrasil --config ./dev-config.yaml
# Tests
go test ./...
# Build a static binary (frontend must be built first, as above)
CGO_ENABLED=0 go build -o yggdrasil ./cmd/yggdrasil
A minimal dev-config.yaml:
server: { host: "127.0.0.1", port: 8080 }
database: { path: "./ygg.db" }
admin: { username: "admin", password: "changeme" }
See ARCHITECTURE.md for the design, the rune schema for the gameskill format, and the API reference for the HTTP API.
Yggdrasil was built with Claude Code, Anthropic's agentic coding tool. Much of the code, configuration, and documentation in this repository was generated by an AI assistant.
This software is provided "AS IS", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and non‑infringement.
There is absolutely no liability. In no event shall the authors, contributors, or anyone associated with this project be held liable for any claim, damages, data loss, downtime, security incident, or other liability — whether in an action of contract, tort, or otherwise — arising from, out of, or in connection with the software or its use.
You use Yggdrasil entirely at your own risk. It manages game servers, runs containers, executes install scripts, opens network ports, and stores credentials; operate it only on systems and data you are willing to lose, keep your own backups, and review what it does before running it in production. By installing or using this software you accept full responsibility for any consequences.
Join the Discord — questions, help getting a rune working, and news about releases.
Found a bug? Please open an issue rather than reporting it in chat. Issues don't scroll away, and they can carry the logs and version information a fix actually needs. Discord is the right place to ask whether something is a bug.
Yggdrasil Panel is free software under the GNU Affero General Public License v3.0.
Run it, study it, share it, change it. The Affero part is the one that matters for a panel: if you modify it and other people use your modified version over a network, they're entitled to your modified source. Running it — modified or not — for yourself, your friends or your community carries no obligation beyond keeping the notices intact. Selling hosting built on a closed fork does.
The panel links to its own source from the sidebar, so anyone using an instance can find it. If you fork it, point that link at your fork — that's what §13 asks for, and it's one string.
Copyright © 2026 Kristian Wind.