>_ OpenRemoteGUI Star on GitHub
v1.0.0 · Stable release

Self-hosted · MIT · No vendor cloud

OpenRemoteGUI

Browser desktop for Debian & Pi fleets.

One command install. Manifest-driven rollback. A self-healing lifecycle layer around noVNC + wayvnc, not a reinvention of it.

$0 licensing loopback VNC only 30s watchdog Pi Zero→5 + Debian
admin@edge-node-07: ~

Getting started

Up and running in one command.

Clone the repo, run the installer, open a browser. No account, no cloud onboarding, no config files to hand-edit.

01

Clone

Pull the repo onto the Debian or Raspberry Pi node.

git clone …/OpenRemoteGUI.git

02

Install

Auto-detects hardware and seeds a baseline restore point.

sudo ./install.sh

03

Open

Reach the desktop from any browser on your LAN or VPN.

http://NODE-IP:6080

the whole thing, one line
git clone https://github.com/855princekumar/OpenRemoteGUI.git && cd OpenRemoteGUI && sudo ./install.sh

Not AI slop · built on proven OSS

Standing on battle-tested code, not reinventing it.

live from api.github.com

noVNC ★ · browser client

websockify ★ · WS⇄VNC

wayvnc ★ · Wayland capture

MIT

OpenRemoteGUI · forks

OpenRemoteGUI adds the install / rollback / watchdog / fleet layer around these. That is the whole point.

The value · real numbers

Every node you add costs the same: nothing.

Commercial remote-desktop tools bill per device, per seat, or per session, forever. OpenRemoteGUI is MIT-licensed and self-hosted, so licensing stays flat at zero no matter how large the fleet gets.

$0

per device, per year

~$24.7k

RealVNC, 50 nodes / 5 yr

~$52k

TeamViewer median / 5 yr

Illustrative, licensing only. Basis: RealVNC Connect Essentials list price ≈ $99 / device / yr (50-node fleet); TeamViewer median verified annual spend ≈ $10,424 / yr (CostBench, 2026). Self-hosted hardware and power are not included. OpenRemoteGUI licensing is $0 at any fleet size.

Where it fits

Same job. Different trade.

The tools below all put a screen on your browser. Only one is self-hosted, reversible, and free to run across a fleet.

Capability OpenRemoteGUI RealVNC TeamViewer AnyDesk Pi Connect
Licensing cost$0 · MIT~$99/dev/yr$25–230/mo~$1,093/yr+Free*
No vendor cloudYesNoNoNoRelay
No account neededYesNoNoNoPi ID
Open sourceMITNoNoNoPartial
Offline / air-gappedYesNoNoNoNo
Browser, no clientYesPartialNoNoYes
Fleet rollback / restore pointsYesNoNoNoNo
One-command Ansible rolloutYesLimitedLimitedLimitedNo

*Pi Connect: free for personal use, cloud TURN relay, closed-source relay, commercial licensing TBD. Pricing sourced 2026.

OpenRemoteGUI vs a typical cloud remote-desktop tool

Why it wins on the edge

$0

Zero licensing at any fleet size. MIT-licensed and self-hosted, so cost never scales with node count.

No cloud, no account, fully offline. Runs on a private LAN or VPN with nothing phoning home.

Only option with fleet rollback. Manifest-driven restore points on every node, from the first install.

Idempotent Ansible rollout. Install and revert across N nodes from one control plane.

What it does

Eight decisions that keep production nodes safe.

⌨️

One-command install

git clonesudo ./install.sh → browser. Nothing else.

🔒

Loopback-only VNC

Raw VNC on 5900 is never bound to the network. Only gateway 6080 is reachable.

↩️

Manifest-driven rollback

Removes and restores exactly what it installed. No blanket apt remove or rm -rf.

🩺

Self-healing watchdog

Fires every 30s, restarts only its own units, backs off on headless nodes instead of thrashing.

🧩

Hardware-aware

