An open-source alternative Twitch desktop client, built with Tauri 2, React, TypeScript, and Rust.
Secousse is French for "twitch" (as in a sudden movement).
- Live Stream Playback - HLS video streaming with quality selection
- Multi-stream Grid - Watch up to 4 streams at once in a split-screen layout; audio routes to the focused tile
- Pop-out Windows - Detach any stream into an independent window with optional always-on-top
- Chat - Real-time chat with emote support (Twitch, 7TV, BTTV, FFZ)
- Authentication - OAuth login to access your followed channels and send chat messages
- Follow/Unfollow - Manage your followed channels directly from the app
- Browse - Discover top live streams
- Search - Find channels quickly
- Frontend: React 19, TypeScript, Tailwind CSS v4, Vite
- Backend: Rust with Tauri 2
- Video: HLS.js with custom Tauri loader for CORS bypass
- Chat: IRC WebSocket connection
- APIs: Twitch GQL (public data) + Helix API (authenticated operations)
# Install dependencies
bun install
# Run in development mode
bun run tauri dev
# Build for production
bun run tauri buildsecousse/
├── src/ # React frontend
│ ├── App.tsx # Main application component (state orchestrator)
│ ├── PopoutApp.tsx # Minimal shell for pop-out stream windows
│ ├── components/ # Navbar, Sidebar, VideoPlayer, StreamGrid, Chat, StreamInfo, BrowseGrid, ChannelActionButtons
│ ├── hooks/ # useAuth, useChat, useEmotes, useSearch, useTopStreams, useUserInfo
│ ├── lib/ # utils (persistence, formatters), spamSim (dev tool)
│ ├── TauriHlsLoader.ts # Custom HLS loader for Tauri
│ └── types.ts # TypeScript type definitions
├── src-tauri/ # Rust backend
│ └── src/
│ ├── lib.rs # Tauri commands, OAuth callback server, app setup
│ ├── twitch.rs # Twitch API client (GQL + Helix)
│ ├── chat.rs # IRC WebSocket chat handler
│ └── emotes.rs # 7TV/BTTV/FFZ emote fetching
└── package.json
This project is inspired by Xtra, an excellent open-source Twitch client for Android. Thank you to the Xtra team for their work!
MIT
