NAME
kayo-ozamigos - game screen sharing between friends, with voice and chat
SYNOPSIS
DESCRIPTION
Open source personal project. Streams a PC screen straight to friends, with no media server in between, plus voice, chat and password-protected rooms. Available as a Windows app and on the web.
EXAMPLES
Opens the Ozamigos website, with screenshots and what the app does.
Opens the browser version: create a group with a name and password and stream your screen to whoever joins it.
Downloads the Windows app installer, with its own screen capture and PC audio without echo.
ARCHITECTURE
- backend
- Java 25 and Spring Boot 4.1. Rooms and signaling over WebSocket; the server never receives video.
- frontend
- React 19, TypeScript and Vite.
- video
- Peer-to-peer WebRTC. H.265 encoded on the GPU, falling back to H.264 when one side lacks support.
- voice
- Opus, with RNNoise noise suppression (WebAssembly) in an AudioWorklet.
- desktop
- Electron 44 and two native C# modules (.NET 10): screen capture through Windows Graphics Capture with Direct3D 11, and per-process audio capture.
DECISIONS
Video straight between PCs
The server only coordinates connections. With no media traffic, it runs on a free plan and does not become a bottleneck as more people stream.
Custom screen capture
The browser capture capped the frame rate in heavy games. The C# module captures on the GPU and sends frames to Electron through a dedicated channel with flow control.
Measure before changing
Per-second WebRTC metrics and reproducible benchmarks guided the changes to capture, codec and network.
SECURITY
Password hashing with PBKDF2 and salt; per-IP rate limiting; link previews only from an allowlist of domains, against SSRF; Electron with contextIsolation and sandbox.
TESTING
Five layers on GitHub Actions on every push: backend (JUnit), frontend (Vitest), audio, E2E (Playwright) and app. Releases ship through a CI/CD pipeline, with installer auto-updates.