Baike.dev
All toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
T

termusic

> 编程语言
Open source

Music Player TUI written in Rust

2.2K stars0 likes0 views
WebsiteGitHub

About

Music Player TUI written in Rust

# Terminal Music and Podcast Player written in Rust Listen to music and podcasts freely as both in freedom and free of charge!
**Freedom**: As time goes by, online service providers control pretty much everything we listen to. Complicated copyright issues make things worse. If my favorite song cannot be found on a website, I'll probably just not listen to them for years. **Free of charge**: You can download from YouTube, NetEase, Migu and KuGou for free. No need to register for monthly paid memberships. As a contributor of [GOMU](https://github.com/issadarkthing/gomu), I met serious problems during development. The main problem is data race condition. So I rewrote the player in rust, and hope to solve the problem. ## Supported Formats Below are the audio formats supported by the various backends. In the case that metadata is not supported, an attempt will still be made to play the file. | Container | Rusty | MPV | Gstreamer | Metadata | | :--------: | :---: | :---: | :-------: | :------: | | MP4 / M4A | Yes | Yes | Yes | Yes | | MP3 | Yes | Yes | Yes | Yes | | OGG | Yes | Yes | Yes | Yes | | FLAC | Yes | Yes | Yes | Yes | | ADTS | Yes | Yes | Yes | Yes | | WAV / AIFF | Yes | Yes | Yes | Yes | | CAF | Yes | Yes | Yes | No | | MKV / WebM | Yes | Yes | Yes | No | | Codec | Rusty | MPV | Gstreamer | | :-------------: | :---: | :---: | :-------: | | AAC-LC | Yes | Yes | Yes | | HE-AAC | No | Yes | Yes | | MP3 / MP2 / MP1 | Yes | Yes | Yes | | FLAC | Yes | Yes | Yes | | WAV | Yes | Yes | Yes | | VORBIS | Yes | Yes | Yes | | OPUS | No*1 | Yes | Yes | | ADPCM | Yes | Yes | Yes | | PCM | Yes | Yes | Yes | *1: `Opus` codec is supported in rusty backend if feature `rusty-libopus` is enabled. ## Installation ### Requirements #### MSRV The minimal Rust version required to build this project is `1.90.0`. Note that using non-default features might increase the MSRV. #### Dependencies ##### Linux | Package name (ubuntu) | Package name (arch) | Required | Build-time-only | Feature | Description | MSRV | | :-------------------: | :-----------------: | :------: | :-------------: | :----------------: | :---------------------------------------------------: | :------: | | `git` | `git` | X | X | | version control | | | `clang` | `clang` | X | X | | General Build tools (and sqlite compile) | | | `protobuf-compiler` | `protobuf` | X | X | | communication protocol between server and client(tui) | | | `libdbus-1-dev` | `dbus` | X | unknown | | MPRIS media control | | | `libasound2-dev` | `alsa-lib` | X | unknown | | ALSA headers | | | `yt-dlp` | `yt-dlp` | | | | Download some tracks | | | `ffmpeg` | `ffmpeg` | | | | Post-Processing for `yt-dlp` | | | `mpv` | `mpv` | | | `mpv` | MPV Backend | | | `gstreamer` | `gstreamer` | | | `gst` | Gstreamer Backend | | | `libopus` | `libopus` | X | | `rusty-libopus` | Opus codec support in rusty backend | `1.89.0` | | `ueberzugpp` | `ueberzugpp` | | | `cover-ueberzug` | Ueberzug protocol support | | | `libstdc++6` | `gcc-libs` | | | `rusty-soundtouch` | Soundtouch requires linking to libstdc++ | | #### Windows All the packages here can be installed via various sources, for ease of install the `winget` package name is listed. | Package name (winget) | Alternative Source | Required | Build-time-only | Feature | Description | MSRV | | :---------------------------------: | :---------------------------------------: | :------: | :-------------: | :----------------: | :---------------------------------------------------: | :------: | | `Git.Git` | | X | X | | version control | | | `Microsoft.VisualStudio.BuildTools` | | X | X | | General Windows (C++) build tools | | | `Google.Protobuf` | | X | X | | communication protocol between server and client(tui) | | | `yt-dlp` | | | | | Download some tracks | | | `ffmpeg` | | | | | Post-Processing for `yt-dlp` | | | unknown | | | | `mpv` | MPV Backend | | | unknown | | | | `gst` | Gstreamer Backend | | | unavailable | [libopus official site][libopus-download] | X | | `rusty-libopus` | Opus codec support in rusty backend | `1.89.0` | | *see list below* | | | X | `rusty-soundtouch` | Soundtouch requires linking to libstdc++ | | - See [MSVC Prerequisites: only the required components](https://rust-lang.github.io/rustup/installation/windows-msvc.html#installing-only-the-required-components-optional) for a minimal install [libopus-download]: "Needs to be manually compiled for windows" ##### Windows `rusty-soundtouch` Compiling feature `rusty-soundtouch` on windows requires a bunch extra dependencies that are otherwise not required. It is recommended to just use the pre-built binaries by Github Actions to avoid installing ~2GB of extra C++ Dependencies and potentially having to mess around with dependencies. If you actually still wanted to compile this yourself, you will need: 1. Install `C++ CMake tools for Windows` via `Microsoft.VisualStudio.BuildTools` (or also known as `Visual Studio Installer`) 2. Install a Clang compiler At the time of writing, `Microsoft.VisualStudio.BuildTools` does not provide a `clang.dll` / `libclang.dll`, which the `cc` crate needs for building C++. Instead, simply install `llvm` via `winget`: `winget install llvm` This should be everything and feature `rusty-soundtouch` should compile without problems. #### Backends Default backend: `rusty` | Backend | Requirements | | :--------------: | :---------------------------------------------------------------------------------------------------------------- | | Symphonia(rusty) | On Linux [`libasound2-dev`](https://launchpad.net/ubuntu/noble/+package/libasound2-dev) is required for building. | | GStreamer | [GStreamer](https://gstreamer.freedesktop.org) | | MPV | [MPV](https://mpv.io/) | There are extra features for some backends: Note that they are not enabled by default and potentially increase non-rust dependencies. | Feature | Backend | Description | Extra Dependencies | MSRV | | :----------------: | :-----: | :---------------------------------------------------------------: | :----------------: | :------: | | `rusty-soundtouch` | `rusty` | Enable `soundtouch` compilation and use as default speed-modifier | | | | `rusty-libopus` | `rusty` | Enable `libopus` support to support `opus` files | `libopus` | `1.89.0` | #### Album cover support To display covers in the terminal itself, feature `cover` can be enabled. To only enable specific protocols for cover support, see [tui/Cargo.toml#features](./tui/Cargo.toml). Feature `cover-ueberzug` will require some ueberzug implementation to be present at runtime. ### Files #### Configuration Configuration files can be found in: | System | Path | | :-----: | :---------------------------------------: | | Linux | `~/.config/termusic/` | | Mac | `~/Library/Application Support/termusic/` | | Windows | `%APPDATA%\termusic\` | Files & Folders: | Paths | Description | | :------------: | :----------------------------------------------: | | `server.toml` | For server configuration | | `tui.toml` | For TUI configuration | | `themes/` | Extra Themes to be selected in the Config Editor | | `playlist.log` | The Playlist storing the current playlist/queue | | `library2.db` | The Indexed Music library | | `data.db` | The Podcast Database | #### Logs By default logs can be found in: | System | Path | | :-----: | :--------: | | Linux | `/tmp/` | | Mac | `/tmp/`(?) | | Windows | `%TMP%\` | Files: | Files | Description | | :-------------------: | :-------------: | | `termusic-server.log` | The server logs | | `termusic-tui.log` | The TUI logs | | `termusic-cover.EXT` | MPRIS cover | The default log level is `WARNING` (can be changed via [`RUST_LOG`](https://docs.rs/env_logger/latest/env_logger/#enabling-logging)). Note that log files are only created on the first log line to be saved. ### Official Install Sources #### Cargo ```bash cargo install termusic termusic-server --locked ``` #### cargo-binstall ```bash cargo binstall termusic termusic-server ``` ### From Source ```bash git clone https://github.com/tramhao/termusic.git cd termusic make ``` Then install with: ```bash make install ``` By default, termusic can display album covers in Kitty or iTerm2. If you need album covers displayed on other terminals, you can enable the `sixel` protocol or use a ueberzug implementation(x11/xwayland only). To build all backends

Issues· 0 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

Rust

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言