Skip to content
Choose a tag to compare

IMPORTANT NOTE: it was brought to our attention that Windows Defender falsely detects musikcube 0.96.6 binaries as malware. we have no reason to believe this is a real issue, but we recommend users upgrade to 0.96.7 to avoid problems. discussion can be found in the following issue: #436

updated Windows binaries can be found below.

Choose a tag to compare

IMPORTANT NOTE: it was brought to our attention that Windows Defender falsely detects musikcube 0.96.6 binaries as malware. we have no reason to believe this is a real issue, but we recommend users upgrade to 0.96.7 to avoid problems. discussion can be found in the following issue: #436

  • fixed some drawing issues with overlays/dialogs with certain versions of ncurses.
  • added category-level (e.g. album, artist, etc) durations in browse and search views.
  • upgraded the Windows builds to use ffmpeg 4.4, and removed usages of some deprecated APIs in FfmpegDecoder and FfmpegEncoder.
  • fixed high cpu usage bug in musikcube-cmd.exe (Windows builds only)
  • fixed bugs where .wav files with embedded album art would play loud static for a second or two before the correct audio.
  • added the ability to automatically resume playback on startup via new "advanced" setting called ResumePlaybackOnStartup.
  • fixed various minor bugs while browsing by directory.
  • fixed bug where files with "long" filenames on Windows were not properly supported.
  • added de_DE translation (dertuxmalwieder)
  • updated default "change sort order" hotkey to ensure it doesn't conflict with some common terminal emulator defaults in UNIX environments.
  • removed snap support. the default sandboxing rules were causing more problems than it was worth; even though it was possible to work around them, users were still getting confused.
  • added an initial PipeWire output plugin; included by default on Ubuntu 21.04 and Fedora 34
  • fixed some build issues where opting out of bundled TagLib didn't work properly.
  • updated CMake build scripts to fail fast if required libraries are not found.
  • updated error logging to exclude ffmpeg end-of-file warning, it was just polluting things.
  • ongoing warning cleanups against more modern compilers.
Choose a tag to compare

note: this is a macOS only release


  • fixed a bug that would cause pre-compiled versions of macOS builds to crash on startup
Choose a tag to compare


  • added mouse wheel support to non-Windows platforms.
  • fixed some difficult-to-reproduce issues that could corrupt layout.
  • optimized app resize logic so its simpler and more performant.
  • fixed issues with terminal emulators on macOS that support REP (e.g. kitty) by linking against the less buggy, homebrew-provided version of ncurses.
  • upgraded to the most recent version of Android Studio tooling for the musikdroid app.
  • fixed a bug where track numbers would not be correct after loading a session where the last viewed content was a playlist.
  • ongoing warning cleanups against more modern compilers.
Choose a tag to compare
  • fixed a bug that could cause terminal output to get corrupted when switching songs (@the-eater)
  • fixed a bug that was preventing the update check from displaying a dialog on completion.
  • fixed now playing readout ellipsizing.
  • fixed a bug where scrobbles may get posted twice per track.
  • added a hotkey to clear the play queue; press shift+x in the play queue window.
  • fixed HttpClient user agent to distinguish between win32 and win64
Choose a tag to compare


  • additional fixes for older versions of libcurl (< 7.2.0)
  • relaxed client/server version matching to exclude patch version (e.g. versions 0.96.0 and 0.96.1 are considered compatible, but 0.96 and 0.97 are not)
  • upgraded libmicrohttpd to 0.9.71 on macOS and fixed static build
Choose a tag to compare


  • reduced input latency, especially for mouse events.
  • updated zh_CN localization (Siheyuan98)
  • added support for older versions of libcurl (7.2.0 and earlier)
  • added an advanced setting to ignore client/server version mismatches when connecting to remote libraries
  • added the server version to the user facing error that is displayed on remote library version mismatch.
  • added the app version to the bottom of the settings screen.
  • fixed milkdrop plugin build (win32 only)
