Self-host your entire remote access stack in one Docker container — 9 protocols, one interface: RDP, SSH, VNC, Telnet, SMB, SFTP, FTP, MySQL & PostgreSQL.
No middleware. No Java. No server relay. WebAssembly-native RDP running directly in your browser — zero overhead across all 9 protocols.
Most browser-based remote access tools relay your display through a server-side engine, adding latency and complexity. Gatwy's RDP client runs entirely in your browser using WebAssembly — pixel-perfect, low-latency RDP with no middleware, no Java, and no extra containers.
One container. Zero dependencies. Open your browser and connect.
- 9 protocols — RDP (WebAssembly), SSH, VNC, Telnet, SMB, SFTP, FTP, PostgreSQL, MySQL
- Split-pane workspace — unlimited sessions side by side with drag-and-drop tabs
- Session recording & audit — encrypted RDP video, SSH asciinema, command-level audit log with auto-redacted passwords, file activity tracking
- Granular RBAC — 27 fine-grained permissions, custom roles, per-connection sharing, protocol-level access control
- Auth flexibility — local accounts, LDAP/AD, OpenID Connect (SSO), MFA (TOTP), IP access rules
- Alerting — SMTP, Telegram, Slack, Webhook channels with a no-code rule builder
- Encrypted backup & restore — single-file
.gebbackup with AES-256 encryption
# docker-compose.yml
services:
gatwy:
image: ghcr.io/kotoxie/gatwy:latest
container_name: gatwy
restart: unless-stopped
ports:
- '7443:7443'
volumes:
- ./data:/app/data
environment:
- GATWY_ENCRYPTION_KEY=your-64-char-hex-key # openssl rand -hex 32docker compose up -dOpen https://<YOUR_IP>:7443 — on first launch you'll be prompted to create an admin account.
⚠️ The browser will warn about the self-signed certificate. Accept the exception to proceed, or bring your own cert.
| Variable | Default | Description |
|---|---|---|
GATWY_ENCRYPTION_KEY |
(auto-generated file) | 64-char hex AES-256 key. Set this in production. Generate with openssl rand -hex 32 |
PORT |
7443 |
HTTPS port |
TLS_CERT_PATH / TLS_KEY_PATH |
(auto) | Custom TLS certificate & key paths |
DATA_DIR |
/app/data |
Database, certs, recordings, and logs |
⚠️ If no encryption key env var is set, Gatwy auto-generates one at/app/data/encryption.keywith a warning banner. Fine for home-lab — not recommended for production.
👉 Full configuration reference →
docker compose pull && docker compose up -dgit clone https://github.com/kotoxie/gatwy && cd Gatwy/
# With Docker
docker compose up --build -d
# Without Docker (Node.js 20+)
npm install && npm run build && npm start