iTune Docs GitHub ← Back to site

iTune for Android

Music, with room to make it yours.

iTune is an open-source Android music player built with Kotlin, Jetpack Compose, and Media3. It brings music discovery, synchronized lyrics, audio controls, offline library tools, radio, and a customizable player into one app.

Android 7.0+KotlinJetpack ComposeMedia3MIT-licensed source
Availability depends on your device and services. Music catalogs, artwork, lyrics, radio, account connections, and audio processing rely on upstream providers, Android behavior, and compatible hardware. Use sources and downloads only for content you are authorized to access.

Architecture

How the app works

Jetpack Compose renders the screens. App state coordinates playback, settings, and the library, while Media3 handles core playback. Separate packages manage lyrics, downloads, audio effects, radio, backups, and Android surfaces such as notifications and widgets.

App interfaceHome, search, library, artists, albums, player, queue, lyrics, account, and settings screens.
Playback & servicesMedia3 playback state with app backends for music discovery, lyrics, caching, downloads, and integrations.

The project has an Android app module and a Kotlin/JVM Discord RPC module. The repository’s source tree shows the current package layout.

Find something to play

Discover & search

Search and browse supported songs, artists, albums, playlists, charts, moods, genres, and radio collections. Open artist or album pages to explore artwork, track lists, and related releases. Search types, content region, and language can be configured in settings.

  • Browse catalog shelves and supported music collections.
  • Open artist and album details, then add or play tracks.
  • Import supported playlist links and use compatible share intents.
  • Keep search history locally, pause new history entries, or clear saved searches.

Results and playback availability can change when an upstream catalog changes, rate-limits access, or is unavailable in a region.

Playback & words

Player, queue & lyrics

The full-screen player presents artwork, track and artist details, playback progress, the active output route, queue tools, and lyrics. Queue tracks can be added, removed, reordered, or played directly.

Timed lyrics and translation

Lyrics can be searched through an ordered set of providers. When timing data is available, lines follow playback. Open the full lyrics view to follow more lines, adjust supported timing, translate through a configured provider, or share selected lines as a card.

Playback behavior

Playback settings include repeat, shuffle, crossfade, AutoMix, Afterglow, persistent shuffle, automatic skip after playback errors, and recurring sleep schedules. Availability and behavior may depend on the active source and current player state.

Sound & hardware

Audio engine & output

Audio tools include the in-app equalizer and supported processing modes such as low-pass filtering, spatial/8D audio, normalization, and DJ processing. The app can show the active output route and offers USB/bit-perfect configuration for compatible devices.

  • Effect availability depends on the current route and audio session.
  • Bluetooth codecs, vendor audio frameworks, USB DACs, and Android versions can limit or bypass processing.
  • Bit-perfect output requires a compatible device and output path; selecting an option cannot make unsupported hardware bit-perfect.
  • Pure-audio bypass can intentionally skip app processing.

Your offline library

Downloads, cache & history

Save available audio from supported song actions, choose a preferred quality, and receive progress and completion notifications. Playback caching can keep eligible tracks available offline, with configurable quality and storage limits.

  • Choose Wi-Fi and cellular behavior and configure automatic downloads for supported liked or added tracks.
  • Manage favorites, playlists, listening history, and supported profile statistics.
  • Clear cached songs and temporary artwork or network-buffer data from settings.
  • Use offline mode to require a local copy when playing music.

Download options depend on the upstream source and Android media-storage rules. Follow source terms and local copyright requirements.

Optional connections

Accounts, radio & shared listening

Sign-in and connected services are optional. Supported account features can sync selected library information; Last.fm can scrobble listening; Discord can show Rich Presence. iShare supports creating or joining listening sessions when network and connection modes permit.

RadioBrowse and search supported internet stations, choose a region, play stations, and save favorites.
External accountsConnect only the services you choose. Their own availability and privacy terms apply.

Translation may use a provider endpoint, model, and API key configured by the user. Review that provider’s terms and any usage costs before enabling it.

Make it feel personal

Widgets, overlays & appearance

Appearance settings cover player presentation, artwork-driven color, app fonts, splash screen, animated cover art, haptics, and liquid-glass surfaces. The player can keep its own SF-style type regardless of the app font choice.

  • Android home-screen widget with playback controls, favorite action, layout sizes, artwork options, and optional artwork blur.
  • Optional floating playback surface and Always-On Display player.
  • Android media notifications and lock-screen controls.
  • Dynamic or static player presentation and artwork-derived colors.

Trust & safety

Privacy & security

Network features communicate with their selected providers. Account sessions, translation credentials, and backup files are sensitive. Only connect accounts and providers you trust, and avoid sharing logs or screenshots that expose tokens or personal data.

Backups and credentials

  • Portable .itune backups are password-encrypted; the restore flow scans the chosen file and lets you select categories.
  • A password-protected backup cannot be restored without its password. Keep the password separate from the file.
  • Android Keystore-backed encryption is used for supported account secrets; platform support can vary.
  • Never commit signing keys, API tokens, cookies, account data, backups, or passwords to the repository.

Report a vulnerability privately

Do not post suspected security issues publicly. Use GitHub private vulnerability reporting when available, or contact the maintainer privately through GitHub. Include sanitized reproduction details and remove secrets. The project makes a best effort to investigate; no fixed response deadline is promised.

Read the complete security policy.

Android access

Permissions & why they exist

Android permissions support specific app functions. Some are requested only when you use the associated feature; basic playback does not require every optional permission.

  • Network: music discovery, streams, artwork, lyrics, radio, account services, and release/news checks.
  • Notifications and foreground playback: playback controls and ongoing downloads.
  • Bluetooth connect: active Bluetooth output information when available.
  • Microphone/audio capture: recognition or features that explicitly analyze input.
  • System overlay: optional floating player surface.
  • Audio settings and legacy storage: supported routing/effects and downloads on older Android versions.

Android, the device vendor, and Android version determine the exact permission prompts and behavior.

Open source

License, copyright & media rights

The original iTune source code and documentation are offered under the MIT License. You may use, modify, and redistribute the covered material subject to the license’s notice and disclaimer terms.

The MIT license does not grant rights to third-party songs, artwork, lyrics, service APIs, trademarks, or other external content. Those remain subject to their owners’ rights and service terms. Use music sources and save content only when authorized.

Developers

Build iTune from source

Use Android Studio, JDK 21, and the Android SDK platform and build tools requested by the project. The Gradle wrapper is included; use it instead of installing Gradle globally.

Windows PowerShell

.\gradlew.bat :app:assembleDebug .\gradlew.bat :app:installDebug .\gradlew.bat :app:testDebugUnitTest

Release build

Release builds enable R8 and resource shrinking. Configure signing with a private keystore in local, untracked configuration or CI secrets. Never commit release signing material.

Community

Contribute

Focused issues and pull requests help keep changes reviewable. Include the user-visible impact, Android version and device, relevant permissions or network requirements, and sanitized logs for platform-specific problems.

  • Keep UI, playback, data, and platform work in their relevant packages.
  • Update documentation when behavior, setup, permissions, or limitations change.
  • Keep tokens, cookies, signing keys, local SDK paths, and personal account data out of commits.
  • Follow the repository’s Code of Conduct and contribution guide.

No documentation sections match that search.