An open-source YouTube Desktop Client built with Electron, TypeScript, and Vite. Features a modular plugin system for customizing your YouTube experience.
- 🎥 Native YouTube experience in a desktop app
- 🔌 Modular plugin system
- 🛡️ Built-in ad blocker
- ⚙️ React-based settings window
- 🎨 Customizable via plugins
- AdBlocker - Blocks ads at the network level using filter lists
- SponsorBlock - Automatically skips sponsored segments
- Return YouTube Dislike - Shows dislike counts using the RYD API
- Unhook / UI Cleaner - Hide Shorts, Comments, Recommendations
- Discord RPC - Show "Watching [Video]" on Discord
- Node.js 18+
- npm or yarn
- Install dependencies:
npm install- Build the project:
npm run build- Run in development mode:
npm run electron:devbetter-youtube/
├── src/
│ ├── main/ # Electron main process
│ │ ├── index.ts # Main window setup
│ │ ├── plugins.ts # Plugin loader
│ │ └── discord-rpc.ts
│ ├── preload/ # Preload scripts
│ ├── plugins/ # Default plugins
│ │ ├── sponsorblock/
│ │ ├── return-dislike/
│ │ ├── unhook/
│ │ └── volume-booster/
│ └── settings/ # React settings UI
├── dist/ # Build output
└── package.json
npm run build
npm run electron:buildPlugins are stored in %APPDATA%/better-youtube/plugins/ (or equivalent on macOS/Linux).
Each plugin directory should contain:
renderer.js- Code injected into the YouTube pagepreload.js(optional) - IPC communication
// plugins/my-plugin/renderer.js
(function() {
'use strict';
// Your plugin code here
console.log('My plugin loaded!');
})();Plugin settings are stored using electron-store in the app's user data directory.
- Create a Discord application at https://discord.com/developers/applications
- Get your Client ID
- Update
src/main/discord-rpc.tswith your Client ID
MIT