LX playlists and browser playback share one service
lxserver puts LX Music playlist synchronization beside a browser player and a local music library. Its primary README is Chinese, with an English README and sync guide available. The fork adds online search, custom source scripts, server caching, and Subsonic access to the original sync-server idea. Choose it because your listening already involves LX Music. That existing workflow gives the extra administration a purpose.
Our checkout occupied 69.9 MB across 537 files, before the installed environment reached 264 MB. The project has grown beyond a background service that copies favorites between devices. Its documented browser controls include playback speed, a sleep timer, and lyrics, while the library handles downloaded and cached audio. Those conveniences are attractive together. They also create more behavior to check than basic playlist synchronization requires, especially when a remote source supplies the audio link.
What happened when we ran it
Our sandbox installed lxserver in 16 seconds, adding 570 packages and occupying 264 MB, then built successfully in 35 seconds. We ran commit 9006e61 on October 8, 2026, using the lab-node:22 image in an unprivileged Debian container with 3 CPUs, 8 GB of RAM, and no secrets. Npm audit reported 0 known vulnerabilities across all severity levels. That is a successful repository setup on the measured path.
The test command failed with exit code 1 after 1 second. Its output identified the package as lx-music-sync-server@2.1.2, invoked node --test test/*.test.cjs, and reported that /work/repo/test/*.test.cjs could not be found. No failing assertion appears in that tail. The command could not find the files it was told to execute, so the result gives us no passing suite to point to.
Our scan found 4 CI workflow files, a Dockerfile, and a compose file, but no tests directory. Container examples make deployment approachable, yet their presence does not resolve the missing test files. The lab findings also contain no playback or client-compatibility measurement. Treat claims about mobile behavior and Subsonic support as documented capabilities to verify with your own clients, rather than outcomes established by our install and build.
Player authentication defaults to off
The English configuration table lists player authentication as disabled and documents a default administrator password. Set ADMIN_PASSWORD yourself and enable ENABLE_WEBPLAYER_AUTH with a separate chosen password before exposing the player. The dashboard and player have separate paths and access settings. A container that starts successfully can still have settings you would never accept on an internet-facing music service.
The 570 packages installed in our run are unrelated to that access decision. A clean dependency audit cannot tell you whether your public favorites or music directories have the permissions you intended. The README exposes separate controls for public library access, downloads, and server caching. Configure those for the people who will actually use the server. Optional WebDAV backup also needs a destination and credentials, and its exclusions determine which cached or downloaded files enter backups.
Custom sources determine whether online audio works
The README's data-source section says online audio links come from the selected custom source, and that the project cannot verify their accuracy. That is a consequential limit for someone expecting every search result to play reliably. Finding a track in aggregated results and obtaining a usable stream are separate operations. I'd try the particular sources and tracks I rely on before migrating a household's playlists to this service.
Version 2.1.2 appears in our test output and in a recent download report. Issue 423, now closed, described completed browser downloads remaining marked as processing and some downloads producing empty files. This concerns the fork's download workflow, rather than an unrelated LX desktop component. It is evidence of a reported problem and tracker activity. Its closed status alone does not establish that every deployed version resolves the behavior.
The English README adds conditions beyond the Apache label
GitHub identifies Apache-2.0 licensing, but the README also presents a supplementary agreement and says that agreement takes precedence in a conflict. Its wording describes technical learning and research, includes a non-commercial section, and tells users to clear generated copyrighted data within a stated period. Those provisions deserve direct reading before you approve commercial adoption. The badge alone does not explain the text accompanying the project.
The roughly 87,210 source lines measured in our checkout cover software you can inspect, not ownership of the remote music it searches. The README distinguishes platform metadata, custom audio links, and stored user lists. This makes lxserver a poor default for someone seeking an uncomplicated commercial redistribution basis. Likewise, a user who prohibits telemetry should set DISABLE_TELEMETRY=true deliberately. The documentation says that switch also disables update notifications, so it changes how you learn about new releases.
October maintenance is active, while client behavior still needs checking
GitHub recorded a push on October 10, 2026, and 3 open issues and PRs, with 940 stars. The v2.1.2 release was published on October 7, although its notes carry a September date. Recent activity includes cache fixes and an open playback-session PR. These dates and tracker changes support a finding of active maintenance. They do not turn the missing test files at our measured commit into a successful regression check.
The original LX sync server is the narrower choice when you only need favorites synchronized. Navidrome fits a local music collection served to browser and Subsonic clients. I'd choose lxserver when its LX integration and custom-source playback solve a problem those alternatives leave open. Before moving your library, confirm a playlist round trip, playback in your chosen client, and recovery from the backup destination you configured.

