A cross-platform desktop M3U8 video player and downloader built with Tauri, Vue 3, and HLS.js.
- Streaming Playback — Play M3U8/HLS video streams directly via a built-in HTTP proxy that bypasses CORS restrictions
- Video Download — Download and merge M3U8 segments into a single
.mp4file - Resume Support — Interrupted downloads can be resumed without re-downloading completed segments
- Time Range Selection — Download only a specific time range of a video
- Multi-threaded Downloads — Configurable concurrent download threads (1–16)
- Modern UI — Clean dark-themed interface with real-time progress tracking
| Layer | Technology |
|---|---|
| Desktop Framework | Tauri 1.x |
| Frontend | Vue 3 (Composition API) |
| Video Playback | HLS.js |
| HTTP Client (Rust) | reqwest |
| M3U8 Parser | m3u8-rs |
- Node.js >= 18
- Rust (stable toolchain)
- Windows: Microsoft Visual C++ Build Tools
- Linux:
webkit2gtk,libayatana-appindicator3and other Tauri dependencies - macOS: Xcode Command Line Tools
# Install dependencies
npm install
# Run in development mode
npm run tauri dev
# Build frontend only
npm run build# Build release package
npm run tauri buildThe output installer will be in src-tauri/target/release/bundle/.
If you encounter NSIS download errors due to network restrictions, set the environment variable:
[Environment]::SetEnvironmentVariable("TAURI_BUNDLER_TOOLS_GITHUB_MIRROR_TEMPLATE", "https://gitee.com/easy-win/tauri-binaries/releases/download/v0.1.0/<asset>", "User")Then re-run npm run tauri build.
├── src/ # Vue 3 frontend
│ ├── App.vue # Main application component
│ ├── main.js # Entry point
│ └── styles.css # Global styles
├── src-tauri/ # Tauri / Rust backend
│ ├── src/
│ │ ├── main.rs # Tauri commands & app setup
│ │ └── m3u8_downloader.rs # M3U8 download engine
│ ├── Cargo.toml # Rust dependencies
│ └── tauri.conf.json # Tauri configuration
├── index.html # HTML entry point
├── package.json # Node.js dependencies
└── vite.config.js # Vite configuration
MIT