Choose a tag to compare


  • added support for searching by regex; press M-m in track or filter views to toggle between regex and regular searching. while regex is enabled, the search box will have a blue (instead of red) border.
  • relaxed search to ignore accents. for example: À, Á, Â etc are all considered equivalent to the english A, and vice versa. (note this does not apply to regular expressions)
  • fixed a bug where remote library ports greater than 32767 caused the app to crash.
Choose a tag to compare

this is probably the largest update since the initial public release a couple years ago. there are detailed notes below, but the main take away is that it's now possible to connect to (and stream from) other musikcube (or musikcubed) instances over the network using the terminal client.

full set of changes:

  • added support for remote libraries (i.e connecting to a musikcube app or daemon running on a different machine) to the terminal client:
    • updated nearly all queries against the database in the app to be asynchronous. this was not necessary before because most local DB queries are extremely fast; however, when queries are sent over the network that may not be the case. there are still a small handful of queries made on the UI thread, but all of the really egregious ones have been fixed.
    • added a new ISerializableQuery interface that defines how a query can be serialized and deserialized. all queries now implement this interface.
    • defined a new SendRawQuery method to IMetadataProxy that is used by the server to send serialized queries to musikcore, and then respond with serialized results to the calling client.
    • added WebSocketClient that is used to connect to a musikcube server and authenticate. it takes serialized queries from the client and sends them to the server, then parses responses and unpacks the serialized results.
    • added a new RemoteLibrary implementation of ILibrary. it serializes queries and sends them to the server via WebSocketClient. once complete, WebSocketClient hands the serialized result back to RemoteLibrary, which then deserializes the result into the original query and notifies the caller.
    • added MasterLibrary in the same vein as MasterTransport. it's more a less a pimpl that allows us to switch the selected library under the hood without a majority of the app knowing or caring.
    • revamped the settings screen to allow selecting between local and remote libraries.
    • added a new screen that is displayed when a remote library is disconnected, and shows some diagnostic information.
    • added a new banner on the top of the app when connected to a remote library.
    • added buffering states to Stream/Transport/PlaybackService and friends.
    • updated the transport window to display buffering status when appropriate.
  • fixed a number of bugs in cursespp related to nested layout focusing.
  • fixed buggy visibility change events in cursespp::Window and removed old hacked-up code that was working around the problems in the app layer.
  • fixed a handful of KeyPress() propagation bugs across the app.
  • found and fixed a handful of bugs in HttpDataStream that have been laying dormant, waiting to be exercised.
  • fixed bugs related to LruDiskCache parsing and pruning.
  • fixed potential memory leaks in GmeDataStream and OpenMptDataStream
  • fixed some weird edge-case command bar focus issues.
  • finally renamed src/core to src/musikcore
  • added a ja_JP locale (trackiss)
  • updated ru_RU locale (adem4ik)
  • fixed a bug where on-demand mp3 transcoding wasn't working properly. (other formats were fine)
  • rearranged the settings window to ensure everything fits properly in an 80x24 terminal
  • fixed some bugs in MessageQueue by now requiring explicit IMessageTarget registration and unregistration for all messages. there was a small time window (read: race condition) where it was possible to attempt to dispatch messages to a destroyed target.
  • fixed a handful of components that were running their initial queries twice or more as they were being initialized.
  • updated copyright date across all source files
  • upgraded a number of tools and dependencies:
    • migrated to VS2019 for Windows musikcube builds
    • migrated to Android Studio 4.1 for musikdroid builds
    • upgraded websocketpp and json.hpp and moved them out of src/plugins
      and into src/3rdparty so they can be used by the main app.
    • upgraded to boost 1.74.0
    • upgraded to openssl 1.1.1h
    • upgraded to sqlite 3.33.0
  • fixed a bug in the indexer that could prevent custom sources from getting interrupted correctly.
  • fixed a bug in libmicrothttpd version detection.
  • fixed a bug where switching to a different output device while paused would cause playback to resume.
  • moved all shell scripts to their own subdirectory so they don't pollute the root.
  • fixed an old bug in LocalLibrary that could cause query result callbacks to fire twice.
  • added the ability to limit the number of simultaneous audio transcoders in the server.
  • added support for Ubuntu Groovy
  • various other minor fixes that were exposed by making queries asynchronous by default.