English · 简体中文
Vesqen is an offline music player for Android. It plays the music stored on your phone and needs no account. While a track plays, Vesqen records the path from the file to your headphones, and the Chain page shows where each value came from and how it was measured.
Website · Privacy policy · Support
Status:
1.0.0-beta.1, the first public beta, is out on GitHub Releases. Vesqen isn't on Google Play yet. Read the known limitations before relying on strict USB output.
- Your library. Finds music through Android's media library and in folders you add. Browse by song, album, artist, folder, genre or playlist, keep favorites, and edit a queue that is still there next time.
- Formats. Lossless FLAC, ALAC, WAV and AIFF, plus MP3, AAC, Ogg Vorbis and Opus, as far as your phone's decoders support them.
- Background playback with controls in the notification and on the lock screen.
- The Chain page shows the source file, the decoder, what AudioTrack and Android's mixer report, and the output route. Each value says whether it was measured, derived or estimated, and when it was observed.
- Strict USB output (Android 14 and later) asks Android for its official bit-perfect USB mode when a compatible DAC is connected. If the conditions can't be kept, Vesqen stops playback and tells you why. It doesn't switch to system output on its own.
- Output verification records can be imported.
BIT-PERFECT VERIFIEDappears only when a record signed by Vesqen's verification issuer matches the exact app build, phone and ROM, DAC, source format and output format.
| State | Meaning |
|---|---|
SYSTEM MIXED |
Android's normal playback path. Android may mix, resample or apply system effects. |
BIT-PERFECT AVAILABLE |
The connected USB DAC advertises a matching bit-perfect mixer profile. Strict output isn't active yet. |
BIT-PERFECT REQUESTED |
Vesqen is preparing strict USB output and checking the mixer and the route. |
BIT-PERFECT ACTIVE |
Android reports that the AudioTrack, the mixer preference and the route match the file. This is evidence from the Android side, not an external measurement. |
BIT-PERFECT VERIFIED |
A signed record from an external measurement matches this exact setup. |
STRICT OUTPUT STOPPED |
Strict output couldn't be kept, so playback stopped. |
A state is never promoted to a stronger one. An active path is not called verified, and a lossless file is not called bit-perfect.
- GitHub Releases: each release has a signed APK and its SHA-256. The application signing certificate SHA-256 is
74:3E:96:FC:B7:1D:C5:81:88:49:68:19:A0:01:A2:7C:D8:8D:90:91:62:C5:AE:92:9C:87:BF:A2:9A:B8:62:93. You can check it withapksigner verify --print-certs. GitHub and Google Play builds use the same signing key, so an update from either source keeps your library. - Google Play: closed testing first. The public listing follows after the test.
- Requirements: Android 8.0 or later. Strict USB output needs Android 14 or later and a compatible USB DAC.
Playback and your library never use the network, and your library, playlists and play counts stay in the app's private storage on your phone. Since 1.0.0-beta.2 the app uses the network for three things, each of which you can turn off: usage statistics at most once a day with no ID attached (in the EU, EEA, UK, mainland China and South Korea, only if you agree), device reports you choose to upload, and update checks. The privacy policy (中文) lists what each one sends and how long it is kept. It is also inside the app, under Settings → Privacy policy.
- No phone and DAC combination has been verified bit-perfect yet, so no
BIT-PERFECT VERIFIEDrecord exists. - Strict USB output hasn't been confirmed with a real DAC yet. Many phones don't offer Android's bit-perfect path, even on Android 14 and later; none of the Android 14+ phones tested so far (vivo and iQOO, on Android 15 and 16) do. On those phones strict mode stops and tells you why. Treat every combination as unverified.
- Android 13 and earlier don't provide the official bit-perfect mixer API, so strict USB output isn't available there.
- If Android stops Vesqen in the background, the queue comes back when you open the app again. Resuming straight from headphone buttons isn't supported yet.
- Long listening sessions, foldables, high refresh rates and complete TalkBack coverage are still being tested.
Each release lists its own limitations in the release notes. Known bugs and planned work are grouped by release in the milestones.
- Questions and problems: email [email protected], in English or Chinese.
- Bugs and ideas: open an issue. Include the app version, phone model, Android version, DAC or headphones and the file format. For output problems, a screenshot of the Chain page helps. You don't need to turn on any logging.
- Security issues: follow SECURITY.md and please don't report them in public.
You need JDK 25 and Android SDK Platform 36. The Gradle wrapper provides Gradle 9.5.0 and Android Gradle Plugin 9.3.2. minSdk is 26, compileSdk and targetSdk are 36, and the application ID is io.github.sumirenokai.vesqen.
./gradlew :app:testDebugUnitTest :app:lintDebug :app:assembleDebugOn Windows, use .\gradlew.bat instead. Debug APKs are written to app/build/outputs/apk/debug/.
For previews and scrolling checks, use the Profile build. It isn't debuggable, it uses Release's R8 optimization, and it is signed with the local debug key:
./gradlew :app:installProfileKeep app/build/outputs/mapping/<variant>/mapping.txt with any optimized APK so crash traces can be decoded. Release signing uses the maintainer's keys, which never enter the repository (release signing). Versions come from version.properties (versioning).
- Product: PRODUCT.md, requirements, roadmap
- Design: DESIGN.md, visual identity, redesign direction
- Engineering: architecture review, engineering casebook, development log
- Releases: beta checklist, release roadmap, device acceptance
Read CONTRIBUTING.md before proposing changes. Vesqen is developed by Sumire Studio and released under the Apache License 2.0.