Skip to content
Gurley Studios
Latest milestone: 1.1.0 on the App Store

Rivulet

A native Apple TV app for Plex, Jellyfin, and live TV

Rivulet's Home screen on Apple TV
A movie's details page
Live TV's What's On page
Multiview with four live channels
A music album page
Home on iPhone
A movie on iPhone
A show on iPhone
A library on iPhone

Rivulet is an Apple TV app for Plex, Jellyfin, and live TV. I started it in November 2025. The Plex app never worked well with a HomePod set as my Apple TV's audio output, and I'd spent too long trying to get Plex's live TV to work.

It plays your files as they are, without making the server convert them, so you get the full picture and sound your library has. Audio through a HomePod works the way it should, and so do the Apple TV's own playback controls.

The design borrows heavily from Apple's own TV app. Rivulet is free on the App Store as Rivulet Player, and an iPhone and iPad version is in the TestFlight beta. The source is on GitHub, and you can fork it and build on it as long as you don't sell it.

Features

  • Plex and Jellyfin

    Movies, shows, music, collections, playlists, and Live TV from Plex or Jellyfin. You can add more than one Plex server, and Continue Watching and Top Shelf merge across all of them. Photo libraries and a folder view work too.

  • Direct play

    MKV, MP4, WebM, MPEG-TS, AVI, and more. H.264 and HEVC decode in hardware. AV1, VP9, MPEG-2, VC-1, and almost anything else FFmpeg reads decode in software, and interlaced broadcasts are deinterlaced on the GPU. You can pick a transcode quality when bandwidth is tight.

  • HDR and Dolby Vision

    HDR10, HDR10+, HLG, and Dolby Vision profiles 5, 8.1, and 8.4. On a Dolby Vision TV, Profile 7 FEL plays with both layers composed. Profile 7 MEL plays as 8.1, and without a Dolby Vision TV Profile 7 plays its HDR10 base layer.

  • Audio and HomePod

    AAC, AC3, E-AC3, and FLAC go to tvOS as-is, and Atmos in E-AC3 reaches an Atmos receiver. TrueHD, DTS, and DTS-HD MA are decoded to lossless multichannel audio, with Atmos and DTS:X height channels for your speaker layout. Enhance Dialogue and Reduce Loud Sounds are in the audio menu. Sound works with a HomePod as the Apple TV's output.

  • Live TV

    Dispatcharr, Plex Live TV, Jellyfin Live TV, Xtream Codes, and M3U/XMLTV playlists in one place, and you don't need a media server to use it. Live TV opens on a What's On page with a For You row. You can pause, rewind, and jump back to live on any channel, and sports games have live scores.

  • Multiview and recording

    Watch up to four live channels at once. Record a show, a whole series, or only new episodes through Plex DVR, Jellyfin, or Dispatcharr.

  • Subtitles

    SRT, ASS/SSA with its original styling, WebVTT, PGS, DVB, VobSub, CEA-608 captions, teletext, and external files from your server. Search and download subtitles from the player. When a title has none, Rivulet can write English subtitles from the dialogue on the Apple TV itself.

  • Content filtering

    An optional filter mutes just the offending word, including words you add yourself, and works from the dialogue on titles with no subtitles. It can also skip scenes from an EDL list. Your files are never changed.

  • Skip markers

    Skip Intro and Skip Credits use your server's markers, and each can be off, manual, or automatic. An optional Community Marker Database fills in intro, recap, and credits markers when the server has none.

  • Discover and Watchlist

    Browse trending and upcoming titles from TMDB, add them to your Plex watchlist, and see what you already own. The Watchlist has its own tab in the sidebar.

  • Insights

    While something plays, pull up cast and trivia for what's on screen. It's still a work in progress. There's more on the Insights page.

  • Music

    Browse Plex and Jellyfin albums, artists, and playlists in a layout modeled on Apple's Music app. Lyrics sync when the source has timestamps, and Now Playing has a live audio visualizer.

  • Top Shelf and Plex Home

    Top Shelf on the Apple TV Home screen shows posters for Continue Watching and Recently Added, or full screen artwork if you prefer it. You can switch between Plex Home profiles and save their PINs.

