🎵 Plays & manages your music library.
Looks beautiful & juicy.
Design & Motion
Fluid animations & beautiful design, everywhere you navigate.
Experience the consistent Material Design.
Integrated With OS
Closely paired to work together. Windows & Linux.
Pitch & Pace Perfected
Tune the speed & pitch right.
Boost the volume!
More audio customization options arriving in future.
Discord Rich Presence
Show your music to your friends.
Complete with artwork & "Listen" buttons.
Fast, Efficient & Small
Indexes more than 30 songs per second.
Caches metadata permanently for future.
That's blazingly fast. 🔥
Harmonoid is available for Windows, Linux & Android.
macOS support, if I can afford it.
Playback & tagging of media is powered by mpv's C API.
Plays just about anything that's thrown at it.
Make your ever staying mixes & playlists.
It's your music. Find it quicker.
A search bar right there, all the time.
Results arranged in a more welcoming way.
Grab your mic.
It'll find lyrics or give your own .LRC files.
Sort, Search & Order
That's a necessity.
They're everywhere to get you quick. Wherever you wanna be.
Your local music at your fingertips.
Keep It Organized
Edit the details & arrange your music library right.
Raw Metadata Reader
Additional metadata reader to read tags of any file, URL or song in your library.
Apparently consuming under or around 100 MB of RAM.
Online URL or YouTube
It's not just your local music.
Play any URL, radio stream or any other media.
Play from the YouTube directly.
- Music library management based on metadata tags.
- Capable of indexing 30+ files/second & saves cache for future app start-ups.
- Very strictly follows Material Design guidelines for UI & animations.
- mpv based music playback for strong format support using dart:ffi.
- Taskbar & System Media Transport Controls for Windows.
- D-Bus MPRIS controls for Linux.
- Small installer (≈ 25 MB) & low RAM usage (≈ 150 MB).
- Time synced lyrics for all your music.
- Ability to create persistent or "Now playing" playlists.
- Context menu integrations & file associations (exclusive to setup version).
- Discord RPC integration with album art support & "Find"/"Listen" buttons.
- Portable (if you wish).
- Pitch shifting.
- Volume boost.
- Speed adjustment.
- Details editor.
- Cross-platform (currently aiming Windows, Linux & Android).
- Does not use electron.js.
- Music visuals.
- Metadata reader.
- Gapless playback.
- Multiple artist support.
- Online URLs player.
- .LRC file compatibility (mannual loading or automatic lookup in folder).
- Fallback cover support. e.g. cover.jpg, Folder.jpg etc.
- User specific libmpv flags & options.
- Window position & maximize state remembering.
- Excellent backward compatibility. Windows 7 or higher. Android 5.0 or higher.
- Built-in YouTube Music client.
May be found at: What's next for Harmonoid? & Release Goals.
Support The Project
You can support Harmonoid's development in following ways.1. Monetary Donation
By this, you can keeping me motivated, the Harmonoid's development alive & this website running on this domain.
GitHub is where development of the project actually takes place. The amount of stars that a project receives from people, is correlated to the popularity/usability of it.
If you're enjoying Harmonoid or wanna support it's growth, consider starring the repository. It's free!
Bug Reports & Feature Requests
Third Party Credits
Harmonoid is (for the most part) written in Dart programming language using Flutter SDK. Refrences to all the other external "plugins" & "packages" used at the time of building application can be found here.
Harmonoid uses libmpv from mpv for media playback capabilities on desktop. The compilation procedure & other information can be found here. The application bundles a minimal & LGPL-compilant version of mpv shared library (mpv-2.dll) on Microsoft Windows. Users are free to update or change the libmpv version by replacing the mpv-2.dll shared library present in Harmonoid's working directory.
The artists who worked on these gorgeous pixel-arts which are bundled within the application. I just googled "pixel arts" & fetched these beautiful GIFs. If you worked on any of the images or know the person who did, please mail me at email@example.com. I will give you proper credit whenever the image is shown inside the application. Thanks a lot!
Harmonoid also depends upon some of the awesome packages available on pub.dev. A complete list of those can be found here.
Things I Want To Say
A section on this page, explaining project's known issues/limitations is important.
Harmonoid's beautiful, fluid & engaging user-interface is made possible with Flutter.
I use Harmonoid daily for listening to music & I'm also looking forward to the improvements that I can make.
There is a common codebase for all the platforms that Harmonoid supports. This means & does not mean:
- Same core logic is used across all the platforms e.g. sorting, ordering, refreshing, indexing of music & management of other settings.
- Common UI is used across all desktop platforms (only Windows & GNU/Linux presently).
- Common UI is used across all mobile platforms (only Android presently).
- The UI between desktop & mobile is not shared (for the most part). This is mainly because adaptiveness is important. Certain key things like touch friendliness, keyboard-mouse preference, context menus, default screen orientation etc. make a big difference.
- The functionalities which have something to do with the hardware or the host operating system vary across platforms e.g. audio playback, metadata reading, system notifications, MPRIS, System Media Transport Controls etc.
Harmonoid adapts greatly with platform & it's a project where I have written a lot of code, around ~70K lines. Flutter is just used for the UI. Internally, I have written decent amount of C/C++ for Windows, GNU/Linux & Java/Kotlin for Android as well, this is because audio playback, notifications, tag parsing, MPRIS, System Media Transport Controls, window styling etc. are highly dependent on the core operating system. To leverage the actual functionality, I have some quality packages:
- media_kit : A complete video & audio library for Flutter & Dart.
- media_library : A powerful media library indexer. Indexes & updates media from multiple selected directories into artists, albums, tracks & genres based on metadata tags. Complete with sorting, deletion, ordering & playlists support.
- mpris_service : A Dart library to integrate Media Player Remote Interfacing Specification (MPRIS). Gives Harmonoid native OS media controls on GNU/Linux.
- smtc-win32 : System Media Transport Controls for Dart & Flutter. Gives Harmonoid native OS media controls on Windows.
A lot of time has went into making this project possible due to early-adoption of Flutter & nearly everything has been written from ground-up (from low-level C/C++ modules to UI & business-logic in Flutter/Dart). I made most of the modules which are used in Harmonoid to leverage any kind of native platform specific functionality.
Presently, GNU/Linux version seems to consume far more memory than Windows version, which grows rapidly when the app is indexing music folders (same doesn't happen on Windows). And, I have spent over a week trying to find any instance of memory leak. I want to make sure both app versions work equally well. Flutter has recently received a lot of quality pull-requests related to performance on macOS & Windows from employees of non-Google companies, because mostall well-funded companies which are using Flutter in their products are only targetting macOS & Windows. I'm in no way against it. Adoption of Flutter by large-scale projects & companies which can contribute back to it's improvement is a good thing. Eventually, Harmonoid should be able to catch-up on GNU/Linux. With that being said, it is still not that bad.
Harmonoid is meant to be modern & these animations or pixel-by-pixel painted elements will definitely have some expense on your CPU & GPU. It's not going to consume as less memory as imgui, WxWidgets or vanilla Qt, but definitely NOT even close to what electron.js consumes (which most cross-platform apps tend to use). With that being said, performance is going to be improved overtime. Flutter is really new to desktop & a lot of performance improvements/patches are being made with time.
In general, my experience with open-source hasn't been very good.
- I mainly maintain packages/libraries which other projects or people use. I have written a lot of code in those libraries/packages on my GitHub profile, provided free support & bug-fixes aswell to thousands of people. Many of the libraries/packages which I made, are now downloaded for thousands/millions of times. It is correct that open-source should be seen as a way to "give back" & I also learnt a lot about programming while doing this.
- But, I cannot afford this anymore now. Nothing has been rewarding. I could've spent this literal years of time working on some client projects & saved a lot of money.
- This is the only "end-user" application that I work on. I have spent literal days working on it, perfecting it to how I want it & matching my requirements (still doing it). But, it just breaks my heart to see some people just taking my code & pushing it to their repositories after deleting the commit-history. Presenting this as their work. Some people are also distributing my software without any permission, I have no control over the updates etc. on their pages (really builds a false reputation about the project). Others just steal my hard-work & use it in their own projects & I can't bear it now.
- Now that, the application has been RE-WRITTEN completely with my actual vision of design & usage (not some random dudes posting their requests or complaining about design). People have different taste, I like Material Design a lot. Harmonoid uses some crucial native modules a.k.a. "plugins" which I made. These are private to me & the supporters of the project. I have no fear in sharing the source code of these native modules with the supporters, because I'm not doing anything sketchy inside the codebase at all. Let the people who appreciate the hard-work have it.
- As a result, Harmonoid is now distributed under a EULA. By this, I have a better ownership over the work that I've done & I can be sure about the project updates/patches.
- Again, this is my current decision for this project. I may change my mind in the future.
- Regardless, users are free to use Harmonoid the way they like & will never be affected.
The music player you're currently comparing Harmonoid with is likely in development for atleast 10 ~ 20 years
Harmonoid is about 2 years old.
This modern & properly animated UI takes effort.
Appreciate the current state
Do constructive criticism
Help the project
Tell your ideas & shape the project.
Make it your own.