- TypeScript 62.5%
- HTML 27.5%
- CSS 5.6%
- Swift 4.1%
- JavaScript 0.3%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| assets | ||
| docs | ||
| entrypoints | ||
| safari/Tubeless | ||
| scripts/screenshots | ||
| utils | ||
| .gitignore | ||
| CHANGELOG.md | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
| wxt.config.ts | ||
YouTube, quieter.
Install for Firefox · Install for Chrome · tubeless.app
Tubeless is a small extension for Firefox and Chrome that hides the parts of YouTube you'd rather not see. Shorts, ads, recommendation shelves, end-screen cards, comments: each one has its own switch in the popup, and one more brings plain YouTube back.
Works on desktop and on Firefox for Android.
What it hides
| Without Tubeless | With Tubeless |
|---|---|
![]() |
![]() |
![]() |
![]() |
Every switch works on its own, and sensible ones are on from the start. They are grouped in the popup by where they appear:
- Sidebar: Shorts, Explore, "More from YouTube", and the "You" section (full, minimal or hidden).
- Top bar: the Create button, the notifications bell and the filter chips.
- Feeds: on Home, Subscriptions and search results, every shelf at once, or gaming shelves, event, alert and promo banners and feed nudges one by one. Shorts, movies and shows, community posts, Mixes, playlists and podcasts, live streams, past live streams, music videos, member-only videos and Premieres. Channel pages are never filtered.
- Watch page: a trimmed row of action buttons, the merch and fundraiser shelves, live chat, end-screen cards, the description, comments, the recommendations sidebar and info panels.
- AI: video summaries, "Ask questions", Ask YouTube in the search bar and custom feed prompts.
- Ads: sponsored slots, display and companion ads, brand shelves, Premium upsells and the ad overlays on the player. This is cosmetic: an ad that plays inside the video still plays.
- Popups: survey and feedback prompts, in dialogs and in the feed.
- Layout: a thumbnail size slider that fits more videos in each row on Home, Subscriptions and channel pages.
One fix is always on and has no switch: YouTube's player leaves an invisible strip across the top of the video that swallows clicks, so clicking there doesn't pause or play. Tubeless lets those clicks through to the video.
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 extensions. 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
- Firefox: Firefox Add-ons
- Chrome: Chrome Web Store
How it works
Tubeless is a thin content script that injects a single <style> element into
youtube.com. Every switch in the popup maps to a CSS rule that hides specific
elements via display: none, plus one always-on rule that fixes the player's
dead click strip. 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 on Firefox and Chrome, kept on each device by Safari, and nowhere else). - The Firefox manifest declares
data_collection_permissions: ['none'].
Reporting a problem
YouTube changes its pages often, and a change can bring back something Tubeless used to hide, or hide something it shouldn't. Email bugs@tubeless.app saying which page it was, what you saw, your browser and the Tubeless version from the popup. A screenshot helps.
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 - rasterised to PNG icons at build time
wxt.config.ts WXT/manifest configuration
Built with WXT.
Licence
MIT.
Tubeless is an independent project, not affiliated with or endorsed by YouTube or Google.



