Modern native video surveillance management system for professionals
Download Release β’ Documentation β’ Report Bug
- Automatic ONVIF camera discovery in local network
 - Multiple protocols support: ONVIF, RTSP, OpenIPC, Hikvision, Dahua
 - Two connection modes: direct RTSP and MediaMTX integration
 - Camera grouping and organization
 - Secure credential storage with encryption
 
- Multi-grid layouts: from 1 to 64 cameras simultaneously
 - Customizable templates with tab system
 - Drag & Drop camera management
 - Fullscreen mode and detailed viewing
 - Individual cell settings (audio, pause, recording)
 
- Interactive timeline for recording navigation
 - Calendar interface for search
 - Video clip export functionality
 - Activity statistics and charts
 - Event log with filtering and search
 
- Native application without browser limitations
 - Local data processing without cloud dependencies
 - AES-256 password encryption
 - Low resource consumption thanks to Rust/Tauri
 
- Download the latest release for your OS
 - Install the application (Windows: 
.msi, macOS:.dmg, Linux:.deb/.AppImage) - Launch VMS Dashboard
 
- Add cameras: use ONVIF auto-discovery or add manually
 - Create layout: drag cameras to monitoring grid
 - Configure recording: set schedule and archive parameters
 - Start monitoring: enjoy professional video surveillance!
 
- Node.js 18+
 - Rust 1.70+
 - Platform-specific dependencies (see Tauri Prerequisites)
 
- Node.js 18+ - Download
 - Rust 1.70+ - Install
 - Python 3.6+ - Download
 - Platform-specific dependencies (see Tauri Prerequisites)
 
# Clone repository
git clone https://github.com/OpenIPC/dashboard.git
cd dashboard
# Install dependencies
npm install
# Download MediaMTX binaries (required for builds)
npm run download-mediamtx
# (Optional) Download bundled GStreamer runtime for Linux AppImage builds
npm run download-gstreamer
# Run in development mode
npm run tauri
# Build release for current platform
npm run build-release# Build for Windows (from any platform)
npm run build-windows
# Build for Linux (from any platform) 
npm run build-linux
# Build for macOS (from any platform)
npm run build-macos
# Build debug version
npm run build-debug
# Only download MediaMTX binaries
npm run download-mediamtx
# Only download the optional GStreamer runtime bundle
npm run download-gstreamer# Using PowerShell (Windows)
.\tools\build.ps1 --platform windows
# Using Bash (Linux/macOS)
./tools/build.sh --platform linux
# Using Python directly
python tools/build.py --platform macos --debugnpm run download-gstreamerstages a redistributable runtime when one is available.- If no bundle is found, Linux builds rely on the target system's GStreamer installation.
 - Provide custom artifacts with 
GSTREAMER_BUNDLE_URL(URLs) orGSTREAMER_BUNDLE_ARCHIVE(local file) before rerunning the download script. 
- Windows: 
.msiinstaller insrc-tauri/target/release/bundle/msi/ - Linux: 
.debpackage and.AppImageinsrc-tauri/target/release/bundle/ - macOS: 
.dmginstaller insrc-tauri/target/release/bundle/dmg/ 
For creating distributable releases:
# Prepare all platform binaries
npm run download-mediamtx
# Build release installers
npm run build-release
# For other platforms (requires platform-specific setup)
# npm run build-windows  # Windows MSI
# npm run build-linux    # Linux DEB + AppImage  
# npm run build-macos    # macOS DMGSee Build Guide for detailed build instructions and Release Process for creating releases.
You can trigger builds manually without committing code:
- Go to: GitHub Actions
 - Select: "Build and Test" workflow
 - Click: "Run workflow"
 - Choose platform:
all- Build for all platforms (Windows, Linux, macOS)windows- Build only for Windowslinux- Build only for Linuxmacos- Build only for macOS
 
This allows you to test builds on different platforms without automatic triggering on every commit.
For official releases, push a version tag:
git tag v1.0.0
git push origin v1.0.0This automatically builds and creates a GitHub release with installers for all platforms.
dashboard/
βββ src/                    # React frontend
β   βββ components/         # UI components
β   βββ contexts/           # React contexts
β   βββ services/           # API services
β   βββ types/              # TypeScript types
βββ src-tauri/              # Rust backend
β   βββ src/                # Core code
β   βββ mediamtx/           # MediaMTX integration
β   βββ capabilities/       # Tauri permissions
βββ docs/                   # Documentation
- OS: Windows 10, macOS 10.15, Ubuntu 18.04
 - RAM: 4 GB
 - CPU: Dual-core 2.0 GHz
 - GPU: H.264 decoding support
 - Network: 100 Mbps for local cameras
 
- RAM: 8+ GB
 - CPU: Quad-core 3.0+ GHz
 - GPU: Discrete with hardware decoding
 - Network: Gigabit Ethernet
 - Storage: SSD for recordings
 
We welcome community contributions! Please:
- π΄ Fork the repository
 - πΏ Create a feature branch (
git checkout -b feature/amazing-feature) - πΎ Commit your changes (
git commit -m 'Add amazing feature') - π€ Push to the branch (
git push origin feature/amazing-feature) - π Create a Pull Request
 
- π Bug fixes - fixing issues
 - β¨ Features - new functionality
 - π Documentation - improving docs
 - π Translations - UI translations
 - π§ͺ Testing - writing tests
 
This project is licensed under the MIT License. See LICENSE for details.
- π Issues - bug reports and feature requests
 - π¬ Discussions - general questions and discussions
 - π Wiki - detailed documentation
 - Email: [email protected]
 
- OpenIPC for project support
 - Tauri for cross-platform framework
 - MediaMTX for streaming server
 - Community for testing and feedback
 
β Star this repo if you find it useful!