π Introduction to Synexa
Synexa is a cloud-based virtual desktop platform that streams desktop applications to your browser using WebRTC technology. No installation required, just instant access to powerful tools.
Key Concepts
- Container-Based Applications: Each app runs in an isolated Docker container
- WebRTC Streaming: Ultra-low latency video streaming directly to your browser
- Shared Storage: All your applications access the same file system
- Session Management: Seamless creation and management of application instances
How It Works
- User logs into the Synexa dashboard
- Clicks on an application (Terminal, Files, VLC, etc.)
- API creates a new Docker container for that application
- Container starts Xvfb (virtual display) and the application
- GStreamer captures the display and encodes to H.264
- WebRTC streams video/audio to the browser
- User interacts via keyboard/mouse sent through WebRTC data channels
π Quick Start
For Users
# 1. Visit the Synexa dashboard
open https://app.synexa.io
# 2. Create an account or log in
# 3. Click on any application to launch it
# 4. Start working!
For Self-Hosters
# 1. Clone the repository
git clone https://github.com/synexa/synexa.git
cd synexa
# 2. Start the full stack
./start-synexa.sh
# 3. Access the dashboard
open http://localhost:3000
- Docker 20.10+
- Docker Compose 2.0+
- 4GB RAM minimum
- Modern browser (Chrome, Firefox, Safari)
Services
| Service | URL | Description |
|---|---|---|
| Frontend | http://localhost:3000 |
Web dashboard |
| API | http://localhost:8081 |
REST API |
| Terminal | http://localhost:8083 |
Terminal app stream |
| Files | http://localhost:8084 |
File manager stream |
| VLC | http://localhost:8085 |
Media player stream |
ποΈ Architecture
System Overview
Synexa is built as three independent repositories:
1. synexa-frontend
- Technology: React, TypeScript, Vite
- Purpose: Web UI with WebRTC client for streaming
- Features: Session management, video player, input handling
2. synexa-controlplane
- Technology: Go, Gin framework, Redis
- Purpose: REST API for session orchestration
- Features: Container lifecycle, authentication, WebRTC signaling
3. synexa-images
- Technology: Docker, GStreamer, Xvfb
- Purpose: Base image + application images
- Features: WebRTC server, display capture, input injection
Component Diagram
βββββββββββββββ
β Browser β
β (WebRTC) β
ββββββββ¬βββββββ
β
βΌ
βββββββββββββββ ββββββββββββββββ
β Frontend βββββββΆβ Control Planeβ
β (React) β β (Go API) β
βββββββββββββββ βββββββββ¬βββββββ
β
βΌ
βββββββββββββββββ
β Docker Engine β
βββββββββ¬ββββββββ
β
ββββββββββββββββββββββΌβββββββββββββββββββββ
βΌ βΌ βΌ
βββββββββββ βββββββββββ βββββββββββ
βTerminal β β Files β β VLC β
βContainerβ βContainerβ βContainerβ
βββββββββββ βββββββββββ βββββββββββ
β β β
ββββββββββββββββββββββ΄βββββββββββββββββββββ
β
ββββββββΌβββββββ
βShared Volumeβ
β/home/user β
βββββββββββββββ
π» Terminal Application
Overview
Full-featured xterm terminal with command-line access to your cloud environment.
Features
- Full color support (256 colors + true color)
- Unicode and emoji support
- Copy/paste via context menu
- Automatic font scaling
- Persistent bash history
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
Ctrl+Shift+C |
Copy selected text |
Ctrl+Shift+V |
Paste from clipboard |
Ctrl+L |
Clear screen |
π File Manager
Overview
Thunar file manager with GVFS support for managing your cloud storage.
Features
- Drag-and-drop file operations
- Context menu integration
- File associations (open .mp4 in VLC)
- Thumbnail previews for images/videos
- Network share support via GVFS
File Associations
Double-clicking certain file types automatically opens them in the appropriate application:
| File Type | Opens In |
|---|---|
.mp4, .mkv, .avi |
VLC Media Player |
.mp3, .wav, .flac |
VLC Media Player |
.sh, .py, .js |
Code Server (coming soon) |
π¬ VLC Media Player
Overview
The world's most popular media player, streaming in your browser.
Supported Formats
- Video: MP4, MKV, AVI, MOV, WMV, FLV, WebM
- Audio: MP3, WAV, FLAC, OGG, AAC, M4A
- Subtitles: SRT, ASS, SSA, VTT
Opening Files
# Method 1: Double-click in File Manager
# Just double-click any video/audio file in Files app
# Method 2: Via API
curl -X POST http://localhost:8081/api/v1/users/demo/open-with \
-H "Content-Type: application/json" \
-d '{
"app": "vlc",
"file": "/home/neximo/files/video.mp4",
"sessionId": "files-demo"
}'
π WebRTC Streaming
How It Works
Synexa uses WebRTC for ultra-low latency streaming:
- Display Capture: Xvfb creates virtual display (1920x1080)
- Video Encoding: GStreamer captures and encodes to H.264
- RTP Streaming: Video sent via RTP over UDP
- WebRTC: Browser receives stream via WebRTC peer connection
- Input: Mouse/keyboard sent back via data channels
Performance
| Metric | Value |
|---|---|
| Latency | 30-50ms (local), 100-150ms (cloud) |
| Bitrate | 2-4 Mbps (configurable) |
| Resolution | 1920x1080 (1080p) |
| Frame Rate | 30 FPS |
πΎ Persistent Storage
Shared File System
All applications share the same storage volume mounted at /home/neximo/files.
A file downloaded in the Terminal is immediately visible in the File Manager and can be opened in VLC.
Docker Compose
volumes:
- ./user-data/demo:/home/neximo/files
Kubernetes
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: user-demo-files
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
π‘ Sessions API
Create Session
POST /api/v1/users/:userID/sessions
Content-Type: application/json
{
"app": "terminal",
"sessionId": "my-terminal"
}
Response:
{
"session_id": "my-terminal",
"proxy_url": "http://localhost:8081/proxy/token",
"token": "jwt-token-here",
"container_id": "abc123"
}
List Sessions
GET /api/v1/users/:userID/sessions
Response:
[
{
"session_id": "terminal-1",
"app": "terminal",
"status": "running",
"created_at": "2026-01-06T10:00:00Z"
}
]
Delete Session
DELETE /api/v1/users/:userID/sessions/:sessionID
Response:
{
"message": "Session deleted successfully"
}
π³ Docker Compose Deployment
Setup
# Clone repositories
git clone https://github.com/synexa/synexa-frontend
git clone https://github.com/synexa/synexa-controlplane
git clone https://github.com/synexa/synexa-images
# Build images
cd synexa-images
./build.sh
# Start services
cd ..
./start-synexa.sh
Environment Variables
# .env.fullstack
FRONTEND_PORT=3000
API_PORT=8081
JWT_SECRET=your-secret-key
VIDEO_BITRATE=2000
TERMINAL_PORT=8083
FILES_PORT=8084
VLC_PORT=8085
βΈοΈ Kubernetes Deployment
Prerequisites
- Kubernetes cluster (1.24+)
- kubectl configured
- Helm 3.0+
Install
# Add Helm repository
helm repo add synexa https://charts.synexa.io
helm repo update
# Install
helm install synexa synexa/synexa \
--set domain=app.synexa.io \
--set storage.class=nfs-client \
--set replicas.api=3
# Check status
kubectl get pods -n synexa
Kubernetes deployment is currently in development. Expected release: Q1 2026