Squeeze Plex Hub bridges Plexamp (Plex) with your Logitech / Lyrion Music Server ecosystem so you can play Plex audio on Squeezebox (and compatible) players.
- Discovers LMS instances and attached Squeeze players automatically
- Advertises discovered Squeeze players to Plexamp so they appear as selectable targets with full Plexamp controls
- Enables multi-room audio playback using Squeezebox players controlled by Plexamp
- Shows player and server metadata
- Simple Docker-based deployment
- Full track metadata support on LMS in combination with the LMS Squeeze Plex Hub Plugin
- Running Lyrion Music Server (formerly Logitech Media Server) with at least one connected player
- LMS JSON/CLI interfaces enabled (default)
- (optional) Enable the LMS Squeeze Plex Hub Plugin to get full track metadata support on LMS
- Plex Media Server with your audio library to stream from. No further media required on Lyrion Music Server
- Plexamp client (desktop or mobile) signed into the same Plex account
- Network: Squeeze Plex Hub must reach both LMS and Plexamp clients (usually same LAN)
You can:
- Use the provided Docker image on Linux (see command below). The image is published for amd64 and arm64 platforms.
docker run -d \
--network host \
--name squeeze-plex-hub \
onmomo/squeeze-plex-hub:latest- Or build and run locally for development or production (MacOS / Windows):
- For development:
yarn install && yarn dev - For pre-production:
yarn build && yarn start
- For development:
After start:
- Navigate to
http://localhost:3000in your browser to access the Squeeze Plex Hub web interface. - The application will display all discovered Squeezebox players and Lyrion Music Server (formerly Logitech Media Server), along with their metadata. Use the interface to confirm which Squeezebox players can be controlled via Plexamp.
- Use Plexamp to target discovered Squeezebox players.
No Plex credentials are ever stored. The app discovers LMS and Plex services on your local network only, and when initiating playback it forwards the Plex token so the Squeezebox player can stream directly from your Plex Media Server. The token is not persisted and expires after some time.
- Please check the Squeeze Plex Hub logs for any errors, the logging is quite extensive.
- Enable the debug logs, for detailed insights:
NITRO_LOG_LEVEL=debug.
On the device the project should be executed:
- git clone https://github.com/onmomo/squeeze-plex-hub.git
- yarn install && yarn start
- Verify any Squeezebox player is connected and available in Lyrion / LMS first.
- Check Squeeze Plex Hub (http://localhost:3000) dashboard and confirm both LMS and Squeezebox players are shown. If nothing is shown, ensure Squeeze Plex Hub can connect to Lyrion / LMS and that the Lyrion CLI is enabled.
- Check for port conflicts by reviewing the Squeeze Plex Hub startup logs for any discovery or network errors. This is especially important if both Squeeze Plex Hub and Plex Media Server are running on the same host. Squeeze Plex Hub requires access to UDP port 32412 to handle GDM network player discovery requests from Plex clients. If PMS is running on the same host or docker host network, both services should be able to use UDP 32412. If PMS is running in Docker bridge mode, remove port 32412 from its port mapping. If TCP port 3000 is already in use, you can publish a different host port (e.g.,
docker run -p 8080:3000 ...) and access the app athttp://localhost:8080. For host networking, the announced HTTP port automatically follows Nuxt/Nitro port configuration in this order:NITRO_PORT, thenPORT, then default3000. For more details on proper container deployment and networking, refer to the Container Networking section below.
- Docker Desktop on MacOS: GDM network discovery may not work with Docker Desktop on MacOS due to limitations with containers receiving UDP broadcast requests from the host network even if the container is running in host network mode. For full functionality in a container, run Docker on Linux.
- Ensure no local firewall blocking UDP ports 32412
- If still not available, abort Plexamp app to trigger device re-discovery.
- Resume fails after some time with a 401: the Plex token expired. Reload the playlist in Plexamp for the Squeezebox player to refresh the token.
- Plex Web player: The app handles device advertisement and timeline updates differently than Plexamp. Squeeze Plex Hub works, but with limited capabilities. For the best experience, use Plexamp.
squeeze-plex-hub
βββ app
β βββ components # Vue components for application pages
β β βββ DiscoveredDevices.vue
β βββ pages # Application pages
β βββ index.vue # Main page of the application
βββ public # Static files served directly
βββ server # Backend logic and API routes
βββ middleware # Middleware logic
βββ nuxt.config.ts # Nuxt configuration file
βββ vitest.config.ts # Vite test configuration for unit and nuxt tests
βββ tsconfig.json # TypeScript configuration file
βββ package.json # npm configuration file
βββ README.md # Project documentation
-
Clone the repository:
git clone https://github.com/onmomo/squeeze-plex-hub.git -
Navigate to the project directory:
cd squeeze-plex-hub -
Install dependencies using Yarn:
yarn install -
Run the development server:
yarn dev
To build the application in a container using Docker:
-
Build the Docker image:
docker build -t squeeze-plex-hub . --build-arg APP_VERSION=1.2.3Check the
Dockerfilefor all supported build arguments. -
Run the container:
docker run --rm --network host squeeze-plex-hub > **Note:** For full functionality, Squeeze Plex Hub must be run with Docker's `host` network mode. Host networking allows all Plexamp devices on your local network to discover Squeeze Plex Hub players via UDP broadcasts. If you use Docker's default bridge network, only Plex players or Plex Server running within the same bridge network can discover Squeeze players.
The application will be available at http://localhost:3000.
Alternatively, use the published multi-arch image: onmomo/squeeze-plex-hub:latest
Squeeze Plex Hub listens for UDP broadcast on port 32412 from Plex clients and responds with the discovered players. Therefore, it is essential that it can receive these UDP requests on that specific port.
- For best results, run the Plex Server container in either
hostorbridgenetwork mode, and always run Squeeze Plex Hub inhostnetwork mode. This ensures Plexamp clients on mobile devices connected to your local network can discover Squeezebox players. Docker does not forward UDP packets from the host network (e.g. mobile devices) to the bridge network. - Important: If Plex Server is in
hostmode, always start Squeeze Plex Hub before Plex Server so it will always bind to UDP port32412. If Plex Server starts first and binds this port, Squeeze Plex Hub will eventually not work and crash. - In
bridgemode, do not bind UDP port32412for Plex Server, then the startup order does not matter. - In
hostmode, set-e NITRO_PORT=3001to run the container on a different port.
Squeeze Plex Hub is an independent, open source project and is not affiliated with, endorsed by, or officially supported by Plex, Plexamp, Logitech, or Slim Devices.
All product names and trademarks are the property of their respective owners.
This project is licensed under the MIT License.
Squeeze Plex Hub is developed and maintained in my spare time.
If you find it useful and want to support further development, please consider sponsoring on GitHub:
π GitHub Sponsors


