A full Linux desktop environment in your browser. Zero installation required.
Run a complete LXDE desktop directly from your browser using only Docker. Perfect for demos, education, testing, and remote development.
Note: Add screenshot or GIF here showing the desktop in action
The problem: You need a Linux environment but don’t want to deal with VMs, complex installations, or time-consuming configurations.
The solution: One Docker command and 30 seconds later you have a complete Linux desktop accessible from any browser.
Key benefits:
docker run -d \
-p 6080:6080 \
-e VNC_PASS=yourpassword \
ghcr.io/zero-desktop/zero-desktop:latest
Open your browser at http://localhost:6080
Note: This project is distributed via GitHub Container Registry (ghcr.io) only. Not available on Docker Hub.
Note: This image is designed for browser access only. For direct VNC client access, use zero-desktop-lxde.
services:
desktop:
image: ghcr.io/zero-desktop/zero-desktop:latest
ports:
- "6080:6080"
environment:
- SYSTEM_USER=docker
- VNC_PASS=yourpassword
- RESOLUTION=1920x1080
services:
desktop:
image: ghcr.io/zero-desktop/zero-desktop:latest
ports:
- "6080:6080"
volumes:
- ./workspace:/home/docker/workspace
environment:
- SYSTEM_USER=docker
- VNC_PASS=yourpassword
| Variable | Default | Description |
|---|---|---|
SYSTEM_USER |
docker |
Linux user for desktop session |
VNC_PASS |
Required | VNC password |
RESOLUTION |
1280x720 |
Screen resolution (WxH) |
ALLOW_NOPW |
false |
Disable password (not recommended) |
After connecting, open a terminal:
sudo apt update
sudo apt install firefox-esr chromium git nodejs npm
refresh-menu
The refresh-menu command updates the desktop menu with newly installed applications.
Deploy identical Linux environments for students without requiring local installations. Share a single URL and everyone has access to the same setup.
# Deploy multiple instances for a classroom
for i in {1..30}; do
docker run -d \
-p $((6080+i)):6080 \
-e VNC_PASS=student${i} \
--name desktop-student${i} \
ghcr.io/zero-desktop/zero-desktop:latest
done
Run end-to-end tests requiring a real browser with a graphical environment.
# .github/workflows/e2e-tests.yml
jobs:
test:
runs-on: ubuntu-latest
services:
desktop:
image: ghcr.io/zero-desktop/zero-desktop:latest
ports:
- 6080:6080
env:
VNC_PASS: test123
steps:
- name: Run visual tests
run: |
# Your test commands here
npm run test:e2e
Show your application running in a clean Linux environment without asking users to install anything.
Create a consistent development environment that can be accessed from anywhere, with all your tools pre-installed.
services:
devenv:
image: ghcr.io/zero-desktop/zero-desktop:latest
ports:
- "6080:6080"
volumes:
- ./projects:/home/docker/projects
- ./ssh:/home/docker/.ssh:ro
environment:
- VNC_PASS=yourpassword
- RESOLUTION=1920x1080
| Feature | zero-desktop | Webtop | KasmVNC | Apache Guacamole |
|---|---|---|---|---|
| Browser-only access | ✅ | ✅ | ✅ | ✅ |
| Single container | ✅ | ✅ | ✅ | ❌ (requires multiple services) |
| Setup time | < 1 min | < 1 min | ~2 min | ~10 min |
| ARM64 support | ✅ | ✅ | ❌ | ✅ |
| Lightweight | ✅ | ❌ | ✅ | ❌ |
zero-desktop combines several technologies:
For better performance:
-e RESOLUTION=1920x1080VNC_PASSExample with Traefik reverse proxy:
services:
desktop:
image: ghcr.io/zero-desktop/zero-desktop:latest
environment:
- VNC_PASS=yourpassword
labels:
- "traefik.enable=true"
- "traefik.http.routers.desktop.rule=Host(`desktop.yourdomain.com`)"
- "traefik.http.routers.desktop.tls=true"
Black screen after login
docker logs <container-name>Can’t connect to localhost:6080
docker psnetstat -an | grep 6080-p 8080:6080Slow performance
-e RESOLUTION=1280x720docker statsApplications not appearing in menu
refresh-menu after installing new softwareContributions are welcome! Please feel free to submit a Pull Request.
Apache License 2.0 - See LICENSE file for details.
Copyright 2024-2025 zero-desktop and José Meira (jmeiracorbal)
Built with: