From 4f5eb3a49c88bc0f9a5dc08d02754b64667ce9c3 Mon Sep 17 00:00:00 2001 From: felixg Date: Sun, 1 Mar 2026 12:06:22 +0100 Subject: [PATCH] new Readme --- README.md | 66 ++++++++++++++++++++++++------------------------------- 1 file changed, 29 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index 81c9af8..ab4b3f0 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # mRemotify -A browser-based remote connection manager — open-source alternative to mRemoteNG. +Browser-based remote connection manager — open-source alternative to mRemoteNG. -Manage SSH and RDP connections through a clean web UI with a familiar tree-based layout and tabbed session view. +Manage SSH and RDP connections through a web UI with a tree-based layout, tabbed sessions, and connection profiles. ## Stack @@ -11,82 +11,74 @@ Manage SSH and RDP connections through a clean web UI with a familiar tree-based | Frontend | React 18 · TypeScript · Vite · Ant Design 5 | | Backend | Fastify · TypeScript · Prisma · PostgreSQL | | SSH | ssh2 (Node.js) proxied over WebSocket | -| RDP | Apache Guacamole (guacd) + guacamole-common-js | -| Auth | JWT · bcryptjs · AES-256 password encryption | +| 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, Linux / Windows icons per connection -- **Tabbed sessions** — each opened connection gets its own tab -- **SSH sessions** — full xterm.js terminal over WebSocket -- **RDP sessions** — Guacamole-based remote desktop in the browser -- **Encrypted storage** — passwords stored AES-256 encrypted at rest -- **JWT auth** — login-protected, all API + WebSocket routes secured +- **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 -# 1. Clone & enter git clone https://github.com/yourname/mremotify.git cd mremotify -# 2. Configure environment cp .env.example .env -# Edit .env: set ENCRYPTION_KEY (32 chars), JWT_SECRET, ADMIN_PASSWORD +# Edit .env: set ENCRYPTION_KEY, JWT_SECRET, ADMIN_PASSWORD -# 3. Start everything docker compose up -d -# 4. Open in browser open http://localhost ``` -Default login: `admin` / `admin123` (change via `ADMIN_USER` / `ADMIN_PASSWORD` in `.env` before first start). +Default login: `admin` / `admin123` (set `ADMIN_USER` / `ADMIN_PASSWORD` in `.env` before first start). -## Development (without Docker) +## Development Prerequisites: Node.js >= 20, pnpm >= 9, PostgreSQL running locally. ```bash -# Install all workspace dependencies pnpm install -# Copy and fill in env cp .env.example .env -# Set POSTGRES_URL to your local DB, etc. +# Set POSTGRES_URL to your local DB -# Run DB migrations + seed cd backend && npx prisma migrate dev && npx prisma db seed && cd .. -# Start backend + frontend in parallel pnpm dev ``` -Frontend dev server: http://localhost:5173 -Backend API: http://localhost:3000 +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 app - backend/ Fastify API + WebSocket proxies + 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 - pnpm-workspace.yaml ``` ## Environment variables -| Variable | Description | -|-------------------|-----------------------------------------------| -| POSTGRES_URL | PostgreSQL connection string | -| ENCRYPTION_KEY | 32-character key for AES-256 password crypto | -| JWT_SECRET | Secret for signing JWT tokens | -| ADMIN_USER | Initial admin username | -| ADMIN_PASSWORD | Initial admin password | -| GUACD_HOST | Hostname of guacd service | -| GUACD_PORT | Port of guacd service (default: 4822) | -| PORT | Backend port (default: 3000) | +| 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) |