What is Raffi?
Raffi is inspired by Stremio and designed to be a faster, more beautiful alternative with enhanced features. Like Stremio, Raffi uses community addons to aggregate streaming sources, but goes beyond with:- Reimagined interface with smooth animations
- Improved performance
- Synchronized watch parties
- Enhanced progress tracking
- Discord Rich Presence integration
- Cross-platform support (Windows, macOS, Linux, iOS, Android)
Architecture
Raffi is a monorepo containing five main projects:Desktop App (raffi-desktop/)
- Framework: Electron 40 with Svelte 5 and TypeScript
- Platforms: Windows, macOS, Linux
- Features: Full desktop experience with watch parties, Discord integration, local file playback
- Build Tool: electron-builder for multi-platform releases
- Video Player: HLS.js for adaptive streaming
- Key Dependencies:
@supabase/supabase-js- Database and authenticationconvex- Real-time data synchronizationhls.js- Video playback@ryuziii/discord-rpc- Discord integrationlucide-svelte- Icons
Mobile App (raffi-mobile/)
- Framework: React Native with Expo SDK 54
- Platforms: iOS and Android
- Features: Browse content, search, continue watching, native video playback
- Architecture: Expo Router for file-based routing, new architecture enabled
- State Management: Zustand
- Sync: Shares authentication and watch progress with desktop via Supabase
- Native Module: Custom torrent-streamer module for on-device streaming
- Video Player: Expo Video (native)
Streaming Server (raffi-server/)
- Language: Go 1.25+
- Purpose: HLS transcoding server for video streams
- Features: Torrent/magnet link streaming, Chromecast support, community addon integration
- Deployment: Compiled binaries bundled with desktop app, can run standalone for mobile
- Key Files:
main.go- Main server logiccast.go- Chromecast functionalityclip.go- Video clippingcommunity_addons.go- Addon integration
Marketing Website (raffi-site/)
- Framework: SvelteKit
- Purpose: Marketing site and download page
- Hosted at: raffi.al
- Build Tool: Vite
Backend Functions (convex/)
- Platform: Convex
- Purpose: Real-time backend functions for watch parties, presence, and synchronization
- Key Files:
raffi.ts- Main Convex functionsauth.config.ts- Authentication configurationschema.ts- Database schema
Tech Stack Summary
Frontend Technologies
- Desktop: Svelte 5, TypeScript, Tailwind CSS 4
- Mobile: React 19, TypeScript, React Native 0.81
- Website: SvelteKit, TypeScript
Backend Technologies
- Streaming Server: Go 1.25+
- Database: Supabase (PostgreSQL)
- Real-time Backend: Convex
- Authentication: Supabase Auth
Development Tools
- Package Managers: Bun 1.0+ (desktop), npm (mobile/site)
- Build Tools: Vite, electron-builder, Expo
- Version Control: Git
Key Features
Stremio Addon Compatibility
- Full support for Stremio addon protocol
- Community addon ecosystem for movies and TV shows
- Multiple addon sources simultaneously
- Easy addon management and configuration
Video Playback
- Custom video player with HLS support
- Multiple quality selection
- Subtitle parsing (SRT/VTT)
- Audio track switching
- Picture-in-picture and fullscreen support
Watch Parties
- Real-time synchronization via Convex
- WebSocket-based state management
- Host/participant role system
- Chat and presence indicators
- Automatic reconnection
Cross-Device Synchronization
- Shared authentication via Supabase across desktop and mobile
- Watch progress sync - start on desktop, continue on mobile
- Library sync - custom lists and favorites across devices
- Addon settings available on all platforms
Development Philosophy
Raffi prioritizes:- Performance - Fast, responsive UI with smooth animations
- User Experience - Beautiful, intuitive interface
- Cross-Platform - Consistent experience across all platforms
- Open Ecosystem - Full compatibility with Stremio addons
- Modern Stack - Latest web technologies and best practices
Next Steps
Setup Guide
Set up your development environment and run Raffi locally
Project Structure
Explore the codebase organization and key directories