unsubbed.co

Reel

Self-hosted media servers tool that provides GNOME media player for Plex and Jellyfin.

A self-hosted media client built for Linux desktops, honestly reviewed. 191 stars, early stage, no marketing copy — just what the README and code show.

TL;DR

  • What it is: A native GNOME desktop client for Plex and Jellyfin, written in Rust with a reactive Relm4 UI. No Electron, no browser tab, no web wrapper — a real desktop app [README].
  • Who it’s for: Linux/GNOME users who already run Plex or Jellyfin and want a native client instead of the browser interface or an Electron shell [README].
  • Cost: Free, GPLv3. Reel itself costs nothing. Your underlying media server (Plex or Jellyfin) has its own pricing story [README].
  • Key strength: Pure Rust with SQLite-backed offline metadata, full-text search via Tantivy, dual-player support (MPV + GStreamer), and genuine libadwaita integration that feels like a GNOME app rather than a port [README].
  • Key weakness: The project is mid-migration (~85% complete to Relm4 reactive architecture). Pre-built packages are flagged as experimental, AppImage support was removed entirely, and there are essentially no independent third-party reviews to validate the experience [README].
  • Bottom-line signal: 191 GitHub stars. Early project, active development, no external coverage yet. If you want something battle-tested with thousands of users, this is not that.

What is Reel

Reel is a native Linux media player that connects to your Plex and Jellyfin servers and presents your library as a proper GNOME application. The short version: it does what the browser does, but without the browser.

The project is written entirely in Rust and uses Relm4 — a reactive framework built on GTK4 and libadwaita that follows Elm-style architecture. The choice of Rust and Relm4 is a deliberate statement: the author wanted performance and memory safety without the overhead of web-based UIs. This matters for a media player because smooth playback and responsive navigation are table stakes, and browser-based frontends regularly fumble both [README].

The application currently supports Plex and Jellyfin. Local file support is listed as “Coming Soon” in the README. Jellyfin users get full support; Plex users get PIN-profile authentication and connection monitoring on top of the base library browsing [README].

One important caveat before going further: the README carries a prominent warning — “Relm4 Migration In Progress (~85% Complete): Reel is being migrated to a fully reactive Relm4 architecture. Core functionality is working but expect some UI polish issues and missing features as we complete the transition.” [README] This is an honest signal from the author. Core playback and browsing work; expect rough edges everywhere else.

There are no independent third-party reviews of Reel at the time of writing. The provided search results return content about “Sky Reels” (an AI video model), Instagram Reels tools, and unrelated self-hosted apps — none of which describe this application. Everything in this review draws from the GitHub README, the repository metadata, and the author’s own blog post. That’s not a mark against the project; it’s a mark of where it is in its lifecycle.


Why people choose it

Without third-party reviews, the honest answer here comes from what the project offers versus the obvious alternatives: the Plex web/desktop app, Jellyfin’s web UI, and Infuse on Apple platforms.

The common complaint about Plex’s Linux experience is that the official desktop app is Electron-wrapped and the web interface is a full browser load. Neither feels native on a GNOME desktop. Jellyfin’s web UI is genuinely good but still lives in a browser tab. For users who run a GNOME desktop and care about consistency — correct system fonts, responsive keyboard navigation, desktop notifications that behave like desktop notifications — a proper libadwaita app is meaningfully better [README].

The SQLite offline sync is the other angle. Reel syncs library metadata locally, so you can browse your entire collection without the server being responsive. This matters on a home network where the Plex/Jellyfin box might be on a different VLAN or behind a VPN, and you want to browse before you’ve confirmed the connection. Streaming still requires the server; browsing does not [README].

The full-text search via Tantivy (a Rust search library) is a concrete win over most clients, which either rely on the server-side search API or offer no search at all. Tantivy-powered search is fast, local, and indexes cast/crew metadata lazily [README].


Features

Based entirely on the README and project metadata:

Media backend support:

  • Plex: full library browsing, PIN profile authentication, connection monitoring, credential storage in the application database [README]
  • Jellyfin: full support [README]
  • Local files: listed as coming soon [README]

Library and browsing:

  • Offline-first metadata via SQLite — browse without active server connection [README]
  • Full-text search with Tantivy across all media, lazy-loaded cast/crew metadata [README]
  • Database-driven chunk cache with progressive streaming and smart cleanup [README]

Playback:

  • MPV as the primary player on Linux [README]
  • GStreamer as macOS and fallback player [README]
  • Skip intro / skip credits functionality [README]
  • Progress sync across sessions [README]
  • Hardware acceleration support [README]

