Tubeless hides the parts of YouTube you don't want to see, one toggle at a time.
  • TypeScript 65.3%
  • HTML 27.2%
  • CSS 7.5%
Find a file
2026-08-23 15:48:41 +01:00
assets feat: initial public release 2026-08-23 15:48:41 +01:00
docs feat: initial public release 2026-08-23 15:48:41 +01:00
entrypoints feat: initial public release 2026-08-23 15:48:41 +01:00
utils feat: initial public release 2026-08-23 15:48:41 +01:00
.gitignore feat: initial public release 2026-08-23 15:48:41 +01:00
CHANGELOG.md feat: initial public release 2026-08-23 15:48:41 +01:00
CLAUDE.md feat: initial public release 2026-08-23 15:48:41 +01:00
CONTRIBUTING.md feat: initial public release 2026-08-23 15:48:41 +01:00
LICENSE feat: initial public release 2026-08-23 15:48:41 +01:00
package-lock.json feat: initial public release 2026-08-23 15:48:41 +01:00
package.json feat: initial public release 2026-08-23 15:48:41 +01:00
README.md feat: initial public release 2026-08-23 15:48:41 +01:00
tsconfig.json feat: initial public release 2026-08-23 15:48:41 +01:00
wxt.config.ts feat: initial public release 2026-08-23 15:48:41 +01:00

Tubeless

YouTube, with the noise let out.

A browser extension for Firefox and Chrome that hides Shorts, recommended-game shelves, event banners, sponsored in-feed slots, end-screen cards, the AI "Ask" button, and other curation noise on YouTube. Each toggle is independent and configurable from the popup. Pause the whole thing with one switch when you want plain YouTube back.

Works on desktop and on Firefox for Android.

Why

I've been a YouTube Premium subscriber for many years. Despite this, my YouTube feed was still cluttered with things I didn't want to see. Shorts all over the place, "Most relevant" sections, "Explore more topics" sections, "How are we doing" survey blocks, more Shorts, the list goes on.

I tried numerous other plugins, most helped, but none of them got rid of all of it, so I created Tubeless to solve the problem. I've been using it full time for many months with extensive YouTube browsing, and I'm constantly tweaking it.

Install

Or build from source below.

How it works

Tubeless is a thin content script that injects a single <style> element into youtube.com. Every toggle in the popup maps to a CSS rule that hides specific elements via display: none. There is no DOM mutation, no MutationObservers, no background workers doing real work, and no remote code.

The full set of selectors lives in utils/selectors.ts, annotated with confidence levels ( stable, ? likely-current, ! guess). When YouTube ships a redesign, that's the file to edit.

Privacy

  • No telemetry, no analytics, no network requests.
  • The only permission requested is storage, used to persist your settings (synced through your own browser account, nowhere else).
  • The manifest declares data_collection_permissions: ['none'].

Building from source

Requirements: Node 20+ and npm.

npm install
npm run dev         # WXT dev server, opens Firefox with the extension loaded
npm run dev:chrome  # same, for Chrome
npm run build       # unpacked build under .output/firefox-mv3
npm run zip         # produces .output/tubeless-<version>-firefox.zip
npm run zip:chrome  # produces .output/tubeless-<version>-chrome.zip
npm run compile     # TypeScript type-check (no emit)

package-lock.json pins every dependency, so builds are reproducible.

Project layout

entrypoints/
  content.ts          Content script - injects the <style> tag
  background.ts       Firefox-for-Android shim - opens the popup in a tab
  popup/              The toolbar popup UI (HTML/CSS/TS)
utils/
  selectors.ts        Single source of truth for what each toggle hides
  buildCss.ts         Composes the injected CSS from current settings
  settings.ts         Settings schema, defaults, and storage migration
assets/
  icon.svg            Source icon - rasterized to PNG icons at build time
wxt.config.ts         WXT/manifest configuration

Built with WXT.

License

MIT.