Overview
Raffi Desktop is the flagship application offering the complete feature set including watch parties, Discord integration, local file playback, and HLS transcoding via the bundled Go server.Tech Stack
- Framework: Electron 40.2.1
- Frontend: Svelte 5.50.0 with TypeScript 5.9.3
- Styling: Tailwind CSS 4.1.18
- Video Player: HLS.js 1.6.15 for adaptive streaming
- Build Tool: Vite 7.3.1 + electron-builder 26.7.0
- Database: Supabase (PostgreSQL) + Convex
- Bundled Server: Go HLS transcoding server (see Server documentation)
Key Dependencies
Supported Platforms
- Windows
- macOS
- Linux
Windows
Supported Versions: Windows 10 and laterSystem Requirements
- OS: Windows 10 (64-bit) or Windows 11
- Memory: 4 GB RAM minimum, 8 GB recommended
- Storage: 500 MB for application + space for media cache
- Graphics: Hardware acceleration supported GPU recommended
Installation Options
NSIS Installer (Recommended)- Standard Windows installer with auto-update support
- Installs to
C:\Program Files\Raffi - Creates Start Menu shortcuts
- Registers file associations for video formats
- Enterprise deployment option
- Supports silent installation:
msiexec /i Raffi-0.7.0.msi /quiet
Windows-Specific Features
- File Associations: MP4, MKV, AVI, WebM, MOV
- App User Model ID:
al.kaleid.raffi - Discord Rich Presence: Native integration
- Auto-updater: Automatic background updates
Bundled Server Binary
The Windows build includesdecoder-windows-amd64.exe compiled with:- CGO enabled with static linking
- GCC compiler for Windows
- SQLite with
sqlite_omit_load_extensiontag
Features
Media Playback
- HLS.js Player: Adaptive bitrate streaming with quality selection
- Multiple Audio Tracks: Switch between audio streams
- Subtitle Support: SRT and VTT formats with delay adjustment
- Picture-in-Picture: Native PiP mode
- Fullscreen: Seamless fullscreen experience
- Custom Seek Bar: Configurable styles and time-remaining display
Watch Together
- Real-time Synchronization: WebSocket-based state management via Supabase
- Host Controls: Host can control playback for all participants
- Presence Indicators: See who’s watching with you
- Chat Integration: Built-in messaging during watch parties
- Automatic Reconnection: Handles network interruptions gracefully
Discord Integration
- Rich Presence: Show what you’re watching on Discord
- Custom Status: Displays movie/show title, episode info, and timestamp
- Auto-connect: Automatically connects when Discord is running
- Graceful Fallback: Silent failure when Discord isn’t available
Stremio Addon Ecosystem
- Full Compatibility: Works with any Stremio addon
- Multi-source Aggregation: Combine streams from multiple addons
- Torrent/Magnet Support: Direct torrent streaming via bundled server
- Addon Management: Easy installation and configuration
- Community Addons: Access to extensive addon library
Local Media
- File Playback: Open local video files directly
- Supported Formats: MP4, MKV, AVI, WebM, MOV
- File Associations: Double-click video files to open in Raffi
- Drag and Drop: Drop files into the app window
- Library Scanning: Automatic media library organization
Chromecast Support
- Device Discovery: Automatic Chromecast detection on network
- Remote Playback: Cast to TV or Chromecast devices
- Media Router: Chromium’s built-in Cast support
- Bootstrap Service: Custom casting implementation
Auto-updates
- Background Updates: electron-updater 6.7.3
- GitHub Releases: Updates published via GitHub
- Silent Installation: Automatic restart on update
- Update Notifications: Optional user prompts
Development
Prerequisites
- Node.js 18+ or Bun 1.0+
- Go 1.25+ (for building the server)
- Git
- Platform-specific:
- Windows: GCC (via MinGW or MSYS2)
- macOS: Xcode Command Line Tools
- Linux: build-essential, gcc
Setup
Development Scripts
Start Development Servernpm run server:build- Compiles the Go server binarynpm run dev- Starts Vite dev server on http://localhost:5173- Waits for Vite to be ready
- Launches Electron with
ELECTRON_DISABLE_SANDBOX=1
raffi-desktop/release/
Project Structure
Configuration
Window Settings (electron/main.cjs:109-114)- App ID:
al.kaleid.raffi - Product Name:
Raffi - Output Directory:
release/ - ASAR: Enabled (with unpack for native modules)
- Auto-updater: GitHub releases
Building from Source
Build Server Binary
- Windows:
decoder-windows-amd64.exe - Linux:
decoder-x86_64-unknown-linux-gnu - macOS:
decoder-aarch64-apple-darwinordecoder-x86_64-apple-darwin
Build Application
- Server binary (via
build_binary.cjs) - Frontend (via
vite build) - Electron app (via
electron-builder)
Platform-Specific Builds
Cross-platform builds require additional setup:Limitations
Windows
- Requires Windows 10 or later (Electron 40 limitation)
- Some antivirus software may flag the bundled server binary
- Windows Defender may require approval for network access
macOS
- App is unsigned (requires manual approval on first launch)
- Gatekeeper may block execution (use
xattr -crworkaround) - Notarization not configured (prevents automatic installation)
Linux
- AppImage may have sandbox issues on some distributions
- Protocol handlers require manual registration on some DEs
- Hardware acceleration varies by GPU drivers
General
- Single Instance: Only one Raffi window can run at a time
- Memory Usage: Large media libraries may consume significant RAM
- Server Port: Requires port 6969 available for local server
- Network Access: Firewall must allow connections for torrents
Troubleshooting
App won’t start
Check logs:- Windows:
%APPDATA%\Raffi\logs\ - macOS:
~/Library/Logs/Raffi/ - Linux:
~/.config/Raffi/logs/
- Port 6969 already in use (check for existing instances)
- Missing GPU drivers (disable hardware acceleration)
- Corrupt cache (delete app data directory)
Server not starting
http://127.0.0.1:6969 by default. Check if port is available:
Discord RPC not working
The app gracefully handles Discord connection failures:- Discord must be running before launching Raffi
- Discord IPC errors are logged but don’t crash the app
- Check logs for “Discord IPC connect failure” messages
Build errors
Server build fails:- Ensure Go 1.25+ is installed:
go version - Check GCC is available:
gcc --version(Windows/Linux) - Clean build:
rm electron/decoder-* && node build_binary.cjs
- Clear node_modules:
rm -rf node_modules && bun install - Check electron-builder logs in
release/ - Ensure all binaries exist in
electron/directory
Next Steps
- Mobile App - Companion app for iOS and Android
- Streaming Server - Details about the Go HLS server
- Learn about Stremio Addons compatibility