Library / SDK
jellyfin/Swiftfin avatar
jellyfin/Swiftfin

Swiftfin: a native Jellyfin client for iOS and tvOS

Native Jellyfin Client for iOS and tvOS

4,282 stars661 forksSwiftMPL-2.0

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 Apple-only scope is the fact that decides 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. 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 November 14, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • jellyfin/Swiftfin4,282 ★ · +105
Star history
Repository2026-09-242026-11-14
jellyfin/Swiftfin4.2k4.3k

105 Stars in the last 51 days, measured from the daily GitHub snapshot. Compare with other projects

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", and the repository description calls it a "Native Jellyfin Client for iOS and tvOS". 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/, SwiftfinMacros/, 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 links to Documentation/version.md for which versions of iOS and tvOS are supported.

How the client is put together: Swift, SwiftUI, and two players

The project is written in Swift. That matters less for users than for anyone filing a bug or a patch: the code is one Xcode project, 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 about Swiftfin's media playback, and a Documentation/libraries.md page on library compatibility and supported media types.

Two more repository details are worth knowing. The .swiftformat and .swiftlint.yml files show the project enforces style automatically. A Brewfile and Gemfile sit alongside fastlane/ and Tools/, 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 being 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.

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 there is no Swiftfin for those platforms inside this project. If your household mixes an Apple TV with an Android phone, Swiftfin covers half of it.

The second limitation is the OS floor. The README links to Documentation/version.md, which explains "how we determine the minimum supported OS" and which versions of iOS and tvOS are supported. A device that cannot run a supported OS version cannot run Swiftfin, regardless of how well the server performs.

Finally, check Documentation/players.md for playback and Documentation/libraries.md for supported media types before relying on a particular file format.

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 native Swift application for iOS and tvOS. 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. 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: 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-11-02. 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. 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 playback, Documentation/libraries.md for supported media types and Documentation/version.md for supported iOS and tvOS versions.

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 repository description calls it a native Jellyfin client for iOS and tvOS.

Is there a Jellyfin client for Apple TV?

Yes, Swiftfin ships a tvOS build; the repository contains a "Swiftfin tvOS/" target. 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

  1. Issues
  2. jellyfin/Swiftfin on GitHub
  3. License: MPL-2.0
  4. README
  5. Releases
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.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/jellyfin-swiftfin.svg)](https://hysenlabs.com/projects/jellyfin-swiftfin)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/jellyfin-swiftfin.svg)](https://hysenlabs.com/projects/jellyfin-swiftfin)

Was this useful?