A fast Spotify client with a native GUI written in Rust, without Electron. Psst is still very early in development, lacking in features, stability, and general user experience. It's fully cross-platform, supporting Windows, Linux, and macOS. Contributions are welcome!
Note: A Spotify Premium account is required.
GitHub Actions automatically builds and releases new versions when changes are pushed to the main
branch. You can download the latest release for Windows, Linux, and macOS from the GitHub Releases page.
Platform | Download Link |
---|---|
Linux (x86_64) | Download |
Linux (aarch64) | Download |
Debian Package (amd64) | Download |
Debian Package (arm64) | Download |
macOS | Download |
Windows | Download |
Unofficial builds of Psst are also available through the AUR and Homebrew.
On all platforms, the latest Rust stable (at least 1.65.0) is required. For platform-specific requirements, see the dropdowns below.
LinuxOur user-interface library, Druid, has two possible backends on Linux: GTK and pure X11, with a Wayland backend in the works. The default Linux backend is GTK. Before building on Linux, make sure the required dependencies are installed.
sudo apt-get install libssl-dev libgtk-3-dev libcairo2-dev libasound2-dev
sudo dnf install openssl-devel gtk3-devel cairo-devel alsa-lib-devel
OpenBSD (WIP)
OpenBSD support is still a WIP, and things will likely not function as intended. Similar to Linux, Druid defaults to GTK while also providing a pure X11 backend. Furthermore, bindgen must be able to find LLVM through the expected environment variable. Only OpenBSD/amd64 has been tested so far.
doas pkg_add gtk+3 cairo llvm
export LIBCLANG_PATH=/usr/local/lib
In case rustc(1) fails building bigger crates
memory allocation of xxxx bytes failed
error: could not compile `gtk`
Caused by:
process didn't exit successfully: `rustc --crate-name gtk [...]` (signal: 6, SIGABRT: process abort signal)
warning: build failed, waiting for other jobs to finish...
try increasing your user's maximum heap size:
ulimit -d $(( 2 * `ulimit -d` ))
cargo build
# Append `--release` for a release build.
cargo run --bin psst-gui
# Append `--release` for a release build.
cargo install cargo-bundle
cargo bundle --release
Contributions are very welcome!
Here's the basic project structure:
/psst-core
- Core library, takes care of Spotify TCP session, audio file retrieval, decoding, audio output, playback queue, etc./psst-gui
- GUI application built with Druid/psst-cli
- Example CLI that plays a track. Credentials must be configured in the code./psst-protocol
- Internal Protobuf definitions used for Spotify communication.Psst connects only to the official Spotify servers and does not call home. Caches of various things are stored locally and can be deleted anytime. User credentials are not stored at all; instead, a re-usable authentication token from Spotify is used.
This project would not exist without the following:
librespot
, the Open Source Spotify client library for Rust. Most of psst-core
is directly inspired by the ideas and code of librespot
, although with a few differences:
tokio
or other async
runtime, although it will probably change in the future.librespot-java
, instead of the channel-based approach in librespot
.druid
native GUI library for Rust.ncspot
cross-platform ncurses Spotify client written in Rust, using librespot
.