Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

QuietWatch for Netflix

Netflix periodically verifies that an account is being used from its registered "household" (home network). When it can't confirm this, it throws up a blocking modal — "You've signed in from a device that's not part of your Household", "Who's watching needs to verify this device", etc. — that interrupts either playback (on a /watch/<id> page, triggered by a background network call) or browsing (a full-screen interstitial over /browse and other pages). Users who travel, use a VPN, or simply have a flaky household association get interrupted mid-session, and Netflix offers no first-party client-side setting to disable the check. QuietWatch for Netflix is a lightweight, dependency-free browser extension that keeps playback and browsing uninterrupted using two page-context-aware strategies: on /watch/ pages it stops the household-check request from completing so the player is never gated, and on every other Netflix page it dismisses the verification modal the moment it appears. It runs on Chromium browsers (Manifest V3) and Firefox (Manifest V2), scopes everything strictly to netflix.com, and ships with a one-click on/off toggle so you can disable it without uninstalling.

Features

  • One-click on/off toggle (FR1) — a single switch in the popup, with state persisted across sessions in local storage (default: enabled). Flipping it off instantly stops all active blocking and modal-dismissal across every tab; flipping it on immediately re-evaluates all currently open Netflix tabs. A colored status dot + text shows the current state.
  • Uninterrupted playback on /watch/ pages (FR2) — when you're on a Netflix /watch/ page, the household-check request is prevented from completing so the player is never gated and playback isn't interrupted. The rule is scoped to that tab only — a /browse tab in another window is unaffected — and is removed when the tab leaves /watch/, leaves netflix.com, closes, or the extension is disabled.
  • No disruptive interstitial on browse & other pages (FR3) — on /browse and other non-watch Netflix pages, a content script dismisses the verification modal (and its backdrop) as soon as it appears, so the interstitial never blocks your browsing. It also clears any modal already present on injection, and watches the page with a MutationObserver to catch new ones immediately. Injection is idempotent (guarded against double-injection across SPA navigations) and touches nothing else in the DOM.
  • Navigation & tab-lifecycle orchestration (FR4) — listens to webNavigation (including SPA-safe onHistoryStateUpdated), tabs.onActivated, tabs.onRemoved, storage.onChanged, and runtime.onInstalled/onStartup to keep per-tab state correct: it proactively prepares the per-tab rule on onBeforeNavigate, reconciles all open Netflix tabs on install/startup, and reacts live to popup changes with no reload required.
  • Strict domain scoping (FR5) — all behavior checks that the URL includes netflix.com before acting. No rules or scripts are ever installed for non-Netflix tabs, and no <all_urls> permission is requested.
  • Cross-browser packaging (FR6) — one shared background.js feature-detects its platform (isFirefox = !chrome.declarativeNetRequest) and branches internally; only the manifest differs per target. POSIX shell build scripts stage the correct manifest and produce clean, store-ready zips for each platform.

