LMS
Self-hosted music streaming tool that accesses your music using a web interface.
Self-hosted music streaming, honestly reviewed. Built for people who care about tags, not subscriptions.
TL;DR
- What it is: LMS (Lightweight Music Server) is a self-hosted music streaming application written in C++ — GPL-3.0 licensed, tag-obsessed, and built around the Subsonic API [README].
- Who it’s for: Music collectors with well-tagged libraries who want remote access without Plex’s surveillance capitalism or Navidrome’s feature ceiling. Particularly strong for classical music listeners and anyone who cares about MusicBrainz metadata [README].
- Cost savings: Plex Pass costs $4.99/month or $119.99 lifetime; Emby Premier runs ~$3.99/month. LMS is $0 in license fees and runs on minimal hardware — a Raspberry Pi 4 handles a small-to-medium library fine.
- Key strength: Tag handling that goes deeper than any competitor at this price point — multiple artists per track, multiple album artists, MusicBrainz IDs, release groups, artist roles (composer, conductor, lyricist, remixer) — all modeled as first-class data [README].
- Key weakness: 1,567 GitHub stars, one maintainer, no mobile apps, no transcoding profiles UI, and setup requires more Linux comfort than deploying Navidrome. If you want a polished consumer experience, look elsewhere [README][GitHub].
What is LMS
LMS — Lightweight Music Server — is a self-hosted music streaming server written in C++ by a single developer (epoupon). You point it at your music library, it scans and indexes everything, and you get a web interface to browse and play from anywhere. Any Subsonic-compatible client (DSub, Symfonium, Ultrasonic, Clementine) works because LMS implements the OpenSubsonic API [README].
The “lightweight” in the name is not marketing. This is genuinely a lean binary with no Electron, no Node runtime, no Python interpreter — just a compiled C++ daemon serving a web UI and an API. That’s unusual in the self-hosted space, where everything seems to be a Docker container running four processes and needing 1GB of RAM before you’ve played a single track.
What makes it distinctive isn’t the streaming — that’s table stakes. It’s the metadata model. LMS was built by someone who clearly maintains a large, meticulously tagged library and got frustrated that most music servers flatten everything. It natively understands:
- Multiple artists per track (stored separately, not concatenated into one string)
- Artist roles: composer, conductor, lyricist, mixer, performer, producer, remixer — each separately queryable
- Release types per the MusicBrainz schema: album, single, EP, compilation, live performance
- Release groups for tracking remasters, reissues, and different editions of the same album
- MusicBrainz Artist and Release IDs to disambiguate artists with identical names
For classical music listeners, this is the difference between “Beethoven, Symphonies 5 & 7 / Karajan” showing up correctly attributed to both Beethoven (composer) and Karajan (conductor) versus getting mashed into a single “artist” field [README].
The project has a live demo at http://lms-demo.poupon.dev — administration settings are disabled, but you can browse and play to get a feel for the interface before committing to an install.
Why people choose it
The self-hosted music server market is genuinely crowded: Plex, Jellyfin (audio), Navidrome, Airsonic-Advanced, Funkwhale, Ampache, Beets + Navidrome combos. LMS doesn’t dominate any of those comparisons on raw feature count. It wins on a specific combination of properties that the alternatives don’t offer together.
Versus Navidrome. Navidrome is the default recommendation in r/selfhosted for good reason — easy Docker deploy, active development, solid mobile client support, sensible UI. But Navidrome’s metadata model is flatter. It handles albumartist tags but doesn’t model multiple album artists natively, doesn’t distinguish composer from performer, and doesn’t support release groups. If your library is rock and pop with standard 2-artist collaborations, you won’t notice the difference. If you have 3,000 classical recordings tagged with per-movement performers, you will.
Versus Plex. Plex Music has gotten worse over the years as the company focused on video and their ad-supported streaming service. The metadata matching frequently fights your own tags, overwriting correct data with incorrect matches from their online database. LMS reads your tags as authoritative and doesn’t phone home to “fix” them [README]. No subscription required, no Plex account, no usage telemetry. GPL-3.0 means you can audit every line.
Versus Jellyfin Audio. Jellyfin’s music support works but feels like an afterthought grafted onto a video server. The web UI for audio is functional but not music-first. LMS is exclusively a music server, so all design decisions serve that use case.
The ListenBrainz integration is a differentiator no mainstream server matches. LMS can scrobble plays to ListenBrainz (the open-source Last.fm alternative) and sync “love” feedback bidirectionally [README]. For users who track their listening history without feeding data to Last.fm’s owners, this is the only self-hosted server that does it natively.
The recommendation engine is worth a mention. LMS includes similarity-based recommendations for artists and albums, and a radio mode that continuously queues tracks similar to what’s playing — without calling an external API [README]. This is all local, based on your own listening and tag data.
Features
Core streaming:
- Web interface with full playback [README]
- Subsonic/OpenSubsonic API — works with all major Subsonic clients [README]
- Audio transcoding for format compatibility and bandwidth reduction [README]
- ReplayGain support for normalized volume across tracks [README]
- Multi-library support (separate scan roots with independent settings) [README]
- Jukebox mode (server-side audio output to attached hardware) [README]
Metadata and organization:
- Multi-valued tags for genre, mood, artists, and custom tags configurable in admin [README]
- Full artist role modeling: composer, conductor, lyricist, mixer, performer, producer, remixer [README]
- Release type classification per MusicBrainz spec [README]
- Release groups to group album editions, remasters, and reissues [README]
- MusicBrainz Identifier support for deduplication by MBID rather than string matching [README]
- Artist information folder support following Kodi’s NFO spec (biography, images, sort names) [README]
- Directory browsing available through the Subsonic API as a fallback [README]
Discovery:
- Tag-based filtering (genre, mood, grouping, language, codec, library) [README]
- Recommendation engine for similar artists and albums [README]
- Radio mode — endless queue fill based on similarity to current tracks [README]
- Full-text search across album, artist, and track names including sort names [README]
- Starred items (albums, artists, tracks) [README]
- Smart browsing: random, starred, most played, recently played, recently added — all filterable by tag [README]
Additional:
- Podcasts support [README]
- Playlists (create, manage, share) [README]
- Lyrics support [README]
- User management with multiple authentication backends [README]
- ListenBrainz scrobbling and bidirectional “love” sync [README]
What it doesn’t have: native mobile apps (you use a Subsonic client), a desktop player, video support, a photo library, or plugin system. It does one thing.
Pricing: SaaS vs self-hosted math
LMS: GPL-3.0, $0 in license fees [README][GitHub].
What you actually pay:
- VPS or home server: $0 (Raspberry Pi you already own) to $5–10/month (entry VPS on Hetzner or Contabo)
- Storage: whatever your music library lives on — LMS doesn’t store files, just indexes them
- Total ongoing cost: $0–10/month
Competing paid options for context:
| Product | License model | Cost |
|---|---|---|
| Plex Pass | One-time or subscription | $4.99/mo or $119.99 lifetime |
| Emby Premier | Subscription | |
| Subsonic | Annual license | $12/year |
| Navidrome | Free, open source | $0 |
| Jellyfin (audio) | Free, open source | $0 |
The direct cost comparison isn’t the main argument for LMS over Navidrome or Jellyfin — those are also free. The argument is capability per unit of resource consumption. If you’re already running a home server or a VPS, LMS adds minimal load. The C++ binary is genuinely small; there’s no JVM, no Node event loop sitting idle consuming RAM.
For someone currently paying for Plex Pass primarily for music: the savings math is straightforward. $120/lifetime Plex Pass versus $0 for LMS running on a $35 Raspberry Pi. The Pi pays for itself against Plex Pass in under 3 months.
Deployment reality check
This is where LMS diverges from the “just run docker-compose up” experience of Navidrome.
LMS is a C++ application. The primary install paths are:
- Debian/Ubuntu packages — the README links to release packages, which is the smoothest path on a Debian-based system
- Build from source — requires a C++ toolchain, cmake, boost, and several other libraries; documented but genuinely technical
- Docker — community-maintained images exist but are not official; check Docker Hub for current options
What you actually need:
- A Linux system (Debian/Ubuntu easiest, others possible)
- 512MB RAM minimum; 1GB comfortable for a library of 50K+ tracks
- Storage for your music (LMS reads it in-place, no transcoding storage needed unless you enable caching)
- A reverse proxy (nginx or Caddy) for HTTPS if you’re exposing it externally
- Systemd or equivalent for running as a service
Configuration: LMS uses an lms.conf file for settings rather than a web-based setup wizard. Admin settings are in the web UI after first run, but the initial config (ports, library paths, auth backend) is file-based. Not unfamiliar territory for anyone who has configured a Linux service before, but worth knowing.
Scanning large libraries: The initial scan of a large library (100K+ tracks) takes time. Tag-based recommendations can slow the UI on weak hardware with very large databases — the README explicitly calls this out and notes you can disable the recommendation engine in admin settings [README].
Authentication backends: LMS supports multiple auth backends (documented in INSTALL.md) including internal user management and external options. This is more flexible than most music servers at this scale.
Realistic time estimate for a technical user: 1–2 hours on a Debian system using packages. For someone building from source on an unfamiliar distro: half a day. If you’ve never touched Linux at all: not the right tool — start with Navidrome.
Pros and Cons
Pros
- GPL-3.0 — actually free software. Not “free as in beer with enterprise features held hostage.” The source is auditable, forkable, and embeddable [README][GitHub].
- Deepest music metadata model in the category. Multi-artist, multi-role, MusicBrainz IDs, release groups — these are not afterthoughts, they’re core to the data model [README].
- Minimal resource footprint. C++ binary, not a Node/Python/JVM stack. Runs comfortably on a Raspberry Pi 4 with a real library.
- Subsonic/OpenSubsonic API. Instant compatibility with a large ecosystem of mobile and desktop clients — DSub, Symfonium, Ultrasonic, Clementine, and dozens more [README].
- ListenBrainz native support. The only self-hosted music server with first-class ListenBrainz scrobbling and love sync [README].
- Recommendation and radio mode, fully local. No external API calls, no data leaving your server [README].
- ReplayGain support. Proper volume normalization handled at the server, not hoping the client does it [README].
- Demo instance available. You can try the interface before installing [README].
Cons
- One-person project, 1,567 stars. Bus factor is 1. The maintainer has been consistent but there’s no company backing this, no team, no funding [GitHub]. Compare to Navidrome (11K+ stars, more active community) or Jellyfin (organization with multiple maintainers).
- No official Docker image. In 2026, most self-hosters expect a docker-compose file. Building from source or hunting for community Docker images adds friction [README — no Docker section].
- No mobile apps. You depend entirely on third-party Subsonic clients. That ecosystem is fine, but it means you’re dependent on apps LMS doesn’t control.
- Setup is more involved than competitors. Config files, dependency management, no setup wizard. Navidrome’s docker-compose is three lines. LMS is not.
- Web UI not optimized for large album art browsing. The interface is functional but clearly built by an engineer, not a designer. If you want a Spotify-lookalike, this isn’t it.
- Podcast support exists but is limited. The README lists it as a feature, but it’s not the primary use case and shouldn’t be evaluated as a podcast manager [README].
- No documented public REST API beyond Subsonic. Programmatic management is limited to the OpenSubsonic spec.
- Recommendation engine performance warning. Large databases on weak hardware will feel sluggish with recommendations enabled — this is explicitly flagged in the documentation [README].
Who should use this / who shouldn’t
Use LMS if:
- You have a large, well-tagged music library and want the metadata model to actually reflect your tags’ detail — multiple artists per track, proper role attribution, MusicBrainz IDs.
- You listen to classical music, jazz, or anything with composer/conductor/performer distinctions that matter to you.
- You’re comfortable with Linux system administration and prefer file-based config over setup wizards.
- You want to escape Plex’s recurring fees and data tracking.
- You want ListenBrainz scrobbling without a plugin or workaround.
- You’re running on constrained hardware (Raspberry Pi, old laptop) and need a server that won’t eat your RAM.
Skip it, try Navidrome instead, if:
- You want a Docker-first setup that works in under 30 minutes with minimal Linux knowledge.
- You have a typical rock/pop library where multi-artist metadata complexity isn’t a factor.
- You want a more active community and faster release cadence.
- You need someone else maintaining the Docker images.
Skip it, stay on Plex if:
- You want a managed update experience and don’t mind the subscription.
- You have mixed media (video, photos, music) and want one interface.
- You want native mobile apps maintained by the server vendor.
Skip it, try Jellyfin if:
- You already have a Jellyfin instance for video and want music in the same UI.
- You want a fully open-source project backed by an organization rather than an individual.
Alternatives worth considering
- Navidrome — the most common Subsonic-compatible server recommendation. Easier setup, Docker-native, good community, slightly shallower metadata model. Active development. Start here if unsure.
- Jellyfin — organization-backed, covers video + music + photos. Music support works but isn’t the focus. Better if you need a unified media server.
- Airsonic-Advanced — Java-based, Subsonic fork, more features than original Airsonic but heavier than LMS.
- Funkwhale — ActivityPub-enabled music server, good for sharing and federation. Different use case (more social), heavier deployment.
- Plex — the obvious incumbent. Easiest onboarding, worst pricing trajectory, most aggressive data collection.
- Beets + Navidrome — if your tagging workflow is the bottleneck, running Beets for library management feeding into Navidrome for streaming is the power-user combo. LMS’s tagging expectations are high; Beets can meet them.
Bottom line
LMS is the right tool for a specific person: someone who maintains a carefully curated music library, cares deeply about metadata accuracy, and runs their own Linux server. The metadata model is genuinely best-in-class for self-hosted music servers — release groups, MusicBrainz IDs, multiple artist roles — and the ListenBrainz integration is unique. The C++ foundation means it runs where other servers can’t.
But it asks something in return. Setup requires real Linux comfort, the project is maintained by one developer, and the web UI is functional rather than beautiful. If those trade-offs are fine — if you’ve been waiting for a Subsonic server that treats your Picard-tagged library with the respect it deserves — LMS delivers. If you want something you can hand to a less technical family member and not get support calls about, start with Navidrome.
Sources
- Christine Quinn, Kotobee Blog — “What Is a Self-Hosted LMS? A Comprehensive Overview” (Nov 21, 2024). https://blog.kotobee.com/self-hosted-lms/
- Software Advice — “Open LMS Software Reviews, Demo & Pricing - 2026”. https://www.softwareadvice.com/lms/open-lms-profile/
- Sona Hoveyan, uteach.io — “Hosted LMS [Types, Differences, Best Solutions’ Reviews]” (Jan 19, 2026). https://uteach.io/articles/hosted-lms
- StylemixThemes Blog — “Self-Hosted LMS: Benefits and Top 5 LMS Solutions” (Aug 9, 2024). https://stylemixthemes.com/wp/tag/self-hosted-lms/
Primary sources:
- GitHub repository and README: https://github.com/epoupon/lms (1,567 stars, GPL-3.0)
- Demo instance: http://lms-demo.poupon.dev
Features
Integrations & APIs
- REST API
Search & Discovery
- Tags / Labels
Media & Files
- Media Transcoding
Replaces
Related Media & Streaming Tools
View all 334 →Immich
95KHigh-performance self-hosted photo and video management — automatic backup, ML-powered search, and a Google Photos-like experience on your own server.
Jellyfin
49KThe volunteer-built media solution that puts you in control of your media. Stream movies, shows, music, and photos to any device from your own server.
PhotoPrism
39KAI-Powered Photos App for the Decentralized Web. Tag and find pictures automatically without getting in your way.
Cobalt
39KSave what you love without ads, tracking, paywalls or other nonsense. Just paste the link and you're ready to rock.
qBittorrent
36KAn open-source software alternative to uTorrent. Feature-rich and runs on all major platforms.
SRS
29KSimple, high efficiency, realtime video server. Supports RTMP, WebRTC, HLS, HTTP-FLV, SRT, MPEG-DASH and GB28181.