Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
4d3f911
misc: replace eslint + prettier with biomejs
Yumeo0 Oct 4, 2025
ea3b05b
misc: enable vcs support in biome config
Yumeo0 Oct 4, 2025
3760c7a
chore(i18n): Translated using Weblate (Hungarian)
Pr1styu Oct 3, 2025
f5dbe68
Add automated build workflow for pull requests from repository member…
Copilot Oct 5, 2025
efe198b
chore(i18n): Translated using Weblate (Chinese (Traditional Han script))
TN-TechNoob Oct 4, 2025
da59aaa
chore(i18n): Translated using Weblate (Dutch)
Oct 5, 2025
add542d
chore(i18n): Translated using Weblate (Dutch)
LiamAerts Oct 5, 2025
32981fd
Initial plan
Copilot Oct 5, 2025
24063f3
Fix pr-build-artifacts workflow to use correct output name
Copilot Oct 5, 2025
e316cdf
chore(i18n): Translated using Weblate (Filipino)
infyProductions Oct 6, 2025
1ca8a55
chore(i18n): Translated using Weblate (German)
lMortimerl Oct 7, 2025
93ae9df
chore(i18n): Translated using Weblate (Polish)
KutiFF Oct 7, 2025
eeb6572
chore(docs): Update README for Pear Desktop project
JellyBrick Oct 9, 2025
4892fc2
remove landing-pages
JellyBrick Oct 9, 2025
281f1ee
Update README for Pear Desktop installation and usage
JellyBrick Oct 9, 2025
38495f0
chore: Update README for package names and links
JellyBrick Oct 10, 2025
306ae01
remove asset
JellyBrick Oct 10, 2025
70fc97b
Update plugins.ts
dima-dencep Sep 13, 2025
18c7981
Merge pull request #3973 from pear-devs/downloader-fix
ArjixWasTaken Oct 10, 2025
8ca00b9
chore(i18n): Translated using Weblate (Ukrainian)
RomanGorbatko Oct 9, 2025
03e4763
chore(i18n): Translated using Weblate (Lithuanian)
itz3i Oct 9, 2025
78be4f4
chore(i18n): Translated using Weblate (Malay)
Oct 9, 2025
addaaa7
misc: replace eslint + prettier with biomejs
Yumeo0 Oct 4, 2025
d2778b9
feat: enable vcs integration
Yumeo0 Oct 10, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
146 changes: 146 additions & 0 deletions .github/workflows/pr-build-artifacts.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
name: Build PR Artifacts

on:
pull_request:
types: [opened, synchronize, reopened]

env:
NODE_VERSION: "22.x"

jobs:
check-permissions:
name: Check if user has write access
runs-on: ubuntu-latest
outputs:
has-write-access: ${{ steps.check.outputs.require-result }}
steps:
- name: Check user permission
id: check
uses: actions-cool/check-user-permission@v2
with:
require: write
username: ${{ github.event.pull_request.user.login }}

build:
name: Build ${{ matrix.os }}
needs: check-permissions
if: needs.check-permissions.outputs.has-write-access == 'true'
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macos-latest, ubuntu-latest, windows-latest]

steps:
- uses: actions/checkout@v5

- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10
run_install: false

- name: Setup NodeJS
if: startsWith(matrix.os, 'macOS') != true
uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'

- name: Setup NodeJS for macOS
if: startsWith(matrix.os, 'macOS')
uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Build on macOS
if: startsWith(matrix.os, 'macOS')
run: |
pnpm dist:mac
pnpm dist:mac:arm64

- name: Install Linux dependencies
if: startsWith(matrix.os, 'ubuntu')
run: |
sudo snap install snapcraft --classic
sudo apt update
sudo apt install -y flatpak flatpak-builder
sudo flatpak remote-add --if-not-exists --system flathub https://flathub.org/repo/flathub.flatpakrepo
sudo flatpak install -y flathub org.freedesktop.Platform/x86_64/24.08
sudo flatpak install -y flathub org.freedesktop.Sdk/x86_64/24.08
sudo flatpak install -y flathub org.electronjs.Electron2.BaseApp/x86_64/24.08

- name: Build on Linux
if: startsWith(matrix.os, 'ubuntu')
run: |
pnpm dist:linux
pnpm dist:linux:deb-arm64
pnpm dist:linux:rpm-arm64

- name: Build on Windows
if: startsWith(matrix.os, 'windows')
run: |
pnpm dist:win

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: build-artifacts-${{ matrix.os }}
path: pack/
retention-days: 7
if-no-files-found: error