Release history

47 releases since November 2025.

  • Patch
  • Milestone
v1.1.0StartedBuild 36Build 44AetherEngineStarted, Nov 28, 2025: Project startedPrototype, Dec 22, 2025: First working prototypeTestFlight, Dec 31, 2025: Public TestFlight linkBuild 36, Jan 28, 2026: Plex Home and Dolby VisionBuild 44, Apr 8, 2026: Custom video playerBuild 47, Apr 14, 2026: Discover and WatchlistAetherEngine, May 27, 2026: AetherEngine and a new licenseBuild 50, Jun 12, 2026: UIKit rewrite and App Store prepApp Store, Jun 27, 2026: Released on the App Storev1.0.1 (56), Jun 29, 2026: First tagged buildv1.0.2 (59), Jul 9, 2026: Insights and new player controlsv1.0.3 (61), Jul 10, 2026: Version 1.0.3v1.0.3 (62), Jul 10, 2026: AetherEngine 5.0v1.0.3 (63), Jul 11, 2026: Remembered track choicesv1.0.3 (64), Jul 13, 2026: Subtitle track pickerv1.0.3 (65), Jul 14, 2026: Full changelog in Settingsv1.0.3 (66), Jul 15, 2026: Continue Watching fixesv1.0.3 (67), Jul 18, 2026: Live TV guide redesignv1.0.3 (68), Jul 20, 2026: Content filteringv1.0.4 (69), Jul 21, 2026: Version 1.0.4v1.0.4 (70), Jul 27, 2026: AetherEngine 5.23.11v1.0.4 (71), Jul 27, 2026: Live TV channel listv1.0.4 (72), Jul 29, 2026: Instant Resume settingv1.0.4 (73), Jul 30, 2026: AetherEngine 6.1.3v1.0.4 (74), Aug 1, 2026: Subtitles match Apple TVv1.0.4 (75), Aug 1, 2026: Player control fixesv1.0.4 (76), Aug 8, 2026: Home rows from PlexiOS 1.0.4 (76), Aug 8, 2026: First iOS buildv1.0.4 (77), Aug 10, 2026: Search navigationv1.0.5 (78), Aug 10, 2026: Season pagesv1.0.5 (79), Aug 17, 2026: Home follows your Plex serverv1.0.5 (80), Aug 18, 2026: Up Next fixesv1.0.5 (81), Sep 2, 2026: A to Z barv1.0.5 (82), Sep 11, 2026: AetherEngine 6.81.0v1.0.5 (83), Sep 16, 2026: Home network fixv1.0.6 (84), Sep 18, 2026: Version 1.0.6v1.0.6 (85), Sep 18, 2026: AetherEngine 7.7.0v1.0.6 (86), Sep 22, 2026: Watchlist tabv1.0.6 (87), Sep 22, 2026: Search fixv1.0.6 (88), Sep 27, 2026: Live TV rebuiltv1.0.6 (89), Sep 27, 2026: For You and Recently Watchedv1.0.6 (90), Sep 27, 2026: Favorite channelsv1.0.6 (91), Oct 2, 2026: Jellyfin and collectionsv1.0.6 (92), Oct 5, 2026: Apple's player controlsv1.0.6 (93), Oct 6, 2026: Stream qualityv1.0.7 (95), Oct 9, 2026: Version 1.0.7v1.1.0 (96), Oct 14, 2026: Music and photosv1.1.0 (97), Oct 17, 2026: Live scoresv1.1.0 (98), Oct 18, 2026: Full Dolby Vision for Profile 7v1.1.0 (100), Oct 20, 2026: Folders and Xtream Codesv1.1.0 (102), Oct 21, 2026: Jellyfin music and Live TVv1.1.0 (106), Oct 22, 2026: Multiple servers and playlistsv1.1.0 (110), Oct 23, 2026: New onboardingv1.1.0 (111), Oct 24, 2026: Jellyfin extrasv1.1.0 (112), Oct 25, 2026: Jellyfin recordingv1.1.0 (113), Oct 26, 2026: Word-level filteringv1.1.0 (114), Oct 26, 2026: Generated subtitlesv1.1.0, Oct 26, 2026: 1.1.0 on the App StoreNovJanMarMayJulSep2026

