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/iPadOS builds will soon be available via TestFlight.

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
  • Load/save queues
  • Multi-library support

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-2026 Julian Hofmann (+ Crossonic contributors)

Source code files in this repository are subject to the terms of the Mozilla Public License, v. 2.0, unless explicitly stated otherwise. If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.