{"id":46409393,"url":"https://github.com/moabualruz/crispy-tivi","last_synced_at":"2026-03-08T03:01:47.818Z","repository":{"id":342257109,"uuid":"1163234851","full_name":"moabualruz/crispy-tivi","owner":"moabualruz","description":"Cross-platform IPTV and media streaming app built with Flutter and Rust. M3U, Xtream Codes, EPG, VOD, Series, Chromecast, AirPlay, cloud sync.","archived":false,"fork":false,"pushed_at":"2026-03-05T11:25:31.000Z","size":23144,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-05T14:48:15.848Z","etag":null,"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"],"latest_commit_sha":null,"homepage":"https://buymeacoffee.com/mohdkhairruzz","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/moabualruz.png","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","threat_model":null,"audit":"audit_report.json","citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE.md","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"buy_me_a_coffee":"mohdkhairruzz"}},"created_at":"2026-02-21T10:04:49.000Z","updated_at":"2026-03-05T11:08:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/moabualruz/crispy-tivi","commit_stats":null,"previous_names":["moabualruz/crispy-tivi"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/moabualruz/crispy-tivi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moabualruz%2Fcrispy-tivi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moabualruz%2Fcrispy-tivi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moabualruz%2Fcrispy-tivi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moabualruz%2Fcrispy-tivi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/moabualruz","download_url":"https://codeload.github.com/moabualruz/crispy-tivi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moabualruz%2Fcrispy-tivi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30243534,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-08T00:58:18.660Z","status":"online","status_checked_at":"2026-03-08T02:00:06.215Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["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"],"created_at":"2026-03-05T13:00:34.235Z","updated_at":"2026-03-08T03:01:47.808Z","avatar_url":"https://github.com/moabualruz.png","language":"Dart","funding_links":["https://buymeacoffee.com/mohdkhairruzz"],"categories":[],"sub_categories":[],"readme":"# CrispyTivi\n\n\u003e **Alpha Software** — This project is under active development.\n\u003e Expect breaking changes, incomplete features, and rough edges.\n\u003e Your feedback and contributions help shape it.\n\nA cross-platform IPTV and media streaming app built with Flutter and\nRust. Supports M3U, Xtream Codes, EPG, VOD, and Series, with planned\nJellyfin, Emby, and Plex integrations. Designed for living-room use\nwith full keyboard, gamepad, and remote control navigation.\n\n---\n\n## Screenshots\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/moabualruz/crispy-tivi/main/docs/screenshots/desktop-home.png\" alt=\"Home — Desktop\" width=\"800\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/moabualruz/crispy-tivi/main/docs/screenshots/desktop-movies.png\" alt=\"Movies — Desktop\" width=\"395\" /\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/moabualruz/crispy-tivi/main/docs/screenshots/desktop-guide.png\" alt=\"EPG Guide — Desktop\" width=\"395\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/moabualruz/crispy-tivi/main/docs/screenshots/tv-home.png\" alt=\"Home — TV\" width=\"800\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/moabualruz/crispy-tivi/main/docs/screenshots/mobile-home.png\" alt=\"Home — Mobile\" width=\"200\" /\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003cimg src=\"https://raw.githubusercontent.com/moabualruz/crispy-tivi/main/docs/screenshots/mobile-movies.png\" alt=\"Movies — Mobile\" width=\"200\" /\u003e\n\u003c/p\u003e\n\n---\n\n## About This Project\n\nCrispyTivi is a **passion project** — built for the love of learning,\ntinkering, and solving real problems around media streaming. It started\nas a personal challenge to build a cross-platform IPTV app with a Rust\ncore and a Flutter UI, and it grew into something worth sharing.\n\nThis is **not** a commercial product. It's open source so that others\ncan learn from the architecture, contribute improvements, and help test\nacross the many platforms it targets. Whether you're into Flutter, Rust,\nmedia streaming, TV app development, or just want a solid IPTV player,\nyou're welcome here.\n\n---\n\n## Features\n\n### Streaming and Playback\n\n- **Live TV** — M3U and Xtream Codes playlists, channel groups,\n  favorites, EPG overlay\n- **EPG Timeline** — Multi-day electronic program guide with\n  zoomable grid\n- **VOD Browser** — Categories, search, sort, favorites for\n  movies and series\n- **Series Browser** — Season and episode navigation, continue\n  watching, recently added\n- **Video Player** — On-screen display, sleep timer, aspect ratio,\n  audio and subtitle tracks, playback speed, picture-in-picture\n- **Channel Zapping** — Quick switch with group filter tabs\n- **Multiview** — Watch multiple streams simultaneously\n- **DVR** — Recording support\n\n### Discovery and Organization\n\n- **Search** — Cross-content search across live, VOD, and series\n- **Voice Search** — Speech-to-text content search\n- **Recommendations** — TMDB-powered content suggestions\n- **Favorites** — Per-profile favorites with category filtering\n\n### Connectivity\n\n- **Chromecast** — Cast discovery and streaming via Google Cast\n- **AirPlay** — Apple device streaming support\n- **Cloud Sync** — Google Drive backup and sync\n- **Backup and Restore** — WebDAV and SSH remote backup\n- **External Players** — Launch in VLC, MX Player, and more\n\n### User Management\n\n- **Multi-Profile** — Per-profile favorites, watch history, settings\n- **Parental Controls** — Content restriction and PIN protection\n- **Notifications** — Push notifications for new content\n\n### Planned\n\n- **Media Server Integration** — Jellyfin, Emby, and Plex support\n- **Video Upscaling** — GPU-accelerated super resolution with\n  cross-platform fallback chain\n\n---\n\n## Platforms\n\n| Platform   | Status    |\n| ---------- | --------- |\n| Windows    | Supported |\n| macOS      | Supported |\n| Linux      | Supported |\n| Android    | Supported |\n| Android TV | Supported |\n| iOS        | Supported |\n| Web        | Supported |\n\nAndroid builds produce a single universal APK covering phones,\ntablets, and Android TV / Fire TV (via Leanback launcher).\n\n\u003e **iOS note:** Pre-built iOS binaries are not included in releases\n\u003e because Apple requires code signing. To run on your iOS device,\n\u003e clone the repo, open `ios/Runner.xcworkspace` in Xcode, set your\n\u003e own signing team under Signing \u0026 Capabilities, and build to your\n\u003e device. A free Apple Developer account works for personal testing\n\u003e (apps expire after 7 days). See [Getting Started](#getting-started)\n\u003e for full setup instructions.\n\u003e\n\u003e We need help testing on platforms we don't have daily access to —\n\u003e especially macOS, iOS, Linux, and various Android TV devices.\n\u003e If you can run a build and report issues, that's a huge help.\n\n---\n\n## Architecture\n\n**Rust core + Flutter shell.** All business logic and data persistence\nlives in Rust. Flutter is a pure UI client.\n\n- **Native** (Windows, macOS, Linux, Android, iOS) — Rust is embedded\n  via FFI. Single executable, no server needed.\n- **Web** — Rust runs as a companion server. Flutter web connects via\n  WebSocket. No browser storage.\n\n```text\nrust/crates/\n  crispy-core/     # Business logic + rusqlite (shared)\n  crispy-ffi/      # FFI bridge for native platforms\n  crispy-server/   # WebSocket server for web clients\n\nlib/               # Flutter UI (Dart)\n  core/\n    data/          # Backend abstraction (FFI or WebSocket)\n    theme/         # Design tokens (spacing, radius, animation)\n    widgets/       # Shared UI components\n    navigation/    # GoRouter, TV focus utilities\n  features/        # 21 feature modules\n```\n\n## Tech Stack\n\n| Concern          | Technology                     |\n| ---------------- | ------------------------------ |\n| UI Framework     | Flutter 3.7+ / Dart ^3.7.0     |\n| Core Engine      | Rust (crispy-core)             |\n| FFI Bridge       | flutter_rust_bridge            |\n| State Management | Riverpod 3.x + code generation |\n| Video Engine     | media_kit (libmpv / FFmpeg)    |\n| Database         | rusqlite (SQLite WAL mode)     |\n| Network          | Dio + Retrofit                 |\n| Routing          | GoRouter                       |\n| Web Server       | Axum + tokio-tungstenite       |\n| Cloud Storage    | WebDAV, SSH, Google Drive      |\n| Casting          | mDNS + Protobuf (Google Cast)  |\n| Voice            | speech_to_text                 |\n| UI               | Material 3, dark glassmorphism |\n\n---\n\n## Getting Started\n\n### Prerequisites\n\n- [Flutter](https://flutter.dev/docs/get-started/install) 3.7+\n- [Rust](https://rustup.rs/) (stable toolchain)\n- Platform-specific build tools (Xcode, Android SDK, Visual Studio, etc.)\n\n### Setup\n\n```bash\n# Clone the repository\ngit clone https://github.com/nicericelover/CrispyTivi.git\ncd CrispyTivi\n\n# Build Rust core\ncd rust \u0026\u0026 cargo build --release \u0026\u0026 cd ..\n\n# Flutter setup\nflutter pub get\nflutter pub run build_runner build --delete-conflicting-outputs\n```\n\n### Running\n\n```bash\n# Native (Rust embedded via FFI)\nflutter run -d windows\nflutter run -d macos\nflutter run -d linux\nflutter run -d android\n\n# Web (start the Rust server first, then Flutter)\ncargo run -p crispy-server --manifest-path rust/Cargo.toml\nflutter run -d chrome --web-port 3000\n\n# Web (custom port and local network access)\ncargo run -p crispy-server --manifest-path rust/Cargo.toml -- --port 3030\nflutter run -d chrome --web-hostname 0.0.0.0 --web-port 3000 --dart-define=CRISPY_PORT=3030\n```\n\n## Building\n\n```bash\nflutter build windows          # Windows EXE\nflutter build apk --release    # Android APK (universal)\nflutter build web --release    # Web app\nflutter build macos            # macOS app\nflutter build linux --release  # Linux\n```\n\n### Serving the Web Build\n\n```bash\n# Development (default server port 8080)\ncd rust \u0026\u0026 cargo run -p crispy-server --release \u0026\nflutter run -d chrome --web-port 3000\n\n# Production preview\ncd rust \u0026\u0026 cargo run -p crispy-server --release \u0026\nflutter build web --release\nnpx serve build/web -p 3000\n```\n\n## Testing\n\n| Layer            | Command                                    |\n| ---------------- | ------------------------------------------ |\n| Rust core        | `cd rust \u0026\u0026 cargo test`                    |\n| Unit / Widget    | `flutter test`                             |\n| Golden (visual)  | `flutter test test/golden/`                |\n| Integration      | `flutter test integration_test/`           |\n| E2E (Playwright) | `cd e2e/playwright \u0026\u0026 npx playwright test` |\n\nThe project has **799 Rust tests** and **1800+ Flutter tests** with\nCI enforcing zero analyzer warnings and formatting checks.\n\n---\n\n## Support the Project\n\nCrispyTivi is free and open source. If you find it useful or want\nto support its continued development, here are ways to help:\n\n- **Sponsor** — [Buy Me a Coffee](https://buymeacoffee.com/mohdkhairruzz)\n- **Contribute** — Open a pull request (see [CONTRIBUTING.md](CONTRIBUTING.md))\n- **Test** — Run builds on your devices and report issues\n- **Report bugs** — [Open an issue](../../issues) with reproduction steps\n- **Spread the word** — Star the repo, share it with friends\n\nEvery contribution matters, no matter how small.\n\n---\n\n## Join the Team\n\nLooking for people with expertise in any of the following to help\nmaintain and improve the project:\n\n- **Flutter / Dart** — UI, state management, platform channels\n- **Rust** — Core engine, FFI, performance\n- **Mobile app development** — Android, iOS, platform-specific issues\n- **TV app development** — Android TV, Fire TV, focus navigation, D-pad\n- **Media streaming** — IPTV protocols, video codecs, player engines\n- **DevOps / CI** — Build pipelines, cross-platform packaging\n\nIf you're interested, reach out:\n\n- **Twitter / X:** [@TheRiceFather](https://x.com/TheRiceFather)\n- **GitHub:** [Open an issue](https://github.com/moabualruz/crispy-tivi/issues)\n  or start a discussion\n\n---\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for development guidelines,\ncommit conventions, and pull request requirements.\n\n## License\n\n**CC BY-NC-SA 4.0** — Creative Commons Attribution-NonCommercial-ShareAlike\n4.0 International.\n\nThis is a source-available project. You are free to read, learn from,\nand contribute to the code. Commercial use, redistribution, and\nrepublication require explicit permission from the author.\n\nSee [LICENSE.md](LICENSE.md) and [NOTICE.md](NOTICE.md) for full details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoabualruz%2Fcrispy-tivi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmoabualruz%2Fcrispy-tivi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoabualruz%2Fcrispy-tivi/lists"}