A cross platform music client for crossonic-server.
This app is still in development. Some features are missing and bugs are to be expected.
See Supported platforms for a status per platform.
- Desktop and mobile layout
- Respects light/dark theme and accent color
- System integration (Android media API, MPRIS, SystemMediaTransportControls, …)
- Stream original or transcoded media
- configurable transcoding settings for WiFi and mobile
- Browse/search songs, albums, artists
- Favorite songs/albums/artists
- Playlists
- download for offline listening (except web)
- ListenBrainz integration
- scrobble
- sync favorite songs
- 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
- normal queue
- Shuffle artists by song or by album
- Gapless playback
- Lyrics
- unsynced
- synced
- Replay gain
- Jukebox
- Save queues
- Remote control other devices running the app
While this app can be built for every platform Flutter supports (although some additional configuration might be necessary), playback can be very buggy on some platforms and might not support all features.
fully supported
- Linux
- Android (no AAC support)
- macOS
- Windows
some limitations
- Web (no playlist download, no gapless)
- Safari playback randomly stops when streaming transcoded media
unsupported
- iOS
Install Flutter with all dependencies for your desired target platform.
Clone the repository
git clone https://github.com/juho05/crossonic
cd crossonic
Generate json bindings:
dart run build_runner build
- Install GStreamer.
- Install libsecret-1-0 and libjsoncpp1
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-good gstreamer1.0-plugins-bad libsecret-1-dev libjsoncpp-dev
sudo pacman -S gstreamer gst-libav gst-plugins-base gst-plugins-goodgstreamer1.0-plugins-bad libsecret jsoncpp
In the directory of the repository run:
flutter build linux --release
The built executable is at ./build/linux/x64/release/bundle/Crossonic
.
Install GStreamer for example with chocolatey:
choco install gstreamer gstreamer-devel
In the directory of the repository run:
flutter build windows --release
NOTE: The first time starting playback the program might hang for a few seconds and a command prompt window might pop up. This is a one-time event. Just wait until the playback starts.
- Install GStreamer (runtime and development)
In the directory of the repository run:
flutter build macos --release
- Download GStreamer for Android
- Extract the file and rename the resulting directory to
gst-android
- Move
gst-android
into./native_bindings/gstreamer/gstreamer_ffi/third-party
In the directory of the repository run:
flutter build apk --release
No additional dependencies should be required.
In the directory of the repository run:
flutter build web --release
Now you can serve ./build/web
with a web server like Caddy.
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/.