October 2026

  1. 1.1.0 on the App Store

    v1.1.0Latest
    • Version 1.1.0 went live on the App Store with Jellyfin, multiple Plex servers, and photo libraries
    • The App Store listing is now called Rivulet Player
  2. Generated subtitles

    v1.1.0 (114)
    • New generated English subtitles, written from the dialogue on your Apple TV
    • A setting turns them on automatically when a title has no subtitles
    • Content Filtering has one Profanity page, split into Audio and Visual
    • Skip settings read Off, Manual, or Automatic
  3. Word-level filtering

    v1.1.0 (113)
    • Content Filtering mutes just the offending word, including words you add yourself
    • Titles with no subtitles can be filtered from their dialogue
    • Multi-part movies play through every part
    • Top Shelf shows posters for Continue Watching and Recently Added
    • Updated AetherEngine to 7.48.0
  4. Jellyfin recording

    v1.1.0 (112)
    • Jellyfin Live TV can record an airing, a series, or new episodes
    • Live TV shows the program's artwork and summary while a channel tunes
    • Posters with no artwork show the title
  5. Jellyfin extras

    v1.1.0 (111)
    • Jellyfin titles show their trailers and extras on the details page
    • Top Shelf shows Recently Added when Continue Watching is empty
  6. New onboarding

    v1.1.0 (110)
    • New onboarding screen and flow
    • Each skip button can be turned off completely
    • Switch between a Dispatcharr channel's streams from the player
    • New Send Diagnostics in About gives you a code to share when reporting a problem
    • Updated AetherEngine to 7.47.0
Older releases (52)

October 2026

  1. Multiple servers and playlists

    v1.1.0 (106)
    • Initial support for more than one Plex server
    • Top Shelf shows Continue Watching from every server, Jellyfin included
    • Plex and Jellyfin video playlists in the sidebar, with shuffle and editing
    • New ratings card at the bottom of a title's page
  2. Jellyfin music and Live TV

    v1.1.0 (102)
    • Added Jellyfin music libraries and Jellyfin Live TV
    • The Live TV guide loads days ahead and stays up to date
    • Fixed Atmos and DTS:X height channels
    • Height Speakers opens a list to pick your speaker layout
  3. Folders and Xtream Codes

    v1.1.0 (100)
    • Added folder view and delete in the long press menu
    • Added Xtream Codes sources to Live TV, and Live TV only setups open straight to it
    • Switch Plex servers in Settings without signing out
    • Atmos and DTS:X height channels, and Enhance Dialogue levels
    • Updated AetherEngine to 7.44.0
  4. Full Dolby Vision for Profile 7

    v1.1.0 (98)
    • Profile 7 FEL titles play as full Dolby Vision on Dolby Vision TVs
    • Updated AetherEngine to 7.39.0
  5. Live scores

    v1.1.0 (97)
    • Live scores for sports games, from a Scores button below the scrubber
    • Multiview has its own scores layout during a game
    • Search and download subtitles from the menu
    • Up Next is a glass card you can dismiss, and autoplay has a limit
  6. Music and photos

    v1.1.0 (96)
    • Lots of improvements to music libraries
    • Initial support for photo libraries
    • Title logos on Continue Watching, Top Shelf, and Pause are placed with Apple's Vision framework
    • Separate Skip Back and Skip Forward settings
  7. Version 1.0.7

    v1.0.7 (95)
    • Cast page improvements
    • Subtitles turn on briefly when you skip back
    • New Enhance Dialogue and Reduce Loud Sounds audio options
    • Updated AetherEngine to 7.32.3
  8. Stream quality

    v1.0.6 (93)
    • Choose a stream quality
    • Converted streams start more reliably
  9. Apple's player controls

    v1.0.6 (92)
    • Recreated Apple's player controls
    • Added support for Plex titles with more than one file
    • Mark a whole show as watched or unwatched
    • Updated AetherEngine to 7.25.3
  10. Jellyfin and collections

    v1.0.6 (91)
    • Initial Jellyfin support
    • Each Plex library has a Collections row
    • Multiview opens from the guide, and the guide has a new design
    • Better ASS/SSA subtitles

