npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

tizentube-9

v1.15.0

Published

An ad-free and sponsor-free YouTube for Samsung TVs running Tizen 9.

Readme

▶️ TizenTube 9

TizenTube 9 removes ads and sponsored segments from YouTube on Samsung TVs. It runs either as a TizenBrew module or as a standalone app.

🍴 About this fork

TizenTube 9 is a fork of reisxd/TizenTube, which is where this project comes from and where the great majority of its code and design were written. If you are looking for the original — particularly if you have a TV older than 2025 — go there.

The fork exists to make one trade-off the original cannot: it supports only Tizen 9.0 and newer.

Upstream supports Samsung TVs going back to Tizen 3.0, whose browser engine is Chromium M47 from 2015. Supporting that engine sets the ceiling for everything else. Every modern API has to be polyfilled or avoided, the build has to transpile down to ES5, and code that would be straightforward has to be written around a decade-old runtime. That is the right call for a project that wants to reach as many TVs as possible, and it is why the original works on hardware nothing else supports.

This fork gives up that reach deliberately. Tizen 9.0 ships Chromium M120, so targeting it alone means:

  • No polyfills. fetch, DOMRect, Object.entries, Array.prototype.flat and the rest are simply there. The userscript got smaller by dropping them.
  • The compiler enforces the target. lib is pinned to ES2023 — the newest edition M120 implements in full — so reaching for an API the TV does not have is a build error rather than a black screen in someone's living room.
  • A modern toolchain. TypeScript 7 and Rolldown, replacing TypeScript 5, Rollup, Babel, Terser and ncc.

Retargeting also brought back code that had been silently dead for years, because it was written against APIs Chromium M47 did not have — the "add my language to the subtitle menu" feature, for one, had never once run. Finding those led to a broad correctness pass over the rest of the codebase, and to a suite of regression harnesses that CI now runs on every release. The commit history has the detail.

None of this is a criticism of the original. It is the same project with the compatibility floor moved, and the work only exists because upstream wrote everything underneath it.

📋 Requirements

Tizen 9.0 or newer — 2025 TV models and later.

Tizen 9.0 is the first release whose web engine is Chromium M120, and TizenTube 9 is built for that engine: the userscript targets it directly and ships no polyfills, and the standalone app declares required_version="9.0". Both the TizenBrew module and the standalone app need it.

On an older set the standalone app will refuse to install and the module will not run correctly. Use the original TizenTube on those TVs — it supports Tizen 3.0 and newer.

❓ How to install

TizenTube 9 can run two ways. The TizenBrew module is the simpler one; the standalone app is a normal Tizen app with no TizenBrew dependency.

⚠️ The standalone .wgt is not released yet. The release linked in that section is the upstream project's, so installing it gives you upstream TizenTube rather than TizenTube 9 — build your own instead, see Building it yourself. The TizenBrew module below is this fork's own package and is installed normally.

As a TizenBrew module

  1. Install TizenBrew from here and follow the instructions.

  2. Add tizentube-9 as an NPM module in the TizenBrew module manager. CI publishes that package from main.

Earlier revisions of this page named @foxreis/tizentube here, which is upstream's package — a different project, targeting an older platform floor and without any of this fork's fixes. If you have it installed it keeps working; swap it for this one when you want the fork. If the module manager cannot find tizentube-9, no release has landed yet — check the repository's Actions tab.

As a standalone app

The standalone app is a signed .wgt. Upstream attaches one to every release; this fork has cut none yet, so build your own. Installing it means sideloading, which needs Developer Mode on the TV and Samsung's sdb tool on a computer (it ships with Tizen Studio).

1. Turn on Developer Mode.

On the TV, open Apps, press 1 2 3 4 5 on the remote, set Developer mode to On, and enter a host PC IP.

⚠️ Enter 127.0.0.1, not your computer's address.

This is the one step that differs from ordinary Tizen sideloading guides. TizenTube 9 attaches a debugger to itself to inject its script before YouTube's own code runs, so the TV has to accept a debug connection from itself. The app checks for exactly 127.0.0.1 (or 1.0.0.127); with any other address the injector path is unavailable.

Restart the TV when prompted.

2. Install the package.

Download TizenTube.wgt from the latest release, then from your computer:

sdb connect <TV_IP>          # the TV's address on your network
sdb install TizenTube.wgt

sdb connect uses port 26101, so the computer and the TV must be on the same network with nothing between them blocking it. Tizen Studio's Device Manager does the same thing through a GUI if you prefer.

