StreamGrid is a multi-stream viewer that gives you total control over how you watch. Build a giant main feed ringed by smaller cameras, a tidy equal grid for monitoring, or any arrangement in between — then drag, resize, and auto-fit it to your window in a click. Built with Electron, React, and TypeScript, it's the command center for watching many live sources at once.
📚 Documentation: API Reference | Bruno API Collection
StreamGrid.mp4
- Layouts that fill the window:
- Build ANY arrangement — from 2 feeds to 20+
- Drag to reorder and grab a corner to resize in real time
- One-click Auto-arrange packs every feed edge-to-edge, stretching tiles to fill the screen at the best fit for your window
- Grid management:
- Save unlimited grid presets and switch instantly (Ctrl/Cmd+1–9, Ctrl/Cmd+Tab)
- Rename, duplicate, export, and delete from the All grids view
- Import a shared grid straight from the + menu, or export yours to send to a friend
- The quick switcher (Ctrl/Cmd+K) jumps between grids in a keystroke
- Stream platform support:
- Local files — play video straight from your computer
- YouTube — standard videos, live streams, and shorts
- Twitch — channel live streams
- RTSP / RTSPS — IP cameras and streaming sources with automatic FFmpeg transcoding (auth, low-latency HLS, multiple concurrent streams, auto-retry)
- HLS — HTTP Live Streaming sources
- MPEG-DASH — Dynamic Adaptive Streaming over HTTP
- Sound management:
- Global mute/unmute for the whole wall
- Per-stream audio controls
- Option to start streams muted
- Chat integration:
- YouTube and Twitch live chat as draggable, resizable panels
- Automation:
- Auto-start all streams on launch (with configurable delay)
- Automatic retry for failed streams with exponential backoff
- REST API for full programmatic control — add/update/remove streams and manage grids remotely, with API-key auth and rate limiting
- M3U / M3U8 playlist import with automatic arrangement
- Persistent everything: aggressive auto-save on every meaningful change
- Cross-platform: Windows, macOS, and Linux
- Visit the Releases section
- Download the latest version for your platform:
- Windows:
streamgrid-3.0.0-win-x64.exe - macOS (Intel):
streamgrid-3.0.0-mac-x64.dmg - macOS (Apple Silicon):
streamgrid-3.0.0-mac-arm64.dmg - Linux:
streamgrid-3.0.0-linux-x64.AppImage
- Windows:
- Install and run StreamGrid
- Node.js 18.x or higher
- npm 9.x or higher
- FFmpeg (required for RTSP streaming support)
Windows:
- Download FFmpeg from ffmpeg.org
- Extract to
C:\ffmpeg - Add
C:\ffmpeg\binto your system PATH - Or use Chocolatey:
choco install ffmpeg
macOS:
brew install ffmpegLinux (Ubuntu/Debian):
sudo apt update
sudo apt install ffmpegLinux (Fedora/RHEL):
sudo yum install ffmpeg- Clone the repository
git clone https://github.com/LordKnish/StreamGrid.git
cd StreamGrid- Install dependencies
npm install- Run in development mode (for testing/development)
npm run dev- Package the application (for distribution)
npm run dist:win # Windows (NSIS installer)
npm run dist:mac:x64 # macOS (Intel)
npm run dist:mac:arm64 # macOS (Apple Silicon)
npm run dist:linux # Linux (AppImage + deb)To produce an unpacked build for the current platform without an installer:
npm run build:unpack- Find your built application in the
dist/directory, e.g.:- Windows:
dist/streamgrid-3.0.0-win-x64.exe - macOS:
dist/streamgrid-3.0.0-mac-*.dmg - Linux:
dist/streamgrid-3.0.0-linux-x64.AppImage
- Windows:
StreamGrid supports RTSP (Real Time Streaming Protocol) streams from IP cameras, security systems, and other RTSP sources.
- FFmpeg must be installed on your system (see installation instructions above)
- RTSP stream URL from your camera or source
rtsp://[username:password@]host[:port]/path
Examples:
rtsp://192.168.1.100:554/stream1
rtsp://admin:password@192.168.1.100/live
rtsps://secure-camera.example.com/stream
- StreamGrid detects RTSP URLs automatically
- FFmpeg transcodes the RTSP stream to HLS format in real-time
- The HLS stream is served locally and played in the app
- Low latency (~2-3 seconds) with automatic retry on connection loss
- Click the Add Stream button
- Enter your RTSP URL in the Stream URL field
- The app will show "RTSP stream (requires FFmpeg)" if detected
- Add a name and optional logo
- Click Add Stream
"FFmpeg not installed" error:
- Install FFmpeg using the instructions above
- Restart StreamGrid after installation
- Verify FFmpeg is in your system PATH:
ffmpeg -version - The status bar shows whether FFmpeg was detected on launch
Stream fails to load:
- Verify the RTSP URL is correct
- Check if authentication is required (username/password)
- Ensure your firewall allows RTSP connections
- Try using TCP transport:
rtsp://camera?tcp
High latency or buffering:
- RTSP streams have inherent 2-3 second latency due to HLS transcoding
- Check your network connection to the camera
- Reduce the number of concurrent RTSP streams
Stream stops after a while:
- StreamGrid automatically retries failed streams (up to 3 times)
- Check camera timeout settings
- Verify network stability
- Limit concurrent RTSP streams to 3-4 for best performance
- Use a wired network connection for cameras when possible
- Close unused RTSP streams to free resources
- RTSP transcoding uses ~100MB RAM per stream
- Framework: Electron with electron-vite
- Frontend:
- State Management: Zustand
- Video Playback & Streaming:
- React Player - Multi-platform video support
- HLS.js - HLS streaming support
- dash.js - MPEG-DASH streaming support
- YouTube Player API integration
- Twitch Player API integration
- Layout: React Grid Layout
StreamGrid/
├── src/
│ ├── main/ # Electron main process
│ │ └── index.ts # Main process entry point
│ ├── preload/ # Preload scripts for IPC
│ │ ├── index.ts # Preload implementation
│ │ └── index.d.ts # TypeScript definitions
│ ├── renderer/ # React application
│ │ ├── src/
│ │ │ ├── assets/ # Images, icons, styles
│ │ │ ├── components/ # React components
│ │ │ │ ├── StreamGrid.tsx
│ │ │ │ ├── StreamCard.tsx
│ │ │ │ └── ...
│ │ │ ├── hooks/ # Custom React hooks
│ │ │ ├── store/ # Zustand state management
│ │ │ ├── theme.ts # Design tokens + MUI theme
│ │ │ ├── types/ # TypeScript type definitions
│ │ │ ├── utils/ # Helpers (grid import, parsing)
│ │ │ ├── workers/ # Web workers
│ │ │ └── App.tsx # Main React component
│ │ └── index.html # HTML entry point
│ └── shared/ # Shared types between processes
│ └── types/
├── resources/ # Application resources
│ ├── icon.png # App icon
│ └── icon.svg # App icon (vector)
├── dist/ # Built applications (after build)
├── out/ # Compiled TypeScript (generated)
├── electron.vite.config.ts # Vite configuration
├── package.json # Project dependencies
└── tsconfig.json # TypeScript configuration
Layout Engine & Grid Management
- Window-filling auto-arrange — a rebuilt layout engine that picks the best row/column split for the current window and stretches every tile edge-to-edge, with no empty bands or letterboxing between feeds
- Reliable grid management — fixed renaming in the All grids view, corrected grid duplication, and a redesigned, faster All grids browser with search
- Import from the + menu — right-click the new-grid + button to import a shared grid; import is also available from the All grids view
- Streamlined auto-arrange — the confirmation is now a simple prompt
- Live status bar — shows FFmpeg readiness, the active grid, and feed count
- Grids now stay in sync across the tab strip, quick switcher, and All grids view after rename/duplicate/delete/import
- Layout calculations measure the real canvas, so feeds fit the window accurately
Major Feature Release - Automation & Advanced Controls
- REST API - Full programmatic control with authentication and rate limiting
- M3U Playlist Import - Import playlists with intelligent auto-arrangement
- RTSP Stream Support - Production-ready IP camera streaming with FFmpeg transcoding
- Sound Management System - Global and per-stream audio controls
- Auto-Start Streams - Automatically play all streams on launch
- Auto-Restart Failed Streams - Automatic retry with exponential backoff
- Auto-Arrange Grid - Intelligent grid layout
- Complete REST API documentation (docs/API.md)
- Bruno API test collection (bruno/README.md)
- Comprehensive RTSP setup guide in README
- Fixed Linux auto-updater errors
- Improved CSP handling for Twitch embeds
- Enhanced error handling across all components
Major Performance Update & Enhanced Features
- Removed artificial loading delays - Faster application startup
- Virtual grid rendering - Implemented react-window for efficient handling of large grids
- Player pool system - Reuses video player instances to optimize memory usage
- Debounced state updates - Reduced I/O operations with intelligent 5-second intervals
- Web worker integration - Layout calculations now run in separate thread for UI responsiveness
- Lazy loading - Chat components load on-demand for faster initial render
- Code splitting - Optimized bundle sizes with manual chunking strategy
- Performance monitoring - Built-in hooks to track and analyze app performance
- Aggressive auto-save - Immediate saves on all critical operations:
- Stream addition/removal
- Stream property updates
- Layout changes (resize/reposition)
- Grid switching
- Application quit
- Browser refresh/close
- Local file support - Play video files directly from your computer
- Grid management system - Save, load, and organize multiple grid configurations
- Import grid configurations - Share and import grid setups from JSON files
- Auto-generated avatars - Streams without logos get unique identicon avatars
- Comprehensive error handling - Improved error boundaries and user feedback
- Fixed grid rename functionality
- Resolved Twitch streams not starting (added required parent parameter)
- Improved drag functionality and text selection handling
- Fixed duplicate logo URL issues
Multi-Platform Streaming Support
- Added DASH streaming protocol support
- Integrated YouTube live chat functionality
- Added Twitch stream and chat support
- Improved URL handling and stream type detection
- Enhanced drag-and-drop functionality
- Added GitHub version checking with update alerts
Initial Release
- Core multi-stream grid functionality
- Drag-and-drop stream repositioning
- Resizable stream windows
- Stream import/export capabilities
- Cross-platform support (Windows, macOS, Linux)
- HLS streaming support
- Persistent layout saving
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.