Library / SDK
NuvioMedia/NuvioTVSmart avatar
NuvioMedia/NuvioTVSmart

NuvioTVSmart: one JavaScript media app for Tizen and webOS TVs

Official Nuvio WebOS, TizenOS Repository

789 stars161 forksJavaScriptGPL-3.0

At a glance

What is it?
NuvioTVSmart is a GPL-3.0 media application for Samsung Tizen and LG webOS televisions, written in JavaScript with platform native packaging for both, and it publishes a detailed compatibility matrix showing exactly which TV OS versions get playback, P2P and plugins. The engineering story is the packaging and the version matrix, not the feature list.
Who is it for?
Adopt NuvioTVSmart as a reference for shipping a JavaScript app to both Tizen and webOS, or as a media client for TVs you own, if you accept GPL-3.0 obligations for derived works. Do not adopt it if your TV reports Tizen 4.x and you need plugin execution, since plugin support starts at Tizen 6.0, and do not adopt it if you need a store signed Tizen package without the Seller Studio tooling and a security profile.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 2 days ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A single JavaScript codebase shipped to two television platforms

Nuvio TV is described in the README as a free, open-source media app for a phone, a desktop and the television you already own, where you bring your own sources and the app turns them into a library with artwork, ratings, subtitles and your place saved on every screen. The repository is the official Nuvio WebOS and TizenOS repository.

The engineering problem is the platform problem. A TV application is not a browser tab. It has to be signed, packaged in the platform's own format, installed by the user on a device that updates its operating system on a schedule you do not control, and it has to run on hardware that is years old. Everything interesting in this repository comes from that constraint.

The repository layout shows how the work is split. There is a `js/` directory for application code, `css/`, `res/` for resources, `assets/`, a `services/` directory for the companion services, `scripts/` for build and packaging tooling, `docs/`, an `appinfo.json` for the Tizen application metadata, a `boot-guard.js` entry script, and a `local.example.properties` file for local configuration. The `package.json` marks the project as private and of type module, with the version set to 1.2.8.

Because the app is plain JavaScript, HTML, CSS and platform TV APIs, the same source tree produces both a Tizen WGT and a webOS IPK. That is the reason to read this code if you are shipping to smart TVs: it shows one codebase being bent to two quite different runtime models.

The compatibility matrix is the real specification

The README does not claim universal support. It states that Nuvio TV supports Samsung Tizen TVs from 2018 onward with Tizen 4 and later, and LG webOS TVs from 2020 onward with webOS 5 and later, with a startup compatibility baseline of Samsung Tizen 4.0 with Chromium 56 and LG webOS 5.0 with Chromium 68 when the platform reports those versions.

Then it says something unusual for a consumer app: platform capabilities are intentionally version-dependent, and it enumerates them.

On Samsung Tizen 4.x, the app and direct playback are supported, but torrent and P2P playback is unavailable by design, and some advanced audio and subtitle features may also be limited. On Tizen 5.x, including 5.5, torrent and P2P playback is supported through the bundled local EngineFS service only, while the PluginService, plugin execution and remote plugin pull and push synchronization are disabled and the Plugins screen is not available. On Tizen 6 and later, both P2P and the packaged PluginService are supported. On LG webOS 5.x, P2P and the packaged plugin service are supported with the older webOS resource quotas, and on webOS 6 and later with the modern quotas.

The README also makes a privacy claim about how P2P works: on Tizen 5 and later and on LG webOS, P2P uses only the bundled local companion service, and no external torrent streaming server is configured or required.

This matrix is the most useful thing in the README for an engineer, because it tells you which behaviour to expect on a specific television before you install anything.

Plugin support starts at Tizen 6 because of the Node runtime on Tizen 5.5

The reason Tizen 5.x loses plugins is specific and worth repeating, because it explains the shape of the whole compatibility story. The README states that the Node 4.4.3 service runtime observed on Tizen 5.5 is incompatible with the current PluginService syntax and URL APIs, that experimental legacy transports are not included, and that plugin support starts at Tizen 6.0.

So the split on Samsung hardware is not a policy decision alone. It is the platform's JavaScript runtime. Tizen 5.5 ships a Node runtime old enough that the plugin service's syntax and URL APIs do not work, and the project chose to drop plugins on that generation rather than ship a reduced plugin system. The README describes the Tizen 5.5 path as the bundled local EngineFS service only, and the Plugins screen is not available at all.

On Tizen 6 and later, plugin execution requires the packaged service plus the TV runtime's own Worker and WebAssembly support, and the README notes that Tizen 6 and later use the same current Tizen service pipeline.

For a user, the practical reading is simple: the television you buy determines the feature set, not the app version. The app is the same code, and the platform is the switch. For a developer, it means the plugin system has one code path and a second, older path, which is exactly the kind of split that adds maintenance cost over time.

Building from source needs Node, and packaging is three separate pipelines