September 2026

  1. Favorite channels

    v1.0.6 (90)
    • Favorite any Live TV channel by holding Select on it in What's On or the guide
    • Favorites from every source share one list, and you can reorder it in Live TV settings
    • Channels watched in Multiview count toward Recently Watched and For You
  2. For You and Recently Watched

    v1.0.6 (89)
    • What's On gets a Recently Watched row and a For You row that suggests what's on now
    • Dispatcharr channels play smoothly, with sound in sync on HomePod
    • Dispatcharr can be added with a username and password instead of an API key
    • Plex Live TV waits for slow channels to start instead of giving up
  3. Live TV rebuilt

    v1.0.6 (88)
    • Live TV opens on a new What's On page with rows by genre
    • New Multiview plays up to four live channels at once
    • Pause, rewind, and return to live on any channel
    • Record a show, a series, or only new episodes with Plex DVR or Dispatcharr
  4. Search fix

    v1.0.6 (87)
    • Fixed search results drawing underneath the keyboard
  5. Watchlist tab

    v1.0.6 (86)
    • New Watchlist tab in the sidebar shows everything you saved
    • The Watchlist row on Home no longer stops at 20 items
  6. AetherEngine 7.7.0

    v1.0.6 (85)
    • Updated AetherEngine to 7.7.0
    • The next episode starts faster when autoplay is on
    • Settings shows which playback engine version you're running
    • Fixed playback failing outright when the server falls back to transcoding
  7. Version 1.0.6

    v1.0.6 (84)
    • New movies and shows reach the Home screen without a restart
  8. Home network fix

    v1.0.5 (83)
    • Fixed videos failing to play on some home networks
  9. AetherEngine 6.81.0

    v1.0.5 (82)
    • Updated AetherEngine to 6.81.0
    • Autoplay no longer flashes black between episodes
  10. A to Z bar

    v1.0.5 (81)
    • Jump to a letter with the new A to Z bar in title-sorted libraries
    • Extras and special features resume where you left off
    • Holding Up or Down in a library keeps scrolling instead of losing focus

August 2026

  1. Up Next fixes

    v1.0.5 (80)
    • Updated AetherEngine to 6.32.0
    • Playback errors say what went wrong instead of showing one generic message
    • Autoplay no longer skips an episode when the next one starts
    • Back on the Up Next page returns to the video instead of closing the player
  2. Home follows your Plex server

    v1.0.5 (79)
    • Home rows follow the libraries you pinned to Home on your Plex server
    • Your sidebar library order sets the order of Home rows
    • Captions match the size Apple TV uses in its own player
    • New Input Test in Settings records what your remote sends
  3. Season pages

    v1.0.5 (78)
    • A show's page shows each season's poster, episode count, and summary
    • Selecting a season opens its own page with only its episodes and extras
    • Changing your sidebar libraries applies right away with no reload prompt
  4. Search navigation

    v1.0.4 (77)
    • Search moves down from the keyboard into your results
    • Search results scroll into view instead of sitting under the keyboard
    • Removed diagnostic logging left in build 76
  5. First iOS build

    iOS 1.0.4 (76)
    • Tagged the first build of the early iPhone and iPad app, which I started on August 5
    • The iOS app shares one Plex client with the Apple TV app
  6. Home rows from Plex

    v1.0.4 (76)
    • Fixed Search and Discover ignoring button presses after opening them
    • Home shows the rows you promoted on your Plex server, with titles in your language
    • Continue Watching and On Deck show as one row
    • Updated AetherEngine to 6.5.5
  7. Player control fixes

    v1.0.4 (75)
    • Top Shelf artwork includes the title logo
    • Pressing Select opens the player controls without pausing or resuming
    • Menu works every time inside popups and full screen pages
  8. Subtitles match Apple TV

    v1.0.4 (74)
    • Updated AetherEngine to 6.4.0
    • Subtitles match the text size, background box, and position Apple TV uses for its own captions
    • Subtitles keep the bold, italic, underline, color, and size the file asks for
    • Pausing registers on your Plex server

