A free forever, open source, native Apple TV app for Jellyfin, Plex, and local shares.
Plozz is in public beta on TestFlight. Join the beta to install it on your Apple TV right now.
Found a bug or have an idea? Open an issue and pick a template β π Bug report or β¨ Feature request. For the full contribution flow (the file-an-issue-then-fix habit, dev setup, and the dual-provider expectation), see CONTRIBUTING.md.
-
Multiple servers, one library. Merge all of your content into one library across plex, jellyfin and local share (SMB only) servers.
-
Sync watch history across all servers - Optionally sync your watch history across every server that's connected. Watch it on Plex, it will sync that same watch status to Jellyfin (if Jellyfin has the same title).
-
Mark as watched - Mark an entire season as watched or "up to here" to quickly update watch history.
-
Watched & unwatched indicators β Choose a watched checkmark or an unwatched corner badge (Infuse / classic-Plex style) on your posters, across Plex, Jellyfin and SMB shares.
-
Trakt, AniList, MyAnimeList, Simkl, and Last.fm - Full support for every tracker across your movies, tv, anime, and music.
-
Seerr integration - Connect a seerr account and request media from directly within the search or hero of the app.
-
Highly customizable interface - Change the theme of the entire app (light, dark, OLED). Change the density of media, optionally show hero content, change the navigation style.
-
Jellyfin, Plex, and local shares (SMB)
-
Circadian mode - Automatically warm and dim the display at set times to help you sleep (only at the app level)
-
Subtitle customization β Vastly customize the subtitles directly in the player. Change font, size, color, opacity, background, font weight, HDR brightness, shadow, position.
-
Dual subtitle support - Turn on 2 different subtitle tracks at the same
-
Auto-discovery β Automatically detect jellyfin servers, seerr servers
-
Remote-free sign-in β Jellyfin Quick Connect and Plex Link supported
-
Profiles β Native Apple TV profile support - all settings are per-profile and your profile selection is remembered based on the Apple TV profile that was last used
-
(Almost) All video formats supported - Powered by AetherEngine, an open source engine that fully supports HDR, Dolby Vision, AV1, virtually everything.View the full list.
Plozz is a Swift Package with one library per concern, consumed by a thin tvOS app target generated with XcodeGen.
| Module | Responsibility |
|---|---|
CoreModels |
Domain models, AppError, LoadState, caption settings, and the MediaProvider protocol (the provider abstraction). |
CoreNetworking |
HTTPClient, Endpoint, URL normalization, and a secret-safe logger (PlozzLog). |
CoreUI |
Shared focusable components, theme, image cache, content-state views. |
ProviderJellyfin |
Jellyfin REST client, DTOs, device profile, and a MediaProvider implementation. |
ProviderPlex |
Plex client, DTOs, PIN/auth, connection resolver/selector, and a MediaProvider implementation. |
ProviderTrailers |
Synthetic MediaProvider for online (YouTube) trailers, with stream extraction via YouTubeKit. |
MetadataKit |
Keyless-first artwork & metadata enrichment (AniList, Kitsu, TVmaze, Deezer, MusicBrainz/CAA, Wikidata/Wikipedia) routed by content type with a persistent on-disk cache. Bundled TheTVDB tier + optional maintainer-hosted TMDb tier. |
RatingsService |
External ratings enrichment (OMDb optional key, keyless AniList) with on-disk cache. |
TraktService |
Optional Trakt OAuth, scrobbling, and watched/sync helpers. |
TopShelfKit |
Domain-to-snapshot mapping for the Top Shelf extension; writes to the shared App Group container. |
FeatureDiscovery |
LAN (UDP) discovery, server validation, server-picker UI, last-server persistence. |
FeatureAuth |
Quick Connect, Plex Link, password sign-in, the explicit session state machine, Keychain-backed account/session stores. |
FeatureHome |
Home rows, item detail, series/season experience, online trailer fallback. |
FeaturePlayback |
AVPlayer view model/view, engine routing, resume reporting, caption style rules, idle-sleep handling, diagnostics overlay. |
FeatureSearch |
Search view & view model, deduplication, search policy. |
FeatureSettings |
Settings (profiles, integrations, server, caption customization, preference detail). |
FeatureProfiles |
Profile picker, editor, avatar/photo capture (household "Who's watching?"). |
FeatureMusic |
Music browsing, mini-player, queue/now-playing, background audio. |
AppShell |
App state wiring, root navigation, profile selection, provider/registry composition. |
Each module's README.md documents its responsibility, public surface, and
invariants. Everything above the provider layer talks to the MediaProvider
abstraction rather than a specific backend, so Jellyfin and Plex are each just a
conformer β adding another backend means one new conformer, no feature rewrites.
- macOS with Xcode 16+ (tvOS 17.0 deployment target)
- XcodeGen:
brew install xcodegen
xcodegen generate
open Plozz.xcodeproj
# Select the "Plozz" scheme and an Apple TV simulator, then Run.swift testThe logic modules are platform-portable, so swift test runs on any Swift
toolchain β no simulator. UI modules compile out behind #if canImport(...)
guards and are covered by the tvOS simulator/app build instead. CI runs
swift test on Linux and an xcodebuild tvOS build on macOS.
If the app feels laggy or you see blank artwork / memory crashes on device, see
docs/performance-debugging.md β an on-device
playbook using the watchdog and Instruments (xctrace).
Distribution is automated with fastlane (App Store Connect API key auth). Drop a
gitignored .env.fastlane with ASC_KEY_ID / ASC_ISSUER_ID / ASC_KEY_PATH
(see .env.fastlane.example), then:
fastlane beta --env fastlane # build + upload to TestFlight
fastlane build --env fastlane # archive a signed .ipa locally, no upload
fastlane release --env fastlane # build + upload to the App StoreVersioning (project.yml): bump the marketing version
(CFBundleShortVersionString, e.g. 0.1 β 0.2) by hand; the build number
is auto-incremented from the latest TestFlight build at archive time β never edit
it manually.
tvOS Brand Assets (app icon + Top Shelf images) live under
App/Resources/Assets.xcassets/β¦brandassets and are required for any upload. The
current art is a placeholder β replace it before a public App Store release.
- Dedicated iOS music app (Mozz)
- iOS and/or iPadOS Plozz app depending on demand
Plozz will always be free and open source, with no paywall, ads, or obligation. If it's useful to you, donations toward upkeep are welcome β and not donating is completely okay.
Donate via GitHub Sponsors β one-time or recurring.
Plozz is an unofficial client and is not affiliated with, endorsed, or certified by any of the services below.
-
AetherEngine β on-device playback engine (FFmpeg demux β VideoToolbox decode) by Vincent Herbst, LGPL-3.0 with an App Store exception. superuser404notfound/AetherEngine. Its bundled FFmpeg is a decode-only, LGPL-3.0 build (see
NOTICE.md). -
The Movie Database (TMDB) β some artwork and metadata is provided by the TMDB API. This product uses the TMDB API but is not endorsed or certified by TMDB. TMDB's marks and logos are trademarks of TMDB.
-
TheTVDB β some metadata and artwork is provided by TheTVDB. Please consider adding missing information or subscribing at thetvdb.com. This product uses the TheTVDB API but is not endorsed or certified by TheTVDB.
-
OMDb API β optional IMDb ratings enrichment (requires your own OMDb key).
-
AniList β keyless community scores for anime titles.
-
Plex and Jellyfin β the media servers Plozz connects to. All library content, artwork, and ratings shown in the app are supplied by your own server. "Plex" and "Jellyfin" are trademarks of their respective owners.
GPL-3.0 (with an App Store Exception) Β© 2026 Brandon Moore
