Skip to content

juho05/crossonic

Repository files navigation

Logo

Crossonic

A modern cross-platform music client for crossonic-server and other (Open)Subsonic compatible music servers.

Screenshots

Install

Status

This app is still in development. Some features are missing and bugs are to be expected.

Please report any issues or feature requests.

This app should be compatible with all Subsonic compatible servers, but I recommend to only use servers implementing the OpenSubsonic standard. For the best experience (and full feature support) I recommend using crossonic-server.

Release builds exist for these platforms:

  • Windows (.exe installer, .zip)
  • macOS (.dmg)
  • Linux (.AppImage, .tar.gz)
  • Android (.apk)
  • Web (.zip of static files), with some caveats:
    • some features are disabled
    • poor performance on some platforms/browsers
    • limited support for transcoded playback (depends on browser)
    • no gapless playback
    • sub-optimal image caching

iOS builds are not available because I do not have a paid Apple Developer account. However, the app does work on iPhones and iPads if you build and sign it yourself.

Features

  • Desktop and mobile layout
  • Configurable home page
  • Respects light/dark theme and accent color
  • System integration (Android media API, MPRIS, SystemMediaTransportControls, …)
  • Android Auto
    • Currently only playlists
  • Close to tray
  • Stream original or transcoded media
    • Configurable transcoding settings for WiFi and mobile
  • Browse/search songs, albums, artists
  • Release types (albums, EPs, singles, live, compilations, …)
  • Release versions (Deluxe, Remaster, different release years, etc.)
  • Favorite songs/albums/artists
  • Playlists
    • Download for offline listening
      • Original (uses download endpoint)
      • Transcoded
    • Add songs/albums/artists
    • Drag&drop reorder
    • Change cover (crossonic-server only)
  • Configure ListenBrainz connection (crossonic-server only)
  • Full OpenSubsonic support (gracefully handles missing features on the server)
    • API Key Authentication
    • Transcoded seek
    • Multiple artists/genres/…
    • etc.
  • Two queue system
    • Normal queue
      • Automatically populated when listening to an album/artist/playlist
    • Priority queue
      • For songs you want to listen now before continuing with the normal queue
    • Both can be freely modified
  • Shuffle artists by song or by album
  • Gapless playback
  • Lyrics
    • Unsynced
    • Synced
  • Replay gain
  • Casting (AirPlay on iOS and macOS already works)
  • Load/save queues
  • Internet Radio
  • Pre-cache next x songs for spotty networks
  • Jukebox
  • End-of-year recap

Out-of-scope

The OpenSubsonic API supports some features that are out-of-scope for this application:

  • Video support
  • Podcasts
  • Chat

Installation

Installation instructions are available on the Crossonic website.

Build

Install Flutter with all dependencies for your desired target platform.

IMPORTANT: Some Flutter versions cause issues e.g. with routing. Always use the Flutter version specified in this line of the release workflow when building this project.

Clone the repository

git clone https://github.com/juho05/crossonic
cd crossonic

Run code generation:

dart run build_runner build

Linux

Install dependencies

  • Install libmpv
  • Install ayatana-appindicator3-0.1 or appindicator3-0.1
Debian
sudo apt install mpv libmpv-dev libayatana-appindicator3-dev
ArchLinux
sudo pacman -S mpv libayatana-appindicator

Build

In the directory of the repository run:

flutter build linux

Windows

In the directory of the repository run:

flutter build windows

macOS

In the directory of the repository run:

flutter build macos

Android

In the directory of the repository run:

flutter build apk

iOS

  • Select your development team in Xcode
    • Open ./ios/Runner.xcworkspace in Xcode
    • Select Runner in the project navigator
    • Open the Signing & Capabilities tab and configure your signing config

In the directory of the repository run:

# to build an archive
flutter build ios

# to build a signed ipa file
flutter build ipa

Web

In the directory of the repository run:

flutter build web --wasm

Now you can serve ./build/web with a web server like Caddy.

Hosting requirements

  • Use TLS (https) if not on localhost
  • Ensure that /sqlite3.wasm is served with Content-Type: application/wasm
  • Set Cross-Origin-Opener-Policy to same-origin
  • Set Cross-Origin-Embedder-Policy to require-corp or credentialless

Screenshots

License

Copyright (c) 2024-2025 Julian Hofmann

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.