🎵 Plays & manages your music library.
Looks beautiful & juicy.
Design & Motion
Perfect sense of animation & design. Everywhere you navigate.
Experience the consistent Material Design.
Keep It Organized
Edit the details & arrange your music library right.
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.
They're everywhere to get you quick. Wherever you wanna be.
Harmonoid ❤️ Linux.
Harmonoid isn't just only for Windows.
macOS support, if I can afford it.
And for Android too!
Make your ever staying mixes & playlists.
Grab your mic
It'll find lyrics or give your own .LRC files.
Sort, Search & Order
That's a necessity.
Fast, Efficient & Small
Indexes more than 50 songs per second.
Caches metadata permanently for future.
That's blazingly fast. 🔥
Discord Rich Presence
Show your music to your friends.
Complete with artwork & "Listen" buttons.
Raw Metadata Reader
Additional metadata reader to read tags of any file, URL or song in your library.
Playback & tagging of media is powered by mpv's C API.
Plays just about anything that's thrown at it.
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.
It's your music. Find it quicker.
A search bar right there, all the time.
Results arranged in a more welcoming way.
- Music library management based on metadata tags.
- Capable of indexing 30+ files/second & saves cache for future app start-ups.
- Hyperlinks. Albums & artists are properly hyperlinked together, so that everything is one click away.
- Very strictly follows Material Design guidelines for UI & animations.
- mpv based music playback for strong format support (on Linux & Windows) using dart:ffi.
- Taskbar & System Media Transport Controls for Windows.
- D-Bus MPRIS controls for Linux.
- Small installer (≈ 35 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).
- Gapless playback.
- Pitch shifting.
- Volume boost.
- Speed adjustment.
- Details editor.
- Cross-platform (currently aiming Windows, Linux & Android).
- Does not use electron.js.
- Music visuals.
- Metadata reader.
- Online URLs player.
- Audio output information e.g. sample rate, channel count, bitrate etc.
- .LRC file compatibility (mannual loading or automatic lookup in folder).
- Fallback cover support. e.g. `cover.jpg`, `Folder.jpg` etc.
- Multiple artist support.
- YouTube Music client.
- Folders view.
- Genre tab.
- Third-party themes support.
- Music sensitive visualizers.
- macOS version (adaptation & dependencies-configuration).
- Mini-window mode.
- Minimization to system tray.
- Last.fm scrobbling.
- Plugin API.
- Windows 11 IExplorerCommand integration.
- Video playback & library management (???)
- Publishing to FlatHub, Microsoft Store & other places.
- Desktop app controller for Android.
- Cross-platform syncing & mutual playlist with friends (once we are mature).
Support The Project
You can support Harmonoid's development by following ways.1. Monetary Donation
By this, you can keeping me motivated, the app'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 firstname.lastname@example.org. 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.
I need to show the app in working state in the screenshots. Thus, screenshots shows few album arts & other music from few artists. Props to them for their awesome music & artworks & being in my music collection. Don't judge my music choice, if you have same music taste, it's awesome!
Things I Want To Say
A section on this page, explaining project's known issues/limitations is important.
I don't really get a chance to express myself in words, just through my code.
Now that I have this website built, I would like to also express how I feel about all this. Thus, this piece of a text is a little long & personal aswell at places.
This beautiful, animated, engaging & vibrant user-interface is made possible by Flutter.
I use Harmonoid daily for listening to music & I'm also looking forward to the improvements that I can make.
We have a common codebase for all the platforms that we support. This means & does not mean:
- Same core logic code is used across all the platforms e.g. sorting, ordering, refreshing, indexing of music & management of other settings inside the app.
- Common user interface code is used across all desktop platforms (only Windows & Linux presently).
- Common user interface code is used across all mobile platforms (only Android presently).
- The user-interface code between desktop & mobile is NOT shared (for the most part). This is because the app needs to be adaptive to the user's device. Certain key things like touch friendliness, keyboard-mouse preference, context menus, default screen orientation or even user-interface itself needs to be according to the device.
- The functionalities which have something to do with the hardware or OS vary between platforms e.g. audio playback, tagging, 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, Linux & Java/Kotlin for Android aswell, 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_engine: Media playback & tagging engine that powers Harmonoid. Based on libmpv. Complete with pitch shifting, volume boost, speed change, playlist management, performant tag-reader & more. Powers Harmonoid on Windows & Linux.
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.
smtc-win32: System Media Transport Controls for Dart & Flutter. Gives Harmonoid native OS media controls on Windows.
mpris_service.dart: A Dart library to integrate Media Player Remote Interfacing Specification (MPRIS). Gives Harmonoid native OS media controls on Linux.
A lot of time has went into making this project possible due to early-adoption of Flutter from Google & nearly everything has been written from ground-up (from low-level C/C++ plugins to UI & business-logic in Flutter/Dart). I made most-of the "plugins" which are used, but since I'm a single person, I could not make a "plugin" for every single functionality that an OS provides e.g. notifications, audio-playback or window-custom-theming etc. Now, slowly a lot of open-source "plugins" are being made by the community & I'm switching to them to improve the quality of the app.
There are some ancient versions of app which are circulating on the internet through some sketchy websites, please DO NOT download or use them. It is recommended to use the latest version of the app & download from a trusted source (which is none other than this website itself). See last statement of this section for more information regarding this.
A fix has been made.
Presently, 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, we should be able to catch-up on Linux too. With that being said, it is still not that bad.
The app is meant to be modern & these animations or pixel-by-pixel painted elements will definitely have some expense on your CPU/RAM. 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. Current version of Harmonoid now uses some curated crucial "plugins" that I made. These are private to me & the supporters of the project. I have no fear in sharing the source code of those "plugins" 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 THE APPLICATION THE WAY THEY LIKE & WILL NEVER BE AFFECTED.
The repository of the project has many-many redundantly made commits.
- This was one of the learning projects that I created when I was just starting to learn Flutter. I had completely different vision for the project in mind back then, where desktop wasn't even a thing (just Android), neither was local-music, tagging or indexing. Never thought, this would somehow gain stars on GitHub.
- I didn't know how to create "plugins", write C/C++ or maintain a large code-base back then. I was likely 17, at that time.
- Long story short, I have completely RE-WRITTEN the entire project from scratch. Those old commits are still present in the repository & have no meaning, but still counting for the total-commit count (didn't force push back-then). Now, my programming skills & knowledge about how things actually work has definitely improved a lot & I go to actual college where I learn how to write code in a better & efficient way (unlike when I was 17).
- Nearly all of the rough edges are gone now & the ones that are left still need mending. Thus, please don't try out those ancient versions of the app (especially Android), which some sketchy websites are distributing. This was important to mention, because I have no control over those pages.
- As a result, there are no documented app-releases before v0.1.8.
The music player you're currently comparing Harmonoid with is likely in development for atleast 5 ~ 20 years
Harmonoid is barely an year 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.