self-hosted music client Subsonic + OpenSubsonic the server you already run
Your library.
Your colors.
A music player for the self-hosted library you already have, with no brand color of its own. The only color it ever shows is sampled from the album you are playing. Put a record on, on the right — the page you’re reading takes its color from it. That isn’t a demo of the idea; it’s the app’s own algorithm, running here.
- servers
- Navidrome · Airsonic-Advanced · Gonic · Funkwhale · Ampache · Lyrion/LMS · anything speaking Subsonic or OpenSubsonic
- platforms
- Android and web first · Windows and Linux from the same codebase · iOS not built yet, and the table below says so out loud
- price
- $0 forever · $6.99 client unlock · $49 Solomorph Server
- status
- pre-launch · server field-proven on a 1,941-album library
- A free tier that never expires and never caps your library. It is not a trial.
- One purchase, updates included. No subscription, and no plan to ever have one.
- No account, no telemetry, no ads. Nothing here is sold.
tap a record — the page takes its color from it. the last one is the trick question: a grayscale cover bleeds nothing, so the page stays ink. hover to pause.
measured, not vibes
Every number here is either measured on real hardware or a budget we hold ourselves to.
The label says which. What makes people abandon a music player is not a missing feature — it is battery, stutter, and a gap where a gapless transition was promised. Those are numbers, so they belong in numbers.
about that last row
The one number we most want to publish is the one we do not have.
A gap between two tracks is either there or it is not, so the right test is a tone rather than an opinion: one sine wave split across two files, played end to end, where any gap or click is audible to you and catchable by a build server. Bit-true gapless on every codec we ship is written down as this project’s kill criterion — the one result that would send us back to rewrite the audio engine rather than lower the bar.
We have not run it. The player hands the whole queue to the audio engine as a single source list, which is the arrangement gapless needs, and the comment above that line in our own source says where the platform allows — which is a hedge, and we are not going to launder a hedge into a checkmark on a sales page. When the test runs, the number goes in this table whether we like it or not, and the test album and harness get published so you can check the loudest claim in this category without access to our machines.
seam-tone test not run result published either way
the actual application
Not a mockup. The phone.
Everything above this line could be staged. These can't — every frame below is a real screenshot off a real device, unframed and unedited, with the exact build number and capture notes published alongside it.
Cardinal the accent is sampled, not chosen
Analog Summer colourless art, nothing invented to fill it
Neither frame makes the argument alone — it’s the pair. The same UI, the same code path, two different records.
one queue advance the red drains out, live
EQ +11.0 headroom −11.0, live
The 15-band Loom under a finger — and the truth strip admitting what boosting costs: every dB added to a band comes back out of headroom, in the same frame, in numbers. Bands wear the record’s accent too.
local library first then the open directory
Typing a search hits your own library before it hits anything else — and only says “nothing in your library” and reaches further when that’s actually true. Podcasts were on this site’s not-yet list until this shipped.
This exact clip proves the ordering by accident: “rad” surfaces our own demo library’s Bone China Radio before any podcast result, because that’s what actually happens first — we didn’t stage it to show that.
the full DSP chain, live
FLAC 16/44.1 → EQ → headroom → volume, every stage in the strip. Basic EQ, free tier, captured with no trial running so the frame cannot be confused with the paid Loom.
missing art shown as missing
The Solomorph mark and the words “no art,” full size — never a stand-in cover. Reached through a local file, because every Subsonic server invents a placeholder before the app ever sees a real gap. The cast button is in frame because it is real; casting is server tracks only, and the app says so.
a download, with a face
Three tracks, three different albums, three real covers, real sizes on disk — 32.7 MB, not a placeholder.
48 albums, real art, A–Z rail
The library this whole site is built from. The jump index on the right shipped 18 August — it is not on the not-yet list because it is not a gap.
the crates
Albums, artists and genres as physical bins you riffle through — the most distinctive browse surface in the app, and the one screenshot on this page that looks like nothing else in the category.
what a new install actually shows
The real first-run screen, off a freshly cleared install — the FREE badge, local files padlocked, one honest line about what free covers. (Light theme only — this screen exists once per install.)
where it runs
We do not list a platform we have not built.
This table is the whole answer, and the noes are the reason to trust the yeses.
| Android | building for 1.0 | the launch build. Play Store. |
| Web | works today | served by the server. no install, no store. |
| Windows | in build | same codebase, but the packaged build lags the phone one — do not expect parity yet |
| Linux | in build | same as Windows, and the same caveat |
| iOS | not built | the target is scaffolded in the tree now, but a build needs a Mac it has not met. Intent is not a platform — this row changes when a build exists. |
| macOS | not built | follows iOS |
| Android TV | runs | the app works. the ten-foot layout does not. |
| Android Auto | not built | free when it lands, by doctrine |
| CarPlay | not built | free when it lands, by doctrine |
One Flutter codebase, which is why the desktop and web rows are not a separate product and never will be. iOS is the platform we owe you next. Intent is not a platform, so until there is a build you can install, that row says no — and when it changes, it changes here on the same day.
what it connects to
Your server is on this list or it is not. We are not going to be vague about it.
Solomorph speaks the Subsonic and OpenSubsonic API. If your server speaks it, Solomorph is a client for it. We do not resell Navidrome and we are not locked to it — the free app is meant to be the best client for whatever you already run, whether or not you ever buy anything from us.
| server | status |
|---|---|
| Navidrome | tested daily · the dev library, 1,941 albums |
| Solomorph Server | our own engine · the $49 tier |
| Airsonic-Advanced | speaks the API · not tested by us yet |
| Gonic | speaks the API · not tested by us yet |
| Funkwhale | speaks the API · not tested by us yet |
| Ampache | speaks the API · not tested by us yet |
| Lyrion / LMS | speaks the API · not tested by us yet |
| Supysonic | speaks the API · not tested by us yet |
“Not tested by us yet” means exactly that. It should work. We will not tell you it does until we have run it.
PLEX, JELLYFIN AND EMBY ARE NOT SUPPORTED.
They do not speak Subsonic. Supporting them is real work and it is on the v2 list, not in this build. If you run Plex today, Solomorph will not see your library. We would rather tell you here than take $6.99 and let you find out.
Running something on this list? Tell us what worked and what broke — [email protected]. A row that is wrong for your setup gets corrected in the next build-log entry.
the constitution
Three rules we cannot quietly walk back later.
Every player in this category is configurable, and configurability is the thing people actually complain about. The most capable one ships a documentation site large enough that its author added a chatbot to help you read it, and runs a forum where “new and overwhelmed by all the options” is a recurring post. That is not a flaw in his craft — infinite configurability is his product, and people who want it should buy it from him. These three rules are the opposite bet: fewer decisions, made once, in public, so nobody can renegotiate them later. Including us.
No brand color. Ever.
The only color the app shows is sampled from the record that is playing — not as a theme option among many, but as the only source of color that exists in the product. There is nothing to pick, no palette to build, and no evening spent making a music player look the way you want. Put on a black-and-white cover and the app stays in ink: no fallback purple, no default blue, because there is no brand hue here to fall back to.
Machine truth in monospace.
Codec, bitrate, sample rate, duration — anything a machine measured is set in mono, with tabular figures so the numbers never jitter. If a human named it, it is sans. The two voices never blur.
→ both voices are one type family, so the rule is in the type and not just in this paragraph.
It never launders a lie.
A machine-translated lyric is labelled machine translation, in the mono voice, inline. Missing art shows that it is missing, not a stand-in cover. Storage is “could hold your music,” a server is “music server found.” Cleanliness never buys a lie.
→ the hardest version of this rule is the “not yet” list below, published on the page where we ask for money.
setup
Server address. Your name. Your password. Music.
There is no theme to configure, because there is no theme. No settings tree to search, no icon whose meaning you learn by pressing it to see what happens, and no page-by-page layout to tune. If a feature needs a manual, it ships later or it does not ship.
On your own network the app can go and find the server for you — one tap, private address ranges only, and only when you ask. It tells you what it actually found, too: a machine answering on port 445 is “could hold your music,” not “we found your music.” Only something that answers a Subsonic ping gets called a music server. The honesty rules apply to setup the same way they apply to bitrates.
find my music shipping web via the container, native on Android/desktop
library health
The mess is the file’s fault. The agent fixes the file.
Missing covers, split releases, [Unknown Artist] — most players paper over bad metadata with a fake cover and move on. Solomorph shows you the truth instead, and the server’s tagging agent is being built to repair the source itself. A fix that only exists in the UI is not a fix; it has to land in your files.
what it does about bad metadata
- shipping missing embedded cover art shows the honest no art tile — never a stand-in
- shipping [Unknown Artist] is displayed as-is, exactly as your tags have it
- shipping a watermark baked into a lyric file is surfaced as an exhibit, not silently shown as truth
- in build writing corrected artist and album tags back to the source files
- next one album split into nine partial releases, reconciled against MusicBrainz
The tagging agent ships with the server at launch. Library Health — fingerprinting, fake-lossless and CRC audit — is the R1 rung above, and is not built yet.
offline
A download is real bytes on disk. Nothing else gets to call itself one.
Every player will eventually show you a green check beside a file that is half there. So we wrote down what ours refuses to do, before there was anyone to hold us to it.
The bytes are the same bytes, too. We ask for the stream with no transcode, so the codec on the truth strip at thirty thousand feet is the exact codec you would have streamed at home.
offline downloads shipping Solomorph+ 30-day trial, no card
These are not preferences. They are invariants in the download manager, which is why a track that vanished from your phone reports itself gone instead of playing silence.
every capability on this site carries one of these
Five words, used precisely.
- shipping
- it is in a build you can install today
- in build
- the code exists and runs on our hardware. it has not shipped to you.
- next
- named and committed. it appears in the build log the day it lands.
- not yet
- a real gap. no date. we would rather say it than let you find out.
- never
- a deliberate decision, and the reason is written down.
not yet
The other list.
Every player’s site tells you what it has. This is the rest of it. You would find out in ten minutes anyway — better here, before you have paid, than after.
CarPlay · Android Auto
not yet
Not built, not written. When they land they are free, on every tier. Charging for the car is the most-hated move in this category and we are not making it.
folder-tree browse
not yet
If you organise by directory and distrust tags, we do not have the view you want. It belongs on the free tier and that is where it will land. Use a free client until then.
Plex · Jellyfin · Emby
not yet
Different protocols, real work. On the v2 list, not in this build.
all-tracks view
not yet
Every rival has a flat, ungrouped track list. We don’t yet — today the library axes are artist, album, genre and playlist. A-Z jump scroll shipped alongside genre browse in the 0.10 line; this is what’s left of that basics list.
direct Last.fm / ListenBrainz scrobbling · smart playlists · internet radio
not yet
Wanted, and ranked in public in the v2 ledger. Direct scrobbling needs a Last.fm key and a ListenBrainz token, which is why it is not a weekend job. In this community scrobbling reads as an identity rather than a feature, so its absence is a real cost and not a shrug. (Play counts already reach your server today — that is a different thing from posting to Last.fm yourself, and this row is about the second one.)
indexing SMB, WebDAV or cloud drives from the phone
never
A decision, not a backlog item. Scanning network shares from the phone makes the phone the server: your library, play counts and ratings end up on one device, get rebuilt from scratch on the next one, and no two devices in a household ever agree. Someone else does this and does it well. Our answer to “I don’t want to run Docker” is a server that is genuinely easy to run, not a phone pretending to be one.
households
A music library is a household. Almost nothing is sold to one.
Store licences follow an account. That is fine until there are four people in the house, two of them are on the other store, and the app store offers no way to share a purchase between family members. Nobody can fix that from inside a store — it is a rule of the channel, not a failure of the developers stuck inside it.
So we sell the paid layer somewhere else.
So the unlock is designed to be carried by the server rather than by an account: buy the Solomorph Server once, and every client on the house’s network unlocks — your phone, your partner’s phone, the tablet in the kitchen, the browser on the desk. No codes, no seats, no restoring someone else’s purchase on your own device.
Where that stands today, precisely: the browser client the server itself serves already runs unlocked. Carrying that entitlement out to the installed Android and desktop apps is built for Server v1 and is not finished — until it is, a phone still needs its own $6.99 unlock. We would rather say that here than let a $49 buyer discover it on their own phone.
The arithmetic, in the open, because we would rather you check it than trust us:
| one person, one platform | $6.99 | and all of that person’s own devices |
| two people, two platforms | $13.98 | bought twice, still one person each |
| three people, two platforms | $20.97 | and nobody’s plays or playlists are shared |
| the whole house, both stores | $49 | and the server and the tagging agent come with it |
We are not hiding the funnel. That is the funnel. If you only ever use one phone, the $6.99 unlock is the right purchase and we will say so. A household is the natural unit of a music library, and selling it any other way means arguing with families about seats. We would rather sell the box once and be done.
household users shipping, deployed and field-proven on the server server-carried unlock `next`, with Server v1
pricing
One-time. No subscription. Whole household.
Plex’s lifetime pass went $120 to $250 to $749.99 in fifteen months, and now sells a five-year plan instead. One purchase should mean one purchase. These are our prices, published — including the ones that go up, and exactly when.
Free
$0 forever · not a trial
The whole player. No song cap, no library cap, no trial clock. Point it at any Subsonic or OpenSubsonic server and listen.
Get notifiedClient unlock
$6.99 one-time · per store
Power features against the server you already run. For people staying self-managed who are never going to install ours.
Get notifiedSolomorph Server
$49 one-time · Founders rung
The server, the tagging agent, and household entitlement — one purchase covers every person in the house, on every platform, forever. No subscription, and no plan to ever have one.
This is rung R0. The price goes up on a published schedule — the whole ladder is below, and your entry price is yours permanently.
Get notifiedthe founders ladder
The price goes up. Here is exactly when, and it is never retroactive.
One track, four rungs. The price advances a rung when a named capability actually ships in a public build, or when a licence count is crossed — whichever happens first. Nobody has ever paid more than the price on the day they bought, and nobody ever will.
| rung | price | advances when this ships | or licences sold |
|---|---|---|---|
| R0 Founders — now | $49 | launch: server + tagging agent + household entitlement | — |
| R1 next | $59 | Library Health ships (fingerprint / fake-lossless / CRC audit) | 500 licenses |
| R2 later | $69 | offline caption packs + AutoEq/MusicBrainz pipeline ship | 1,500 licenses |
| R3 v1 ceiling | $79 | control plane (Home Assistant / openClaw / WLED) + continuity handoff ship | 4,000 licenses |
Beyond R3, v2 is a separate product with a discounted upgrade for existing owners — not a rug-pull on this one. Every rung change is announced 14 days ahead in the build log.
before you pay anyone anything
Twelve questions, answered the way we would answer them in email.
Does it work with my server?
If it speaks Subsonic or OpenSubsonic, yes — Navidrome, Airsonic-Advanced, Gonic, Funkwhale, Ampache, Lyrion/LMS, Supysonic. Plex, Jellyfin and Emby are not yet. The table further up this page has honest “no” cells in it.
Do I need the Solomorph Server to use the app?
No. The free app is a complete client for whatever you already run. The Server is a separate product for people who would rather stop maintaining the one they have, and it is optional forever.
Is the free tier crippled?
It is feature-gated, never content-gated. No song cap, no library cap, no trial clock, no expiry — metering your own music back to you on your own NAS is not a business we want to be in. Playback, search, queue, playlists you can genuinely edit, hearts, ratings, sleep timer, synced captions and the truth strip are free and stay free against one server. The basic equalizer is free too. What costs money is the power layer: offline downloads, the advanced EQ (the full preset library, headphone-correction database, share codes, automation), local files on the phone as a managed source, casting a server track to a device on your own network, and merging more than one server into a single library. Casting is server tracks only for now — a local file on your phone has nowhere on the receiving end to be fetched from, and the app says so rather than pretending to send it.
Other clients are free and well reviewed. Why would I pay you?
For a lot of people you should not, and that is a real answer. Feishin, Finamp and Jellify are good apps, they are free, and some of them give away offline downloads — which we charge for. If a free client already does what you need then paying anyone, us included, is the worse deal. Run our free tier against your server for a year and find out whether it earns anything. What money buys is offline, the advanced EQ layer, local files as a managed source, one merged library across servers, and at $49 a household purchase plus a server that repairs your files instead of decorating around them.
Will there ever be a subscription?
No. Not a small one, not a cloud tier, not later. One purchase, updates included, for all of v1.x. If v2 ever needs funding the honest move is a discounted paid upgrade — the Ableton and JetBrains model — announced long before it happens.
Can my whole household use one purchase?
Yes, and it is the reason the Server tier exists. A licensed Solomorph Server unlocks the paid layer on every client on the house’s network — no second purchase, no codes, no restoring someone else’s purchase on your own device. Two platforms of client unlocks already puts you most of the way to the server price.
Can I try the paid features first?
Thirty days, no card, no store round-trip. You start it yourself by tapping a locked door, so leaving the app alone for two weeks does not burn it. When it ends nothing is destroyed — downloads stay on disk, EQ curves stay saved, the door just relocks. Buying later reopens everything exactly where you left it, and you land back on a permanent free app rather than a locked screen.
Does it phone home?
No account with us, no telemetry, no analytics SDK, no crash reporter, no advertising ID, nothing sold. Credentials go in your OS keychain, not a config file. Discovery broadcasts on your own LAN and that traffic never leaves your network. It makes exactly two calls to the outside world, both in your service and neither about you: LRCLIB, for synced lyrics your server does not have, and — only when you search for a headphone correction in the EQ — the public AutoEq database, fetched once and cached so your chosen curve works offline forever. The tagging agent exists partly to make even the first call unnecessary.
What happens to what I paid for if you disappear?
The honest part first: abandonment is the default outcome in this niche — Tempo went quiet in 2024, Subtracks in 2022, iSub in 2021. So here is mechanism rather than character. The client unlock is a normal store purchase and restores like one, without us. The Server runs entirely on your hardware, has no account system, and never asks our permission for you to press play. Solomorph speaks OpenSubsonic, a published open protocol, so if we end tomorrow a dozen other clients still work against your library untouched. And the agent writes standard tags and plain .lrc sidecars into your own files, so whatever it repaired stays repaired in a format every tool already understands — including the ones you would replace us with.
Can I buy without an app store?
The Server is sold directly by us through Stripe — no store account, no store cut, and it works fine on a de-Googled phone. The $6.99 client unlock rides store billing, because that is where impulse purchases live.
Can I get a refund?
The $49 Server refunds through us, thirty days, no questions and no form — mail us from the address you paid with and say the word. The $6.99 unlock goes through the store on the store’s terms, and we will tell you honestly if you are outside their window. If it will not scan your library we would rather have the bug report than the money.
iPhone? Desktop? And how often do you ship?
Android and web first, Windows and Linux from the same codebase, no iOS yet — the platform table above is the honest version and it changes there first. Cadence is monthly once it launches, and the build log is dated and public. If a month passes with no entry, something is wrong here and you should keep your money.
Something not answered here? [email protected] reaches the person who builds it, and the answer usually turns into another row on this page.
the build log
Nothing has shipped yet. Here is the work anyway.
Dated, never backdated, and the quiet months would show. Once it launches Solomorph ships monthly — a promise you can audit on this page rather than take on faith.
2026-08-15
the Loom
The EQ rebuilt to its fullest, as a recorded freeze override: the public AutoEq database searchable in-app, corrections cached offline, anti-clip headroom done for you, an opt-in Tasker surface. Genre browse landed the same week.
2026-08-14
positioning
Two of our own positioning claims turned out to be wrong under scrutiny and were retired rather than shipped. Written down here rather than quietly deleted.
2026-07-30
decision
A one-shot 30-day trial of the paid layer — opt-in, no card. Anything downloaded or configured during it survives the trial ending, as a code invariant rather than a preference.