- Browse your local music by songs, albums, and artists
- Full-text search across your entire library
- Favorites - mark songs, albums, and artists you love
- Recently played history
- Excluded folders - hide folders you don't want indexed
- Create and manage custom playlists
- Reorder songs with drag-and-drop
- Custom playlist covers (pick from gallery)
- MediaStore sync for system playlists
- Fullscreen and mini player views
- Swipe gestures - intuitive player controls
- Queue management - view and edit the playback queue
- Synced lyrics display
- Sleep timer - fall asleep to your music
- Crossfade - smooth transitions between tracks
- Playback speed & pitch control
- Equalizer with presets
- Background playback with media controls
- Sync playback across devices on the same network
- Connect via QR code scanning
- Real-time latency and connection quality monitoring
- Deep link support (
sono://sas)
- Last.fm integration - scrobble your listening history
- Artist biographies and images from Last.fm
- Lyrics fetching
- Album artwork with blur effects
- Rotating album art in now-playing view
- Auto-updates - stay up to date automatically
- Announcements - in-app announcements via API
- User registration and login
- Editable profile with display name, bio, and avatar
| Channel | Stability | Description |
|---|---|---|
| Stable | Production | Thoroughly tested, recommended for most users |
| Beta | Testing | New features, may have minor bugs |
| Nightly | Development | Latest code, may be unstable |
Download from Releases.
See BRANCHING.md for details on our release strategy.
- Flutter SDK 3.7+
- Android SDK (API level 21+)
- A Firebase project (for analytics/crash reporting)
-
Clone the repository
git clone https://github.com/appsono/sono-mobile.git cd sono-mobile -
Install dependencies
flutter pub get
-
Configure environment
cp .env.template .env
Edit
.envwith your API keys and configuration. -
Firebase setup
- Create a project at Firebase Console
- Download
google-services.jsontoandroid/app/ - Or copy the template:
cp android/app/google-services.json.template android/app/google-services.json
-
Run the app
flutter run
# Create keystore (first time only)
keytool -genkey -v -keystore ~/sono-release.jks -keyalg RSA -keysize 2048 -validity 10000 -alias sonokey
# Configure signing
cp android/key.properties.template android/key.properties
# Edit android/key.properties with your keystore details
# Build APK
flutter build apk --release
# Or build App Bundle
flutter build appbundle --releaselib/
├── main.dart # Entry point
├── app_scaffold.dart # Main shell with bottom navigation
├── firebase_options.dart # Firebase configuration
│
├── data/
│ ├── database/tables/ # SQLite table definitions
│ ├── migrations/ # Database migrations
│ ├── models/ # Data models (playlist, favorites, etc.)
│ └── repositories/ # Data access layer
│
├── models/
│ └── search/ # Search-related models
│
├── pages/
│ ├── api/admin/ # Admin API pages
│ ├── auth/ # Login, Registration
│ ├── info/ # Changelog, Credits, Recents
│ ├── library/ # Album, Artist, Playlist details
│ ├── main/settings/ # Home, Search, Library, Settings
│ └── setup/ # Onboarding flow
│
├── services/
│ ├── api/ # Backend API, Last.fm, MusicBrainz, Lyrics
│ ├── artists/ # Artist image fetching
│ ├── playlist/ # Playlist management
│ ├── sas/ # Shared Audio Session networking
│ ├── search/ # Search services
│ ├── settings/ # Settings services
│ └── utils/ # Theme, analytics, caching, updates
│
├── widgets/
│ ├── artists/ # Artist-related widgets
│ ├── global/ # Shared components (dialogs, headers, etc.)
│ ├── home/ # Home page widgets
│ ├── layout/ # Layout widgets
│ ├── library/ # Library page widgets
│ ├── navigation/ # Navigation widgets
│ ├── player/parts/ # Fullscreen player, mini player, queue, lyrics
│ ├── playlists/ # Playlist widgets
│ ├── sas/ # SAS connection UI
│ ├── search/pages/ # Search widgets
│ └── settings/ # Settings widgets
│
├── styles/ # Theme and text styles
└── utils/ # Helpers and utilities
| Category | Technology |
|---|---|
| Framework | Flutter |
| Audio | just_audio, audio_service |
| Music Library | on_audio_query (fork) |
| State | Provider, RxDart |
| Database | sqflite |
| Networking | http, web_socket_channel |
| Crash Reporting | Firebase Crashlytics |
We welcome contributions! Please read CONTRIBUTING.md before submitting a PR.
Always submit PRs to the nightly branch unless it's a hotfix.
See BRANCHING.md for our branching strategy.
This project is licensed under the GNU General Public License v3.0 - see LICENSE for details.
- Issues: GitHub Issues
- Website: sono.wtf
- Contact: business@mail.sono.wtf



