Koala 48bd503b5c fix(popup): seed lastKnownPeers in init() to prevent false join toasts
init() called updatePeerList() directly but never set lastKnownPeers.
On the first PEER_UPDATE message (heartbeat, play/pause, any state
change), detectPeerChanges() saw lastKnownPeers=[] and treated ALL
peers including self as newly joined — triggering 'name joined the room'
toast on every action while the popup was open.
2026-05-25 12:40:05 +02:00
2026-04-21 08:46:28 +02:00
2026-05-02 02:07:22 +02:00

KoalaSync

Release Status GitHub release License Firefox Add-on Chrome Extension

KoalaSync is a lightweight Browser Extension and Relay Server for synchronized video playback across any website—YouTube, Twitch, Netflix, and custom HTML5 players. Built with a focus on Data Sovereignty and Performance.

🌟 Why KoalaSync?

  • 🛡️ Security-First: Volatile RAM-based relay with built-in brute-force protection and zero-persistence architecture.
  • 📡 Direct Logic: Manual Socket.IO wire implementation for reliable synchronization.
  • 🛠️ Clean Build: Dependency-free extension runtime with no library overhead.
  • 🌐 Universal: Works on any website with a <video> tag.

Key Features

  • Global Synchronization: Synchronize Play, Pause, and Seeking on any website with a <video> tag.
  • Episode Auto-Sync: Perfectly sync series binges. All peers wait until everyone has loaded the next episode before starting together.
  • Smart Matching: Automatically highlights tabs containing matching video titles.
  • Dual Heartbeat Architecture: Robust session tracking that prevents ghost rooms and stale connections.
  • Efficient Relay: Minimal overhead WebSocket message forwarding.
  • Seamless Invitations: Smart links that automatically configure server and room credentials for your friends.

📂 Repository Structure

  • extension/: Browser Extension (Chrome & Firefox).
  • server/: Node.js + Socket.IO Relay Server (Containerized).
  • website/: Marketing landing page & Invitation Bridge.
  • shared/: Single Source of Truth for protocol constants.
  • scripts/: Automated build and synchronization utilities.
  • docs/: Technical deep-dives (Architecture, Sync Guide).

🚀 Quick Start

For Users (Installation)

The easiest way to install KoalaSync is to download the pre-compiled version from the Releases page.

  1. Download the latest koalasync-chrome.zip or koalasync-firefox.zip.
  2. Extract the file and load it as an "Unpacked Extension" in your browser's Developer Mode.

For Developers (Building)

To build the extension from source and synchronize protocol constants:

npm install
node scripts/build-extension.js

The compiled artifacts will be available in the dist/ directory.

For Self-Hosting (Docker)

Deploy your own private relay server using our official image:

# Pull the latest image
docker pull ghcr.io/shik3i/koalasync:latest

# Or use our example compose file
cp docker-compose.example.yml docker-compose.yml
docker-compose up -d

The server will be available at ws://localhost:3000. See docker-compose.example.yml for advanced configuration.

To connect your extension to a self-hosted server, open the popup → Room tab → select Custom Server → enter your server's WebSocket URL (e.g., ws://localhost:3000).

⚠️ Note: ws:// only works for localhost. If you deploy to a real domain, you must use wss:// (e.g., wss://sync.yourdomain.com). This requires a TLS-terminating reverse proxy (e.g., Caddy, Nginx, or Traefik) in front of the relay server. See Caddyfile.example for a production-ready template.



Built with ❤️ by Shik3i. KoalaSync is Open Source under the MIT License.
S
Description
Minimalist, privacy-first synchronized video playback for YouTube, Netflix, Emby, and general HTML5. Built with pure Vanilla JS and a Node.js relay.
Readme MIT 42 MiB
Languages
JavaScript 52.7%
HTML 27.4%
CSS 19.7%
Python 0.2%