Pi Zero/3 lightweight · Pi 4 standard · Pi 5 GPU · generic Debian. Detected at install.

🛡️

Fails safe

No Wayland session and no compositor? It makes zero changes and tells you why.

📦

Isolated footprint

Everything under /opt, /etc, /var/lib + a private venv for websockify.

⏮️

Auto-rollback on fail

A broken install reverts itself. A half-finished install never lingers on a node.

How it works

One path in. One trust boundary.

The browser only ever reaches port 6080 over your LAN or VPN. Everything to the right of the gateway lives on the node, and the VNC hop is pinned to 127.0.0.1.

🌐 Browser
:6080 gateway
websockify
wayvnc
127.0.0.1:5900
Wayland session
🖥️ Linux desktop
01

Raw VNC :5900 is never bound to a routable address, so it cannot be reached from the LAN, even by mistake.

02

Auth and TLS come from the layer you already trust: your VPN/LAN, or a reverse proxy in front of 6080.

03

Three systemd user services (wayvnc · noVNC · watchdog) start at boot via linger. SSH stays untouched.

Version control for the edge

A restore point on every node, from the first install.

Install seeds a baseline. Rollback archives the version it removes. Restore reinstalls any version you kept. Each restore point is only tens of KB, so keeping several per node is free.

install.sh

v1.0.0 deployed

Baseline restore point seeded automatically.

rollback.sh

v1.0.0 archived

Manifest-driven: removes only what it created.

install v1.1.0

Upgrade misbehaves

Previous version already archived on upgrade.

restore.sh v1.0.0…

Back on stable

One command returns the node to a known-good state.

Built for fleets

Your control plane only needs a URL.

The installer is idempotent and non-interactive on fleet runs. Each node is installed and rolled back independently. The control plane never has to understand VNC, just http://NODE:6080.

control-plane · ansible
# roll the whole fleet out
ansible all -b -m shell -a \
  "cd OpenRemoteGUI && ORGUI_NO_PROMPT=1 ./install.sh"
# one command reverts it, too
ansible all -b -m shell -a "cd OpenRemoteGUI && ./rollback.sh"
Control plane · SSH / VPN / Ansible
Node 001
:6080
Node 002
:6080
Node 003
:6080
Node N
:6080
idempotent installer per-node rollback

Field-tested on real Pi 3 / Pi 4 / Pi 5 hardware and running across multi-site edge-node fleets in production.

Where it runs

Debian-family, with a live Wayland session.

PlatformArchWaylandGUI suitabilityMode
Pi Zero / Zero 2 WARM/ARM64Session-dependentLimited / moderatelightweight
Pi 3ARM64YesGoodlightweight
Pi 4ARM64YesVery goodstandard
Pi 5ARM64YesExcellentgpu
Debian PCx86_64Session-dependentExcellentstandard
Debian server (headless)x86_64Usually noneNo desktop to capturerefused by design

Installing on a headless server does not create a desktop; the installer reports the missing session and makes no changes.

Best-fit use cases

Where it earns its keep.

🛰️

Multi-site edge fleets

A browser desktop per node with no per-device license and no cloud dependency.

🔌

Air-gapped / offline labs

No account, no outbound control plane. Runs entirely on a private LAN.

🏠

Homelab & self-hosting

One command up, one command down. Reversible on machines you care about.

🔧

Field-serviced Pi deployments

Restore points let a technician swap versions and revert to known-good safely.

📽️

Signage & kiosk nodes

Reach the real desktop of a Wayland kiosk over VPN without touching its display.

⚙️

Ansible-managed rollouts

Idempotent install and rollback across N nodes from a single control plane.

Clone. Install. Open the browser.

No vendor cloud. No account. No lock-in.

Star on GitHub
OpenRemoteGUI · MIT License · v1.0.0 Trusted LAN / VPN scope · public-route mode on the roadmap github.com/855princekumar/OpenRemoteGUI ↗