The build instructions are short and complete.

bash
git clone https://github.com/NuvioMedia/NuvioTVSmart.git NuvioTVSmart
cd NuvioTVSmart
npm install
npm run build

Building requires Node.js and npm, and package installation additionally requires the relevant Tizen or webOS tools.

Packaging is three commands rather than one, and the split reflects the two platforms plus the store variant.

bash
npm run package:tizen
npm run package:tizen:store
npm run package:webos

The README explains what each one produces. `package:tizen` creates the unsigned WGT used for development and by the Nuvio TV Installer, and the installer signs it locally for the target TV before installation. `package:tizen:store` is a separate Seller Office build that requires Tizen Studio or the Web CLI and a configured security profile, and it creates the signed Store package with the local EngineFS service included so that Tizen 5 and later keep P2P playback, while Tizen 4 still reports P2P as unsupported at runtime. The webOS build produces the IPK for manual installation, and there is also an LG webOS Homebrew repository entry that lists the app for installation on that platform.

There is a Nuvio TV Installer release for Windows, macOS and Linux, which is the path for most users, and a separate download of the Samsung Tizen WGT for manual installation.

A large test surface, and a licence that shapes downstream use

The `package.json` scripts describe a serious test posture for a television app. The `test` script runs `npm run test:plugins`, which builds the project and then runs the webOS plugin forwarding test, the plugin system test and the plugin localization test. A separate `test:android-parity` script chains a long list of parity checks between the TV app and the Android client, covering mdblist account and library parity, episode shuffle, ASS subtitle placement, subtitle language parity, trakt progress failure and activity refresh, watch party parity and its player, Tizen seek loading, Tizen AVPlay seek sequencing, the Tizen redirect resolver, AVPlay call tracing, and direct AVPlay source handling.

The workflow scripts point to tooling for both platforms.

json
    "install:webos": "node ./scripts/ares-install-webos.mjs",
    "inspect:webos": "node ./scripts/ares-inspect-webos.mjs",
    "logs:webos": "node ./scripts/ares-logs-webos.mjs",
    "lint": "npm run lint:home:incremental && npm run lint:runtime",

The repository also carries a `.husky/` directory, a `.prettierrc.json` configuration and an `eslint.config.mjs`, so formatting and linting are wired into the commit workflow rather than left to convention.

The licence is the GNU General Public License v3.0, with the `LICENSE` file at the repository root. GPL-3.0 is permissive to use and modify, but it carries copyleft obligations for derived works, and that matters more here than it would for a small library because the application ships as an end user product. Anyone who wants to read the source and take a different approach should expect to keep the same licence on the result, and should not treat the code as a basis for a closed source fork without checking that point.

On cadence, the releases move quickly: 1.2.6 on 2026-10-17, 1.2.7 and 1.2.8 both on 2026-10-18, with the last push on 2026-10-19. The repository is not archived, and the `CHANGELOG.md` and `CONTRIBUTING.md` files are present at the root.

Editorial conclusion

Adopt NuvioTVSmart as a reference for shipping a JavaScript app to both Tizen and webOS, or as a media client for TVs you own, if you accept GPL-3.0 obligations for derived works. Do not adopt it if your TV reports Tizen 4.x and you need plugin execution, since plugin support starts at Tizen 6.0, and do not adopt it if you need a store signed Tizen package without the Seller Studio tooling and a security profile. Verify first the exact OS version your TV reports, install the Tizen or webOS build that matches it, and check the `package.json` version, which is 1.2.8, against the release you download, because the compatibility behaviour changes with every platform bump.

Frequently asked questions

Which TVs can run NuvioTVSmart?

The README states that Nuvio TV supports Samsung Tizen TVs from 2018 onward with Tizen 4 and later, and LG webOS TVs from 2020 onward with webOS 5 and later. The startup baseline is Samsung Tizen 4.0 with Chromium 56 and LG webOS 5.0 with Chromium 68.

Does NuvioTVSmart support plugins on every TV?

No. On Samsung Tizen 5.x, including 5.5, the PluginService, plugin execution and remote plugin synchronization are disabled and the Plugins screen is not available, because the Node 4.4.3 runtime on Tizen 5.5 is incompatible with the current PluginService APIs. Plugin support starts at Tizen 6.0, and it is supported on LG webOS.

How do I build a Tizen build of NuvioTVSmart from source?

Clone the repository, run `npm install` and `npm run build`, then run `npm run package:tizen` for the unsigned WGT used by the Nuvio TV Installer, or `npm run package:tizen:store` for a signed Store package that needs Tizen Studio or the Web CLI and a configured security profile. `npm run package:webos` produces the webOS IPK.

Official sources

  1. License: GPL-3.0
  2. NuvioMedia/NuvioTVSmart on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/nuviomedia-nuviotvsmart.svg)](https://hysenlabs.com/projects/nuviomedia-nuviotvsmart)

Was this useful?