Roon Now Playing — A Simple "Always-On" Display Extension

Roon Now Playing v1.7.0 — Self-Service Onboarding & Roon-Optional Mode

Hey everyone! Excited to share a big update to Roon Now Playing — the always-on display extension for Roon (and now, any music source).

What’s new since v1.5.1

v1.7.0 — Self-Service Onboarding

The problem: Setting up a new display meant finding its ID in the admin panel, manually selecting a zone, and configuring the layout. If you had multiple screens, this was tedious.

The fix: Displays now onboard themselves.

When you open a new screen, instead of “Waiting for Roon Core…” you get a clean welcome screen with:

  • A friendly name auto-assigned by the server (e.g., gentle-fox-17, calm-falcon-3)
  • A QR code linking directly to that screen’s config page

Scan the QR from your phone, pick a zone, choose a layout — done. The display updates instantly. No IDs to copy, no admin panel required.

Per-screen config page — Each display gets its own page at /admin/screen/gentle-fox-17 (or whatever its name is). It’s a focused, mobile-friendly UI showing just the settings for that one screen: zone, layout, font, and background. Perfect for configuring from your phone after scanning the QR.

Names persist across reconnects and server restarts. If you don’t like the auto-generated name, rename it to something like “Living Room” or “Office” from the admin panel or the config page itself.

v1.7.0 — Roon is Now Optional

Thanks to a contribution from @leolobato, you can now run the app without Roon at all. Set ROON_ENABLED=false in your environment and the app skips Roon discovery entirely, running in external-sources-only mode.

This is great if you’re using the External Sources API to push now-playing data from Spotify, Plex, Home Assistant, or any other source. No Roon hardware needed.

Home Assistant Integration

For those running Home Assistant — there’s now a custom integration that connects to your Roon Now Playing server and exposes each named display as a controllable device in HA. Each screen gets:

  • Select entities for layout, font, background, and zone
  • Binary sensor for connection status (online/offline)

This means you can automate your displays: switch to minimal layout at night, dim the lights when a screen connects, change layout based on what’s playing — all through HA automations.

Install via HACS as a custom repository: roon-now-playing-hass

v1.6.0 — Typography & Testing (in case you missed it)

  • Configurable typography — All layouts now expose CSS custom properties for font sizes and line heights. Easy to tweak for your specific display size (especially useful for 4K TVs vs tablets).
  • E2E visual testing — Added Playwright-based screenshot tests across all 9 layouts and multiple viewports (1080p, 4K, iPad, etc.) to catch visual regressions.
  • Better font scaling — Improved clamp() values for 4K displays and tighter line heights for smaller screens.

How to Update

Docker:

docker pull ghcr.io/arthursoares/roon-now-playing:latest
docker compose up -d

Manual:

git pull
pnpm install
pnpm build
pnpm start

Links

Feedback welcome — especially on the QR onboarding flow. Would love to hear how it works with your setup!

2 Likes