Skip to content

iiPythonx/feishin

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3,800 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

logo

Feishin

License Release Downloads

Discord Matrix


Rewrite of Sonixd.

Features

  • Web player backend
  • Modern UI
  • Scrobble playback to your server
  • Smart playlist editor (Navidrome)
  • Synchronized and unsynchronized lyrics support
  • Request a feature or view taskboard

Screenshots

Getting Started

Desktop (recommended)

Download the latest desktop client. The desktop client is the recommended way to use Feishin. It supports a web audio backend, as well as includes built-in fetching for lyrics.

Configuration

  1. 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 store.
  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 navidrome or subsonic), 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. When SERVER_LOCK=true, you can also set LEGACY_AUTHENTICATION=true or LEGACY_AUTHENTICATION=false to configure the legacy authentication flag for the server (only applicable for Subsonic/OpenSubsonic servers).

  3. Optional - If your server uses a separate public-facing URL than what integrating applications use internally to communicate with your server, such as a separate Navidrome ShareURL, set REMOTE_URL to said public-facing URL.

  4. Optional - App settings (theme, language, sidebar options, etc.) can be overridden with environment variables on first run. The variables use the FS_ prefix (e.g. FS_GENERAL_THEME=defaultDark, FS_GENERAL_LANGUAGE=de). See the settings environment variable documentation for the full list.

FAQ

What music servers does Feishin support?

Feishin supports any music server that implements a Navidrome, 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

Translation

This project uses Weblate for translations. If you would like to contribute, please visit the link and submit a translation.

License

GNU General Public License v3.0 ©

About

A modern self-hosted music player.

Resources

License

Stars

Watchers

Forks

Contributors

Languages

  • TypeScript 95.6%
  • CSS 4.3%
  • Other 0.1%