Swiftfin: a native Jellyfin client for iOS and tvOS
Native Jellyfin Client for iOS and tvOS
At a glance
- What is it?
- Swiftfin is a Swift-built video client for Jellyfin media servers, distributed through the App Store and TestFlight. Its VLC-backed playback path and its Apple-only scope are the two facts that decide whether it fits your setup.
- Who is it for?
- Swiftfin is for people who already run a Jellyfin server and want a native Apple client on iPhone, iPad or Apple TV, with VLC available for files the native player will not take. It is not for Android, Windows or Mac users, since the repository contains only Swiftfin/ and Swiftfin tvOS/ targets.
- Can I use it commercially?
- Yes, with conditions. MPL-2.0 is a weak copyleft licence: you can use it inside commercial and closed-source software, but if you distribute changes to its own files, you must publish those changes under the same licence.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Swift, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What Swiftfin is for, and what it is not
Swiftfin is a client, not a server. It talks to an existing Jellyfin media server and plays the library that server already manages. The README describes it as "a modern video client for the Jellyfin media server", built in Swift to "maximize direct play with the power of VLC" and to look native on Apple devices. If you do not already run Jellyfin somewhere, Swiftfin has nothing to show you.
The intended audience is narrow and specific: people with an iPhone, iPad or Apple TV who want their Jellyfin library rendered with Apple's own interface conventions rather than a web wrapper. The repository layout confirms the scope. The top-level entries are Swiftfin/ and "Swiftfin tvOS/", with Shared/, PreferencesView/, Resources/ and Translations/ supporting them. There is no Android target, no desktop target, and no web build. The README's download section offers exactly one channel: the App Store, with TestFlight as a pre-release track.
The README carries three version badges: iOS 18+, tvOS 26+, and Jellyfin 12.0. Those numbers frame the whole decision. A server older than the badge, or a device older than the floors, is outside what the project advertises.
How the client is put together: Swift, SwiftUI, and two players
The project is written in Swift and its topics list swiftui alongside ios and tvos, so the interface layer is SwiftUI. That matters less for users than for anyone filing a bug or a patch: the code is one Xcode workspace, Swiftfin.xcodeproj, with shared code in Shared/ and platform-specific views in Swiftfin/ and "Swiftfin tvOS/". A fix to shared playback logic is not duplicated per platform; a fix to a tvOS focus behaviour is.
The interesting split is playback. The README points to a Documentation/players.md page that explains Swiftfin's "Native" and "VLC" players and how their features vary. That is the real architecture question for a client: the native player uses Apple's frameworks and direct-plays what the platform supports, while the VLC path exists to cover formats the native player will not handle. The README's own framing, "maximize direct play with the power of VLC", says the project treats direct play as the goal and VLC as the escape hatch. The two paths are not feature-identical, and the project says so in its own documentation rather than hiding it.
Two more repository details are worth knowing. ChromeCastFramework.json at the top level indicates a Cast integration, and the .swiftformat and .swiftlint.yml files show the project enforces style automatically. A Brewfile and Gemfile sit alongside fastlane/ and Scripts/, which is the usual shape of an iOS project whose builds and releases are automated.
Installing Swiftfin: the App Store path and a first connection
There is no package manager installation here. Swiftfin is distributed as an app, and the README gives a single download link for the stable build, the App Store listing at https://apps.apple.com/us/app/swiftfin/id1604098728. Opening that link on a device takes you to the Swiftfin listing, which is where the install happens. The README also offers a TestFlight track for "new features and bug fixes before they are published to the App Store", and the project asks users to join it and report bugs. Install from the App Store if you want the released build; use TestFlight if you intend to test unreleased code.
Once installed, the first real use is connecting to your server. The README does not publish a step-by-step setup walkthrough, so the reliable sequence is the one the app itself presents: launch Swiftfin, choose to add a server, and enter the address of your Jellyfin instance along with your credentials. The README's Jellyfin 12.0 badge is the compatibility marker to check against your server before you start.
If the connection succeeds you should land on a library view listing the media your Jellyfin account can see. If it does not, the README's Documentation/common_issues.md page is described as "the best place to start" for troubleshooting, and the project runs a Matrix room and a Discord server where users talk.
The real constraints: Apple only, and version floors that move
The first limitation is scope. Swiftfin is iOS and tvOS, full stop. The repository contains no macOS application target, no Android target and no Windows client, so the related searches about Swiftfin on those platforms have no answer inside this project. If your household mixes an Apple TV with an Android phone, Swiftfin covers half of it.
The second limitation is that the version floors are high and they are stated as hard badges: iOS 18+ and tvOS 26+. The README links to Documentation/version.md, which explains "how we determine the minimum supported OS", but the badges themselves are the contract. A device that cannot run those OS versions cannot run Swiftfin, regardless of how well the server performs.
The third is the server version. The README badges Jellyfin 12.0. Nothing in the README states that older servers are supported, and nothing states a fallback. Treat the badge as the tested pairing rather than a floor you can ignore.
Finally, the two-player design is a genuine trade-off rather than a pure win. Direct play is the fast path, and the VLC path exists because the native path is not universal. That means the same file can behave differently depending on which player handles it, and the project's own Documentation/players.md page exists because the feature sets differ. Anyone expecting one identical playback experience across every file should read that page before filing a complaint.
Swiftfin compared with the Jellyfin web client and with Infuse
The most direct alternative is the Jellyfin web client served by the server itself. It runs in a browser on any platform, including Android, Windows and macOS, and it needs no installation beyond a URL. The difference in approach is fundamental: the web client is portable and neutral, while Swiftfin is a compiled Swift application that targets Apple's UI frameworks and can hand files to VLC. If portability across device families is your priority, the web client wins outright. If you want an interface that behaves like an Apple app rather than a page in a browser, that is the case Swiftfin is built for.
Infuse is the other comparison people draw, and the difference is architectural rather than cosmetic. Infuse is a standalone media player with its own library handling; Swiftfin is a client whose library comes from a Jellyfin server and whose playback is split between a native path and VLC. Adopting Swiftfin means your media stays organised by Jellyfin. It does not mean you get a player that manages its own library independently of a server.
One more distinction is worth stating plainly, because it appears in the search data: Swiftfin is not Jellyfin. Jellyfin is the server that stores and streams your media. Swiftfin is one of several clients that connect to it. Installing Swiftfin does not give you a server, and running a server does not require Swiftfin.
Maintenance, licensing and what upgrading costs you
The repository is not archived, and the last push was on 2026-09-23. Releases are frequent: 1.5 on 2026-07-15, 1.6 on 2026-08-12, and 1.6.1 on 2026-08-23. A patch release landing eleven days after the minor release is the normal shape of a project that fixes what it ships.
That cadence has a cost for anyone tracking it. Because distribution is the App Store and TestFlight, the upgrade path is Apple's, not yours: you update the app and you take whatever the current release contains. There is no version pinning described in the README, and no documented rollback procedure. If a release regresses something you depend on, the README does not describe how to return to the previous build. That is a real gap, and it is worth knowing before you rely on a specific version.
The licence is MPL-2.0, as stated in the repository metadata with the full text in LICENSE.md. MPL-2.0 is a file-level copyleft licence: modifications to covered files carry obligations, and the licence text governs. This is a description of what the repository states, not legal advice, and anyone redistributing a modified build should read LICENSE.md rather than rely on a summary.
The project also accepts translations through its Weblate instance, and the README links to Jellyfin's direct-donations page for people who want to support development. Neither affects what you install.
Editorial conclusion
Swiftfin is for people who already run a Jellyfin server and want a native Apple client on iPhone, iPad or Apple TV, with VLC available for files the native player will not take. It is not for Android, Windows or Mac users, since the repository contains only Swiftfin/ and Swiftfin tvOS/ targets. Before adopting, check the Documentation/players.md page for which player handles your codecs and the Documentation/version.md page for the OS floors, then confirm your server version against the Jellyfin 12.0 badge in the README.
Frequently asked questions
Is Swiftfin the same as Jellyfin?
No. Jellyfin is the media server; Swiftfin is a client that connects to it. The README describes Swiftfin as "a modern video client for the Jellyfin media server", so you need a server running before the app has anything to show.
What is the Swiftfin app?
It is a native video client for Jellyfin, written in Swift and built for iOS and tvOS. The README says it is made to maximize direct play with VLC and to look native on Apple devices.
Is there a Jellyfin client for Apple TV?
Yes, Swiftfin ships a tvOS build; the repository contains a "Swiftfin tvOS/" target and the README badges tvOS 26+. Installation is through the App Store link in the README.
Is Swiftfin free?
The repository is public and licensed under MPL-2.0, and the README distributes the app through the App Store and a TestFlight beta. The README also links to Jellyfin's direct-donations page for supporting development.
How do I install Swiftfin on Apple TV?
The README gives the App Store listing as the download path, with TestFlight for pre-release builds. The README does not publish a separate tvOS install procedure beyond that link.
How do I set up Swiftfin?
The README does not publish a setup walkthrough; it points to the App Store download and to Documentation/common_issues.md for problems. In practice you install the app, add your Jellyfin server address and sign in with your credentials.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/jellyfin-swiftfin)