UI and configuration:

  • Native GNOME with Relm4 and libadwaita — responsive design, HIG compliance [README]
  • Live config hot-reload — change settings without restarting the app [README]
  • Reactive AsyncComponents and Worker patterns for background tasks (metadata syncs, cache operations) [README]

Build and deployment:

  • Nix flakes for the development environment [README]
  • Pre-built binary packages for Ubuntu 24.04+, Fedora 40+ [README]
  • AppImage support removed (pending contributor fix) [README]

What’s missing relative to a mature media client: no iOS/Android companion, no DLNA/Chromecast casting mentioned, no subtitle customization documented, and no documented plugin system despite “plugins” appearing in the merged profile’s canonical features list [merged profile]. The REST API feature listed in the canonical features is similarly undocumented in the README.


Pricing: SaaS vs self-hosted math

Reel itself is free software under GPLv3. There is no hosted version, no subscription, no paid tier. The cost question is entirely about your underlying media server.

Jellyfin: Fully free and open source. If you self-host Jellyfin, your total cost for the Reel + Jellyfin stack is the cost of the machine running Jellyfin plus your storage. A Hetzner CX22 at $4/month handles a small library comfortably. Total: ~$4–15/month depending on storage needs.

Plex: More complicated. The Plex server software is free, but Plex Pass — which unlocks hardware transcoding, live TV, downloads, and several other features — runs $4.99/month, $39.99/year, or $119.99 as a lifetime purchase. If you’re already a Plex Pass subscriber, Reel costs nothing on top. If you’re not, you may not need it — Reel handles direct play and streaming; transcoding happens server-side regardless of the client.

The actual comparison that matters: If you’re running Plex or Jellyfin today and using the browser or Electron app, switching to Reel costs nothing. The pitch isn’t about saving money versus Plex — it’s about getting a better native experience from the server you already have.


Deployment reality check

Installation is not the typical “pull a Docker image and you’re done” experience. Reel is a desktop application, not a server service.

For most users (Ubuntu 24.04+ or Fedora 40+):

  1. Download the binary from the GitHub releases page
  2. Install system dependencies: GTK4, libadwaita, GStreamer plugins, libmpv2
  3. Run the binary

The dependency list is non-trivial on a minimal install. GStreamer on Ubuntu requires several plugin packages (gstreamer1.0-plugins-good, gstreamer1.0-plugins-bad, gstreamer1.0-libav) that aren’t installed by default. libmpv2 is available in Ubuntu 24.04+ repositories. On Fedora, the situation is similar but the package names differ.

For developers (or Nix users): The official path uses Nix flakes, which handles all dependency resolution automatically. If you already use Nix, this is a first-class experience. If you don’t, it’s a significant prerequisite.

What the README explicitly warns about:

  • Pre-built packages are “automatically generated and may not be thoroughly tested” [README]
  • AppImage builds have been removed due to packaging bugs — the standalone binary works if you install dependencies manually [README]
  • The Relm4 migration is ~85% complete, meaning UI polish issues and some missing features are expected in the current builds [README]

Realistic setup time:

  • Nix user: 15–30 minutes
  • Ubuntu/Fedora user comfortable with package managers: 30–60 minutes
  • Someone who doesn’t know what libmpv2 is: probably frustrating without a guide

The project is early enough that there’s no polished setup documentation beyond the README. No video walkthrough, no blog post covering installation edge cases, no community forum threads to search when something goes wrong.


Pros and Cons

Pros

  • Native GNOME app, not a browser wrapper. libadwaita with Relm4 means it respects your system theme, behaves like a real desktop application, and doesn’t spawn a Chromium process to show you a movie list [README].
  • Offline metadata browsing. SQLite-backed local sync means you can browse your library without the server being available. Practically useful on home networks where the NAS might be off [README].
  • Dual-player support. MPV on Linux, GStreamer as fallback — MPV handles basically any format without transcoding, which matters for bandwidth and CPU on the server side [README].
  • Tantivy full-text search. Instant local search across all media, faster than waiting on server-side search APIs [README].
  • Pure Rust. Memory safety and no GC pauses are genuine advantages for a media player. Performance should be consistent in a way that a Python or Node app wouldn’t guarantee [README].
  • GPLv3 and genuinely open. No commercial tier, no feature gating, no “community edition” that’s missing the things you actually want [README].
  • Hardware acceleration support. Explicitly mentioned — GPU-accelerated decoding via MPV/GStreamer reduces CPU load [README].

