A modern client for Plex, Jellyfin, and Emby on desktop, mobile, and TV. Built with Flutter for native performance and a clean interface.
Website · Screenshots · Download · Contributing · License
| Platform | Download |
|---|---|
| macOS | DMG (x64, arm64) |
| Linux x64 | .deb · .rpm · .pkg.tar.zst · .flatpak · portable tar.gz |
| Linux arm64 | .deb · .rpm · .pkg.tar.zst · .flatpak · portable tar.gz |
Install with a package manager
brew tap edde746/plezy https://github.com/edde746/plezy
brew install --cask plezywinget install edde746.PlezyInstall Flatpak with your distribution's package manager, download the bundle for your architecture above, then run:
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install --user flathub org.freedesktop.Platform//25.08
flatpak install --user ./plezy-linux-x64.flatpak
flatpak run com.edde746.plezyOn arm64, install plezy-linux-arm64.flatpak.
Sandbox, playback, and folder access
- Not on Flathub — the remote supplies the Freedesktop runtime only.
- Video playback needs a Wayland session; a pure X11 session shows the interface but cannot create the video plane.
- No host or home filesystem access; app data lives in
~/.var/app/com.edde746.plezy/. Add host folders through the desktop file chooser portal, and keep download folders writable. - Network, display, audio, and device access are enabled.
--device=all(Flatpak 1.14 compatibility) exposes more than GPUs and controllers; session-bus access stays filtered.
sudo pacman -S plezyInstallation instructions · Community repository by @aldobarr.
Community package maintained by @mio-19 and @MiniHarinn.
sudo moss pad plezy- Libraries, collections, and playlists — video and audio
- Discover hub — Continue Watching, Next Up, trending, and recommendations
- Cross-server search across every connected Plex, Jellyfin, and Emby server, including actors and directors
- Filtering, sorting, and alphabetical jump navigation
- Folder browsing and folder playback — home-video libraries open in folder view
- Resolution, HDR/Dolby Vision, and audio-format badges on cards and detail pages
- Favorites and unwatched library filters1
- Extras — trailers, deleted scenes, behind-the-scenes
- Explore tab — watchlist, trending, popular, and recommendation rows from Plex Discover2, Trakt, MyAnimeList, AniList, Simkl, and Seerr3
- Search any connected catalog source
- Catalog titles matched back to your own libraries by external ID
- Seerr — request movies and shows with per-season, 4K, and advanced destination options, and see request status inline
- Watchlist sync — add and remove titles on Plex, Trakt, MyAnimeList, AniList, and Simkl from anywhere in the app
- Wide codec support (HEVC, AV1, VP9, and more)
- HDR and Dolby Vision4
- Direct play, or transcode presets from 240p/320 kbps to 1080p/20 Mbps
- Multi-version switching with per-version file details
- Full ASS/SSA subtitles with customizable styling
- Online subtitle search & download2
- Audio & subtitle choices remembered per title, or follow the server's per-episode selections
- Progress sync and resume
- Auto-play next episode with skip intro / skip credits
- Chapter navigation with thumbnail scrub previews
- Playback speed from 0.25x to 8x, audio sync offset, sleep timer (fixed durations or end of video)
- Video zoom 50-200% with pinch, presets, and hotkeys
- Audio passthrough5, output channel limit (5.1 or stereo, with center-channel boost), and loudness normalization
- File Info sheet — every version, file, and stream the server reports
- Ambient lighting and GLSL shader presets6
- Picture-in-Picture7
- Refresh-rate matching8
- External player launch (VLC, MX Player, etc.) with progress sync back9
- Music libraries — artist, album, and track browsing with square artwork
- Album and artist screens with play, shuffle, and Instant Mix
- Gapless playback with a full play queue — reorder, remove, play next, add to queue
- Now Playing with synced lyrics10, persistent mini-player, and sleep timer
- Background playback with lock-screen, media-key, and notification controls11
- Offline playback of downloaded albums and tracks
- Streaming quality presets — Original, 320, 192, or 128 kbps
- Live TV channel browsing, tuning, and favorites
- EPG guide with What's On and per-show schedules
- DVR recording rules, scheduled recordings, and a rememberable recording target library2
- Multi-server Live TV support where available
- Download movies, shows, and music for offline playback12
- Background queue with pause / resume
- Sync rules for automatic downloads, with per-show "Include Specials"
- Offline browsing with watch state sync-back on reconnect
- Rooms on Open Watch Party — share a six-character code; friends join from Plezy or another Open Watch Party app
- Everyone plays their own copy from their own server — Plex, Jellyfin, or Emby — matched by catalogue IDs, with a picker when several copies fit
- Synchronized play / pause / seek, host or shared control, room lock, and host handoff
- Public relays by default, or point Plezy at your own self-hosted relay
- Discord Rich Presence13
- Trakt, MyAnimeList, AniList, and Simkl — ratings, watched sync, and real-time scrobbling14
- Scores from connected trackers on detail pages — Trakt, Simkl, MyAnimeList, and AniList, plus Rotten Tomatoes, Metacritic, Letterboxd, IMDb, and TMDB through MDBList
- Plezy Remote — control desktop and TV from mobile
- Watch Next row and tvOS Top Shelf15
plezy://links to open a profile, play a title, or tune a channel from Home Assistant, launchers, or an NFC tag; any movie, show, or episode menu shows its link16
- Desktop, mobile, and TV — full D-pad, keyboard, and gamepad support
- Multiple servers at once — Plex, Jellyfin, and Emby side by side
- Profiles with per-profile downloads, watch state, and settings; Plex Home switching with PIN
- Jellyfin and Emby local-server discovery and multiple URLs per server; Quick Connect sign-in17
- TV layout options — corner spotlight backdrop, full-card artwork, and Force TV mode on desktop
- Customizable keyboard shortcuts13
- Metadata and artwork editing
- Settings import/export
- Localized in English plus 21 translations
Links start Plezy from outside the app. Any link may add profile=<profile>: a profile id, a Plex Home user UUID, or a display name (ignoring case; it must match one profile). Plezy switches to that profile first, and a protected profile still asks for its PIN. A link replaces whatever is playing.
| Link | Does |
|---|---|
plezy://open |
Opens Plezy |
plezy://play?server=<server>&id=<item> |
Plays one item on one server, any backend |
plezy://play?type=movie|show&tmdb=<n> |
Plays a title from whichever server has it. Use tmdb, tvdb, imdb=tt<n>, or plex=<hash> (the Plex GUID without plex://movie/) |
plezy://live?channel=<channel> |
Tunes a Live TV channel by key, number, or call sign. Optional server=<server> and start=beginning|live |
For a show, mode=next (the default) plays the next episode to watch, and mode=shuffle plays the show shuffled. The menu of any movie, show, or episode has Show link, and each profile's menu in Switch Profile has Show profile link. Both show the link as text and a QR code.
# Android / Android TV, over adb (Home Assistant: remote.turn_on with activity: plezy://...)
adb shell am start -a android.intent.action.VIEW -d "plezy://play?type=show\&tvdb=81189\&profile=Kids"
# macOS
open "plezy://play?type=movie&tmdb=603"On iOS, use the Open URLs action in Shortcuts.
- Flutter SDK 3.47.0+
- A Plex account, or a Jellyfin or Emby server with user credentials
git clone https://github.com/edde746/plezy.git
cd plezy
flutter pub get
scripts/codegen.sh
flutter runCode generation
After modifying model classes or other generated sources:
scripts/codegen.shAfter modifying translations:
dart run slangPackaging a Flatpak bundle
Packages an already fully resolved Linux release bundle — pinned libmpv and bundled libraries included, not a Flathub source-build manifest. Run it on Linux, on the same architecture as the bundle, after following the bundle preparation steps in the Linux release workflow: flutter build linux alone does not produce all the required bundled libraries.
Install the packaging tools (Debian/Ubuntu shown) plus the native-architecture SDK and runtime:
sudo apt-get update
sudo apt-get install -y flatpak flatpak-builder imagemagick
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install --user flathub org.freedesktop.Platform//25.08 org.freedesktop.Sdk//25.08
BUNDLE_DIR=build/linux/x64/release/bundle
python3 linux/packaging/build-flatpak.py --bundle "$BUNDLE_DIR" --arch x64 --output "$PWD"That writes plezy-linux-x64.flatpak, installable with the Flatpak commands above; on arm64, use the prepared arm64 bundle directory and --arch arm64. Package from the checkout matching the bundle, since the version comes from pubspec.yaml.
Cross-architecture packaging needs native Flatpak tools, a registered binfmt interpreter, and the target SDK/runtime installed with flatpak install --user --arch=x86_64 (or aarch64) — never run Flatpak's namespace tools under emulation. Pass --arch x64 or --arch arm64 to the checker and the matching Flatpak architecture to flatpak run --arch=....
Check the installed package against the runtime (not just the SDK), then launch it on a Wayland desktop and exercise streaming, audio, downloads/offline playback, and file chooser portals:
python3 linux/packaging/check-flatpak.pyThe check fails on a non-executable entry point or an unresolved bundled ELF dependency. A container without a GPU can use flatpak run --env=GALLIUM_DRIVER=softpipe com.edde746.plezy for software-rendered verification; this is not a hardware-decoding or HDR test.
Local checks
scripts/ci_checks.shTo install the same pre-commit checks locally:
scripts/setup_hooks.shEnd-to-end tests (Android emulator plus a Dockerized Jellyfin fixture):
python3 scripts/maestro/run_maestro.py basicSee CONTRIBUTING.md for development workflow, formatting, tests, and translation guidelines.
Plezy is licensed under GPL-3.0.
- Built with Flutter
- Supports Plex Media Server, Jellyfin, and Emby
- Playback powered by mpv via our mpv-build pipeline (started as a fork of MPVKit; on Android through its mpv-android library, whose Kotlin/JNI glue descends from libmpv-android), Android ExoPlayer, and libass-android
Footnotes
-
Jellyfin and Emby only. ↩
-
Requires connecting the service under Settings > Services. ↩
-
In-app HDR toggle on Windows, macOS, iOS, tvOS, and Linux — Linux needs a colour-managed Wayland compositor. Dolby Vision on Android, macOS, and Apple TV. ↩
-
Desktop, Android TV, and Apple TV. ↩
-
Requires mpv's GPU renderer — unavailable on iOS, tvOS, and macOS, and Android defaults to ExoPlayer. ↩
-
Android, iOS, and macOS — not on Android TV or Apple TV. ↩
-
Windows, Android, and tvOS. ↩
-
Progress sync on Android. ↩
-
Where your server provides lyrics. ↩
-
tvOS pauses music when the app is backgrounded. ↩
-
Not available on tvOS. ↩
-
Real-time scrobbling on Trakt and Simkl; MyAnimeList and AniList update on completion. ↩
-
Android TV / Fire TV and tvOS. ↩
-
Android, iOS, macOS, and tvOS. ↩
-
Jellyfin only. ↩




