Website · Downloads · Docs · API Status
This is a personal passion project built collaboratively by a human developer and AI (Claude by Anthropic). Every line of code across 7 languages, 6 platforms, and a production cloud backend was pair-programmed in iterative sessions. This project is not created, sponsored, endorsed, or affiliated with NVIDIA Corporation. See Legal Disclaimer below.
Grab the latest release for your platform. No account required — just download and run.
| Download | Notes |
|---|---|
| NVRemote-0.5.1-beta-Setup.exe | Includes client AND host. Stream to or from this machine. Auto-updates. |
On Windows, NVRemote is one unified app. Go to Settings to switch between Client, Host, or Both mode. No separate host agent needed.
| Platform | Download | Notes |
|---|---|---|
| macOS | NVRemote-0.5.1-beta-universal.dmg | Universal binary (Intel + Apple Silicon) |
| Linux x86_64 | nvremote_0.5.1-beta_amd64.deb | Recommended — sudo dpkg -i (Debian/Ubuntu) |
| Linux x86_64 | NVRemote-0.5.1-beta-x86_64.AppImage | Portable AppImage — chmod +x and run |
| Linux ARM64 | nvremote_0.5.1-beta_arm64.deb | Recommended — ARM64 Debian/Ubuntu package |
| Linux ARM64 | NVRemote-0.5.1-beta-arm64.AppImage | Portable ARM64 AppImage |
| Android | NVRemote-v0.5.1-beta.apk | Android 7.0+, sideload APK |
For headless Linux servers (Jetson, DGX, Docker) where Electron doesn't make sense, use the standalone Go agent:
| Platform | Download | Notes |
|---|---|---|
| Linux x86_64 | NVRemoteHost-v0.5.1-beta-linux-amd64.tar.gz | GPG signed (.asc) |
| Linux ARM64 | NVRemoteHost-v0.5.1-beta-linux-arm64.tar.gz | Jetson / DGX Spark — GPG signed (.asc) |
You have a beefy NVIDIA GPU sitting in your device. You want to use it from your couch, your phone, or a browser tab halfway across the world.
NVRemote installs a tiny agent on your GPU machine and streams the entire desktop — with hardware-accelerated encoding — to any device over a peer-to-peer WebRTC connection. Low latency. Adaptive quality.
Your RTX 3090 at home ----WebRTC P2P----> Your laptop at a coffee shop
Your Jetson Orin ----WebRTC P2P----> Your phone on the train
Your DGX Spark at work ----WebRTC P2P----> A Chrome tab anywhere
| Problem | NVRemote |
|---|---|
| VPN + RDP looks terrible | P2P WebRTC with NVIDIA hardware encode at up to 240fps |
| Existing solutions are one-size-fits-all | 7 streaming profiles: Competitive gaming to CAD precision |
| Limited to desktops | Native apps for Win, Mac, Android, Linux ARM + Chrome browser |
| No edge GPU support | First-class Jetson Orin and DGX Spark support |
| Complex setup | Install agent, sign in, click "Stream" |
- Windows 10/11 with any NVIDIA GPU (GeForce, Quadro, RTX)
- Linux x86_64 with NVIDIA GPU
- NVIDIA Jetson Nano / Xavier NX / Orin Nano / Orin NX / AGX Orin
- NVIDIA DGX Spark (Grace Blackwell GB10)
- Windows (Electron)
- macOS (Electron + Swift/Metal)
- Linux x86_64 & ARM64 (Electron AppImage)
- Android 7.0+ (Kotlin/Compose)
- Chrome browser (zero-install WebRTC)
The QoS engine runs a continuous control loop, adapting in real-time:
| What | Range |
|---|---|
| Resolution | 720p → 8K (matches your display) |
| Frame Rate | 30 → 240 fps |
| Bitrate | 2 → 300 Mbps (adaptive) |
| Codecs | H.264, HEVC, AV1 (auto-selected) |
| Color | YUV 4:2:0 or 4:4:4 (for color-critical work) |
| Latency target | sub-frame on LAN, network-dependent on WAN |
| Profile | What It's For | Resolution | FPS |
|---|---|---|---|
| Competitive | Esports, fast shooters | 1080p | 240 |
| Balanced | General gaming & desktop | 1440p | 144 |
| Cinematic | Single-player, movies | up to 8K | 60 |
| Creative | Photo/video editing (4:4:4) | up to 8K | 60 |
| CAD | SolidWorks, Fusion 360 (4:4:4) | up to 8K | 60 |
| Mobile Saver | Phone on cellular | 720p | 60 |
| LAN | Same network, max everything | up to 8K | 240 |
Your Device Your GPU Machine
================== =======================
[NVRemote Client] [nvremote-host]
Electron / Android / NvFBC capture
Chrome / Swift NVENC encode (H.264/HEVC/AV1)
Hardware video decode Opus audio encode
| |
| WebRTC P2P (encrypted) |
| <-------- Video/Audio/Input --------> |
| |
+------- STUN/TURN fallback -------+ |
| |
[NVRemote API]
NestJS on GCP Cloud Run
OAuth + JWT auth
Signaling relay
Session management
|
[PostgreSQL 15]
| Mode | How | Latency | When |
|---|---|---|---|
| P2P Direct | STUN NAT traversal | Lowest | Default for most networks |
| TURN Relay | NVRemote relay server | Low | Auto-fallback for strict NAT |
| WireGuard VPN | Encrypted tunnel | Medium | Corporate firewalls |
| Zero-Trust | Per-session auth proxy | Medium | Enterprise compliance |
nvremote/
├── apps/
│ ├── server-api/ # NestJS API (TypeScript)
│ ├── website/ # Next.js site (TypeScript)
│ ├── client-desktop/ # Electron app — client + host (TypeScript + C++)
│ ├── android/ # Android client (Kotlin)
│ ├── mac-client/ # macOS client (Swift)
│ ├── host-agent/ # Host agent — Linux headless (Go)
│ └── gateway/ # TURN + VPN gateway (Go)
├── libs/
│ ├── nvremote-host/ # GPU capture + encode (C++17)
│ ├── nvremote-viewer/ # Video decoder addon (C++17)
│ └── nvremote-common/ # Shared networking (C++17)
├── infra/
│ └── terraform/ # GCP IaC
└── .github/workflows/ # CI (6 jobs) + Release (13 jobs)
7 languages: TypeScript, C++17, Go, Kotlin, Swift, SQL, HCL
| Technology | |
|---|---|
| API | NestJS 10, Prisma 5, PostgreSQL 15, Socket.io |
| Website | Next.js 14, React 18, Tailwind CSS, Framer Motion |
| Desktop | Electron 31, React 18, Zustand, C++ N-API addon (unified client + host) |
| Android | Kotlin, Jetpack Compose, Hilt, WebRTC |
| macOS | Swift 5.9, Metal, VideoToolbox |
| Host Agent | Go 1.22 |
| Streaming | C++17, NvFBC, NVENC SDK, OpenSSL, Opus |
| Infra | GCP Cloud Run, Cloud SQL, Terraform |
| CI/CD | GitHub Actions (13-job release pipeline) |
| Platform | GPU | Encode | Host | Client |
|---|---|---|---|---|
| Jetson Nano | Maxwell 128-core | H.264 | Yes | Yes |
| Jetson Xavier NX | Volta 384-core | H.264, HEVC | Yes | Yes |
| Jetson Orin Nano | Ampere 1024-core | H.264, HEVC | Yes | Yes |
| Jetson AGX Orin | Ampere 2048-core | H.264, HEVC | Yes | Yes |
| DGX Spark | Blackwell | H.264, HEVC, AV1 | Yes | Yes |
- JWT auth on every endpoint (default-closed)
- Org-scoped data isolation
- Token rotation on refresh
- 30-min idle timeout, 24-hr max session
- Rate limiting, Helmet headers, strict CORS
- Non-root Docker containers
- GPG-signed Linux releases
- DTLS/SRTP encrypted streams
Stream your GPU desktop in 3 steps. Your host and sessions are private to your account — no one else can see or connect to your machine.
- Download NVRemote-0.5.1-beta-Setup.exe and install it
- Sign in with Google
- To stream FROM this machine: Go to Settings → switch to Host or Both mode → follow the setup wizard to register
- To stream TO this machine: Your hosts appear in the Dashboard — click Stream
That's it. One app. Client, host, or both at the same time.
tar xzf NVRemoteHost-v0.5.1-beta-linux-amd64.tar.gz
cd NVRemoteHost-v0.5.1-beta-linux-amd64
sudo ./install.sh # Installs as systemd service, prompts for tokenOr run directly without installing: ./NVRemoteAgent (interactive setup on first run)
Download from Downloads, sign in with the same Google account, and your hosts will appear.
🔒 Privacy: Your host is registered to your account and is only visible to you (or members of your organization if you create one). Sessions are encrypted end-to-end with DTLS/SRTP. No one — not even NVRemote servers — can see your stream content.
git clone https://github.com/thatcooperguy/nvremote.git
cd nvremote && npm install
# API server
cd apps/server-api && npm run start:dev
# Website
cd apps/website && npm run dev
# Desktop client
cd apps/client-desktop && npm run dev
# Host agent (Go)
cd apps/host-agent && go build -o NVRemoteAgent ./cmd/agentPush a tag → 13 jobs build everything:
C++ native libs → Go host agents (Win/Linux/ARM64) → Host bundles → Electron installers (Win/Mac/Linux/ARM64) → Android APK → GitHub Release + GCS upload + SHA256 checksums + GPG signatures
| Component | Status |
|---|---|
| API (NestJS) | Live on Cloud Run |
| Website (Next.js) | Live on Cloud Run |
| Desktop Client (Electron) | Builds in CI |
| Android Client (Kotlin) | Builds in CI |
| macOS Client (Swift) | Skeleton |
| Web Client (Chrome) | Built — WebRTC in browser |
| Host Agent (Go) | Builds in CI (Linux + ARM64 headless) |
| C++ Streaming Core | Builds in CI |
| Infrastructure | GCP, Terraform, CI/CD all live |
This entire project — from bare-metal C++ GPU capture to a production Kubernetes-free cloud backend — was built through human-AI pair programming.
The human brings product vision, hardware expertise, architecture decisions, and real-world testing on NVIDIA GPUs.
The AI (Claude by Anthropic) brings rapid multi-language implementation, consistent patterns across a massive codebase, and the ability to context-switch between C++ memory management and Kotlin Compose animations in the same session.
The result: a multi-platform GPU streaming system spanning 7 programming languages, 6 target platforms, 13 CI/CD jobs, and production infrastructure on GCP — built iteratively, one feature at a time.
NVRemote is an independent, personal project. It is not created, sponsored, endorsed, or affiliated with NVIDIA Corporation or any of its subsidiaries. The author is employed by NVIDIA but developed this project entirely on personal time, using personal equipment, personal cloud infrastructure, and personal funds. This project does not represent NVIDIA in any way, and no proprietary NVIDIA information, internal tools, or confidential resources were used in its development.
Trademark Notice: "NVIDIA," "GeForce," "Quadro," "RTX," "Jetson," "DGX," "NVENC," "NvFBC," and related marks are trademarks or registered trademarks of NVIDIA Corporation. "WebRTC" is a trademark of Google LLC. All other trademarks are property of their respective owners. Use of these names is for identification purposes only and does not imply endorsement.
No Warranty: This software is provided "as is," without warranty of any kind, express or implied. See the MIT License for full terms. Use at your own risk.
This project is licensed under the MIT License.
Built with Claude by Anthropic