hmp3-ng: A 2019 fork of an ncurses mp3 player written in Haskell

[ program, sound ] [ Propose Tags ]

An mp3 player with a curses frontend. Playlists are populated by passing directory names on the commandline, and saved to the ~/.hmp3db database. Type h to display the help page. Colours may be configured at runtime by editing the "~/.hmp3" file.

[Skip to Readme]
Versions [faq] 2.4.2, 2.5.1, 2.7.0, 2.7.1, 2.7.3,, 2.9.3
Dependencies array, base (==4.*), binary (>=0.4), bytestring (>=0.10), clock, containers, directory, hscurses, monad-extras, mtl, pcre-light (>=0.3), process, random, unix (>=2.7), utf8-string, zlib (>=0.4) [details]
License LicenseRef-GPL
Author Don Stewart, Galen Huntington
Maintainer Galen Huntington
Category Sound
Home page
Bug tracker
Source repo head: git clone
Uploaded by galen at 2019-12-20T19:13:44Z
Distributions NixOS:2.9.3
Executables hmp3
Downloads 1746 total (20 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs not available [build log]
All reported builds failed as of 2019-12-21 [all 3 reports]


Maintainer's Corner

For package maintainers and hackage trustees

Readme for hmp3-ng-2.9.3

[back to package description]

Build Status


The hmp3 music player, written in Haskell, dates to 2005, and has a curses-based interface which can be used in a text terminal. But it has become abandonware: the last update was in June 2008, and it no longer builds with today's Haskell and standard libraries.

This repository is a work in progress to resurrect this software.

The original Darcs repo has vanished from the Internet. However, I have a copy I checked out in 2008 (to hack on!) with all the patches through version 1.5.1 (the latest is, and Hackage has tarballs for the later versions.

  • I used darcs-to-git to port to Git.

  • I added commits for the changes in the two later published versions. These were quite minor, the bulk being the automated regeneration of a configure file (now gone).

  • I updated the code to compile under recent GHC (8.6.5, 8.8.1, and 8.10.1-alpha1 as of this writing) and libraries. This required rewriting or entirely replacing large sections, mainly low-level optimizations.

  • Cabal is configured via the more modern hpack format.

  • I have added support for building with Stack.

  • There is a GitHub issue tracker, and Travis integration to continuously test builds.

  • I try to avoid “Not Invented Here” by using established, up-to-date packages from Hackage. Much old code has now been “outsourced” and simplified.

  • All C code is removed, replaced with libraries from Hackage. There is still some use of the FFI.

  • Unicode is supported in titles and filenames, and Unicode characters are utilized to sharpen the interface.

  • Several additions and changes have been made to the feature set and the UI. A few of the key bindings have been modified per my preference.

  • Work on other features and changes, and documentation, is ongoing.

I am still working out the flaws. Let me know if there are problems.


Either cabal install or stack install will build a binary. You will need to have mpg321 installed, which is free software and widely available in package managers. Alternatively, mpg123 can be used by compiling with the -DMPG123 option, but, while your mileage may vary, in my experience it doesn't work as well.

The build depends on the package hscurses, which in turn requires curses dev files. In Ubuntu/Debian, for example, these can be gotten by installing libncurses5-dev. You probably also need libncursesw5-dev.


The hmp3 executable is called with arguments containing a list of mp3 files or directories of mp3 files. With no arguments, it will use the playlist from the last time it was run, which is stored in ~/.hmp3db.

$ hmp3 ~/Music ~/Downloads/La-La.mp3
$ hmp3

Once running, hmp3 is controlled by fairly intuitive key commands. h shows a help menu, and q quits.

A color scheme can be specified by writing out a Config { .. } value in ~/.hmp3. See Style.hs for the definition. The l command reloads this configuration.

Original authorship list


    Don Stewart, Tue Jan 15 15:16:55 PST 2008

    Samuel Bronson
    Stefan Wehr
    Tomasz Zielonka
    David Himmelstrup