Cashier for Jellyfin — install guide
Installation
You need Jellyfin Server 12.2 or newer and a MediaLab Works account with a licence that covers the plugin (an active subscription, a lifetime licence within its update window, the Jellyfin bundle or the free 30-day trial).
From your plugin repository (recommended). Jellyfin then installs and updates the plugin by itself.
- In your MediaLab Works account open Licences → Jellyfin plugin repository and click Create address. Copy it: it is private (it contains a token), so do not share it; you can regenerate or revoke it at any time.
- In Jellyfin open Dashboard → Plugins → Repositories, click +, give it a name (for example MediaLab Works), paste the address and save.
- In Dashboard → Plugins → Catalog find Cashier by medialab, click Install, then restart Jellyfin.
The repository lists only the plugins your licences cover, and only the versions they allow. Its download links are signed and expire after a few hours, so Jellyfin always reads a fresh list.
Manually, from a zip file.
- In Account → Licences download
jf-cashier_x.y.z.zip(the SHA-256 of the file is shown next to the button). - Extract it into a new folder
Cashier by medialab_x.y.z.0inside the Jellyfin plugins folder:- Linux (package):
/var/lib/jellyfin/plugins/ - Docker (official image):
/config/plugins/in the config volume - Windows:
%ProgramData%\Jellyfin\Server\plugins\
- Linux (package):
- Restart Jellyfin.
Licence activation
- Open the plugin page in Dashboard → Plugins → Cashier by medialab and click Open License page.
- Paste your licence key and click Activate with key. The plugin contacts the licence server, binds the key to this Jellyfin server and shows the licence as Active.
- No key yet? On the same page enter your e-mail and start the 30-day free trial (card needed, 0 € today) or buy a licence; the plugin activates itself when the payment is done.
The licence is checked once a day and at every Jellyfin start. Without internet the plugin keeps working for 7 days after the last successful check. Without a valid licence the plugin stops its work and only its License page keeps working (trial, key, renewal); nothing is deleted, and everything resumes as soon as the licence is valid again. Move license (release this server) on the same page frees the key for another server.
Updates and rollback
- From the repository: Jellyfin shows new versions in Dashboard → Plugins and can update the plugin automatically; restart Jellyfin to load the new version.
- From the plugin's License page: with a valid licence, Install update installs the newest version your licence allows and Roll back to x.y.z goes back to the previous version (for example if something stopped working after an update). Restart Jellyfin after either. Both packages are checked against the checksum published by the licence server.
- A lifetime licence receives the versions released during its update window; after it, the plugin keeps working on the last version it may use.
- After a rollback, if your plugin repository is added in Jellyfin, Jellyfin's scheduled task Update Plugins (at start-up and daily) installs the newest version again. To stay on the previous version for a while, remove the triggers of that task in Dashboard → Scheduled Tasks and add them back later.
Source code
The GPL-3.0 source code of each version is in Account → Licences (Source code), next to the download, as a .tar.gz archive made from the exact commit of that version.
Configuration
Install and license Registration by medialab first, set its public address and SMTP, then open Dashboard → Cashier.
- Keys: paste your Stripe secret key (
sk_…, or better a restrictedrk_…key), click Save and test, then Create the webhook automatically. - Set the service name shown to customers and the public address of the server (for example
https://jellyfin.example.com), used for the return from Stripe and for the webhook. - Review the plans (period, simultaneous streams, price) and click Save and send to Stripe: the prices are created in your Stripe account. A changed price creates a new Stripe price; existing subscribers keep theirs until they change plan.
- Set the trial days and the grace period, then switch selling on.
Daily use
- New customers choose a plan on the sign-up page and pay; their account is enabled when Stripe confirms the payment.
- The Subscribers and Payments lists show who pays what; the journal shows every change of state.
- Switching selling off keeps every account as it is.
Troubleshooting
- Payments do not activate accounts: the webhook cannot reach the server. Check that the public address is reachable over HTTPS from the internet; Cashier also reconciles with Stripe every 15 minutes.
- No e-mails to customers: check the SMTP settings in Registration.