Oct 6, 2026
I built a free music streaming app — and I still can't believe it works
I made openmusic. A music streaming app that is totally free and plays almost any song on the internet. Type it, it plays. Lock your phone, it keeps playing. No account, no subscription, no tab-hopping.
I still can't believe it works.
How it works
One search box. Eight music catalogs: NetEase, QQ, Kuwo, JOOX, 5sing, Jamendo, Audius, and YouTube Music. One search hits all of them at once, duplicates get merged, and the best-quality copy wins. If a source goes down, it quietly tries another one. The next song is already loading before the current one ends.
Synced lyrics scroll as the song plays — wrong lyrics, you pick others; off by a beat, you nudge them. Songs and whole albums download for offline, tagged with cover and lyrics. There is a sleep timer with a gentle fade-out, comments on every song, and covers voted on by the crowd. It speaks 15 languages, including both 繁體中文 and 简体中文, and the two are interconvertible with one tap.
It is a SvelteKit app that runs in the browser at openmusic.lol, plus an Android APK you can download straight from the site. One <audio> element does all the playing.
The numbers
The repo has 1,073 commits in 12 weeks — and 870 of them landed in 27 days, from September 10th to today. The peak was September 26th: 131 commits in a single day. The test suite sits at 4,020 passing, zero failing. It started as a fork in June. On October 6th I detached it — it is its own repo now, Apache 2.0, mine from the ground up.
Most of the commits were built the same way I build everything lately: I describe what I want, Claude builds, I test, we iterate. The judgment on what matters stayed mine. The hands did the typing.
What I learned
Free beats fancy. Nobody wants another login screen, another plan picker, another trial expiring. People want the song to play when they tap it. That bar is lower than the industry pretends and higher than most free apps reach.
Resilience is a feature. Every source dies eventually — APIs change, quotas vanish, regions block. Instead of one fragile pipeline, openmusic has eight. A source goes down and the app just... tries another. Users never notice.
Build the thing you want to use. I built openmusic because I wanted to hear any song without paying for three subscriptions and still not finding it. Turns out I am not the only one who wanted that.
openmusic is open source under Apache 2.0. It costs nothing to run and nothing to listen. I build things I use, and everyone to use — this is the most literal version of that yet.