Practical Music Search is an interactive Vim-like console client for the Music Player Daemon.
Go Other
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
api Move clipboard functionality into database object. Sep 20, 2017
commands Re-calculate column width and height on terminal resize, fixes #88 Sep 20, 2017
console Documentation improvements May 13, 2017
constants Implement autocomplete for the 'cursor' command May 15, 2017
db Move player status into database object. Sep 20, 2017
doc Write about the refactoring of the data model. Sep 17, 2017
index Bring isolate feature back. Sep 17, 2017
input Add unbind command Aug 8, 2017
keysequence Prettier key sequence printing. May 21, 2017
message Document package message May 13, 2017
mpd Move player status into database object. Sep 20, 2017
options Add zb, zz, zt equivalents Sep 15, 2017
parser Fix bug in number parser. May 21, 2017
pms Move player status into database object. Sep 20, 2017
song Start writing tests for song: the AutoFill function. Nov 3, 2017
songlist Add Updated and SetUpdated methods to Songlist Sep 20, 2017
style Topbar says hello world May 8, 2017
tabcomplete Implements the "single" MPD player command. Jun 6, 2017
topbar Refactoring Songlist ownership Sep 20, 2017
utils Move Cursor.filter to utils.TokenFilter May 15, 2017
version Add configuration file support May 13, 2017
widgets Add Updated and SetUpdated methods to Songlist Sep 20, 2017
xdg Fix ineffassign and misspell linter warnings May 13, 2017
.gitignore Run tests with code coverage in Travis CI May 10, 2017
.travis.yml Run tests with code coverage in Travis CI May 10, 2017 Fix relative link path in Nov 3, 2017
LICENSE MIT License Apr 6, 2017
Makefile Add missing dependency to 'make get-deps' May 1, 2017 Move contribution guidelines into a separate document. Sep 20, 2017 Adopt the Contributor Covenant Code of Conduct Apr 28, 2017
main.go Source code cleanup: refactor MPD connection logic. Sep 1, 2017 Run tests with code coverage in Travis CI May 10, 2017

Practical Music Search

Build Status Go Report Card codecov License

Practical Music Search is an interactive console client for the Music Player Daemon, written in Go. Its interface is similar to Vim, and aims to be fast, configurable, and practical.

PMS has many features that involve sorting, searching, and navigating. It’s designed to let you navigate your music collection in an effective way. Some of the currently implemented features are:

  • Vim-style look and feel!
  • Can be configured to consume a very small amount of screen space.
  • MPD player controls: play, add, pause, stop, next, prev, volume.
  • Highly customizable top bar, tag headers, text styles, colors, and keyboard bindings.
  • Fast library search, featuring UTF-8 normalization, fuzzy search, and scoring.
  • Selecting songs, by visual mode, manual selection, and specific tags.
  • Many forms of tracklist manipulation, such as cut, copy, paste, filter, and sort.
  • Config files, tab completion, history, and much more!


Documentation is available in the project repository.

Project status

PMS is in alpha stage, and is a work in progress. A more feature complete, but older, version can be found in the 0.42.x branch.

This software was previously written in C++. The master branch now contains a rewrite, currently implemented in Go. The current goal of the Go implementation is to implement most of the features found in the 0.42 branch.

This functionality is present in the 0.42.x branch, but missing in master:

  • Automatically add songs to the queue when it is nearing end.
  • Remote playlist management.
  • ...and probably more.

Getting started

You’re assumed to have a working Go development environment. PMS requires Go >= 1.8.

To install the application and dependencies, and run PMS, assuming you have $GOBIN in your path:

go get -u
cd $GOPATH/src/

If PMS crashes, and you want to report a bug, please include the debug log:

pms --debug /tmp/pms.log 2>>/tmp/pms.log


PMS wants to build a search index from MPD's database. To be truly practical, PMS must support fuzzy matching, scoring, and sub-millisecond full-text searches. This is accomplished by using Bleve, a full-text search and indexing library.

A full-text search index takes up both space and memory. For a library of about 30 000 songs, you should expect using about 500 MB of disk space and around 1 GB of RAM.

PMS is multithreaded and benefits from multicore CPUs.


See how to contribute to PMS.


Copyright (c) 2006-2017 Kim Tore Jensen <>.

The source code and latest version can be found at Github: