Skip to content
YouTube Music Desktop App bundled with custom plugins (and built-in ad blocker)
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
.travis.yml Install deps in docker Apr 28, 2019
preload.js Display error/retry in case of failure May 1, 2019
screenshot.jpg Fix screenshot shadow + compress image Apr 19, 2019

YouTube Music

GitHub release GitHub license XO code style Build status Build Status


Electron wrapper around YouTube Music featuring:

  • Native look & feel, aims at keeping the original interface
  • Framework for custom plugins: change YouTube Music to your needs (style, content, features), enable/disable plugins in one click


You can check out the latest release to quickly find the latest version.

Available plugins:

  • Ad Blocker: block all ads and tracking out of the box
  • No Google Login: remove Google login buttons and links from the interface
  • Shortcuts: use your usual shortcuts (media keys, Ctrl/CMD + F…) to control YouTube Music
  • Navigation: next/back navigation arrows directly integrated in the interface, like in your favorite browser


git clone
cd youtube-music
npm install
npm start

Build your own plugins

Using plugins, you can:

  • manipulate the app - the BrowserWindow from electron is passed to the plugin handler
  • change the front by manipulating the HTML/CSS

Creating a plugin

Create a folder in plugins/YOUR-PLUGIN-NAME:

  • if you need to manipulate the BrowserWindow, create a file back.js with the following template:
module.exports = win => {
	// win is the BrowserWindow object
  • if you need to change the front, create a file front.js with the following template:
module.exports = () => {
	// This function will be called as a preload script
	// So you can use front features like `document.querySelector`

Common use cases

  • injecting custom CSS: create a style.css file in the same folder then:
const path = require("path");
const { injectCSS } = require("../utils");

// back.js
module.exports = win => {
	injectCSS(win.webContents, path.join(__dirname, "style.css"));
  • changing the HTML:
// front.js
module.exports = () => {
	// Remove the login button
  • communicating between the front and back: can be done using the ipcMain module from electron. See utils.js file and example in navigation plugin.


npm run build

Builds the app for macOS, Linux, and Windows, using electron-builder.


MIT © th-ch

You can’t perform that action at this time.