Multi-destination streaming application that allows you to stream to multiple platforms simultaneously at different bitrates.
- Stream to YouTube, Twitch, Kick, Facebook, and custom RTMP servers
- Multiple output groups with independent encoding settings
- Hardware encoder support (NVENC, QuickSync, AMF, VideoToolbox)
- Profile management with encrypted stream keys
- Real-time stream statistics
- Cross-platform: macOS, Windows, Linux
Comprehensive technical documentation is available in the docs/ directory.
| Document | Description |
|---|---|
| Getting Started | Installation and first run guide |
| System Overview | Architecture and component diagrams |
| FFmpeg Integration | Relay architecture and process management |
| State Management | Zustand stores and data flow |
| Services Layer | Rust backend services |
| Glossary | Technical terms and definitions |
- Beginners: Start with Getting Started -> First Stream
- Developers: System Overview -> Services Layer -> State Management
- Complete Documentation: docs/README.md
Run the setup script to install all prerequisites automatically:
macOS / Linux:
git clone https://github.com/ScopeCreep-zip/SpiritStream.git
cd SpiritStream
./setup.shWindows (PowerShell):
git clone https://github.com/ScopeCreep-zip/SpiritStream.git
cd SpiritStream
.\setup.ps1The setup script installs: Rust, FFmpeg, platform build tools, and pnpm dependencies.
After setup completes, restart your terminal and run:
pnpm dev # Development mode (all workspaces)
pnpm build # Production buildDownload the latest release from Releases:
| Platform | File |
|---|---|
| macOS | spiritstream_x.x.x_aarch64.dmg |
| Windows | spiritstream_x.x.x_x64-setup.exe |
| Linux | spiritstream_x.x.x_amd64.AppImage, spiritstream_x.x.x_amd64.deb, or spiritstream-x.x.x-1.x86_64.rpm |
Note: FFmpeg must be installed separately:
- Windows: Download from https://github.com/BtbN/FFmpeg-Builds/releases and add to PATH (or set the path in Settings).
- Linux: Use your package manager (apt/dnf/pacman) or download a static build from the same BtbN link.
- macOS:
brew install ffmpeg
| Requirement | Installation |
|---|---|
| Node.js 20.19+ or 22.12+ | nodejs.org |
| pnpm 8+ | npm install -g pnpm |
| Rust 1.70+ | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh |
| FFmpeg | See above |
| Platform tools | Tauri Prerequisites |
git clone https://github.com/ScopeCreep-zip/SpiritStream.git
cd SpiritStream
pnpm install
pnpm buildBuild output: apps/desktop/src-tauri/target/release/bundle/
- Create a Profile: Set up your incoming RTMP URL and configure output groups
- Add Stream Targets: Add your streaming platforms with server URLs and stream keys
- Configure Encoding: Choose video encoder, resolution, bitrate, and audio settings
- Start Streaming: Click "Start Stream" to begin broadcasting to all targets
This is a pnpm monorepo with multiple workspaces:
apps/web- React frontend (@spiritstream/web)apps/desktop- Tauri desktop wrapper (@spiritstream/desktop)server- Standalone Rust HTTP server
| Mode | Command | Description |
|---|---|---|
| Desktop | pnpm dev |
Tauri app with embedded webview + server sidecar. The full desktop experience. |
| Web + Server | pnpm backend:dev then VITE_BACKEND_MODE=http pnpm dev:web |
Browser-based UI connecting to standalone HTTP server. For remote access or Docker development. |
| Frontend Only | pnpm dev:web |
Just the React frontend (no backend). For UI-only work. |
pnpm dev # Desktop app (recommended for most development)
pnpm dev:web # Frontend only (localhost:5173)
pnpm dev:desktop # Same as pnpm dev
pnpm backend:dev # Standalone HTTP server (localhost:8008)
pnpm build # Production build (all workspaces)
pnpm typecheck # Check TypeScript types
cargo check --manifest-path server/Cargo.toml # Check Rust serverRun the standalone backend server for browser-based or Docker usage:
pnpm backend:devEnvironment variables:
SPIRITSTREAM_HOST(default:127.0.0.1)SPIRITSTREAM_PORT(default:8008)SPIRITSTREAM_DATA_DIR(default:./data)SPIRITSTREAM_LOG_DIR(default:./data/logs)SPIRITSTREAM_THEMES_DIR(default:./themes)SPIRITSTREAM_UI_DIR(default:./dist)SPIRITSTREAM_API_TOKEN(optional; single shared token for HTTP auth)SPIRITSTREAM_UI_ENABLED(optional;1to serve the web UI from the host)SPIRITSTREAM_UI_URL(launcher-only; default:http://localhost:1420in dev,http://HOST:PORTin release)SPIRITSTREAM_SERVER_PATH(launcher-only; absolute path to the host binary)SPIRITSTREAM_LAUNCHER_HIDE_WINDOW(launcher-only;1to hide launcher window)SPIRITSTREAM_LAUNCHER_OPEN_EXTERNAL(launcher-only;1to open the UI in your browser)
Sample values live in .env.example.
Frontend configuration for the web UI:
VITE_BACKEND_MODE=http
VITE_BACKEND_URL=http://127.0.0.1:8008
VITE_BACKEND_WS_URL=ws://127.0.0.1:8008/ws
VITE_BACKEND_TOKEN=Then start the frontend with:
VITE_BACKEND_MODE=http pnpm dev:webThe Tauri desktop binary now starts the host server and can open the UI URL in your default browser.
Use SPIRITSTREAM_UI_URL to point it at a local Vite dev server or a cloud UI, and SPIRITSTREAM_SERVER_PATH
to override the host binary location.
GPL-3.0 License - See LICENSE for details.
SpiritStream was inspired by streamer SpiritArtLife. We are grateful for the idea and for her testing.
We're a team of queer devs who love making cool things for awesome people. We appreciate your support!
- Donate: https://www.paypal.com/paypalme/radicalkjax
- Website: https://scopecreep.zip/