Non-functional: plain JS/HTML/CSS with zero build step or external dependencies (load unpacked with no compilation); minimal permissions only (declarativeNetRequest/webRequest+webRequestBlocking, tabs, webNavigation, scripting, storage, and *://*.netflix.com/* host permission — nothing broad); resilient error handling that swallows benign races (already-injected, invalid tab ID, mid-close) without noise; works correctly as a non-persistent MV3 service worker on Chrome that can be killed and restarted between events.

Supported browsers

Browser Manifest Network blocking mechanism Notes
Google Chrome V3 declarativeNetRequest session rules Per-tab blocking uses session-scoped tabIds, which requires Chrome 92+. On older Chromium the rule is silently rejected and the household check is not blocked.
Microsoft Edge V3 declarativeNetRequest session rules Same as Chrome; use edge://extensions.
Brave / Opera / other Chromium V3 declarativeNetRequest session rules Same as Chrome.
Mozilla Firefox V2 webRequest + webRequestBlocking Requires Firefox 102+ (the scripting API landed in 102). MV2 is the only path that supports blocking webRequest on Firefox; see the MV2-sunset caveat below.

"Netflix" is a trademark of Netflix, Inc. This extension is not affiliated with, endorsed by, or sponsored by Netflix.

Installation

Option A — From an official store (if/when published)

This extension is not currently published to any store. If/when it is listed:

  • Chrome / Edge / Chromium — find it on the Chrome Web Store and click Add to Chrome (Edge: Add to Edge; other Chromium: Add).
  • Firefox — find it on addons.mozilla.org (AMO) and click Add to Firefox. (Note: the Firefox build is Manifest V2; see the MV2-sunset caveat regarding its long-term availability on AMO.)

Until then, use Option B.

Option B — Load unpacked / temporary (local development)

The repo ships manifest-free at the extension root between builds (the per-platform manifests live in build_tools/ and are staged to manifest.json only during packaging), so to load the extension you first build the platform zip, then load its unzipped output. From inside this quietwatch/ directory:

Chrome / Edge / Chromium

  1. Build the Chrome package (skip if you already have the output zip):
    sh build_tools/build-for-chrome.sh
    This produces build_tools/build/chrome/quietwatch-chrome.zip.
  2. Unzip it into a folder:
    unzip build_tools/build/chrome/quietwatch-chrome.zip -d quietwatch-chrome
  3. Open chrome://extensions (Edge: edge://extensions; Brave/Opera: brave://extensions / opera://extensions).
  4. Turn on Developer mode (top-right toggle).
  5. Click Load unpacked and select the quietwatch-chrome folder you just unzipped (the one containing manifest.json).
  6. The extension appears in the list. Pin it, then open netflix.com. Household verification no longer interrupts your /watch/ playback, and the interstitial is dismissed on other pages.

Firefox

  1. Build the Firefox package (skip if you already have the output zip):
    sh build_tools/build-for-firefox.sh
    This produces build_tools/build/firefox/quietwatch-firefox.zip.
  2. Unzip it into a folder:
    unzip build_tools/build/firefox/quietwatch-firefox.zip -d quietwatch-firefox
  3. Open about:debugging and go to This Firefox (about:debugging#/runtime/this-firefox).
  4. Click Load Temporary Add-on….
  5. Select the manifest.json inside the quietwatch-firefox folder you just unzipped. (Firefox also accepts the packaged .zip directly if you prefer to point at build_tools/build/firefox/quietwatch-firefox.zip.)
  6. The add-on appears under Temporary Extensions. Open netflix.com to use it.

Firefox note: temporary add-ons are removed when Firefox quits. For persistent local development without AMO signing, use Firefox Developer Edition or Nightly and set xpinstall.signatures.required to false in about:config, then install the zip as a regular add-on.

Caveats & Known Issues

  • First /watch/ load may not render the player. Because the household-check request is prevented from completing, Netflix's player UI can fail to render on the initial load of a /watch/ page. A manual page refresh resolves it. This is expected, not a bug.
  • Visible console errors on /watch/ pages. You may see CORS-like errors in the DevTools console on /watch/ pages — that is the prevented request failing loudly. It is the intended behavior, not a malfunction.
  • Both strategies are inherently fragile. There is no automated breakage detection in v1. Any Netflix change to the GraphQL host/path, the request shape, the /watch/ URL structure, or the modal's CSS classes / data-uia attributes can silently break one or both strategies. If the modal reappears or playback gets gated after a Netflix update, the selectors and URL patterns in background.js / content.js need to be reconfirmed against the live site (DevTools) and updated.
  • Firefox MV2 sunset risk. The Firefox strategy depends on webRequest + webRequestBlocking, which is MV2-only (Firefox removed blocking webRequest in MV3). Firefox is deprecating MV2, so the Firefox build may have a limited shelf life on AMO, and an MV3 migration would break this blocking strategy entirely until a declarativeNetRequest-parity path is viable on Firefox.

Privacy

QuietWatch collects no data. It has no analytics, no telemetry, and makes no network requests of its own — it only reads/blocks requests Netflix's own pages already make and reads/removes elements Netflix's own pages already render. The only thing it persists is the on/off toggle state, stored locally via chrome.storage.local on your device; it is never transmitted anywhere. There is no remote configuration and no third-party service involved.

Support

Found a bug or have a question? Please open an issue on the GitHub repository.

Disclaimer

This extension is not affiliated with, endorsed by, sponsored by, or otherwise associated with Netflix, Inc. "Netflix" is a trademark of Netflix, Inc.

The extension interacts with netflix.com in your browser on your behalf. It is your responsibility to comply with Netflix's Terms of Use and any applicable third-party terms. The software is provided "as is," without warranty of any kind, express or implied; you use it at your own risk, and the authors and contributors of this project accept no responsibility for any consequences of its use. If in doubt, do not install it.

License

Released under the MIT License — see LICENSE at the repository root.

Copyright (c) 2026 the QuietWatch project authors

About

QuietWatch: a lightweight browser extension which allow you to watch Netflix even if you are in a different household and under a different WiFi. Chrome and Firefox friendly.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages