A cross-browser extension to hide YouTube Shorts and extend playback speed controls.
- Features
- Browser Support
- Installation
- Usage
- Development
- Building
- Troubleshooting
- Contributing
- License
- Hide YouTube Shorts across the entire site (homepage, subscriptions, search results)
- Hide unwanted sections: Explore, More from YouTube, Breaking News, Playables, Movies, and Home topic tabs
- Extended playback speed controls (0.1x to 5x) with a custom UI
- All features are toggleable via the extension popup
- Cross-browser support for Chrome and Firefox
| Browser | Status | Installation |
|---|---|---|
| Chrome | ✅ Supported | Chrome Web Store or Manual |
| Firefox | ✅ Supported | Firefox Add-ons or Manual |
| Edge | ✅ Supported | Use Chrome build |
| Safari | ❌ Not supported | - |
Install from the Chrome Web Store:
- Click the link above
- Click "Add to Chrome"
- Pin the extension for easy access
Install from Firefox Add-ons:
- Click the link above
- Click "Add to Firefox"
- Allow the extension to run on YouTube
For development or testing the latest version:
-
Clone or download this repository:
git clone https://github.com/goosewin/better-youtube.git cd better-youtube -
Build the extension:
npm run build
-
Open Chrome and navigate to
chrome://extensions/ -
Enable "Developer mode" (toggle in top-right corner)
-
Click "Load unpacked" and select the
dist/chromefolder -
The extension icon should appear in your toolbar
-
Clone or download this repository (same as above)
-
Build the extension:
npm run build
-
Open Firefox and navigate to
about:debugging -
Click "This Firefox" (or "This Nightly" etc.)
-
Click "Load Temporary Add-on..."
-
Navigate to the
dist/firefoxfolder and selectmanifest.json -
The extension will be loaded temporarily (will persist until browser restart)
For permanent installation in Firefox:
- Build the package:
npm run build:firefox - Install the generated
dist/better-youtube-firefox.zipfile
-
Navigate to YouTube
-
Click the Better YouTube extension icon in your browser toolbar
-
Use the toggles to control which features are enabled:
- Shorts filter - Hide all Shorts content
- Hide Explore - Remove the Explore section from sidebar
- Hide More from YouTube - Remove "More from YouTube" sections
- Hide Breaking News - Remove Breaking News sections
- Hide Playables - Remove YouTube Playables sections
- Hide Movies - Remove Movies sections
- Hide Home topic tabs - Remove topic filter tabs on homepage
- Playback speed controls - Add 0.1x-5x speed slider to video player
-
Playback speed controls appear in the video player when enabled
- Node.js 16+ and npm
- Chrome or Firefox browser
# Clone the repository
git clone https://github.com/goosewin/better-youtube.git
cd better-youtube
# Install dependencies
npm installTests use Playwright to verify functionality on both Chrome and Firefox.
Important: Build the extension first before running tests:
npm run buildRun all tests (both browsers):
npm testRun tests for specific browser:
# Chrome only
npm run test:chrome
# Firefox only
npm run test:firefoxRun specific test:
# Chrome tests
npm run test:ext-9:chrome # Homepage Shorts hiding
npm run test:ext-10:chrome # Search and subscriptions
npm run test:ext-11:chrome # Toggle functionality
# Firefox tests
npm run test:ext-9:firefox # Homepage Shorts hiding
npm run test:ext-10:firefox # Search and subscriptions
npm run test:ext-11:firefox # Toggle functionalityTest descriptions:
- ext-9: Verifies Shorts are hidden on YouTube homepage
- ext-10: Verifies Shorts are hidden in search results and subscriptions feed
- ext-11: Verifies toggle functionality works and settings persist
better-youtube/
├── manifest.json # Source manifest (Chrome format)
├── content-script.js # Main content script for YouTube
├── popup.html # Extension popup UI
├── popup.js # Popup logic
├── browser-polyfill.js # Cross-browser API compatibility
├── build.cjs # Build script for both browsers
├── dist/ # Build output (generated)
│ ├── chrome/ # Chrome-ready extension
│ └── firefox/ # Firefox-ready extension
├── icons/ # Extension icons
└── tests/ # Integration tests
npm run buildThis creates:
dist/chrome/- Ready to load in Chrome/Edgedist/firefox/- Ready to load in Firefox
Chrome:
npm run build:chromeCreates dist/better-youtube-chrome.zip for Chrome Web Store submission.
Firefox:
npm run build:firefoxCreates dist/better-youtube-firefox.zip for Firefox Add-ons submission.
This extension uses:
- Manifest V3 - Supported by both Chrome and Firefox
- webextension-polyfill - Provides consistent
browser.*API across browsers - Build script - Generates browser-specific manifests automatically
Key differences handled by the build:
- Chrome uses
host_permissionsfor URL patterns - Firefox includes hosts in
permissionsarray - Firefox requires
browser_specific_settings.gecko.id
- Refresh the YouTube page after installing
- Check that the extension has permission to run on youtube.com
- Try disabling and re-enabling the extension
If you use an adblocker, videos might fail to load with "This content isn't available, try again later."
Solutions:
- Reload the page
- Temporarily disable your adblocker on YouTube
- Whitelist YouTube in your adblocker
When loading as a "Temporary Add-on", the extension only lasts until Firefox restarts. For permanent installation:
- Build the package:
npm run build:firefox - Submit to Firefox Add-ons or
- Use
about:addons→ "Install from File" (requires signed extension)
- Ensure "Playback speed controls" is enabled in the popup
- Refresh the YouTube page
- Start playing a video (controls appear on the player)
The extension uses browser sync storage. Check that:
- You're signed into your browser
- Sync is enabled for extensions/add-ons
Contributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes with clear, focused commits
- Test your changes in both Chrome and Firefox
- Update documentation if needed
- Submit a pull request
When reporting bugs, please include:
- Browser and version
- Extension version
- Steps to reproduce
- Expected vs actual behavior
- Screenshots if applicable
MIT License
Copyright (c) 2024 Dan Goosewin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Website: goosewin.com
Contact: dan@goosewin.com
Repository: github.com/goosewin/better-youtube