# mRemotify Browser-based remote connection manager — open-source alternative to mRemoteNG. Manage SSH and RDP connections through a web UI with a tree-based layout, tabbed sessions, and connection profiles. ## Stack | Layer | Tech | |-----------|-------------------------------------------------| | Frontend | React 18 · TypeScript · Vite · Ant Design 5 | | Backend | Fastify · TypeScript · Prisma · PostgreSQL | | SSH | ssh2 (Node.js) proxied over WebSocket | | RDP | rdpd (Rust) — Xvfb + xfreerdp3 + x11rb | | Auth | JWT · bcryptjs · AES-256 encryption at rest | | Infra | Docker Compose · pnpm workspaces | ## Features - **Connection tree** — folders with drag-and-drop, context menus, search - **Tabbed sessions** — each connection opens in its own tab - **SSH terminal** — xterm.js over WebSocket, resize support - **RDP viewer** — canvas-based remote desktop via rdpd (JPEG frame streaming) - **Connection profiles** — reusable credential templates (SSH or RDP specific), assigned per connection. Profile values act as defaults, connection-level values override. - **Encrypted storage** — passwords and private keys AES-256 encrypted at rest - **JWT auth** — all API and WebSocket routes are login-protected ## Quick start (Docker Compose) ```bash git clone https://github.com/yourname/mremotify.git cd mremotify cp .env.example .env # Edit .env: set ENCRYPTION_KEY, JWT_SECRET, ADMIN_PASSWORD docker compose up -d open http://localhost ``` Default login: `admin` / `admin123` (set `ADMIN_USER` / `ADMIN_PASSWORD` in `.env` before first start). ## Development Prerequisites: Node.js >= 20, pnpm >= 9, PostgreSQL running locally. ```bash pnpm install cp .env.example .env # Set POSTGRES_URL to your local DB cd backend && npx prisma migrate dev && npx prisma db seed && cd .. pnpm dev ``` Frontend dev server runs on http://localhost:5173 (proxies `/api` and `/ws` to backend). Backend API runs on http://localhost:3000. ## Project structure ``` mremotify/ frontend/ React + Vite SPA backend/ Fastify API, WebSocket proxies, Prisma schema rdpd/ Rust RDP daemon (Xvfb + xfreerdp3, WebSocket on :7777) docker/ Dockerfiles + nginx config docker-compose.yml .env.example ``` ## Environment variables | Variable | Description | |-------------------|----------------------------------------------| | POSTGRES_URL | PostgreSQL connection string | | ENCRYPTION_KEY | Key for AES-256 encryption (passwords, keys) | | JWT_SECRET | Secret for signing JWT tokens | | ADMIN_USER | Initial admin username | | ADMIN_PASSWORD | Initial admin password | | RDPD_URL | rdpd WebSocket URL (default: ws://rdpd:7777) | | PORT | Backend port (default: 3000) |