a Jellyfin & Subsonic client for the terminal — powered by mpv, Chromecast and UPnP MediaRenderer
mpv chromecast mpris navidrome jellyfin upnp tui
15

Configure Feed

Select the types of activity you want to include in your feed.

Release 0.5.0

Bump the workspace, flake, deb/rpm packaging and README install
snippets to 0.5.0, and document the new MPRIS support in the changelog.

Tsiry Sandratraina (Jul 8, 2026, 3:01 PM +0300) c8fb5344 8552bb3d

+37 -19
+18
CHANGELOG.md
··· 5 5 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), 6 6 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 7 7 8 + ## [0.5.0] - 2026-07-08 9 + 10 + ### Added 11 + - **MPRIS support** (`fin-mpris`) — on Linux and the BSDs, fin registers 12 + `org.mpris.MediaPlayer2.fin` on the D-Bus session bus while the TUI 13 + runs, so media keys, GNOME/KDE applets, waybar and `playerctl` can 14 + drive playback: play/pause, next/previous, seek and SetPosition, 15 + volume, shuffle and repeat (mapped to MPRIS `LoopStatus`), with track 16 + metadata (title, artist, duration, cover art) pushed as 17 + `PropertiesChanged`/`Seeked` signals. The MPRIS player shares the same 18 + swappable renderer handle as the TUI and the UPnP MediaRenderer, so 19 + desktop controls follow you when you switch to a Chromecast or UPnP 20 + device. Built on zbus (pure Rust — no dbus system library needed); 21 + starting without a session bus (headless/SSH) is a non-fatal warning. 22 + A second fin instance falls back to a pid-suffixed bus name per the 23 + MPRIS spec. 24 + 8 25 ## [0.4.0] - 2026-07-07 9 26 10 27 ### Added ··· 121 138 - fzf-style instant search, playlist browsing, and drill-in navigation. 122 139 - Full pagination of the Items endpoint so large libraries load completely. 123 140 141 + [0.5.0]: https://github.com/tsirysndr/fin/compare/v0.4.0...v0.5.0 124 142 [0.4.0]: https://github.com/tsirysndr/fin/compare/v0.3.1...v0.4.0 125 143 [0.3.1]: https://github.com/tsirysndr/fin/compare/v0.3.0...v0.3.1 126 144 [0.3.0]: https://github.com/tsirysndr/fin/compare/v0.2.0...v0.3.0
+9 -9
Cargo.lock
··· 778 778 779 779 [[package]] 780 780 name = "fin" 781 - version = "0.4.0" 781 + version = "0.5.0" 782 782 dependencies = [ 783 783 "anyhow", 784 784 "clap", ··· 804 804 805 805 [[package]] 806 806 name = "fin-config" 807 - version = "0.4.0" 807 + version = "0.5.0" 808 808 dependencies = [ 809 809 "anyhow", 810 810 "directories", ··· 814 814 815 815 [[package]] 816 816 name = "fin-jellyfin" 817 - version = "0.4.0" 817 + version = "0.5.0" 818 818 dependencies = [ 819 819 "anyhow", 820 820 "chrono", ··· 833 833 834 834 [[package]] 835 835 name = "fin-media" 836 - version = "0.4.0" 836 + version = "0.5.0" 837 837 dependencies = [ 838 838 "anyhow", 839 839 "async-trait", ··· 849 849 850 850 [[package]] 851 851 name = "fin-mediarenderer" 852 - version = "0.4.0" 852 + version = "0.5.0" 853 853 dependencies = [ 854 854 "anyhow", 855 855 "chrono", ··· 866 866 867 867 [[package]] 868 868 name = "fin-mpris" 869 - version = "0.4.0" 869 + version = "0.5.0" 870 870 dependencies = [ 871 871 "anyhow", 872 872 "fin-player", ··· 878 878 879 879 [[package]] 880 880 name = "fin-player" 881 - version = "0.4.0" 881 + version = "0.5.0" 882 882 dependencies = [ 883 883 "anyhow", 884 884 "async-trait", ··· 905 905 906 906 [[package]] 907 907 name = "fin-subsonic" 908 - version = "0.4.0" 908 + version = "0.5.0" 909 909 dependencies = [ 910 910 "anyhow", 911 911 "async-trait", ··· 925 925 926 926 [[package]] 927 927 name = "fin-tui" 928 - version = "0.4.0" 928 + version = "0.5.0" 929 929 dependencies = [ 930 930 "anyhow", 931 931 "async-trait",
+1 -1
Cargo.toml
··· 3 3 resolver = "2" 4 4 5 5 [workspace.package] 6 - version = "0.4.0" 6 + version = "0.5.0" 7 7 authors = ["Tsiry Sandratraina <tsiry.sndr@rocksky.app>"] 8 8 edition = "2021" 9 9 license = "MPL-2.0"
+5 -5
README.md
··· 118 118 119 119 ```bash 120 120 # amd64 121 - curl -LO https://github.com/tsirysndr/fin/releases/latest/download/fin_0.4.0_amd64.deb 122 - sudo apt install ./fin_0.4.0_amd64.deb 121 + curl -LO https://github.com/tsirysndr/fin/releases/latest/download/fin_0.5.0_amd64.deb 122 + sudo apt install ./fin_0.5.0_amd64.deb 123 123 124 124 # arm64 (Raspberry Pi 4/5, Apple-silicon VM, …) 125 - curl -LO https://github.com/tsirysndr/fin/releases/latest/download/fin_0.4.0_arm64.deb 126 - sudo apt install ./fin_0.4.0_arm64.deb 125 + curl -LO https://github.com/tsirysndr/fin/releases/latest/download/fin_0.5.0_arm64.deb 126 + sudo apt install ./fin_0.5.0_arm64.deb 127 127 ``` 128 128 129 129 `apt` will pull in `libasound2` (ALSA runtime for cpal) and `mpv` automatically. ··· 140 140 141 141 ```bash 142 142 sudo dnf install \ 143 - https://github.com/tsirysndr/fin/releases/latest/download/fin-0.4.0-1.x86_64.rpm 143 + https://github.com/tsirysndr/fin/releases/latest/download/fin-0.5.0-1.x86_64.rpm 144 144 ``` 145 145 146 146 Or via the Gemfury yum repo:
+1 -1
dist/debian/amd64/DEBIAN/control
··· 1 1 Package: fin 2 - Version: 0.4.0 2 + Version: 0.5.0 3 3 Section: sound 4 4 Priority: optional 5 5 Architecture: amd64
+1 -1
dist/debian/arm64/DEBIAN/control
··· 1 1 Package: fin 2 - Version: 0.4.0 2 + Version: 0.5.0 3 3 Section: sound 4 4 Priority: optional 5 5 Architecture: arm64
+1 -1
dist/rpm/amd64/fin.spec
··· 1 1 Name: fin 2 - Version: 0.4.0 2 + Version: 0.5.0 3 3 Release: 1%{?dist} 4 4 Summary: A neon-electric Jellyfin TUI client for mpv & Chromecast 5 5
+1 -1
flake.nix
··· 42 42 inherit src; 43 43 44 44 pname = "fin"; 45 - version = "0.4.0"; 45 + version = "0.5.0"; 46 46 strictDeps = true; 47 47 48 48 # No native TLS or system libs needed — pure Rust deps.