Cons

  • Mid-migration, not production-stable. The active Relm4 migration means UI polish issues and missing features are expected right now, by the author’s own admission [README]. This is the biggest caveat.
  • AppImage support removed. The most portable Linux packaging format was dropped due to bugs. The binary works if you install dependencies, but “install these 6 packages first” is not beginner-friendly [README].
  • Nix dependency for the canonical build path. Most Linux users don’t use Nix. The non-Nix path is supported but less well-documented [README].
  • No third-party validation. 191 stars, no external reviews, no community forum posts to learn from. Everything in this article comes from the README. You are an early adopter if you use this today.
  • No mobile companion. Plex and Jellyfin have iOS/Android apps. Reel is Linux/GNOME only. Not a criticism of what it is, but a gap if you watch media across devices.
  • License metadata is unclear. The merged profile lists “NOASSERTION” for the license, while the README shows a GPLv3 badge. Minor discrepancy but worth confirming before embedding in any commercial product.
  • Casting and sharing features undocumented. No mention of DLNA, Chromecast, or AirPlay in the README. If you cast to a TV, check whether that works before committing.
  • Small team. Single primary author. The pace of development depends entirely on one person’s availability.

Who should use this / who shouldn’t

Use Reel if:

  • You run GNOME on Linux as your primary desktop and the browser interface for Plex or Jellyfin feels like a second-class experience.
  • You have Plex or Jellyfin already running and want a client that integrates with your desktop rather than a browser tab.
  • You’re comfortable installing system packages and don’t mind working through occasional rough edges.
  • You use Nix — this is probably a five-minute install for you.
  • You want a GPLv3 client you can fork and modify without restriction.

Wait for a more stable release if:

  • You need something that “just works” today with no debugging. The active migration means you will hit rough edges.
  • AppImage or Flatpak packaging matters to you (neither is currently available in stable form).
  • You need documentation beyond the README.

Skip it entirely if:

  • You’re on macOS or Windows. The primary target is Linux/GNOME. GStreamer is listed as a macOS fallback, but there is no macOS-specific installation guide.
  • You don’t already run Plex or Jellyfin. Reel is a client, not a server.
  • You need a stable, long-term-supported tool for anything production-critical.
  • You watch media across phone, TV, and desktop — you’ll need separate apps for everything other than the GNOME machine anyway.

Alternatives worth considering

Jellyfin Media Player — Jellyfin’s official desktop client, built on Electron + Jellyfin web. Less native than Reel but more complete and widely tested. Works on Linux, macOS, Windows. If you’re on Jellyfin and want something that works today without rough edges, start here.

Plex HTPC — Plex’s official big-screen client, available on Linux. More polished than the browser interface for TV-distance viewing. Requires Plex Pass.

Infuse — The gold standard for Apple ecosystem users. iOS, macOS, tvOS. Paid ($9.99/year or $34.99 lifetime). Not relevant for Linux, but worth mentioning for anyone who uses both.

Kodi — The old-school self-hosted media center. Handles local files, network shares, and can connect to Plex/Jellyfin via plugins. Massively customizable, but the UI shows its age and setup is non-trivial. Actively maintained with a large community.

Stremio — Cross-platform desktop/mobile media player with add-on support. Not specifically a Plex/Jellyfin client, but worth mentioning for anyone who doesn’t already have a media server.

mpv directly — If you want Rust performance and direct control, MPV with a Plex/Jellyfin script plugin is a valid path. Lower-level, no library browser, but extremely capable for playback itself.

For the Reel target audience — GNOME users who already run Plex or Jellyfin — the honest shortlist is Reel versus Jellyfin Media Player. Jellyfin Media Player is Electron but stable and complete. Reel is native and faster but still mid-migration. Pick based on how much you value native integration versus stability.


Bottom line

Reel is a technically interesting project doing something the Linux media ecosystem actually needs: a native, non-Electron GTK4 client for Plex and Jellyfin that respects the GNOME HIG. The Rust + Relm4 architecture is a reasonable bet, and features like SQLite-backed offline browsing, Tantivy search, and MPV integration are genuinely useful. The problem is timing — as of this review, the project is explicitly mid-migration, AppImage packaging is broken, pre-built binaries are flagged as experimental, and there are zero independent third-party reviews to triangulate against. If you’re a Nix user or comfortable installing system dependencies, it’s worth trying today. If you need something stable and documented, check back in six months. At 191 GitHub stars, this is a tool to watch, not a tool to bet your setup on.


Sources

The third-party articles surfaced during research for this review ([1] Sky Reels AI model, [2] openshorts video clipper, [3] Immich thread, [4] n8n Instagram workflow, [5] Canva alternatives for Reels) returned results about unrelated products sharing the “Reel” name. None of them describe the Reel GNOME application reviewed here. This article is based exclusively on primary sources listed below.

Primary sources:

Features

Integrations & APIs

  • Plugin / Extension System
  • REST API