Open-source project
hrkfdn/ncspot avatar
hrkfdn/ncspot

ncspot: a terminal Spotify client for premium accounts

Cross-platform ncurses Spotify client written in Rust, inspired by ncmpc and the likes.

6,789 stars278 forksRustBSD-2-Clause

At a glance

What is it?
ncspot is an ncurses Spotify client written in Rust on top of librespot. It targets people who want playback and search inside a terminal, and it requires a Spotify premium account.
Who is it for?
Adopt ncspot if you already pay for Spotify premium and spend your day in a terminal, especially on a BSD where no official client exists. Skip it if you use a free Spotify account, since the README states it only works with premium, or if you need a graphical interface.
Can I use it commercially?
Yes. BSD-2-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What ncspot replaces, and for whom

The official Spotify client is a graphical application. ncspot is the opposite bet: an ncurses interface that runs inside a terminal, written in Rust and built on librespot, the same library family used by several unofficial Spotify clients. The README describes the motivation directly, calling it a "simple and resource friendly alternative to the official client" and naming the \*BSDs as platforms that currently have no Spotify client at all. That second point is the sharper one. On FreeBSD, OpenBSD or NetBSD there is no official desktop client to fall back on, so a terminal client is not a preference, it is the only option.

The audience follows from that. If you live in tmux or a tiling window manager, ncspot keeps playback, playlists, albums, genres and search in the same keyboard-driven context as everything else. If you open a browser to play music, ncspot adds a dependency and a login flow for no gain. The README is explicit about one hard gate: ncspot only works with a Spotify premium account, because it uses features that free accounts do not have. That is not a soft recommendation, it is a precondition.

How librespot, ncurses and the IPC socket fit together

The architecture is visible in Cargo.toml. ncspot depends on librespot-core, librespot-oauth, librespot-playback and librespot-protocol, all at version 0.8.0. librespot handles the Spotify side: OAuth login, the session, and audio playback through librespot-playback, which is pulled in with default features disabled and native-tls enabled. ncspot itself supplies the interface and the state around it.

The terminal layer is pancurses, listed as an optional dependency, which is the cross-platform ncurses binding that lets the same source build against different curses implementations. Two other optional dependencies hint at what gets compiled in per platform: arboard for clipboard access and zbus for D-Bus, the latter with tokio features. The asynchronous runtime is tokio with rt-multi-thread and sync, and crossbeam-channel carries messages between the playback side and the interface. Configuration and state are serialized with serde, serde_json and serde_cbor, which is why the config file is a plain text format rather than a binary blob.

One feature deserves separate mention because it changes how you can use the tool: the IPC socket for remote control. It means an external process can drive the running instance, so keybindings are not the only control surface. The README lists it as a feature but does not document the protocol in the excerpt available here, so treat the socket as a capability to investigate in the repository rather than something you can script against from the README alone.

The build profile is worth noting for anyone compiling from source. The release profile sets lto = true and codegen-units = 1, which trades compile time for a smaller, faster binary. There is also an optimized profile that inherits release but sets lto = false and codegen-units = 16, presumably for faster iteration during development.

Installing ncspot and playing a first track

The README points to doc/users.md for per-platform instructions and lists the channels: macOS through Homebrew, Windows through Scoop and WinGet, Linux through a native package, Flathub and Snapcraft, plus the BSDs. On macOS the Homebrew path is the shortest:

bash
brew install ncspot

After the install completes, `ncspot` should be on your PATH. On Windows, the README names both Scoop and WinGet, so either package manager works depending on which you already use; the exact package identifiers are in doc/users.md, not in the README excerpt. On Linux, prefer the native package for your distribution if one exists, and fall back to Flathub or Snapcraft otherwise.

If your platform is not covered by a package, building from source requires a working Rust installation and a Python 3 installation, according to the README. The command is simply:

bash
cargo build

That produces a debug binary. For a real install you would use the release profile, which is the one configured with link-time optimization in Cargo.toml. The README does not spell out a `cargo install` invocation in the excerpt available here, so check doc/developers.md before assuming one.

Configuration lives by default at `~/.config/ncspot`, and the README says a configuration file can be provided at that location. The repository also contains a `Ncspot/config` path referenced in search traffic, which suggests people look for a config directory rather than a single file; the README itself only names the directory. Once running, the README states vim keybindings work out of the box, so navigation should feel familiar if you already use vim. The search tab is the fastest way to confirm playback is working: search for an artist, select a track, and audio should start through librespot-playback.

The premium requirement is the limitation that decides everything

Most limitations of a terminal client are cosmetic. This one is not. The README states plainly that ncspot only works with a Spotify premium account, because it offers features that are not available for free accounts. If you are on the free tier, ncspot is not a lighter alternative to the official client, it is a non-starter. No amount of configuration changes that.

The second limitation is environmental. ncurses interfaces depend on the terminal they run in: font, color support, and how the terminal handles alternate screen buffers all affect what you see. The README does not document any fallback for terminals that render the interface badly, and it does not list minimum terminal requirements. If your terminal struggles with full-screen curses applications, that is a risk you carry into the install, not something the project promises to solve.

