Host a Valheim dedicated server at home with VKP (Vikinger Panel) — a modern web panel, no coding required. Manage worlds, passwords, BepInEx mods, Thunderstore installs, backups, and player lists from your browser.
Self-hosted Valheim · Docker one-click setup · Modded & vanilla · English UI · Free for personal use
Looking for a step-by-step guide? → Documentation for beginners (install Docker, download, connect friends)
- Who is this for?
- Documentation
- Quick start (recommended — GitHub Release)
- Install from source
- Updating
- Features
- Requirements
- GitHub Sponsors
- Licensing
- Support
- Development
- CI/CD and releases
- Credits
- First-time server hosts who want Valheim with friends without reading wiki threads
- Home lab / VPS owners who prefer Docker over manual SteamCMD setup
- Modded communities using Thunderstore, BepInEx, and scheduled backups
- Not for commercial hosting providers reselling the panel (see licensing)
| Guide | Description |
|---|---|
| Getting started | Full walkthrough — Docker, .env, first boot, connect in-game |
| Port forwarding | Router, firewall, VPS — let friends join from the internet |
| Installing mods | Thunderstore, BepInEx, what players need on their PC |
| Discord alerts | Channel webhooks — joins, server lifecycle, mods, high load |
| Troubleshooting | Permissions, ports, slow first boot, common errors |
| FAQ | Quick answers (same topics as the in-panel Help tab) |
Best for server owners who just want to run the panel — no git clone required.
- Linux with Docker and Docker Compose v2
- UDP ports 2456–2458 open on your firewall (for external players)
- ~4 GB RAM (Valheim + BepInEx + panel)
- Your user in the
dockergroup (DOCKER_GID)
Go to GitHub Releases and download:
vikinger-panel-X.Y.Z-dist.zip
unzip vikinger-panel-*-dist.zip
cd vikinger-panel-*/
cp .env.example .env
nano .env # or your preferred editor| Variable | What to set |
|---|---|
HOST_PROJECT_DIR |
Absolute path to this folder (e.g. /home/you/vikinger-panel) |
DOCKER_GID |
Docker group GID: getent group docker | cut -d: -f3 |
SERVER_NAME |
Server name shown in the server list |
WORLD_NAME |
Active world name on first boot |
SERVER_PASS |
Server password (min. 5 characters; empty = open) |
PANEL_PORT |
Panel HTTP port (default 8080) |
chmod +x scripts/*.sh
./scripts/start.shThe script loads the bundled Docker image and starts two containers: valheim-server (game) and vikinger-panel (web UI).
Browse to http://localhost:8080 (or your PANEL_PORT).
On the first boot, Valheim downloads the game and installs BepInEx — this can take several minutes. Watch progress on the Overview tab (live console).
In Valheim, use Join IP and enter YOUR_IP:2456 (default port). Enter the server
password if set. The current address is shown on the Overview tab under “How to connect”.
See docs/troubleshooting.md for detailed fixes. Quick reference:
| Issue | Fix |
|---|---|
| Permission errors on folders | Ensure config/ and data/ are owned by UID 1000 |
| Players cannot connect | Forward UDP 2456–2458 to the host — port forwarding guide |
| Panel looks stale after update | Hard refresh: Ctrl+Shift+R |
DOCKER_GID wrong |
Run getent group docker and update .env |
| First boot very slow | Normal — Valheim downloads ~2–3 GB; watch Overview console |
For contributors or anyone who wants to build the image locally:
git clone https://github.com/viniciuspetrachin/vikinger-panel.git
cd vikinger-panel
cp .env.example .env
# Edit .env: SERVER_NAME, WORLD_NAME, SERVER_PASS, HOST_PROJECT_DIR, DOCKER_GID
docker compose up -d --buildOpen http://localhost:8080. See CONTRIBUTING.md for the full dev workflow.
docker compose --project-directory . -f server/docker-compose.standalone.yml up -d- Download the new release from GitHub Releases
- Extract over the existing folder (or migrate
config/,data/,panel-data/) - Run:
./scripts/reload-panel.sh --load-imageYour worlds, mods, and settings in config/, data/, and panel-data/ are preserved.
docker pull ghcr.io/viniciuspetrachin/vikinger-panel:X.Y.Z
docker compose up -d| Area | What you can do |
|---|---|
| Overview | Server status, online players, live console, quick controls |
| Discord | Webhook alerts — player join/leave, server start/stop/restart, mods, backups, high load |
| Server | Name, password, port, admin/ban/allow lists, extra args (-crossplay) |
| Worlds | Create, switch, presets (Easy → Hardcore), .fwl editor, import worlds |
| Mods & Config | Install via Thunderstore/URL/upload, enable/disable, edit BepInEx .cfg, game & mod updates |
| Backups | Cron scheduling, manual backup, download and restore |
| Resources (advanced) | Container RAM limit, real-time CPU/network charts |
| Files (advanced) | File browser with CodeMirror editor |
| Logs / Audit (advanced) | Sanitized Docker logs, audit trail of all panel actions |
Advanced mode in the sidebar reveals Resources, Files, Logs, and Audit — for experienced admins.
- Linux with Docker and Docker Compose v2
- UDP ports 2456–2458 open (for external players)
- ~4 GB RAM recommended (Valheim + BepInEx + panel)
- Access to
docker.sock(the panel container controls the game server)
If Vikinger Panel helps you, consider becoming a sponsor:
github.com/sponsors/viniciuspetrachin/dashboard
- Sponsorship helps keep the project maintained — new features, bug fixes, and releases
- Sponsors at $1 USD/month or more get direct support from the author (install help, configuration questions, etc.)
- Sponsorship is voluntary and does not replace a commercial license for hosting providers reselling the panel
You can also use the Support the Project tab inside the panel.
This project uses Polyform Shield 1.0.0 — a source-available license for open community use without allowing resale.
- Run on your own Valheim server (home, VPS, community)
- Modify the code for personal use
- Contribute PRs, issues, and documentation
- Distribute forks under the same license terms
- Hosting providers offering the panel to paying customers
- Resale or white-label as a paid product
- Any service competing with Vikinger Panel as a commercial offering
Contact for commercial licensing: vr.petrachin@gmail.com
See COMMERCIAL-LICENSE.md for details.
| Channel | Purpose |
|---|---|
| GitHub Issues | Bugs and feature requests |
| GitHub Sponsors ($1+/month) | Direct support from the author |
| Panel Help tab | Built-in FAQ |
| vr.petrachin@gmail.com | Commercial licensing |
./scripts/dev.sh- Backend:
uvicorn --reload— editpanel/*.pyand it reloads - Frontend: Tailwind + esbuild watcher — edit
panel/frontend/**and refresh with F5 - No image rebuild needed in dev mode
./scripts/reload-panel.sh # rebuild + restart panel container
./scripts/reload-panel.sh --tests # pytest unit + e2e before deploycd panel
python -m venv .venv && .venv/bin/pip install -r requirements.txt
.venv/bin/pytest tests/unit -q
.venv/bin/playwright install chromium
.venv/bin/pytest tests/e2e -q
npm install && npm run buildEvery merge to main automatically:
- Runs tests (unit + E2E with Playwright)
- Bumps version — patch auto-increment (
2.1.0→2.1.1; editpanel/version.pymanually for major/minor) - Creates git tag
vX.Y.Zand GitHub Release with:- Ready-to-use ZIP (no source code)
- Docker image
.tarfile
- Publishes image to GHCR:
ghcr.io/viniciuspetrachin/vikinger-panel:X.Y.Z
Pull requests to main run the same tests via GitHub Actions. Enable branch protection
requiring the test check before merge — see CONTRIBUTING.md.
vikinger-panel/
├─ panel/ # web panel (FastAPI + Alpine.js)
├─ server/ # standalone game server compose
├─ scripts/ # dev.sh, reload-panel.sh, release scripts
├─ docker-compose.yml # PRODUCTION: valheim-server + vikinger-panel
├─ docker-compose.dev.yml # DEV: hot-reload override
├─ config/ # server config (gitignored)
├─ data/ # game data: worlds, steamapps (gitignored)
└─ panel-data/ # panel data: audit, mod registry (gitignored)
| Variable | Description |
|---|---|
SERVER_NAME |
Name shown in the Valheim server list |
WORLD_NAME |
Active world on first boot |
SERVER_PASS |
Server password (min. 5 characters) |
HOST_PROJECT_DIR |
Absolute project path on the host |
DOCKER_GID |
GID of the docker group (getent group docker) |
PANEL_PORT |
Panel HTTP port (default 8080) |
UPDATE_CRON |
Cron for game update checks (empty = disabled) |
UPDATE_IF_IDLE |
Only update when no players online (true/false) |
- lloesche/valheim-server-docker — base server image
- Thunderstore Valheim — mods
- Valheim community
© 2026 Vinicius Petrachin · Polyform Shield 1.0.0
