A modern self-hosted music player. https://feishin.vercel.app
Find a file
Ante 21e5a4dfd2
Some checks failed
Test / lint (push) Has been cancelled
Merge branch 'jeffvli:development' into development
2025-11-27 18:37:18 +00:00
.github add automatic update instructions to beta release notes 2025-11-03 00:44:52 -08:00
.vscode feat: add 'preservePitch' toggle to playback speed "dropdown" (#1243) 2025-11-06 01:10:17 -08:00
assets move fonts to assets folder 2025-06-26 01:36:16 -07:00
media Add new app icon (#232) 2023-09-21 11:24:20 -07:00
resources restructure files onto electron-vite boilerplate 2025-05-26 17:18:55 -07:00
scripts Add flatpak metadata and script to keep versions in sync (#1215) 2025-10-28 21:09:54 -07:00
src Merge branch 'jeffvli:development' into development 2025-11-27 18:37:18 +00:00
.dockerignore Add a pre-defined server for the docker version (#413) 2024-02-24 06:55:23 +00:00
.editorconfig fix editorconfig and downgrade react player back to lazy 2025-05-28 21:57:47 -07:00
.gitattributes Add files 2022-12-19 17:44:40 -08:00
.gitignore change build dir 2025-05-26 17:20:28 -07:00
.npmrc fixes for pnpm v10 2025-05-26 17:20:45 -07:00
.prettierignore restructure files onto electron-vite boilerplate 2025-05-26 17:18:55 -07:00
.prettierrc.yaml disable single attribute per line 2025-07-12 11:17:54 -07:00
.stylelintrc.json properly handle overflow on sidebar items (#971) 2025-06-29 18:56:46 -07:00
CHANGELOG.md Remove server files 2022-12-19 17:44:45 -08:00
dev-app-update.yml restructure files onto electron-vite boilerplate 2025-05-26 17:18:55 -07:00
docker-compose.yaml fix clipping description, update docker compose sample 2024-04-12 19:44:52 -07:00
Dockerfile bump to node 23 image 2025-06-02 21:39:12 -07:00
electron-builder-beta.yml update electronVersion to v38.5.0 2025-10-31 18:16:18 -07:00
electron-builder.yml feat: add audio channel configuration for MPV player 2025-11-27 20:16:06 +02:00
electron.vite.config.ts Migrate to Mantine v8 and Design Changes (#961) 2025-06-24 00:04:36 -07:00
eslint.config.mjs Migrate to Mantine v8 and Design Changes (#961) 2025-06-24 00:04:36 -07:00
feishin.desktop.tmpl Add flatpak metadata and script to keep versions in sync (#1215) 2025-10-28 21:09:54 -07:00
install-feishin-appimage Add flatpak metadata and script to keep versions in sync (#1215) 2025-10-28 21:09:54 -07:00
LICENSE Add files 2022-12-19 17:44:40 -08:00
ng.conf.template re-add ng.conf.template file 2025-06-02 21:20:57 -07:00
org.jeffvli.feishin.metainfo.xml Add flatpak metadata and script to keep versions in sync (#1215) 2025-10-28 21:09:54 -07:00
package.json feat: add audio channel configuration for MPV player 2025-11-27 20:16:06 +02:00
pnpm-lock.yaml upgrade and refactor for react-query v5 2025-11-02 01:38:47 -07:00
postcss.config.cjs Migrate to Mantine v8 and Design Changes (#961) 2025-06-24 00:04:36 -07:00
README.md Update README.md 2025-11-27 20:36:51 +02:00
remote.vite.config.ts fix and update remote design 2025-06-24 14:36:14 -07:00
settings.js.template Add a pre-defined server for the docker version (#413) 2024-02-24 06:55:23 +00:00
tsconfig.json restructure files onto electron-vite boilerplate 2025-05-26 17:18:55 -07:00
tsconfig.node.json fix all imports for new structure 2025-05-26 17:20:02 -07:00
tsconfig.web.json migrate to pnpm 2025-05-26 17:20:44 -07:00
vercel.json Add vercel rewrite 2023-08-08 00:23:38 -07:00
web.vite.config.ts Add PWA to web app (#1175) 2025-10-11 14:12:25 +00:00

logo

Feishin

⚠️ Fork Notice: This is a fork of the original Feishin project. I created this fork primarily to add folder view functionality that the original repo wasn't able to accommodate, along with some other features I found useful. While I'll try to keep this fork in sync with the original repo, that's not the primary focus. Feishin was pretty much perfect for me - I just missed the folder view feature. That said, I'll fix any obvious bugs I encounter, but for full support and the most up-to-date version, please stay with the original repository.

Note: I primarily use Linux desktop, so only Linux issues can be addressed if needed.

License Release Downloads

Discord Matrix


Rewrite of Sonixd.

Features

  • MPV player backend
  • Web player backend
  • Modern UI
  • Scrobble playback to your server
  • Smart playlist editor (Navidrome)
  • Synchronized and unsynchronized lyrics support

Screenshots

Getting Started

Linux Desktop

Download the latest desktop client. The desktop client is the recommended way to use Feishin. It supports both the MPV and web player backends, as well as includes built-in fetching for lyrics.

Configuration

  1. Upon startup you will be greeted with a prompt to select the path to your MPV binary. If you do not have MPV installed, you can download it here or install it using any package manager supported by your OS. After inputting the path, restart the app.

  2. After restarting the app, you will be prompted to select a server. Click the Open menu button and select Manage servers. Click the Add server button in the popup and fill out all applicable details. You will need to enter the full URL to your server, including the protocol and port if applicable (e.g. https://navidrome.my-server.com or http://192.168.0.1:4533).

  • Navidrome - For the best experience, select "Save password" when creating the server and configure the SessionTimeout setting in your Navidrome config to a larger value (e.g. 72h).
    • Linux users - The default password store uses libsecret. kwallet4/5/6 are also supported, but must be explicitly set in Settings > Window > Passwords/secret score.
  1. Optional - If you want to host Feishin on a subpath (not /), then pass in the following environment variable: PUBLIC_PATH=PATH. For example, to host on /feishin, pass in PUBLIC_PATH=/feishin.

  2. Optional - To hard code the server url, pass the following environment variables: SERVER_NAME, SERVER_TYPE (one of jellyfin or navidrome), SERVER_URL. To prevent users from changing these settings, pass SERVER_LOCK=true. This can only be set if all three of the previous values are set.

FAQ

MPV is either not working or is rapidly switching between pause/play states

First thing to do is check that your MPV binary path is correct. Navigate to the settings page and re-set the path and restart the app. If your issue still isn't resolved, try reinstalling MPV. Known working versions include v0.35.x and v0.36.x. v0.34.x is a known broken version.

What music servers does Feishin support?

Feishin supports any music server that implements a Navidrome, Jellyfin, or OpenSubsonic compatible API.

I have the issue "The SUID sandbox helper binary was found, but is not configured correctly" on Linux

This happens when you have user (unprivileged) namespaces disabled (sysctl kernel.unprivileged_userns_clone returns 0). You can fix this by either enabling unprivileged namespaces, or by making the chrome-sandbox Setuid.

chmod 4755 chrome-sandbox
sudo chown root:root chrome-sandbox

Ubuntu 24.04 specifically introduced breaking changes that affect how namespaces work. Please see https://discourse.ubuntu.com/t/ubuntu-24-04-lts-noble-numbat-release-notes/39890#:~:text=security%20improvements%20 for possible fixes.

Development

Built and tested using Node v23.11.0.

This project is built off of electron-vite

  • pnpm run dev - Start the development server
  • pnpm run dev:watch - Start the development server in watch mode (for main / preload HMR)
  • pnpm run start - Starts the app in production preview mode
  • pnpm run build - Builds the app for desktop
  • pnpm run build:electron - Build the electron app (main, preload, and renderer)
  • pnpm run build:remote - Build the remote app (remote)
  • pnpm run build:web - Build the standalone web app (renderer)
  • pnpm run package - Package the project
  • pnpm run package:dev - Package the project for development locally
  • pnpm run package:linux - Package the project for Linux locally
  • pnpm run package:mac - Package the project for Mac locally
  • pnpm run package:win - Package the project for Windows locally
  • pnpm run publish:linux - Publish the project for Linux
  • pnpm run publish:linux:beta - Publish the project for Linux (beta channel)
  • pnpm run publish:linux-arm64 - Publish the project for Linux ARM64
  • pnpm run publish:linux-arm64:beta - Publish the project for Linux ARM64 (beta channel)
  • pnpm run publish:mac - Publish the project for Mac
  • pnpm run publish:mac:beta - Publish the project for Mac (beta channel)
  • pnpm run publish:win - Publish the project for Windows
  • pnpm run publish:win:beta - Publish the project for Windows (beta channel)
  • pnpm run typecheck - Type check the project
  • pnpm run typecheck:node - Type check the project with tsconfig.node.json
  • pnpm run typecheck:web - Type check the project with tsconfig.web.json
  • pnpm run lint - Lint the project
  • pnpm run lint:fix - Lint the project and fix linting errors
  • pnpm run i18next - Generate i18n files

License

GNU General Public License v3.0 ©