July 2026

  1. AetherEngine 6.1.3

    v1.0.4 (73)
    • Updated AetherEngine to 6.1.3
    • The progress bar no longer jumps back after a seek on a slow server
    • Season rows scroll, so shows with more than eight seasons are reachable
  2. Instant Resume setting

    v1.0.4 (72)
    • Updated AetherEngine to 6.0.2
    • New Instant Resume setting decides whether Continue Watching tiles play right away or open the preview
  3. Live TV channel list

    v1.0.4 (71)
    • The Live TV player has a channel list showing what's on now
    • The guide refreshes itself, so you no longer arrive at an out of date listing
    • Dispatcharr sources respect the channel profile you selected
  4. AetherEngine 5.23.11

    v1.0.4 (70)
    • Updated AetherEngine to 5.23.11 with a long list of playback, seeking, and Live TV fixes
    • Dolby Vision Profile 5 titles no longer play with a green or purple tint
    • Set how far a single Left or Right press skips, from 5 to 30 seconds
    • Skip Credits finishes the title and moves on to Up Next
  5. Version 1.0.4

    v1.0.4 (69)
    • Same changes as build 68, under the 1.0.4 version number
  6. Content filtering

    v1.0.3 (68)
    • New Content Filtering can mute strong language and skip scenes, with per category controls
    • Scene skipping reads MCF or EDL filter lists from a URL you provide and never changes your files
    • The Live TV guide loads program data as you scroll, so large lineups open faster
    • Fixed playback getting stuck after leaving the app and coming back
  7. Live TV guide redesign

    v1.0.3 (67)
    • Redesigned the Live TV guide with a full channel grid, program details, and instant playback
    • Updated AetherEngine to 5.8.4, which adds teletext subtitles for broadcast channels
    • The player's INFO panel shows whether you're on Direct Play and has an Advanced tab with live stats
    • New optional Community Marker Database fills in missing intro, recap, and credits markers
  8. Continue Watching fixes

    v1.0.3 (66)
    • Removing an item from Continue Watching is instant and keeps your watch progress
    • New Go to Show option opens the show page at your current episode
    • Watch from Beginning starts playback from the beginning
  9. Full changelog in Settings

    v1.0.3 (65)
    • Updated AetherEngine to 5.0.5 with subtitle and skipping fixes
    • The changelog in Settings shows the full release history
  10. Subtitle track picker

    v1.0.3 (64)
    • Continue Watching stays up to date after you finish something and come back
    • You can pick any subtitle track, including more than one per language
  11. Remembered track choices

    v1.0.3 (63)
    • Rivulet remembers your audio and subtitle choices, forced subtitles included
    • Fixed duplicate subtitle lines stacking up after rewinding
    • You can swipe through the Home carousel
  12. AetherEngine 5.0

    v1.0.3 (62)
    • Updated AetherEngine to 5.0
    • Builds are also published on GitHub Releases
  13. Version 1.0.3

    v1.0.3 (61)
    • Pressing Back in the sidebar returns you to Home
    • The preview carousel shows series info
    • Insights works on TV episodes
  14. Insights and new player controls

    v1.0.2 (59)
    • New Insights panel shows cast and trivia for what you're watching, as a work in progress
    • Redesigned player controls with a glass control bar and scrubbing thumbnail previews
    • Top Shelf shows Continue Watching with full bleed artwork and the title logo
    • New Home hero highlights trending movies and shows

June 2026

  1. First tagged build

    v1.0.1 (56)
    • Playback resumes correctly after leaving and returning to the app
    • Watchlist items you own show proper artwork and a Play button
    • Refreshed app icon
  2. Released on the App Store

    App Store
    • Rivulet for Plex went live on the App Store as a free Apple TV app
    • Tagged releases started building automatically and going to TestFlight
  3. UIKit rewrite and App Store prep

    Build 50
    • Rebuilt most views in UIKit for better performance
    • Added AetherEngine as a third video player option
    • Added a licenses screen, TMDB attribution, and a privacy manifest for App Store review

