Browser extension that removes YouTube Shorts from the interface and redirects Shorts URLs to the standard video player.
- URL redirect — visiting
/shorts/VIDEO_IDautomatically redirects to/watch?v=VIDEO_ID(works for typed URLs, external links, and in-app navigation) - Hides Shorts from sidebar — removes the "Shorts" button from the left navigation panel
- Hides Shorts shelf — removes the Shorts section from the homepage
- Hides Shorts from search — removes Shorts filter chips, tabs, and individual Shorts results
- No UI — install and forget, no popup, no settings, no configuration
- No tracking — zero analytics, zero backend calls, zero data collection
- Minimal — 3 files, no dependencies, no frameworks, no build step
- Open
chrome://extensions - Enable Developer mode (toggle in top-right)
- Click Load unpacked
- Select the
shorts_removerfolder
Requires Xcode (free from the App Store, macOS 11+).
- Open
Safari/ShortsRemover/ShortsRemover.xcodeprojin Xcode - Select the target matching your platform:
- macOS — choose
ShortsRemover (macOS)scheme - iPhone/iPad — choose
ShortsRemover (iOS)scheme
- macOS — choose
- Build and run (Cmd+R)
- In Safari → Settings → Extensions, enable ShortsRemover and grant permission for
youtube.com
Simulator first-time setup: Safari → Settings → Advanced → check Show features for web developers, then Safari → Settings → Developer → check Allow unsigned extensions.
Real iPhone: Requires an Apple Developer account for code signing. The iOS simulator works without one.
macOS 10.14 (Mojave) note: Safari Web Extensions require Safari 14+ (macOS 11+). Mojave cannot build or run this extension. Use the Chromium version instead.
| Mechanism | What it does |
|---|---|
rules.json |
Declarative net request rule: regex captures video ID from /shorts/(ID) and redirects to /watch?v=ID |
content.js — yt-navigate-finish listener |
Catches SPA navigation within YouTube and redirects to /watch |
content.js — MutationObserver |
Watches for dynamically loaded Shorts elements and hides them immediately |
content.js — DOM queries |
Hides sidebar entry, shelves, chips, tabs, and individual Shorts video results |
shorts_remover/
├── manifest.json Chrome Manifest V3
├── rules.json DNR redirect rule
├── content.js Content script (runs on youtube.com)
├── icons/
│ ├── icon16.png
│ ├── icon48.png
│ └── icon128.png
└── Safari/
└── ShortsRemover/
├── ShortsRemover.xcodeproj Xcode project (macOS + iOS)
├── Shared (App)/ Code shared across platforms
├── Shared (Extension)/ Extension resources (content.js, rules.json)
├── macOS (App)/ macOS-specific files
├── macOS (Extension)/
├── iOS (App)/ iOS-specific files
└── iOS (Extension)/
Only one permission: declarativeNetRequest. No storage, no tabs, no scripting, no host data access beyond YouTube.
MIT