Tellyfin
A LAN-first pseudo-live television system that turns an existing Jellyfin media library into automatically generated channels, persistent schedules, and a conventional electronic program guide.
Discuss this ventureWhy this problem persists.
On-demand media libraries make every viewing session begin with browsing and choosing. They do not provide the passive, channel-based experience of a persistent television lineup with current and upcoming programming ready to tune.
What we are building.
Tellyfin combines a headless Rust server that owns television state with a Tauri and React Windows client for guide navigation and native playback. It synchronizes Jellyfin media, generates deterministic channel lineups and rolling schedules, and plays media directly from Jellyfin through embedded libmpv contexts.
The intended users.
What the product does.
Jellyfin discovery and full-catalog synchronization
Deterministic automatic channel generation
Persistent rolling schedules and current-program resolution
Electronic program guide with time navigation and program details
Channel rename, hide, regeneration, and program-skip controls
Direct play, direct stream, and HLS-transcoded Jellyfin playback
Dual embedded libmpv players for prepared schedule transitions
Native playback controls, track selection, and recovery behavior
Windows Credential Manager authentication and opaque media handles
OpenAPI-generated TypeScript contracts and live SSE invalidation
The structural gap.
Jellyfin is designed around on-demand library browsing: users choose a specific item each time they want to watch. That model does not create the passive rhythm of television, where a stable lineup is already in progress and a guide makes current and upcoming programs visible. A browser-only player also introduces media, codec, subtitle, hardware-decoding, and recovery constraints that work against a dependable native television experience.
Tellyfin is an advanced MVP in active development. Phases 1–3 are implemented, including the server and desktop architecture, Jellyfin synchronization, automatic channel generation, persistent schedules, electronic program guide, channel controls, typed API contracts, secure client authentication, and embedded dual-libmpv playback. Phase 4 remains focused on release hardening through end-to-end, real-LAN, restart, outage, migration, long-running playback, performance, clean-machine, and documentation validation.
Built on a shared foundation.
Tellyfin combines several disciplines that the MackJoy portfolio has developed independently — Rust systems engineering, Tauri desktop architecture, React interfaces, persistent data systems, and generated API contracts — in one media orchestration platform. It extends the native application foundation demonstrated by Playmate into embedded video, Windows child-window integration, credential isolation, and server-authoritative scheduling, creating reusable patterns for future desktop and systems work.
How it is built.
The headless server uses Rust, Tokio, Axum, SQLite, SQLx, Serde, and Utoipa, with Server-Sent Events for client invalidation. The Windows client uses Tauri 2, React 19, TypeScript, Material UI 7, TanStack Query, and Vite. Its native Rust layer hosts two libmpv contexts in Win32 child windows, resolves Jellyfin playback sources, and keeps credentials and authenticated URLs out of JavaScript. OpenAPI generated from Rust models provides the contract for generated TypeScript operation types.