# Overlord
# [TELEGRAM SERVER JOIN NOW NO EXCUSES WE GIVE SUPPORT AND IT'S FUN](https://t.me/Onimai)
Hello, I made this project for fun.
The server is TypeScript on Node/Bun. The client is Go. Operators talk to the server through a web panel or the Electron desktop app, and agents connect over encrypted WebSockets.
Docker is the easiest way to run it.
> [!IMPORTANT]
> Use Overlord only on systems you own or are explicitly authorized to
> administer. Review the [Acceptable Use Policy](ACCEPTABLE_USE.md) before
> deployment. Report vulnerabilities privately according to the
> [Security Policy](SECURITY.md).
---
- [Quick Start (Docker)](#quick-start-docker)
- [Windows](#windows)
- [Linux](#linux)
- [macOS](#macos)
- [No Docker (.bat / .sh)](#no-docker-bat--sh)
- [Production Package Scripts](#production-package-scripts)
- [WebRTC Streaming](#webrtc-streaming)
- [OIDC / SSO Login](#oidc--sso-login)
- [Login Branding](#login-branding)
- [Docker Notes (TLS, reverse proxy, cache)](#docker-notes-tls-reverse-proxy-cache)
---
## Quick Start (Docker)
Pick your OS below. Each section is self-contained: install Docker, get the project, start it.
> Windows and macOS use `docker-compose.windows.yml`. Linux uses the default `docker-compose.yml` (host networking).
After the first start, open `https://localhost:5173`. Default login is `admin` / `admin` unless you set `OVERLORD_USER` / `OVERLORD_PASS`. First startup writes generated secrets to `data/save.json` (inside the container: `/app/data/save.json`) — keep that file private and back it up.
---
### Windows
Step-by-step: Windows
**1. Install Docker Desktop**
Either from the website:
- https://docs.docker.com/desktop/setup/install/windows-install/
Or with winget:
```powershell
winget install -e --id Docker.DockerDesktop
```
Start Docker Desktop once, then verify:
```powershell
docker --version
docker compose version
```
**2. Get the project**
```powershell
git clone https://github.com/vxaboveground/Overlord.git
cd Overlord
```
**3. Start it**
```powershell
docker compose -f docker-compose.windows.yml up -d
```
**4. Open the panel**
```text
https://localhost:5173
```
**5. Update later**
```powershell
docker compose -f docker-compose.windows.yml down
docker compose -f docker-compose.windows.yml pull
docker compose -f docker-compose.windows.yml up -d
```
**6. Stop**
```powershell
docker compose -f docker-compose.windows.yml down
```
---
### Linux
Step-by-step: Linux (Debian / Ubuntu / Kali)
**1. Install Docker**
Official docs: https://docs.docker.com/engine/install/debian/
Set up Docker's apt repository:
```bash
# Add Docker's official GPG key:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
sudo tee /etc/apt/sources.list.d/docker.sources <
---
### macOS
Step-by-step: macOS
**1. Install Docker Desktop**
Either from the website:
- https://docs.docker.com/desktop/setup/install/mac-install/
Or with Homebrew:
```bash
brew install --cask docker
```
Start Docker Desktop once, then verify:
```bash
docker --version
docker compose version
```
**2. Get the project**
```bash
git clone https://github.com/vxaboveground/Overlord.git
cd Overlord
```
**3. Start it**
macOS uses the same compose file as Windows:
```bash
docker compose -f docker-compose.windows.yml up -d
```
**4. Open the panel**
```text
https://localhost:5173
```
**5. Update later**
```bash
docker compose -f docker-compose.windows.yml down
docker compose -f docker-compose.windows.yml pull
docker compose -f docker-compose.windows.yml up -d
```
**6. Stop**
```bash
docker compose -f docker-compose.windows.yml down
```
---
## No Docker (.bat / .sh)
If you don't want Docker, use the included scripts.
Prerequisites:
- Bun in PATH
- Go 1.21+ in PATH
### Windows
Development mode (starts server + client):
```bat
scripts\start-dev.bat
```
Production mode (build + run server executable):
```bat
scripts\start-prod.bat
```
Build client binaries (adds client builds to the build queue):
```bat
scripts\build-clients.bat
```
### Linux / macOS
Make scripts executable once:
```bash
chmod +x scripts/*.sh scripts/*.command
```
Development mode (server in background, client in foreground):
```bash
./scripts/start-dev.sh
```
Only server, or only client:
```bash
./scripts/start-dev.sh server
./scripts/start-dev.sh client
```
Production mode:
```bash
./scripts/start-prod.sh
```
---
## Production Package Scripts
Build a production-ready package where the server can still build client binaries at runtime.
Windows:
```bat
scripts\build-prod-package.bat
```
Output: `release/`
Linux / macOS:
```bash
./scripts/build-prod-package.sh
```
Output: `release/prod-package/`
---
## WebRTC Streaming
The remote desktop viewer has a **Transport** dropdown with three modes:
- **Canvas** (default): H.264 / JPEG / block frames over the existing WebSocket, decoded into a `