comment:
name: Comment on PR
needs: [check-permissions, build]
if: always() && needs.check-permissions.outputs.has-write-access == 'true'
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: Create comment
uses: actions/github-script@v7
with:
script: |
const runId = context.runId;
const runUrl = `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${runId}`;

const buildResult = '${{ needs.build.result }}';

let comment;
if (buildResult === 'success') {
comment = `## 🚀 Build Artifacts Ready!

The builds have completed successfully. You can download the artifacts from the workflow run:

**[📦 Download Artifacts](${runUrl})**

### Available builds:
- **Windows**: \`build-artifacts-windows-latest\`
- **macOS**: \`build-artifacts-macos-latest\`
- **Linux**: \`build-artifacts-ubuntu-latest\`

*Note: Artifacts are available for 7 days.*`;
} else if (buildResult === 'failure') {
comment = `## ❌ Build Failed

Unfortunately, one or more builds failed. Please check the workflow run for details:

**[View Workflow Run](${runUrl})**`;
} else {
comment = `## ⚠️ Build Status: ${buildResult}

The build process completed with status: **${buildResult}**

**[View Workflow Run](${runUrl})**`;
}

github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: comment
});
7 changes: 3 additions & 4 deletions .github/workflows/reviewdog.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ env:
NODE_VERSION: "22.x"

jobs:
eslint:
name: runner / eslint
biome:
name: runner / Biome
runs-on: ubuntu-latest
permissions:
contents: read
Expand All @@ -33,9 +33,8 @@ jobs:
- name: Install dependencies
run: pnpm install --frozen-lockfile

- uses: reviewdog/action-eslint@v1.34.0
- uses: mongolyy/reviewdog-action-biome@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
reporter: github-pr-review # Change reporter.
eslint_flags: './src'
fail_level: error
7 changes: 0 additions & 7 deletions .prettierrc

This file was deleted.

3 changes: 3 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"recommendations": ["biomejs.biome"]
}
51 changes: 25 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
<div align="center">

# YTMD
# :pear: Pear Desktop