3. Launch it. TizenTube 9 appears alongside your other apps.

Leave Developer Mode on

Developer Mode is not only needed to install — the app uses it at every launch. With it on and the host IP set to 127.0.0.1, TizenTube 9 attaches its debugger and injects its script before the page's own scripts run, which is what makes ad blocking reliable from the first frame.

With it off, the app still works: it falls back to serving YouTube through a local proxy on port 8099 and injecting the script into the page's HTML instead. That path is a little slower to start and inherently races YouTube's own bundle, so the injector path is preferred.

Building it yourself

CI produces the .wgt, but you can build one locally. docs/BUILDING.md is the full guide — prerequisites, what each of the four package trees produces, packaging, signing, and what to do when it goes wrong. The whole build:

corepack enable
pnpm install                              # all four trees, one lockfile

(cd mods && pnpm run build)               # 1. the userscript
(cd service && pnpm run build)            # 2. the DIAL service
(cd standalone/service && pnpm run build) # 3. the app's service

pnpm test                                 # 42 harnesses

Under ten seconds on a warm checkout, and step 1 is the entire build if you only want the TizenBrew module — that route needs no certificate and no packaging.

The order matters: the app's service inlines the other two at build time, so both have to exist first, and it has to be rebuilt after either of them changes. Getting it wrong fails immediately and names the command you skipped.

Packaging a .wgt additionally needs the tizen.js CLI and a Tizen author certificate — a widget cannot be unsigned. See Packaging.

pnpm test runs the regression harnesses; see test/README.md.

Cutting a release

There are two routes and they release independently, off two versions.

The TizenBrew module comes from version in package.json. CI publishes to npm whenever main names a version the registry does not already have, so bumping it in your PR and merging is what cuts a release; merging without a bump republishes nothing. It will not publish a version behind the current latest, because TizenBrew follows that tag with no version pin and moving it back would downgrade every television.

The standalone .wgt comes from the widget version. Bump version= on the <widget> element in standalone/config.xml in your PR, and merging it builds, signs and publishes a .wgt under that version — if signing is configured; see below. A merge that leaves the version alone builds and verifies only.

CI warns on a pull request that changes what either route ships without moving that route's version.

That version is the one a television uses for install and upgrade semantics, so two packages carrying the same one cannot be cleanly installed over each other. Pushing a v*.*.* tag by hand still publishes, and CI will not move a tag that already exists.

Signing is opt-in

A .wgt is a signed Tizen widget and there is no unsigned form of one, so publishing needs a certificate. Two repository secrets supply it:

| Secret | Value | | --- | --- | | TIZEN_AUTHOR_KEY | base64 -w0 author.p12 — the whole output on one line | | TIZEN_AUTHOR_KEY_PW | the password for that .p12 |

Neither is needed to install TizenTube 9 as a TizenBrew module, which is the route most people use — nothing on that path is packaged or signed. With both secrets absent, a version bump builds and verifies, then warns that it cannot sign and skips packaging; the run stays green and no release is cut. Set them and the same bump publishes.

Setting only one of the pair fails instead, as does a value that is not a usable .p12: that is half-finished setup rather than a decision not to publish, and it is worth hearing about at the step that is meant to produce the certificate.

✨ Features

  • 📺 Picture-in-Picture Mode
  • 🛑 Ad Blocker: Enjoy your favourite streaming website without interruptions from ads.
  • ❗ SponsorBlock Support: Automatically skip sponsored segments in videos.
  • ⏭️ Video Speed Control: Adjust playback speed to your preference.
  • 🔺 DeArrow Support: Remove clickbait and misleading video titles.
  • 💬 Caption Memory: Remember whether closed captions should be on, globally or per channel — YouTube itself forgets between videos.
  • 🤖 AiSList Support: Optionally hide channels from the community-maintained list of AI-generated content. The list is fetched on the television and never bundled: it is CC BY-NC 4.0, which GPLv3 cannot absorb.
  • ▶️ Preview Indicator: A small play mark while a focused thumbnail is previewing, so a running preview is never mistaken for a still — and an option to mute previews.
  • ➕ More to come! Request features via issues.

🌐 Community and Support

Bugs in this fork belong here:

| Links | | ------------- | | Report Issues / Request Features |

The community below belongs to the original project. It is the right place for questions about TizenTube generally, and the wrong place to report something this fork broke:

| Links | | ------------- | | r/TizenTube Subreddit | | Discord Server | | Telegram | | Matrix Space |