A lightweight, privacy-first screen sharing service for Windows. Share your desktop with any device on your LAN — phone, tablet, another PC — just open a browser. No installs. No accounts. No cloud.
Screenpeek captures your Windows desktop and streams it live to any web browser on your local network. It runs as a Windows service (or console app), uses DXGI for hardware-accelerated capture, JPEG encoding with zero native dependencies, and serves the stream over plain HTTP.
Open your phone's browser. Type your-pc-ip:8080. See your screen. That's it.
- Zero config — one-click install, works out of the box
- Privacy-first — consent-based; screen capture is off until you explicitly grant permission
- No cloud, no accounts — everything stays on your local network
- Lightweight — pure Rust, tiny binary, minimal resource usage
- Works on any device — phone, tablet, laptop, Smart TV — any browser with Wi-Fi
- Token-based auth — HMAC-signed, time-limited access tokens
- HTTPS support — built-in TLS certificate generation
- Configurable — change ports, FPS, max viewers, monitor index
- One-click uninstall — clean removal, no leftovers
- Windows 10 or 11
- Rust installed (
cargo --versionshould work) - Administrator access (for service install)
# Clone the repo
git clone https://github.com/bigsus24/screenpeek.git
cd screenpeek
# Right-click install.bat → Run as administratorThe installer will:
- Build the release binaries (first build takes a few minutes)
- Copy them to
C:\ProgramData\ss-service\ - Run setup and create config
- Register the Windows service
Open an admin Command Prompt:
# 1. Grant screen capture permission
"C:\ProgramData\ss-service\ss-cli.exe" consent grant
# 2. Generate TLS certificate
"C:\ProgramData\ss-service\ss-cli.exe" generate-tls
# 3. Start the service
sc start SSService
# 4. Open in browser
start http://localhost:8080Tip: Use console mode for screen capture to work:
sc stop SSService "C:\ProgramData\ss-service\ss-service.exe" --console
- Make sure your phone is on the same Wi-Fi as your PC
- Start the service (see above)
- Open your phone's browser
- Type:
192.168.x.x:8080(use your PC's IP — runipconfigto find it)
First time? Open firewall port 8080 once:
# Run in admin PowerShell
New-NetFirewallRule -DisplayName "Screen Stream" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow -Profile PrivateEdit C:\ProgramData\ss-service\config.toml:
| Setting | Default | Description |
|---|---|---|
| HTTP port | 8080 |
Viewer page & stream endpoint |
| HTTPS port | 8443 |
TLS endpoint |
| Max viewers | 3 |
Concurrent browser connections |
| FPS | 30 |
Capture frame rate |
| Monitor | 0 |
Which monitor to capture |
Restart the service after changes:
sc stop SSService && sc start SSServicecargo build --release --bin ss-service --bin ss-cliBinaries appear in target/release/.
Right-click uninstall.bat → Run as administrator, or:
sc stop SSService
sc delete SSService
rmdir /s /q "C:\ProgramData\ss-service"Windows DXGI ──► Capture Frame (BGRA) ──► JPEG Encoder ──► Broadcast Channel
│
Browser ──GET /────────────► HTTP Server (8080) ──► Viewer Page
Browser ──POST /api/token──► HMAC-signed token (time-limited)
Browser ──GET /stream?token=…──► Verify ──► Subscribe to frames
Browser ◄── multipart/x-mixed-replace JPEG stream ◄── <img> tag
Architecture — modular Rust workspace:
| Crate | Purpose |
|---|---|
core |
Config, crypto, consent, tokens |
capture |
DXGI desktop duplication |
encoder |
JPEG encoding (pure Rust) |
stream |
Frame pipeline & session management |
server |
HTTP server, viewer page, TLS |
service |
Windows service entry point |
cli |
Admin CLI (setup, consent, status) |
- Local network only — no NAT traversal (use VPN or reverse proxy for remote access)
- MJPEG — bandwidth-heavy compared to H.264; fine on LAN
- Video only — no audio support yet
- Windows only — DXGI capture requires Windows
Contributions welcome! Fork the repo, create a feature branch, and open a PR.
MIT — see LICENSE for details.
Built with care in Rust