Spotifast in a Homelab: Keep Remote Administration Separate From Spotify Connect
Spotifast in a Homelab: Keep Remote Administration Separate From Spotify Connect
It's 2:47 AM. Your music workstation stops responding. You reach for the laptop, realize the SSH port isn't forwarded, and make a decision that will haunt the next three months: you forward port 22, add a reverse proxy for "temporary" web access, and suddenly an internal service is reachable from anywhere. By morning, you've added Traefik, convinced yourself HTTPS equals security, and forgotten that encrypted transport doesn't identify authorized users.
For crmne/spotifast, I keep the architecture deliberately smaller. Run the native application on the machine that owns the audio output. Use Tailscale for restricted administration. Treat Spotify Connect discovery as a separate networking concern, not something an HTTPS proxy will magically solve.
The developer pain point is simple: how do you administer a music workstation remotely without exposing unrelated services or breaking expectations about device discovery?
Start With What the Repository Actually Promises
The supplied project description positions Spotifast as a lightweight Rust application supporting library access, local playback, and Spotify Connect across Linux, macOS, and Windows.
That description establishes the intended product boundary, but it is not evidence of a particular database engine, HTTP API, credential-storage mechanism, or discovery implementation. I have not inspected a pinned revision or run cross-platform playback tests, so I would not turn those unknowns into architectural claims.
The useful distinction is between three responsibilities:
Playback belongs to the endpoint. The native application needs the operating system's audio facilities and the user session appropriate to its implementation.
Spotify connectivity belongs to the application's upstream integration. Authentication, account requirements, and supported Connect behavior need verification against the actual release.
Administration belongs to a separate management plane. Shell access does not require publishing the application, its filesystem, or other homelab dashboards.
This separation avoids a common deployment mistake: treating every desktop application as a web service that needs Traefik and a public hostname.
The Failure Mode: Reachability Becomes Exposure
The dangerous sequence starts innocently. A developer cannot reach a machine remotely, opens a router port, and later places several internal services behind the same reverse proxy.
TLS provides encryption, but it does not identify authorized users by itself. An administrative panel exposed through ordinary HTTPS is still public unless an authentication layer, client-certificate requirement, or equivalent authorization boundary protects it.
This is the relevant production incident pattern: an internal panel becomes internet-accessible without mTLS or another effective access control. The architectural root cause is confusing encrypted transport with restricted access.
For a Spotifast workstation, the fix is not another public route. It is a private management path with a narrowly defined destination.
One Working Policy for a Linux Music Host
The following Tailscale policy allows tailnet administrators to reach SSH on machines tagged music-host. Tailscale SSH additionally requires an identity check every hour and permits only non-root operating-system accounts.
It is a complete, restrictive policy for a dedicated tailnet. In an existing tailnet, integrate it carefully: an existing broad allow rule would defeat the intended restriction.
{
"tagOwners": {
"tag:music-host": ["autogroup:admin"]
},
"acls": [
{
"action": "accept",
"src": ["autogroup:admin"],
"dst": ["tag:music-host:22"]
}
],
"ssh": [
{
"action": "check",
"src": ["autogroup:admin"],
"dst": ["tag:music-host"],
"users": ["autogroup:nonroot"],
"checkPeriod": "1h"
}
]
}
Apply the policy through Tailscale's access-control editor. On the Linux playback host, authenticate Tailscale, enable Tailscale SSH with sudo tailscale set --ssh, and advertise the tag with sudo tailscale set --advertise-tags=tag:music-host. An administrator must authorize that tag assignment.
Connect using an existing, unprivileged local username and the host's tailnet address or MagicDNS name. Keep router port forwarding disabled.
This configuration is specifically for Linux administration. Spotifast's advertised macOS and Windows support does not make Tailscale SSH server support identical across those platforms.
Also, tailnet policy does not close an ordinary SSH listener on public or LAN interfaces. Host firewall rules and the machine's actual network exposure remain separate controls.
Why Connect Still Needs Its Own Test
A successful SSH connection proves only that the management path works.
Tailscale provides routed connectivity; it does not automatically extend a home LAN's multicast discovery domain. If the relevant Spotify Connect flow depends on local discovery, placing two devices on the same tailnet will not necessarily make them discover each other.
Test playback and device visibility independently: first on the same LAN, then across the intended remote topology. Check the selected Spotifast release's documented behavior before adding subnet routing or discovery reflectors. Reflectors increase network scope and troubleshooting complexity; they should answer an observed requirement, not a guess.
The Trade-Off Is Deliberate
This design gives up browser-based convenience in exchange for a smaller exposed surface. It also leaves playback attached to a real user endpoint rather than forcing desktop audio into a container.
I would not add Open-WebUI, a model proxy, or Redis to this deployment. They do not solve remote music-host administration and would introduce unrelated credentials, persistence, and upgrade responsibilities.
The architecture is successful when its boundaries are boring: Spotifast handles music, the operating system handles audio, and Tailscale authorizes administration. Discovery problems remain visible as discovery problems instead of becoming excuses to publish internal services.
---
The hardest operational dilemma here isn't technical—it's resisting the incremental creep from "I need SSH access" to "let's add a dashboard" to "everything's behind Traefik now." Each addition feels small. The combined attack surface is not.
How do you draw that line in your homelab? What's the smallest infrastructure change you've made that later turned into the largest operational regret?
1 reaction
@bitcrush_ @paolino i just opened a PR to add these copy features, check it out: spotifast#1133
waiting on the maintainers to approve :D
5 views
@c1sc0v There's nothing we can do about that. spotifast#283
2 likes · 92 views
Spotifast: Spotify, native and fast (8.6k stars)
What it does
All text below is quoted directly from the project README.
>Spotify, native and fast. One lightweight Rust app for your whole library, local playback, and Spotify Connect on Linux, macOS, and Windows.
Your music, on your desktop:
- Library and search: Browse playlists, Liked Songs, albums, artists, and podcasts. Search the catalogue and edit playlists you own.
- Local files: Play the local files your playlists list from a folder you choose in Settings (44.1 kHz files).
- Spotify Connect: Play on this computer or control playback on your other devices, including Google Cast speakers and groups.
- Queue: Add songs to the queue, or choose Play next to put a song or selection first when playing on this computer.
- Themes: Choose light, dark, system appearance, or custom colours, with one theme for light mode and one for dark mode that switch with the system.
- Desktop controls: Use keyboard shortcuts and media keys.
- Winamp mini player: Use classic skins with an equalizer, playlist, and animated sound displays.
- MilkDrop: Watch music-reactive visuals in a separate window or full screen.
>brew install --cask crmne/tap/spotifast
Repository
crmne/fastpotify
Repository stats
|Metric|Value|
|:-|:-|
|Stars|8,585|
|Forks|493|
|Last release|v0.14.1 (2026-10-20)|
|Languages|Rust 97.8%, Python 1.2%, C 0.4%|
|Contributors|114|
|AI contributor accounts (Claude / Codex / Cursor / Copilot)|claude: 12, codex: 1|
|AI co-authored commits|None|
Main contributor
|Field|Value|
|:-|:-|
|Name|Carmine Paolino|
|GitHub|@crmne|
|Commits to this repo|797 (top contributor)|
|Bio|Founder @plenty-hq | Creator of RubyLLM | Organizer @berlinrb | Co-founded @freshflowai|
|Company / Location|Berlin, Germany|
|X / Twitter|@paolino|
|Followers|794|
──────────────────────────────
📌 How many great GitHub repos have you discovered and completely forgotten about?
Don't let another useful tool disappear into your Reddit feed. Get the community's best repos, organized by category, plus key takeaways from real developer discussions, delivered to your inbox twice a week.
📬 Never lose track of great repos again. Subscribe free.
936 points · 62 comments
Spotify is now running natively on a jailbroken PS5 without needing a PSN account.
Spotless brings Spotify sign-in, music playback, and Now Playing controls to the console, with background music working while gaming.
GitHub: abhi245y/spotless
It supports free and Premium accounts, with a restore tool included. Firmware compatibility varies, so check the community reports before trying it.
One more interesting project from the PS5 homebrew scene.
3 likes · 398 views
Spotifast 是一个用 Rust 写的第三方 Spotify 客户端,不带浏览器内核,平时只占 100 到 250 MB 内存,启动不到一秒。
歌单、喜欢的歌曲、专辑、播客都能浏览,自己的歌单也能编辑,还能通过 Spotify Connect 控制家里其他设备播放,Google Cast 音箱也行。
GitHub:crmne/spotifast
我比较喜欢的是 Winamp 迷你播放器模式,能直接套经典的 Winamp 2 皮肤,带均衡器和播放列表,怀旧味一下就出来了。
另外还内置了 MilkDrop 可视化,画面跟着音乐变,可以单独开窗口或者全屏,第一次用会下载 1 万多套预设。
Linux、macOS、Windows 都有安装包。已经开了 Spotify 会员、又嫌官方客户端重的,可以换上试试。
7 likes · 1 repost · 1,643 views
This music player looks INSANE! 🎧🔥
Meet Lokal an open-source music player for Windows, macOS, and Linux, with integrated SpotiFLAC add-on support.
One app, multiple platforms, and plenty of features to explore.
GitHub: sipbuu/lokal
Would you give it a try?
16 likes · 1 repost · 942 views
Spotifast: The lightning-fast native Spotify client built in Rust.
Spotifast is a ridiculously fast, native desktop app for Spotify written in Rust. It uses minimal RAM, has no browser engine, and features a classic Winamp mini player.
Want the repo link? Comment SPOTIFY. I'll send it.
Follow and subscribe for the next one.
crmne/spotifast
#rust #spotify #opensource #Shorts
2 comments · 507 views
Spotifast: a lightweight open-source Spotify desktop alternative
Spotifast is a free, open-source Spotify desktop client for Windows, macOS, and Linux.
Written in Rust uses 100–250 MB of RAM and lets you browse your Spotify library, search for music, manage playlists, and control playback across devices (needs Spotify Premium for music playback). Plus it supports keyboard shortcuts, custom themes, background playback and includes a Winamp-style mini player.
GitHub: crmne/spotifast
69 points · 4 comments
一周Rust热点事件 第23期
phoronix.com
github.com/heng30/prux/tree/main
getartcraft.com
tobi/disktree
silent-rs/Tiangong
dexsper/cinebox
hyprlab/hylki
c9dev/penguin-mail
yuanzhixiang/openphoto
crmne/spotifast
jankeesvw/omarchy-meeting-recorder
alpcanaydin/tusk
aimod-cc/agent2api
kua8/Nectar
lantunnel/lantunnel
63 views
Mentions
Spotifast in a Homelab: Keep Remote Administration Separate From Spotify Connect Spotifast in a Homelab: Keep Remote Administration Separate From Spotify Connect It's 2:47 AM. Your music workstation stops responding. You reach for the laptop, realize the SSH port isn't forwarded, and make a decision that will haunt the next three months: you forward port 22, add a reverse proxy for "temporary" web access, and suddenly an internal service is reachable from anywhere. By morning, you've added Traefik, convinced yourself HTTPS equals security, and forgotten that encrypted transport doesn't identify authorized users. For crmne/spotifast, I keep the architecture deliberately smaller. Run the native application on the machine that owns the audio output. Use Tailscale for restricted administration. Treat Spotify Connect discovery as a separate networking concern, not something an HTTPS proxy will magically solve. The developer pain point is simple: how do you administer a music workstation remotely without exposing unrelated services or breaking expectations about device discovery? Start With What the Repository Actually Promises The supplied project description positions Spotifast as a lightweight Rust application supporting library access, local playback, and Spotify Connect across Linux, macOS, and Windows. That description establishes the intended product boundary, but it is not evidence of a particular database engine, HTTP API, credential-storage mechanism, or discovery implementation. I have not inspected a pinned revision or run cross-platform playback tests, so I would not turn those unknowns into architectural claims. The useful distinction is between three responsibilities: Playback belongs to the endpoint. The native application needs the operating system's audio facilities and the user session appropriate to its implementation. Spotify connectivity belongs to the application's upstream integration. Authentication, account requirements, and supported Connect behavior need verification against the actual release. Administration belongs to a separate management plane. Shell access does not require publishing the application, its filesystem, or other homelab dashboards. This separation avoids a common deployment mistake: treating every desktop application as a web service that needs Traefik and a public hostname. The Failure Mode: Reachability Becomes Exposure The dangerous sequence starts innocently. A developer cannot reach a machine remotely, opens a router port, and later places several internal services behind the same reverse proxy. TLS provides encryption, but it does not identify authorized users by itself. An administrative panel exposed through ordinary HTTPS is still public unless an authentication layer, client-certificate requirement, or equivalent authorization boundary protects it. This is the relevant production incident pattern: an internal panel becomes internet-accessible without mTLS or another effective access control. The architectural root cause is confusing encrypted transport with restricted access. For a Spotifast workstation, the fix is not another public route. It is a private management path with a narrowly defined destination. One Working Policy for a Linux Music Host The following Tailscale policy allows tailnet administrators to reach SSH on machines tagged music-host. Tailscale SSH additionally requires an identity check every hour and permits only non-root operating-system accounts. It is a complete, restrictive policy for a dedicated tailnet. In an existing tailnet, integrate it carefully: an existing broad allow rule would defeat the intended restriction. { "tagOwners": { "tag:music-host": ["autogroup:admin"] }, "acls": [ { "action": "accept", "src": ["autogroup:admin"], "dst": ["tag:music-host:22"] } ], "ssh": [ { "action": "check", "src": ["autogroup:admin"], "dst": ["tag:music-host"], "users": ["autogroup:nonroot"], "checkPeriod": "1h" } ] } Apply the policy through Tailscale's access-control editor. On the Linux playback host, authenticate Tailscale, enable Tailscale SSH with sudo tailscale set --ssh, and advertise the tag with sudo tailscale set --advertise-tags=tag:music-host. An administrator must authorize that tag assignment. Connect using an existing, unprivileged local username and the host's tailnet address or MagicDNS name. Keep router port forwarding disabled. This configuration is specifically for Linux administration. Spotifast's advertised macOS and Windows support does not make Tailscale SSH server support identical across those platforms. Also, tailnet policy does not close an ordinary SSH listener on public or LAN interfaces. Host firewall rules and the machine's actual network exposure remain separate controls. Why Connect Still Needs Its Own Test A successful SSH connection proves only that the management path works. Tailscale provides routed connectivity; it does not automatically extend a home LAN's multicast discovery domain. If the relevant Spotify Connect flow depends on local discovery, placing two devices on the same tailnet will not necessarily make them discover each other. Test playback and device visibility independently: first on the same LAN, then across the intended remote topology. Check the selected Spotifast release's documented behavior before adding subnet routing or discovery reflectors. Reflectors increase network scope and troubleshooting complexity; they should answer an observed requirement, not a guess. The Trade-Off Is Deliberate This design gives up browser-based convenience in exchange for a smaller exposed surface. It also leaves playback attached to a real user endpoint rather than forcing desktop audio into a container. I would not add Open-WebUI, a model proxy, or Redis to this deployment. They do not solve remote music-host administration and would introduce unrelated credentials, persistence, and upgrade responsibilities. The architecture is successful when its boundaries are boring: Spotifast handles music, the operating system handles audio, and Tailscale authorizes administration. Discovery problems remain visible as discovery problems instead of becoming excuses to publish internal services. --- The hardest operational dilemma here isn't technical—it's resisting the incremental creep from "I need SSH access" to "let's add a dashboard" to "everything's behind Traefik now." Each addition feels small. The combined attack surface is not. How do you draw that line in your homelab? What's the smallest infrastructure change you've made that later turned into the largest operational regret?
@bitcrush_ @paolino i just opened a PR to add these copy features, check it out: spotifast#1133 waiting on the maintainers to approve :D
@c1sc0v There's nothing we can do about that. spotifast#283
Spotifast: Spotify, native and fast (8.6k stars) What it does All text below is quoted directly from the project README. >Spotify, native and fast. One lightweight Rust app for your whole library, local playback, and Spotify Connect on Linux, macOS, and Windows. Your music, on your desktop: - Library and search: Browse playlists, Liked Songs, albums, artists, and podcasts. Search the catalogue and edit playlists you own. - Local files: Play the local files your playlists list from a folder you choose in Settings (44.1 kHz files). - Spotify Connect: Play on this computer or control playback on your other devices, including Google Cast speakers and groups. - Queue: Add songs to the queue, or choose Play next to put a song or selection first when playing on this computer. - Themes: Choose light, dark, system appearance, or custom colours, with one theme for light mode and one for dark mode that switch with the system. - Desktop controls: Use keyboard shortcuts and media keys. - Winamp mini player: Use classic skins with an equalizer, playlist, and animated sound displays. - MilkDrop: Watch music-reactive visuals in a separate window or full screen. >brew install --cask crmne/tap/spotifast Repository crmne/fastpotify Repository stats |Metric|Value| |:-|:-| |Stars|8,585| |Forks|493| |Last release|v0.14.1 (2026-10-20)| |Languages|Rust 97.8%, Python 1.2%, C 0.4%| |Contributors|114| |AI contributor accounts (Claude / Codex / Cursor / Copilot)|claude: 12, codex: 1| |AI co-authored commits|None| Main contributor |Field|Value| |:-|:-| |Name|Carmine Paolino| |GitHub|@crmne| |Commits to this repo|797 (top contributor)| |Bio|Founder @plenty-hq | Creator of RubyLLM | Organizer @berlinrb | Co-founded @freshflowai| |Company / Location|Berlin, Germany| |X / Twitter|@paolino| |Followers|794| ────────────────────────────── 📌 How many great GitHub repos have you discovered and completely forgotten about? Don't let another useful tool disappear into your Reddit feed. Get the community's best repos, organized by category, plus key takeaways from real developer discussions, delivered to your inbox twice a week. 📬 Never lose track of great repos again. Subscribe free.
Spotify is now running natively on a jailbroken PS5 without needing a PSN account. Spotless brings Spotify sign-in, music playback, and Now Playing controls to the console, with background music working while gaming. GitHub: abhi245y/spotless It supports free and Premium accounts, with a restore tool included. Firmware compatibility varies, so check the community reports before trying it. One more interesting project from the PS5 homebrew scene.
Spotifast 是一个用 Rust 写的第三方 Spotify 客户端,不带浏览器内核,平时只占 100 到 250 MB 内存,启动不到一秒。 歌单、喜欢的歌曲、专辑、播客都能浏览,自己的歌单也能编辑,还能通过 Spotify Connect 控制家里其他设备播放,Google Cast 音箱也行。 GitHub:crmne/spotifast 我比较喜欢的是 Winamp 迷你播放器模式,能直接套经典的 Winamp 2 皮肤,带均衡器和播放列表,怀旧味一下就出来了。 另外还内置了 MilkDrop 可视化,画面跟着音乐变,可以单独开窗口或者全屏,第一次用会下载 1 万多套预设。 Linux、macOS、Windows 都有安装包。已经开了 Spotify 会员、又嫌官方客户端重的,可以换上试试。
This music player looks INSANE! 🎧🔥 Meet Lokal an open-source music player for Windows, macOS, and Linux, with integrated SpotiFLAC add-on support. One app, multiple platforms, and plenty of features to explore. GitHub: sipbuu/lokal Would you give it a try?
Spotifast: The lightning-fast native Spotify client built in Rust. Spotifast is a ridiculously fast, native desktop app for Spotify written in Rust. It uses minimal RAM, has no browser engine, and features a classic Winamp mini player. Want the repo link? Comment SPOTIFY. I'll send it. Follow and subscribe for the next one. crmne/spotifast #rust #spotify #opensource #Shorts
Spotifast: a lightweight open-source Spotify desktop alternative Spotifast is a free, open-source Spotify desktop client for Windows, macOS, and Linux. Written in Rust uses 100–250 MB of RAM and lets you browse your Spotify library, search for music, manage playlists, and control playback across devices (needs Spotify Premium for music playback). Plus it supports keyboard shortcuts, custom themes, background playback and includes a Winamp-style mini player. GitHub: crmne/spotifast
一周Rust热点事件 第23期 phoronix.com github.com/heng30/prux/tree/main getartcraft.com tobi/disktree silent-rs/Tiangong dexsper/cinebox hyprlab/hylki c9dev/penguin-mail yuanzhixiang/openphoto crmne/spotifast jankeesvw/omarchy-meeting-recorder alpcanaydin/tusk aimod-cc/agent2api kua8/Nectar lantunnel/lantunnel