Skip to content

Installation

Nils Lehnen edited this page Sep 6, 2026 · 1 revision

Installation

This plugin is not in Jellyfin's built-in catalogue. It is installed by adding Flowfin's own plugin repository to the server once.

Installing

  1. Open Dashboard > Plugins > Repositories and add this address:

    https://flowfin.dev/manifest.json
    
  2. Open Dashboard > Plugins > Catalog, find Playback Statistics, and install it.

  3. Restart Jellyfin.

One manifest carries every Flowfin plugin, so a server that already has the address for one of them does not add it again.

The server does the checking. It hashes the archive it fetched and refuses the install where the hash is not the checksum the catalogue carries, so an install that completed is one where the two agreed at the server.

The two server lines, and which version stream is which

Two server lines are supported and nothing else is. One archive is built per line, and the server is offered the one matching the version it reports.

server line framework version stream starts at released so far
Jellyfin 10.11 .NET 9 0.1.0.0 0.1.0.0
Jellyfin 12.0 .NET 10 1.0.0.0 nothing yet

The leading number says which server line a release is for and not how finished the plugin is. 1.0.0.0 will be the same interface 0.1.0.0 carries, built from the same source. Reading one as a mature release and the other as a provisional one is the mistake that numbering invites and it is wrong.

A 12.0 server finds nothing to install under this entry until the 12.0 line publishes. Support matrix and releases carries the frameworks, the floors and how to verify a downloaded asset.

Upgrading

Install the newer version from the catalogue the same way and restart. The settings file and the store are not touched by an upgrade: the plugin moves an older settings file forward to the shape the new build reads on the start that finds it, and says on the server log that it did.

An installation whose stored settings hold a value the new build refuses starts with the default for that field and names the field above the form on the settings page. Nothing else is changed and nothing is deleted. Troubleshooting has that sentence and what to do about it.

Uninstalling, and what it deletes

Two places on the server hold something this plugin wrote, and removing the plugin deletes both:

  • <server data directory>/plugins/Jellyfin.Plugin.Stats - the plugin's own data folder, holding one file, plays.db, which is the store.
  • <server data directory>/plugins/configurations/Jellyfin.Plugin.Stats.xml - the settings saved from the settings page.

The server itself deletes only the folder the plugin was installed into, which holds the assembly and no recorded playback, so the plugin deletes those two as it is being removed.

Two cases are worth knowing about. A deletion that fails is written to the server log with the path in the message, and the path is then still there to be removed by hand: the hook runs while the server is uninstalling, and a file held open by something else cannot be removed at that moment. And where the plugin was installed by hand into a folder named Jellyfin.Plugin.Stats, the data folder and the installation folder are the same directory; deleting it from inside the running plugin would take the assembly out from under the uninstall in progress, so the server deletes that folder itself immediately afterwards. The data still goes, and the log says which of the two happened.

The server data directory is the one holding config, data, log and plugins. Where it is depends on how the server was installed, and the server's own dashboard reports it under the paths it lists.

The full account, including what the retention sweep removes while the plugin is installed, is in docs/plugin-data.md.

Clone this wiki locally