A simple and elegant screen sharing application for Windows using Electron and WebRTC. Share your screen with anyone on your local network through a web browser.
- Easy to Use: One-click screen sharing
- LAN Support: Works on local network without internet
- Browser Viewing: Viewers can watch from any modern web browser
- Real-time Streaming: Low-latency screen sharing using WebRTC
- Multiple Viewers: Support for multiple simultaneous viewers
- No Account Needed: No registration or sign-up required
- Owner runs the Electron app on Windows
- App generates a shareable link (e.g.,
http://192.168.1.100:3000) - Owner shares this link with viewers
- Viewers open the link in their browser (Chrome, Firefox, Edge, etc.)
- Viewers can watch the owner's screen in real-time
- Owner: Windows PC with Node.js installed
- Viewers: Any device with a modern web browser
- Both must be on the same network (LAN)
-
Clone or download this repository
-
Install dependencies:
npm installnpm startThis will:
- Start the HTTP server (port 3000)
- Start the WebSocket signaling server (port 3001)
- Open the Electron window with owner controls
- Click "Start Sharing" in the Electron window
- Copy the generated link (will show your LAN IP)
- Send this link to anyone you want to share with
- They open the link in their browser
- Click "Stop Sharing" when done
remote-screen-share/
├── main.js # Electron main process
├── package.json # Project configuration
├── renderer/
│ ├── owner.html # Owner UI (Electron window)
│ ├── owner.js # Owner logic & WebRTC sender
│ ├── index.html # Viewer UI (browser page)
│ └── viewer.js # Viewer logic & WebRTC receiver
├── server/
│ ├── httpServer.js # HTTP server for viewer page
│ └── signaling.js # WebSocket signaling server
└── webrtc/
└── config.js # WebRTC configuration
- Screen Capture: Electron's
desktopCapturerAPI captures the screen - WebRTC: Creates peer-to-peer connection for streaming
- Signaling: WebSocket server exchanges connection information
- HTTP Server: Serves the viewer page to browsers
┌─────────────────┐ ┌──────────────────┐
│ Electron App │ │ WebSocket │
│ (Owner) │◄───────►│ Signaling │
│ │ │ Server │
│ Screen Capture │ │ (Port 3001) │
│ WebRTC Sender │ └──────────────────┘
└─────────────────┘ ▲
│
│
┌─────────┴──────────┐
│ │
┌─────▼──────┐ ┌─────▼──────┐
│ Browser │ │ Browser │
│ (Viewer1) │ │ (Viewer2) │
│ │ │ │
│ WebRTC │ │ WebRTC │
│ Receiver │ │ Receiver │
└────────────┘ └────────────┘
The app automatically detects your LAN IP address. Make sure:
- Owner and viewers are on the same network
- Firewall allows connections on ports 3000 and 3001
- If using Windows Firewall, allow Node.js and Electron
If viewers can't connect, you may need to allow the ports:
# Run as Administrator
netsh advfirewall firewall add rule name="Screen Share HTTP" dir=in action=allow protocol=TCP localport=3000
netsh advfirewall firewall add rule name="Screen Share WebSocket" dir=in action=allow protocol=TCP localport=3001npm startnpm run buildThis creates a Windows installer in the dist/ folder.
- Check if both devices are on the same network
- Verify firewall settings
- Try using the IP address shown in the Electron window
- Make sure owner clicked "Start Sharing"
- Try refreshing the browser page
- Check browser console for errors (F12)
- Electron needs permission to capture screen
- Restart the app if permission was denied
You can modify these settings:
Ports (in respective files):
- HTTP Server:
3000(server/httpServer.js) - WebSocket:
3001(server/signaling.js)
Video Quality (renderer/owner.js):
- Resolution:
1280x720to1920x1080 - Frame Rate:
30 fps
STUN Servers (webrtc/config.js):
- Default: Google's public STUN servers
- Can add your own TURN servers for internet support
- Internet support with TURN servers
- Audio sharing
- Mouse cursor highlighting
- Recording functionality
- Password protection
- Multiple screen selection
- Mobile app support
ISC
Feel free to open issues or submit pull requests!
This app is designed for LAN use. For internet sharing, you should:
- Add authentication
- Use HTTPS/WSS
- Implement TURN servers
- Add encryption
- Better Performance: Close unnecessary apps to reduce CPU usage
- Privacy: Only share with trusted people
- Network: Use wired connection for best quality
- Multiple Monitors: App captures primary monitor by default
Made with ❤️ using Electron and WebRTC