A third constraint is more subtle. Because playback goes through librespot rather than the official client, the feature surface is whatever librespot exposes at version 0.8.0. The README lists tracks, albums, playlists, genres and searching, which is a real feature set but not the full official client. If you depend on a Spotify feature that is not in that list, verify it exists before switching. The README is silent on which specific premium features are used and which are absent, so that check has to happen against the running client, not the documentation.

Finally, there is a maintenance question the README cannot answer. The repository is not archived and the last push was on 2026-09-21, with v1.4.0 released on 2026-08-21. That is recent activity, but the README does not describe a support policy, a deprecation process, or how breaking changes are communicated between releases. If you deploy ncspot across a fleet of machines, you are relying on the project's release cadence rather than a documented compatibility guarantee.

ncspot against a graphical Spotify client and against spotify-tui

The comparison people actually search for is ncspot versus spotify-tui, and the architectural difference is the interesting part. spotify-tui is a terminal interface that talks to the Spotify Web API and delegates playback to an external device, typically the official client running somewhere else. ncspot embeds playback directly through librespot-playback, so the terminal process is the player. That single design choice explains the premium requirement and the resource footprint claim: ncspot needs the credentials and the audio stack that playback requires, and in exchange it does not need another Spotify client running in the background.

The practical consequence is what happens when things go wrong. With a Web API client, playback failures usually mean the remote device is unavailable. With ncspot, playback failures originate inside the process, which is why the build pulls in native-tls and why librespot-playback is a direct dependency rather than an abstracted one. Neither approach is strictly better; they fail in different places.

Against the official graphical client, the difference is not features but environment. The official client is the reference implementation and will always have the newest Spotify features first. ncspot trades that for a terminal interface, a small footprint, vim keybindings, and platforms the official client does not cover. On a BSD, that trade is not really a trade at all, because the alternative does not exist. On macOS or Windows, it is a genuine preference question.

Licence, upgrades and what maintenance costs you

ncspot is licensed under BSD-2-Clause, declared in the workspace package section of Cargo.toml and confirmed by the repository's LICENSE file. That is a permissive licence: it allows redistribution and modification with the copyright notice and disclaimer retained, and it does not impose the copyleft obligations that a GPL would. Because ncspot links against librespot, which is a separate project with its own licensing, anyone redistributing a binary should check the licences of the full dependency tree rather than assuming BSD-2-Clause covers everything. This is a factual observation about how the dependencies are structured, not legal advice; get a lawyer for a real distribution question.

Upgrade cost depends on how you installed it. Through Homebrew, Scoop, WinGet, Flathub or Snapcraft, the package manager owns the version and you upgrade with the usual commands for that tool. Building from source means you track the repository yourself, and the release profile's lto = true and codegen-units = 1 settings make each build slower than a typical Rust project. The version history shows three releases in the eight months before 2026-08-21, which suggests upgrades arrive a few times a year rather than weekly. The README does not document a migration path for config changes between versions, so if you maintain a customized config at `~/.config/ncspot`, back it up before upgrading and diff it afterward.

Editorial conclusion

Adopt ncspot if you already pay for Spotify premium and spend your day in a terminal, especially on a BSD where no official client exists. Skip it if you use a free Spotify account, since the README states it only works with premium, or if you need a graphical interface. Before committing, verify two things on your own machine: that your platform is listed in doc/users.md, and that your terminal renders the ncurses interface correctly, because the README says nothing about fallback behaviour when it does not.

Frequently asked questions

What is ncspot?

ncspot is an ncurses Spotify client written in Rust using librespot, inspired by ncurses MPD clients such as ncmpc. It runs inside a terminal and supports tracks, albums, playlists, genres and searching.

Is there an open source Spotify client available?

Yes. ncspot is one, released under BSD-2-Clause and built on librespot. It requires a Spotify premium account, so it is not a way to avoid paying for Spotify.

How do I install ncspot?

The README lists macOS via Homebrew, Windows via Scoop and WinGet, Linux via a native package, Flathub and Snapcraft, and the BSDs. Detailed per-platform instructions are in doc/users.md, and building from source needs a Rust installation and Python 3.

How do I use ncspot?

Install it for your platform, run it, and use the search tab to find tracks, albums and playlists. Vim keybindings work out of the box, and configuration can be placed in the default location `~/.config/ncspot`.

Is ncspot safe?

The README does not make any security claims, so there is nothing in the project's own documentation to confirm or deny that. What can be checked is the source and the dependency list in Cargo.toml, which includes librespot 0.8.0 and native-tls.

How does ncspot differ from spotify-tui?

ncspot embeds playback through librespot-playback, so the terminal process plays audio itself. spotify-tui is not covered by this project's documentation, so the README gives no comparison; the difference that is documented here is that ncspot needs a premium account and depends on librespot for playback.

Official sources

  1. hrkfdn/ncspot on GitHub
  2. Issues
  3. License: BSD-2-Clause
  4. README
  5. Releases
For maintainers

Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/hrkfdn-ncspot.svg)](https://hysenlabs.com/projects/hrkfdn-ncspot)
Community notes

Community notes