It is a polished player shell, not a content service
LunaTV packages the front end of a private streaming setup into a Next.js 14 application. It searches multiple configured sources, presents title details and episode lists, and plays HLS video through ArtPlayer and HLS.js. Favorites and viewing position can follow a user across devices through Kvrocks, Redis, or Upstash. The responsive layout switches from a desktop sidebar to mobile bottom navigation, and the PWA support makes the site installable. That is a useful bundle for someone who would otherwise assemble several interface and persistence pieces.
The crucial limitation appears plainly in the README: a fresh deployment contains no playback sources and no live-TV sources. You must collect and configure compatible Apple CMS V10-style APIs yourself. Its experimental ad-skipping feature may help with segmented video ads, but the README labels it experimental, so it should not drive a deployment decision. The supplied documentation is primarily Chinese, and we found no evidence here of an English guide.
Our install and build passed, but the test suite was empty
On our box, from commit 388089d in a fresh unprivileged Debian container with 3 CPUs and 8 GB of RAM, pnpm installation succeeded in 75 seconds. It installed 1,170 packages and occupied 928 MB on disk. The production build also succeeded, taking 93 seconds. Those are encouraging compatibility results for the measured Node 22 environment, but they describe build behavior only, not streaming performance, source reliability, or long-running stability. We did not measure playback latency or concurrent-user capacity.
The test step failed after 7 seconds with exit code 1. Jest checked 529 files, matched 0 tests, and printed No tests found. The repository contains 154 files and about 32,014 lines of source in the supplied measurement, yet there is no tests directory. This is not evidence of broken application behavior, because the log reports absence rather than failing assertions. It is evidence that the advertised Jest tooling currently provides no automated regression signal through the command we ran.
The strongest parts are deployment choices and user-facing continuity
The Docker path is concrete. The README supplies a two-service Compose arrangement for LunaTV and Kvrocks, including a persistent volume and an internal network. It also documents Redis and Upstash alternatives, calls out Redis persistence risk, and explains the exact Kvrocks data path used on Zeabur. Operators get environment variables for administrator credentials, storage selection, site address, display name, announcements, and proxy behavior.
The viewing features are coherent rather than random. Multi-source search addresses fragmented catalogs, detail pages collect metadata and episodes, and synced favorites plus continue-watching cover the main reason to add server-side storage. Desktop and mobile navigation receive separate treatment, while PWA installation extends the same interface to a home screen. The JSON configuration also exposes a 7,200-second cache example and custom movie or television categories, giving an operator practical control without editing application code.
Empty sources, thin verification, and licensing ambiguity are real costs
Source acquisition is the largest burden. The sample configuration uses placeholder http://xxx.com endpoints, so it proves the schema but cannot produce a working catalog. Operators must assess legality, uptime, privacy, transport security, metadata consistency, and stream quality outside LunaTV. Exposing a deployment also means replacing the sample admin credentials, using HTTPS, protecting the admin configuration, maintaining database backups, and deciding whether automatic image updates are acceptable. The README itself recommends fixed image tags for production instead of blindly tracking latest.
The repository signals also conflict on licensing. The supplied GitHub metadata says NOASSERTION, the README displays an MIT badge, and the community snippet describes CC BY-NC-SA terms that prohibit commercial use and require share-alike derivatives. Those are materially different conditions. Until the repository's actual license file and maintainers clarify which terms govern commit 388089d, commercial adopters should stop.
Adoption is strong, while current maintenance evidence is limited
The project has 9,579 stars and only 6 open issues in the supplied snapshot, a favorable top-level signal for interest and visible issue load. Its latest release, v100.1.3, and last push both landed on May 28, 2026, just over 3 months before this review. That does not establish abandonment, especially with low open issue volume, but one supplied release date cannot demonstrate a steady cadence or tell us how quickly maintainers answer reports.
There is 1 CI workflow and a Dockerfile, which is better than a repository with no delivery machinery. Still, CI presence does not offset 0 discovered tests. Before relying on LunaTV for regular household use, we would want a pinned image, a backup and restore drill for the chosen store, a health check, and a small acceptance suite covering login, configuration loading, search, playback startup, favorite sync, and resume position.
It belongs beside source services, storage, and an access boundary
In a real stack, LunaTV is the browser-facing application. Put Kvrocks, Redis, or Upstash behind it for state; provide authorized Apple CMS V10-compatible sources through its configuration; terminate HTTPS at a gateway; and restrict access to the intended household or team. Monitoring should cover the web container, storage availability, source failures, and disk growth. Backups belong around persistent state, while source credentials and administrator secrets should stay out of Compose files committed to version control.
Choose Jellyfin when you own media files and need a server to catalog and stream them. Choose Kodi when a living-room device and local add-ons matter more than a hosted web interface. Choose Stremio Web when an established add-on-centered system better fits your content workflow. LunaTV's narrower role is attractive, but only after its 0-test safety net and conflicting license signals are acceptable to you.