May 2026

  1. AetherEngine and a new license

    AetherEngine
    • Added AetherEngine as a Swift package behind the existing player interface
    • Switched the license from GPL-3.0 to PolyForm Noncommercial 1.0.0

April 2026

  1. Discover and Watchlist

    Build 47
    • New Discover page with Popular, Top Rated, Now Playing, and Upcoming titles from TMDB
    • Plex Watchlist items appear on Home and can be added or removed from anywhere
  2. Custom video player

    Build 44
    • Built a custom video player on FFmpeg and Apple's tvOS frameworks
    • Restyled much of the interface after Apple's TV app
    • Apple's built-in player stayed available as a setting

January 2026

  1. Plex Home and Dolby Vision

    Build 36
    • Added Plex Home account support
    • Tried an experimental Dolby Vision player
    • Library sections appear individually on Home
    • Added a changelog popup in Settings

December 2025

  1. Public TestFlight link

    TestFlight
    • Added the public TestFlight link to the README
    • Added Top Shelf items on the Apple TV Home screen
  2. First working prototype

    Prototype
    • Built the first working prototype
    • Started IPTV support the same day
    • Created the GitHub repository

November 2025

  1. Project started

    Started
    • Created the Xcode project

Roadmap

  1. Done

    Live TV rebuild

    What's On, Multiview, pause and rewind, DVR recording, and shared favorites went to the TestFlight beta in 1.0.6 builds 88 to 90.

  2. Done

    Jellyfin

    Movies, shows, music, trailers, and extras, and Live TV with recording. Jellyfin shipped to the App Store in 1.1.0.

  3. Now

    Multiple Plex servers

    Initial support shipped in 1.1.0. I don't use more than one server day to day, so bug reports on GitHub help.

  4. Now

    iPhone and iPad app

    The iOS and iPadOS app shares Rivulet's core code and follows the Apple TV app's features. It's in the TestFlight beta as 1.0.7.

  5. Now

    Insights coverage

    Insights is a work in progress, and I'm still improving its coverage and accuracy.

  6. Later

    Music closer to Plexamp

    Music browsing works today. On features I'm chasing Plexamp, and there's a long way to go.

FAQ

What do I need to run Rivulet?

An Apple TV on tvOS 26 or later. Movies and shows come from a Plex Media Server or a Jellyfin server. For live TV you need Plex Live TV, Jellyfin Live TV, Dispatcharr, an Xtream Codes source, or an M3U playlist with XMLTV guide data. A Live TV source on its own is enough.

Is it free?

Yes. Rivulet is free on the App Store, and the TestFlight beta is free too. The source code is under PolyForm Noncommercial 1.0.0, so you can clone it, change it, and share it for noncommercial use. Selling it or putting it inside a paid product is not allowed.

What's the difference between the App Store and TestFlight versions?

Every tagged build goes to the TestFlight beta, and the App Store version updates less often. As of October 26, 2026 the App Store has 1.1.0 and the beta is on 1.1.0 (114). The iPhone and iPad app is only on TestFlight for now.

Does Rivulet transcode?

Only when you ask it to or when it has to. Rivulet direct plays through AetherEngine. It asks the server to transcode when you pick a lower stream quality or a file can't direct play.

Which Dolby Vision profiles work?

Profiles 5, 8.1, and 8.4 play as full Dolby Vision. On a Dolby Vision TV, Profile 7 FEL plays with both layers composed, and Profile 7 MEL plays as 8.1. Without a Dolby Vision TV, Profile 7 plays its HDR10 base layer.

Which live TV sources work best?

I test Dispatcharr and Plex Live TV regularly. Generic M3U/XMLTV sources work but have had less testing, so feedback helps.

Does Rivulet collect data?

Rivulet doesn't collect personal data. It uses Sentry for crash reports and TMDB for artwork and metadata. The privacy policy has the details.

Is Rivulet made by Plex?

No. Rivulet isn't affiliated with or endorsed by Plex, Inc. or the Jellyfin project.

Where do I report a bug or ask for a feature?

Open an issue on GitHub. Pull requests are welcome from developers at any level, including LLM-assisted code as long as it's been checked and tested. Please test on a real Apple TV, since the simulator doesn't behave the same.