Ferrosonic-ng
A terminal-based Subsonic music client written in Rust, featuring bit-perfect audio playback, gapless transitions, and full desktop integration.
Ferrosonic-ng is a continuation of the original ferrosonic by jaidaken, which is no longer actively maintained. Originally a ground-up rewrite of Termsonic in Rust, it features PipeWire sample rate switching for bit-perfect audio, MPRIS2 media controls, multiple color themes, and mouse support.
Features
- Bit-perfect audio — Automatic PipeWire sample rate switching to match source material (44.1kHz, 48kHz, 96kHz, 192kHz, etc.), with the original rate restored on exit
- Gapless playback — Next track is pre-loaded into mpv's internal playlist for seamless transitions
- MPRIS2 integration — Full desktop media controls (play, pause, stop, next, previous, seek)
- Artist/album browser — Tree-based navigation with expandable artists, album listings, and artist filtering
- Songs page — Browse starred and random songs from your server
- Playlists & queue management — Browse server playlists, add/remove/reorder/shuffle queue, clear history
- Audio quality display — Real-time sample rate, bit depth, codec, and channel layout
- Audio visualizer — Integrated cava visualizer with theme-matched gradient colors
- 13 built-in themes + custom themes — Monokai, Dracula, Nord, Catppuccin, Tokyo Night, and more. Create your own as TOML files in
~/.config/ferrosonic/themes/. See the themes documentation - Mouse support — Clickable tabs, playback controls, list items, and progress bar seeking
- Keyboard-driven — Vim-style navigation (j/k) alongside arrow keys. See the full keybindings reference
- Multi-disc album support — Proper disc and track number display
Screenshots

Installation
Dependencies
Ferrosonic requires the following at runtime:
| Dependency | Purpose | Required |
|---|---|---|
| mpv | Audio playback engine (via JSON IPC) | Yes |
| PipeWire | Automatic sample rate switching for bit-perfect audio | Recommended |
| WirePlumber | PipeWire session manager | Recommended |
| D-Bus | MPRIS2 desktop media controls | Recommended |
| cava | Audio visualizer | Optional |
Quick Install
Supports Arch, Fedora, and Debian/Ubuntu. Installs runtime dependencies, downloads the latest precompiled binary, and installs to /usr/local/bin/:
|
Install via Cargo
cargo install ferrosonic
Build from Source
If you prefer to build from source, you'll also need: Rust toolchain, pkg-config, OpenSSL dev headers, and D-Bus dev headers. Then:
Usage
# Run with default config (~/.config/ferrosonic/config.toml)
# Run with a custom config file
# Enable verbose/debug logging
Configuration
Configuration is stored at ~/.config/ferrosonic/config.toml. You can edit it manually or configure the server connection through the application's Server page (F5).
= "https://your-subsonic-server.com"
= "your-username"
= "your-password"
= "Default"
= true
= 40
= true
= 100
= true
| Field | Type | Default | Description |
|---|---|---|---|
BaseURL |
string |
"" |
URL of your Subsonic-compatible server (Navidrome, Airsonic, Gonic, etc.) |
Username |
string |
"" |
Your server username |
Password |
string |
"" |
Your server password |
Theme |
string |
"" |
Color theme name (e.g. Default, Catppuccin, Tokyo Night) |
Cava |
bool |
false |
Enable the audio visualizer |
CavaSize |
u8 |
40 |
Audio visualizer height percentage (range: 10–80, step: 5) |
Notifications |
bool |
false |
Enable desktop track-change notifications |
RandomSongsCount |
usize |
250 |
Number of random songs to fetch |
Scrobble |
bool |
true |
Enable scrobbling (reporting played tracks to the server) |
Logs are written to ~/.config/ferrosonic/ferrosonic.log.
Themes
Ferrosonic ships multiple built-in themes, as well as support for custom themes. Here are two examples:
| Nord | Gruvbox |
|---|---|
To know more about themes, visit the themes documentation.
Compatible Servers
Ferrosonic works with any server implementing the Subsonic API, including:
Contributing
Contributions are welcome! Feel free to open an issue or submit a pull request.
For local development:
Bug reports are most useful when they include:
- Steps to reproduce the issue
- Expected behavior and actual behavior
- Version/commit and OS details
- Relevant logs from
~/.config/ferrosonic/ferrosonic.log(or/tmp/ferrosonic.logif a config directory is unavailable)
License
This project is licensed under the MIT License.
Acknowledgements
This is a fork from jaidaken/ferrosonic, with the intent of keeping the project alive.
Ferrosonic is inspired by Termsonic by SixFoisNeuf, a terminal Subsonic client written in Go. Ferrosonic builds on that concept with a Rust implementation, bit-perfect audio via PipeWire, and additional features.