https://github.com/moabualruz/crispy-tivi
Cross-platform IPTV and media streaming app built with Flutter and Rust. M3U, Xtream Codes, EPG, VOD, Series, Chromecast, AirPlay, cloud sync.
https://github.com/moabualruz/crispy-tivi
android-tv cross-platform dart dvr epg ffi flutter flutter-rust-bridge iptv iptv-player m3u media-player media-streaming rusqlite rust stalker-portal streaming vod websocket xtream-codes
Last synced: 3 months ago
JSON representation
Cross-platform IPTV and media streaming app built with Flutter and Rust. M3U, Xtream Codes, EPG, VOD, Series, Chromecast, AirPlay, cloud sync.
- Host: GitHub
- URL: https://github.com/moabualruz/crispy-tivi
- Owner: moabualruz
- License: other
- Created: 2026-02-21T10:04:49.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-03-05T11:25:31.000Z (3 months ago)
- Last Synced: 2026-03-05T14:48:15.848Z (3 months ago)
- Topics: android-tv, cross-platform, dart, dvr, epg, ffi, flutter, flutter-rust-bridge, iptv, iptv-player, m3u, media-player, media-streaming, rusqlite, rust, stalker-portal, streaming, vod, websocket, xtream-codes
- Language: Dart
- Homepage: https://buymeacoffee.com/mohdkhairruzz
- Size: 22.1 MB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE.md
- Code of conduct: CODE_OF_CONDUCT.md
- Audit: audit_report.json
- Security: SECURITY.md
- Notice: NOTICE.md
Awesome Lists containing this project
README
# CrispyTivi
> **Alpha Software** — This project is under active development.
> Expect breaking changes, incomplete features, and rough edges.
> Your feedback and contributions help shape it.
A cross-platform IPTV and media streaming app built with Flutter and
Rust. Supports M3U, Xtream Codes, EPG, VOD, and Series, with planned
Jellyfin, Emby, and Plex integrations. Designed for living-room use
with full keyboard, gamepad, and remote control navigation.
---
## Screenshots
---
## About This Project
CrispyTivi is a **passion project** — built for the love of learning,
tinkering, and solving real problems around media streaming. It started
as a personal challenge to build a cross-platform IPTV app with a Rust
core and a Flutter UI, and it grew into something worth sharing.
This is **not** a commercial product. It's open source so that others
can learn from the architecture, contribute improvements, and help test
across the many platforms it targets. Whether you're into Flutter, Rust,
media streaming, TV app development, or just want a solid IPTV player,
you're welcome here.
---
## Features
### Streaming and Playback
- **Live TV** — M3U and Xtream Codes playlists, channel groups,
favorites, EPG overlay
- **EPG Timeline** — Multi-day electronic program guide with
zoomable grid
- **VOD Browser** — Categories, search, sort, favorites for
movies and series
- **Series Browser** — Season and episode navigation, continue
watching, recently added
- **Video Player** — On-screen display, sleep timer, aspect ratio,
audio and subtitle tracks, playback speed, picture-in-picture
- **Channel Zapping** — Quick switch with group filter tabs
- **Multiview** — Watch multiple streams simultaneously
- **DVR** — Recording support
### Discovery and Organization
- **Search** — Cross-content search across live, VOD, and series
- **Voice Search** — Speech-to-text content search
- **Recommendations** — TMDB-powered content suggestions
- **Favorites** — Per-profile favorites with category filtering
### Connectivity
- **Chromecast** — Cast discovery and streaming via Google Cast
- **AirPlay** — Apple device streaming support
- **Cloud Sync** — Google Drive backup and sync
- **Backup and Restore** — WebDAV and SSH remote backup
- **External Players** — Launch in VLC, MX Player, and more
### User Management
- **Multi-Profile** — Per-profile favorites, watch history, settings
- **Parental Controls** — Content restriction and PIN protection
- **Notifications** — Push notifications for new content
### Planned
- **Media Server Integration** — Jellyfin, Emby, and Plex support
- **Video Upscaling** — GPU-accelerated super resolution with
cross-platform fallback chain
---
## Platforms
| Platform | Status |
| ---------- | --------- |
| Windows | Supported |
| macOS | Supported |
| Linux | Supported |
| Android | Supported |
| Android TV | Supported |
| iOS | Supported |
| Web | Supported |
Android builds produce a single universal APK covering phones,
tablets, and Android TV / Fire TV (via Leanback launcher).
> **iOS note:** Pre-built iOS binaries are not included in releases
> because Apple requires code signing. To run on your iOS device,
> clone the repo, open `ios/Runner.xcworkspace` in Xcode, set your
> own signing team under Signing & Capabilities, and build to your
> device. A free Apple Developer account works for personal testing
> (apps expire after 7 days). See [Getting Started](#getting-started)
> for full setup instructions.
>
> We need help testing on platforms we don't have daily access to —
> especially macOS, iOS, Linux, and various Android TV devices.
> If you can run a build and report issues, that's a huge help.
---
## Architecture
**Rust core + Flutter shell.** All business logic and data persistence
lives in Rust. Flutter is a pure UI client.
- **Native** (Windows, macOS, Linux, Android, iOS) — Rust is embedded
via FFI. Single executable, no server needed.
- **Web** — Rust runs as a companion server. Flutter web connects via
WebSocket. No browser storage.
```text
rust/crates/
crispy-core/ # Business logic + rusqlite (shared)
crispy-ffi/ # FFI bridge for native platforms
crispy-server/ # WebSocket server for web clients
lib/ # Flutter UI (Dart)
core/
data/ # Backend abstraction (FFI or WebSocket)
theme/ # Design tokens (spacing, radius, animation)
widgets/ # Shared UI components
navigation/ # GoRouter, TV focus utilities
features/ # 21 feature modules
```
## Tech Stack
| Concern | Technology |
| ---------------- | ------------------------------ |
| UI Framework | Flutter 3.7+ / Dart ^3.7.0 |
| Core Engine | Rust (crispy-core) |
| FFI Bridge | flutter_rust_bridge |
| State Management | Riverpod 3.x + code generation |
| Video Engine | media_kit (libmpv / FFmpeg) |
| Database | rusqlite (SQLite WAL mode) |
| Network | Dio + Retrofit |
| Routing | GoRouter |
| Web Server | Axum + tokio-tungstenite |
| Cloud Storage | WebDAV, SSH, Google Drive |
| Casting | mDNS + Protobuf (Google Cast) |
| Voice | speech_to_text |
| UI | Material 3, dark glassmorphism |
---
## Getting Started
### Prerequisites
- [Flutter](https://flutter.dev/docs/get-started/install) 3.7+
- [Rust](https://rustup.rs/) (stable toolchain)
- Platform-specific build tools (Xcode, Android SDK, Visual Studio, etc.)
### Setup
```bash
# Clone the repository
git clone https://github.com/nicericelover/CrispyTivi.git
cd CrispyTivi
# Build Rust core
cd rust && cargo build --release && cd ..
# Flutter setup
flutter pub get
flutter pub run build_runner build --delete-conflicting-outputs
```
### Running
```bash
# Native (Rust embedded via FFI)
flutter run -d windows
flutter run -d macos
flutter run -d linux
flutter run -d android
# Web (start the Rust server first, then Flutter)
cargo run -p crispy-server --manifest-path rust/Cargo.toml
flutter run -d chrome --web-port 3000
# Web (custom port and local network access)
cargo run -p crispy-server --manifest-path rust/Cargo.toml -- --port 3030
flutter run -d chrome --web-hostname 0.0.0.0 --web-port 3000 --dart-define=CRISPY_PORT=3030
```
## Building
```bash
flutter build windows # Windows EXE
flutter build apk --release # Android APK (universal)
flutter build web --release # Web app
flutter build macos # macOS app
flutter build linux --release # Linux
```
### Serving the Web Build
```bash
# Development (default server port 8080)
cd rust && cargo run -p crispy-server --release &
flutter run -d chrome --web-port 3000
# Production preview
cd rust && cargo run -p crispy-server --release &
flutter build web --release
npx serve build/web -p 3000
```
## Testing
| Layer | Command |
| ---------------- | ------------------------------------------ |
| Rust core | `cd rust && cargo test` |
| Unit / Widget | `flutter test` |
| Golden (visual) | `flutter test test/golden/` |
| Integration | `flutter test integration_test/` |
| E2E (Playwright) | `cd e2e/playwright && npx playwright test` |
The project has **799 Rust tests** and **1800+ Flutter tests** with
CI enforcing zero analyzer warnings and formatting checks.
---
## Support the Project
CrispyTivi is free and open source. If you find it useful or want
to support its continued development, here are ways to help:
- **Sponsor** — [Buy Me a Coffee](https://buymeacoffee.com/mohdkhairruzz)
- **Contribute** — Open a pull request (see [CONTRIBUTING.md](CONTRIBUTING.md))
- **Test** — Run builds on your devices and report issues
- **Report bugs** — [Open an issue](../../issues) with reproduction steps
- **Spread the word** — Star the repo, share it with friends
Every contribution matters, no matter how small.
---
## Join the Team
Looking for people with expertise in any of the following to help
maintain and improve the project:
- **Flutter / Dart** — UI, state management, platform channels
- **Rust** — Core engine, FFI, performance
- **Mobile app development** — Android, iOS, platform-specific issues
- **TV app development** — Android TV, Fire TV, focus navigation, D-pad
- **Media streaming** — IPTV protocols, video codecs, player engines
- **DevOps / CI** — Build pipelines, cross-platform packaging
If you're interested, reach out:
- **Twitter / X:** [@TheRiceFather](https://x.com/TheRiceFather)
- **GitHub:** [Open an issue](https://github.com/moabualruz/crispy-tivi/issues)
or start a discussion
---
## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md) for development guidelines,
commit conventions, and pull request requirements.
## License
**CC BY-NC-SA 4.0** — Creative Commons Attribution-NonCommercial-ShareAlike
4.0 International.
This is a source-available project. You are free to read, learn from,
and contribute to the code. Commercial use, redistribution, and
republication require explicit permission from the author.
See [LICENSE.md](LICENSE.md) and [NOTICE.md](NOTICE.md) for full details.