mStream Server is a personal music streaming server designed to enable seamless access to your music collection from any device, anywhere. By running mStream on your home computer, you can stream your locally stored music to smartphones, tablets, or computers with ease.
Key Features:
Access your entire personal music library from any location with an internet connection.
Stream to multiple devices simultaneously, ensuring uninterrupted playback across platforms.
User-friendly interface that simplifies setup and management of your music collection.
Secure and private streaming experience, as your music remains stored locally on your computer.
Audience & Benefit:
Ideal for individuals who want to enjoy their personal music collection without relying on third-party services or external storage solutions. With mStream Server, users can maintain full control over their music while enjoying the convenience of streaming it anywhere they go. The software is installed via winget, ensuring a smooth setup process.
README
mStream Music
The music server that's also a file manager.
Drop a file in your folder, upload one through the web UI, or paste a YouTube link — it plays. No accounts to set up, no scan to wait for.
mStream has some unique features other server's don't have
Filesystem based API
The mStream API is built to reflect your folder structure. This gives is some interesting features:
You are able to browse and play music before the DB is built
You can upload files and create directories
YT-dlp support built in. Save music from youtube to wherever you want in your filesystem
Coming Soon Torrent management
Public mode
You might notice the demo site does not require you to sign in. mStream is publicly accessible by default. This makes it easy to setup and gives you the option to keep it publiccly available if you are just running it locally. Once you add a user, the system becomes password protected.
Multiple installation methods
mStream has three installation methods:
A Docker image managed by linuxserver.io
Executable installers (exe, dmg. appimage) for Win/Mac/Linux
Install from source. Only one dependency (NodeJS)
Supports additional protocols
Subsonic API
DLNA/UPnP
Server Features
Granular write permissions — lockAdmin panic-button plus independent noUpload / noMkdir / noFileModify toggles. Tune live from the admin UI
Auto-DJ with BPM continuity, harmonic mixing, similar-artists, and genre filtering
Subsonic is disabled by default. Enable it via the admin panel's Subsonic page. Two modes are supported:
Mode
Behavior
disabled
Default. The /rest/* Subsonic endpoints aren't mounted. Clients get a 404.
same-port
Subsonic mounts on the main mStream port. One TCP port for everything — simplest for reverse proxies.
separate-port
Subsonic listens on its own port (default 3012). Useful if you want to firewall Subsonic separately, or terminate TLS differently per surface.
Authentication methods
mStream supports three Subsonic auth methods. Pick whichever your client supports:
Method
What the client sends
Setup
Security note
API key (OpenSubsonic extension)
apiKey=
Mint via the mobile-clients panel; opaque token, revocable per-key.
Best. No password ever leaves the client. Scoped, revocable.
Plaintext password (u/p)
u=&p= or p=enc:
Works against your main mStream password OR an opt-in Subsonic-specific password (see below).
Sent in the clear unless you're behind HTTPS.
Token auth (t/s)
u=&t=md5(pw+salt)&s=
Requires an opt-in Subsonic-specific password. See below.
Avoids sending the plaintext over the wire, but requires recoverable server-side storage of the password.
Why a separate Subsonic password?
mStream stores your main account password as a PBKDF2 hash. This is secure, because it's impossible to derive the password from. However this makes it incompatible with Subsonic Token Auth (which is used by many clients). Subsonic Token Auth requires the server to know the plaintext password to verify the client's hash, but mStream stores hashed passwords that cannot be used to derive the plaintext password.
Since mStream security model is fundamentally incompatible with Subsonic Token Auth, the user can create a Subsonic only password that is stored AES-256-GCM encrypted with a server-side secret.
mStream's web UI exposes a panel for managing all Subsonic credentials. The panel only appears when Subsonic is enabled:
From here you can:
Set, change, or clear your Subsonic-specific password
Mint and revoke API keys
See last-used timestamps for each API key
Quick Install from CLI
Deploying an mStream server is simple.
# Install From Git
git clone https://github.com/IrosTheBeggar/mStream.git
cd mStream
# Install dependencies and run
npm run-script wizard
Technical Details
Dependencies: NodeJS v22.5 or greater
Database: SQLite (via node:sqlite) — no external DB server required
Scanner: Pre-built Rust binary (Linux x64/arm/arm64 + musl, macOS x64/arm64, Windows x64); falls back to a pure-JS scanner when no binary matches the host