Universal Music Link Sharing
Official Website • Features • Screenshots • Download
Share your favorite music across all streaming platforms with a single tap
UniTune eliminates the frustration of incompatible music links. When a friend shares a Spotify link but you use Apple Music, UniTune instantly converts it to your preferred platform. Built with Flutter and featuring a glass design, UniTune makes cross-platform music sharing effortless while keeping your data completely private.
Interested in testing UniTune? We are currently looking for beta testers on Android. Apply here: https://forms.gle/k2HPCNpEYtdeVZpz5
Paste any music link and UniTune converts it to all supported platforms in one request. Supports tracks, albums, artists, and playlists across Spotify, Apple Music, YouTube Music, Deezer, TIDAL, and Amazon Music.
Hit share inside Spotify, Tidal, or any other streaming app, pick UniTune from the share sheet, and it converts the link and forwards it to your contact in a single flow. No copy-pasting, no app switching.
Set UniTune as the default handler for music links on Android. When someone sends you a Spotify link in WhatsApp or anywhere else, tapping it opens the song directly in your preferred music app automatically.
Build cross-platform playlists of 3 to 10 tracks from any streaming service. Share them as a single UniTune link or as a QR code with a visual share card. Anyone who opens the link can play each track on whichever service they use.
No accounts, no login, no analytics. All data stays on your device. The only outbound request is to the conversion API.
UniTune shows ads via Google AdMob. The app relies on a self-hosted backend that performs all music link conversions. Running that backend has real infrastructure costs. Ads are the way to cover those costs and keep the app free. No ad data is linked to your identity, and no personal information leaves your device.
Album artwork automatically influences the entire app color scheme for every song you open. Every conversion looks different.
Full history of converted links with statistics on platform usage, sharing frequency, and trends over adjustable time periods.
Glassmorphism UI with smooth animations throughout every screen, consistent with modern Android and iOS design language.
|
|
|
| Platform | Download | Requirements |
| Android | GitHub Releases (APK) | Android 5.0+ |
| iOS | Coming Soon | iOS 12.0+ |
| F-Droid | Coming Soon | - |
| Google Play | Coming Soon | - |
| App Store | Coming Soon | - |
- Download the latest APK from GitHub Releases and install it
- Open the app and complete the onboarding flow
- Select your preferred music streaming service
- Choose your favorite messaging apps for sharing
- On Android: enable Music Link Interception in the onboarding step or later in Settings
- Start converting and sharing music links
| Tool | Version | Purpose |
|---|---|---|
| Flutter SDK | 3.27.1+ | Framework |
| Dart SDK | 3.10.7+ | Language |
| Android Studio | Latest | Android development |
| Xcode | Latest | iOS development (macOS only) |
# Clone the repository
git clone https://github.com/FlazeIGuess/unitune.git
cd unitune/unitune-app
# Install dependencies
flutter pub get
# Generate code (Riverpod)
flutter pub run build_runner build --delete-conflicting-outputs
# Run the app in debug mode
flutter run
# Run with specific device
flutter run -d <device-id># Android APK (for direct distribution)
flutter build apk --release
# Android App Bundle (for Google Play Store)
flutter build appbundle --release
# iOS (macOS only, requires Apple Developer account)
flutter build ios --release
# Generate app icons
flutter pub run flutter_launcher_iconsUniTune uses code generation for Riverpod providers:
# Watch mode (auto-regenerate on changes)
flutter pub run build_runner watch
# One-time generation
flutter pub run build_runner build --delete-conflicting-outputslib/
├── core/ # Shared foundation
│ ├── ads/ # AdMob configuration and helpers
│ ├── animations/ # Page transitions, fade effects
│ ├── constants/ # Service definitions, app constants
│ ├── security/ # URL validation, input sanitization
│ ├── theme/ # Dynamic theming, color extraction
│ ├── utils/ # Helpers, logging, responsive utilities
│ └── widgets/ # Reusable UI components (glass, buttons)
│
├── data/ # Data layer
│ ├── models/ # Data models (HistoryEntry, MiniPlaylist, etc.)
│ └── repositories/ # Data access (History, Cache, Playlists, API)
│
└── features/ # Feature modules
├── home/ # Main conversion screen with smart paste
├── history/ # Sharing history & statistics
├── playlists/ # Mini Playlists (create, QR, import, share)
├── settings/ # App preferences & configuration
├── onboarding/ # First-run experience incl. link interception step
└── sharing/ # Share intent handling & processing screen
| Category | Technology | Purpose |
|---|---|---|
| Framework | Flutter 3.27.1 | Cross-platform UI |
| Language | Dart 3.10.7 | Programming language |
| State Management | Riverpod 2.6.1 | Reactive state management |
| Navigation | GoRouter 14.8.1 | Declarative routing & deep links |
| Local Storage | SharedPreferences 2.3.5 | Persistent key-value storage |
| Networking | HTTP 1.3.0 | API communication |
| UI Effects | Glass Renderer 0.2.0 | Glassmorphism effects |
| Charts | FL Chart 0.69.0 | Statistics visualization |
| Color Extraction | Palette Generator 0.3.3 | Dynamic theming from images |
| Screenshots | screenshot 3.0.0 | Widget-to-image for share cards |
| Image Processing | image 4.1.7 | Cover art collage generation |
| Monetization | Google Mobile Ads 5.2.0 | AdMob integration |
- Feature-First Architecture: Organized by features rather than layers
- Repository Pattern: Abstracted data access layer
- Provider Pattern: Riverpod for dependency injection and state
- Responsive Design: Adaptive layouts for different screen sizes
- Dynamic Theming: Runtime color scheme generation from album art
UniTune is built with privacy as a core principle:
- 100% Local Storage: All data remains on your device
- No Cloud Sync: No external servers store your information
- No User Accounts: No registration or authentication required
- No Tracking: Zero analytics, telemetry, or usage tracking
- URL Validation: All input URLs are validated and sanitized
- Secure Communication: HTTPS-only API communication
- No Data Collection: We don't collect, store, or share any user data
- Open Source: Fully auditable codebase under AGPL-3.0
| Permission | Purpose | Required |
|---|---|---|
| Internet | Convert music links via API | Yes |
| Query Installed Apps | Detect available music/messaging apps | Yes |
| Read/Write Storage | Save sharing history locally | Yes |
UniTune requests only essential permissions and never accesses sensitive data like contacts, location, or camera.
We welcome contributions from the community! Whether you're fixing bugs, adding features, or improving documentation, your help is appreciated.
- Fork the Repository: Create your own fork of the project
- Create a Branch:
git checkout -b feature/your-feature-name - Make Changes: Implement your feature or fix
- Test Thoroughly: Ensure all existing tests pass and add new ones
- Follow Style Guidelines: Use Flutter/Dart conventions
- Commit Changes: Write clear, descriptive commit messages
- Push to Fork:
git push origin feature/your-feature-name - Open Pull Request: Submit a PR with detailed description
- Follow Flutter and Dart style guidelines
- Write unit tests for new features
- Update documentation for API changes
- Ensure CI/CD checks pass
- Use English for all code, comments, and documentation
- No emojis in code or documentation (use icons where appropriate)
- Maintain the glass design language
// Good: Clear naming, proper formatting
Future<List<HistoryEntry>> fetchHistory({
required int limit,
DateTime? startDate,
}) async {
// Implementation
}
// Bad: Unclear naming, poor formatting
Future<List<HistoryEntry>> getStuff(int l,DateTime? d)async{
// Implementation
}Found a bug or have a feature request? Open an issue on GitHub with:
- Clear description of the problem or feature
- Steps to reproduce (for bugs)
- Expected vs actual behavior
- Device and OS version
- Screenshots or logs (if applicable)
- unitune-api - Backend API for link conversion
- unitune-worker - Cloudflare Worker for web interface
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).
See LICENSE for details.
Any use, modification, or distribution of this software must include proper attribution to the original author and project.
- Music link conversion powered by custom API
- UI design inspired by modern glassmorphism trends
- Built with Flutter and Riverpod
UniTune is free and open source. If you find it useful, consider supporting development to help cover infrastructure costs and the Apple Developer fee for the upcoming iOS release.
Want to test the beta? Apply here: Beta Tester Form
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Made with care by FlazeIGuess



