A cross-platform Jellyfin frontend built on top of Flutter.
Driftfin is a fork of Fladder by DonutWare, continued under the same GPL-3.0 license. Huge thanks to the original authors. See Credits & Attribution.
Features • Download • Roadmap • Contributing • Credits • License
Playback
- Direct play, transcode, and offline playback
- Watch Together — synchronised group playback (Jellyfin SyncPlay) with in-session chat
- Subtitle timing offset, fine-tuned during playback
- Media-segment skipping (intro / credits / etc.)
- Trickplay timeline scrubbing
- Next-up overview when watching a queue
Library
- Browse, refresh content, and edit metadata
- Download items and keep watch progress in sync across devices
- Server management and multiple-user / multiple-server switching
- Jellyseerr / Seerr integration
- Comic book reading support (
.cbz,.cbr)
Interface
- Adaptive layout for phone, tablet, TV, and desktop
- Dark / light mode with multiple color styles
- Keyboard shortcuts
| Mobile | Desktop | Other |
|---|---|---|
| Android (+ TV), iOS | Windows, macOS, Linux | Web, Docker |
Prebuilt binaries for every platform are on the releases page. Platform-specific install and usage notes live in INSTALL.md.
Docker:
ghcr.io/hamadtheironside/driftfin:latest
ghcr.io/hamadtheironside/driftfin-rootless:latest
Web: try the hosted web build — or visit the project site first.
Note
The GitHub-hosted web build only allows https connections (a GitHub limitation). Self-hosted web builds work fine over plain http.
Warning
On Windows, some Flutter apps are flagged as false positives by Windows Defender. This is a known Flutter/Defender issue, not malware.
What's planned and in progress lives on the Driftfin Roadmap. Have an idea? Open a feature request.
Driftfin stores its integration settings — Jellyseerr/Overseerr, Sonarr, Radarr and Trakt — per user, per device. The optional Driftfin Jellyfin plugin lets an admin configure those once on the server so every client picks them up automatically.
The app works perfectly without it. With no plugin installed, nothing
changes — each user configures integrations locally as before. The plugin lives
in jellyfin-plugin/ and is built/released separately
from the app.
What it does
- Centralizes Seerr/Sonarr/Radarr URLs + API keys and Trakt app credentials.
- Clients fetch the config on login (
GET /Driftfin/Config). A configured integration becomes read-only in the app, shown as "Managed by server". - Per-user secrets stay local: Trakt OAuth tokens and Jellyseerr session cookies are still established on each device.
Heads-up: the config endpoint returns the stored values (including API keys) to any logged-in Jellyfin user — the same trust model Driftfin already uses for client-side keys. Don't enable it where untrusted users shouldn't see your *.arr keys.
Set it up
- Install — build the plugin (see
jellyfin-plugin/README.md), then either drop the DLL into aDriftfinfolder under your Jellyfinplugins/directory, or add a plugin-repository manifest URL in Dashboard → Plugins → Repositories and install "Driftfin". Restart Jellyfin. - Configure — open Dashboard → Plugins → Driftfin and fill in the integrations you want to share, then Save.
- Use — Driftfin clients pull the config on the next login; managed fields become read-only. Uninstall the plugin to hand control back to each client.
targetAbi must match your Jellyfin server version (defaults to
10.10.x). See jellyfin-plugin/README.md.
Interested in contributing? A few ways to help:
🐛 Reporting bugs
- Check that the issue hasn't already been reported.
- Include clear, detailed steps to reproduce — it makes fixing the bug much faster.
🚀 Pull requests
- For new features or large changes, open an issue first so work isn't duplicated.
- Keep PRs short and focused — avoid bundling unrelated fixes.
- Tests are required: every bugfix and new feature must include unit and widget tests (
test/,*_test.dart). CI runsflutter teston every PR and must pass.
🌐 Translations
- Translations live in
lib/l10n/app_*.arb. Edit the relevant file (keys are defined inapp_en.arb) and open a PR.
See CONTRIBUTING.md and DEVELOPEMENT.md for setup and full guidelines.
Driftfin is a fork of Fladder by DonutWare. All credit for the original application goes to the Fladder authors and contributors; Driftfin builds on their work and continues under the same GPL-3.0 license. Changes made in this fork are tracked in this repository's git history.
This software is built with Flutter and many open-source packages (see pubspec.yaml).
This project is licensed under the GNU General Public License v3.0 — the same license as the upstream Fladder project. See the LICENSE file for the full text.

