Self-hosted SSH + SFTP + RDP in a browser — MobaXterm replacement
ROOT CAUSE: guacd showed "User resolution is 0x0 at 0 DPI" and immediately killed every RDP connection. The Guacamole protocol requires five client capability instructions (size, audio, video, image, timezone) BETWEEN receiving 'args' and sending 'connect'. Our handshake skipped all five and jumped straight to CONNECT. guacd never received the display dimensions, defaulted to 0x0, and terminated the connection. Now sends the complete handshake: select → (receive args) → size → audio → video → image → timezone → connect Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| backend | ||
| docs/superpowers | ||
| frontend | ||
| images | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| README.md | ||
| Remote-Spec.md | ||
Wraith
Self-hosted MobaXterm replacement — SSH + SFTP + RDP in a browser.
Stack
- Backend: NestJS 10, Prisma 6, PostgreSQL 16, ssh2, guacd
- Frontend: Nuxt 3 (SPA), PrimeVue 4, Tailwind CSS, xterm.js 5
Quick Start
cp .env.example .env
# Edit .env with real secrets
docker compose up -d
Default credentials: admin@wraith.local / wraith
Development
# Backend
cd backend && npm install && npm run dev
# Frontend
cd frontend && npm install && npm run dev