mrkeyoor.com_
Mon 07 Sept 14:48 UTC
Self-Hostedevaluationupdated 07 Sept 2026

LunaTV review

LunaTV's README is primarily Chinese, and the supplied material shows no English documentation. It is a self-hosted web player that searches multiple video-source APIs, plays HLS streams, and synchronizes favorites and viewing progress. It solves the interface and account layer, but it ships without playback or live-TV sources.

trackingstars / 7d
Verdict

Our build succeeded in 93 seconds, but the test command found 0 tests and exited 1. LunaTV is appealing if you already understand Chinese, operate Docker, and possess legitimate source APIs, because its viewing interface and sync features cover the tedious front-end work. Do not treat it as a turnkey streaming service, and do not deploy it commercially until the conflicting license signals are resolved.

We ran it

Install✓ · 75s1170 packages · 928 MB
Build✓ · 93s
Tests✗ · 7sran, no count parsed
Repo154 files~32,014 lines of source · 21 MB · 1 CI workflows · Dockerfile

Answers from our run

Does LunaTV build from source?

Dependencies installed in 75 seconds (1170 packages), and the build succeeded in 93 seconds. We cloned commit 388089d into a clean Debian container with 3 CPUs and no project-specific setup.

Do LunaTV's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Who should not use LunaTV?

Anyone expecting a ready-to-watch catalog, because the deployed app is explicitly an empty shell

What are the alternatives to LunaTV?

Jellyfin, Kodi, Stremio Web. Our build succeeded in 93 seconds, but the test command found 0 tests and exited 1.

Setup3/5Builds cleanly, but needs Docker, storage, and external sources
Docs3/5Detailed Chinese setup guide, no English docs evidenced
Community4/59,579 stars, 6 open issues, and a push just over 3 months ago
Maturity2/5Production build passes, but Jest finds no tests and licensing conflicts

Who it’s for

Chinese-reading self-hosters who already have lawful, compatible video-source APIs
Docker users wanting a browser-based, mobile-friendly viewing interface
Small private deployments that need synced favorites and watch progress

Who it’s NOT for

Anyone expecting a ready-to-watch catalog, because the deployed app is explicitly an empty shell
Teams requiring clear English documentation or a settled license record
Operators who want a conventional local-media server with transcoding and library management
Production teams that require a meaningful automated test suite before deployment

Setup reality

Our run installed 1,170 packages in 75 seconds, using 928 MB on disk, and the production build succeeded in 93 seconds. The test command then failed with exit code 1 after 7 seconds because Jest found 0 matching tests among 529 checked files. That is easier than a broken build but less reassuring than the README's Docker-ready presentation: real deployment still requires Docker, credentials, a persistent Kvrocks, Redis, or Upstash store, a domain, and a separately sourced configuration of lawful video APIs.

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.

Alternatives

ProjectWhat it isPick it when
Jellyfin gh↗A full self-hosted server for organizing and streaming media you control.pick this instead when your main job is serving a local media library across devices.
Kodi gh↗A mature home-theater application with a broad add-on and device ecosystem.pick this instead when the television or media-center device is the center of the setup.
Stremio Web gh↗A web media-center interface built around an add-on-driven content ecosystem.pick this instead when you want an established add-on model and an English-language project.

What people are saying

  1. [github-trending] MoonTechLab/LunaTV

Sources

  1. MoonTechLab/LunaTV repository
  2. LunaTV v100.1.3 release

More self-hosted reviews

koodo-reader · warmbly · valkey · codex2api · hydra · codex-lb · the whole board →