[![GitHub release](https://img.shields.io/github/release/th-ch/youtube-music.svg?style=for-the-badge&logo=youtube-music)](https://github.com/th-ch/youtube-music/releases/)
[![GitHub license](https://img.shields.io/github/license/th-ch/youtube-music.svg?style=for-the-badge)](https://github.com/th-ch/youtube-music/blob/master/license)
[![eslint code style](https://img.shields.io/badge/code_style-eslint-5ed9c7.svg?style=for-the-badge)](https://github.com/th-ch/youtube-music/blob/master/eslint.config.mjs)
[![Build status](https://img.shields.io/github/actions/workflow/status/th-ch/youtube-music/build.yml?branch=master&style=for-the-badge&logo=youtube-music)](https://GitHub.com/th-ch/youtube-music/releases/)
[![GitHub All Releases](https://img.shields.io/github/downloads/th-ch/youtube-music/total?style=for-the-badge&logo=youtube-music)](https://GitHub.com/th-ch/youtube-music/releases/)
[![AUR](https://img.shields.io/aur/version/youtube-music-bin?color=blueviolet&style=for-the-badge&logo=youtube-music)](https://aur.archlinux.org/packages/youtube-music-bin)
[![Known Vulnerabilities](https://snyk.io/test/github/th-ch/youtube-music/badge.svg)](https://snyk.io/test/github/th-ch/youtube-music)
[![GitHub release](https://img.shields.io/github/release/pear-devs/pear-desktop.svg?style=for-the-badge)](https://github.com/pear-devs/pear-desktop/releases/)
[![GitHub license](https://img.shields.io/github/license/pear-devs/pear-desktop.svg?style=for-the-badge)](https://github.com/pear-devs/pear-desktop/blob/master/license)
[![Formatted with Biome](https://img.shields.io/badge/Formatted_with-Biome-60a5fa?style=for-the-badge&logo=biome)](https://biomejs.dev/)
[![Build status](https://img.shields.io/github/actions/workflow/status/pear-devs/pear-desktop/build.yml?branch=master&style=for-the-badge)](https://GitHub.com/pear-devs/pear-desktop/releases/)
[![GitHub All Releases](https://img.shields.io/github/downloads/pear-devs/pear-desktop/total?style=for-the-badge)](https://GitHub.com/pear-devs/pear-desktop/releases/)
<!--[![AUR](https://img.shields.io/aur/version/youtube-music-bin?color=blueviolet&style=for-the-badge)](https://aur.archlinux.org/packages/youtube-music-bin)-->
[![Known Vulnerabilities](https://snyk.io/test/github/pear-devs/pear-desktop/badge.svg)](https://snyk.io/test/github/pear-devs/pear-desktop)

</div>

![Screenshot](web/screenshot.png "Screenshot")
<!--![Screenshot](web/screenshot.png "Screenshot")-->

- Native look & feel extension, aims at keeping the original interface
one click
- Native look & feel extension

> [!IMPORTANT]
> ⚠️ Disclaimer
Expand Down Expand Up @@ -63,52 +62,52 @@ You can help with translation on [Hosted Weblate](https://hosted.weblate.org/pro

## Download

You can check out the [latest release](https://github.com/th-ch/youtube-music/releases/latest) to quickly find the
You can check out the [latest release](https://github.com/pear-devs/pear-desktop/releases/latest) to quickly find the
latest version.

### Arch Linux

Install the [`youtube-music-bin`](https://aur.archlinux.org/packages/youtube-music-bin) package from the AUR. For AUR installation instructions, take a look at
Install the [`pear-desktop`](https://aur.archlinux.org/packages/pear-desktop) package from the AUR. For AUR installation instructions, take a look at
this [wiki page](https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_packages).

### macOS

You can install the app using Homebrew (see the [cask definition](https://github.com/th-ch/homebrew-youtube-music)):
You can install the app using Homebrew (see the [cask definition](https://github.com/pear-devs/pear-desktop-homebrew)):

```bash
brew install th-ch/youtube-music/youtube-music
brew install pear-devs/pear-desktop
```

If you install the app manually and get an error "is damaged and can’t be opened." when launching the app, run the following in the Terminal:

```bash
/usr/bin/xattr -cr /Applications/YouTube\ Music.app
/usr/bin/xattr -cr /Applications/Pear\ Desktop.app
```

### Windows

You can use the [Scoop package manager](https://scoop.sh) to install the `youtube-music` package from
You can use the [Scoop package manager](https://scoop.sh) to install the `pear-desktop` package from
the [`extras` bucket](https://github.com/ScoopInstaller/Extras).

```bash
scoop bucket add extras
scoop install extras/youtube-music
scoop install extras/pear-desktop
```

Alternately you can use [Winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/), Windows 11s
official CLI package manager to install the `th-ch.YouTubeMusic` package.
official CLI package manager to install the `pear-devs.pear-desktop` package.

*Note: Microsoft Defender SmartScreen might block the installation since it is from an "unknown publisher". This is also
true for the manual installation when trying to run the executable(.exe) after a manual download here on github (same
file).*

```bash
winget install th-ch.YouTubeMusic
winget install pear-devs.pear-desktop
```

#### How to install without a network connection? (in Windows)

- Download the `*.nsis.7z` file for _your device architecture_ in [release page](https://github.com/th-ch/youtube-music/releases/latest).
- Download the `*.nsis.7z` file for _your device architecture_ in [release page](https://github.com/pear-devs/pear-desktop/releases/latest).
- `x64` for 64-bit Windows
- `ia32` for 32-bit Windows
- `arm64` for ARM64 Windows
Expand All @@ -125,8 +124,8 @@ Some predefined themes are available in https://github.com/kerichdev/themes-for-
## Dev

```bash
git clone https://github.com/th-ch/youtube-music
cd youtube-music
git clone https://github.com/pear-devs/pear-desktop
cd pear-desktop
pnpm install --frozen-lockfile
pnpm dev
```
Expand Down Expand Up @@ -191,7 +190,7 @@ export default createPlugin({
console.log(await context.ipc.invoke('some-event'));
},
// Only renderer available hook
onPlayerApiReady(api: YoutubePlayer, context: RendererContext) {
onPlayerApiReady(api, context) {
// set plugin config easily
context.setConfig({ myConfig: api.getVolume() });
},
Expand Down Expand Up @@ -220,7 +219,7 @@ import { createPlugin } from '@/utils';

export default createPlugin({
name: 'Plugin Label',
restartNeeded: true, // if value is true, ytmusic will show a restart dialog
restartNeeded: true, // if value is true, pear-desktop will show a restart dialog
config: {
enabled: false,
}, // your custom config
Expand Down Expand Up @@ -282,7 +281,7 @@ Uses [Playwright](https://playwright.dev/) to test the app.

## License

MIT © [th-ch](https://github.com/th-ch/youtube-music)
MIT © [pear-devs](https://github.com/pear-devs/pear-desktop)

## FAQ

Expand Down
Loading
Loading