Mirror of https://github.com/winters27/octo-player — Octo music player: Android and desktop apps, and the Rust audio engine
  • Kotlin 55.9%
  • Swift 37.5%
  • Rust 5.2%
  • Python 0.7%
  • PowerShell 0.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-28 22:18:38 -07:00
.github/workflows build(ios): TestFlight builds from an Xcode project made on macOS, with a privacy manifest; Siri asks in store builds 2026-10-12 10:20:59 -07:00
app docs(app): What's new covers family playlists and their rules, charts from any country, Undo on every queue add, the clear choice look and the MusicBrainz wait 2026-10-28 16:38:50 -07:00
audio-engine fix(engine): the video open test reads settled counters, since a closed reader's handles go a moment later on Media Foundation's threads; it measures growth per batch, and the loop test runs on its own clock 2026-10-28 15:46:24 -07:00
design Merge branch 'feat/compact-headers-desktop' into rc/apps-2026-10-28 2026-10-28 16:36:29 -07:00
desktop fix(desktop): a chosen segment keeps its words' weight, so the tabs hold one width in any face; the tab tests keep Segoe UI's numbers for Windows 2026-10-28 21:36:29 -07:00
desktop-design fix(desktop): a chosen segment keeps its words' weight, so the tabs hold one width in any face; the tab tests keep Segoe UI's numbers for Windows 2026-10-28 21:36:29 -07:00
docs/images docs: the phone's Home with its stations 2026-09-30 00:25:48 -07:00
fdroid feat(icons): every icon and the logo come from one traced vector octopus 2026-10-11 18:29:18 -07:00
gradle app: adding songs while casting no longer closes the app 2026-10-23 12:15:44 -07:00
ios Merge branch 'audit/fixes-ios' into rc/apps-2026-10-28 2026-10-28 16:37:11 -07:00
scripts test(desktop): soaks gate themselves per mode, and one script runs the release memory matrix 2026-10-28 15:08:14 -07:00
shared/core test(lyrics): the engine takes its budget clock, so a slow runner never cuts the near-focus test short 2026-10-28 21:11:27 -07:00
subsonic Merge branch 'fix/isrc-hold-apps' into rc/apps-2026-10-28 2026-10-28 16:36:30 -07:00
tools Merge the iPhone app: Animated art, accent colors, the 10-14 round's parity and TestFlight builds 2026-10-15 14:26:28 -07:00
.gitattributes desktop: the .deb and .rpm register octo:// links at install, in the menu entry and the post-install script 2026-10-08 20:13:37 -07:00
.gitignore scripts: keep compiled Python out of the repository 2026-09-29 08:16:14 -07:00
build.gradle.kts build: add a shared core module for the desktop app 2026-09-27 14:55:32 -07:00
gradle.properties desktop: Octo's Discord application 2026-10-01 13:56:23 -07:00
gradlew build: mark gradlew and the shell scripts executable for Linux and macOS 2026-09-27 19:52:22 -07:00
gradlew.bat scaffold: app shell, design tokens, glass bottom bar 2026-09-25 10:40:00 -07:00
LICENSE scaffold: app shell, design tokens, glass bottom bar 2026-09-25 10:40:00 -07:00
README.md docs: the README links Octo 1.11.0 for desktop and Android 2026-10-28 22:18:38 -07:00
settings.gradle.kts design: add a desktop design module on the phone app's own sources 2026-09-27 15:39:22 -07:00

Octo

The desktop and Android apps for your Octo music server.

License: GPL v3

Get the Octo Android app on F-Droid

Octo is a proxy that adds discovery to your Navidrome server and works with any Subsonic app. These are players made to go with it: the music Octo finds sits beside your library, and keeping a song is just Add to library.

Home

With Octo

  • Add songs to your library. Press + on a song, an album or a search result, and it joins your library.
  • One search for everything. Your music comes first, then what Octo found, and all of it plays straight away.
  • Whole albums. Every track shows, the ones you have are marked, and one press adds the rest.
  • Stations on Home, each with its own painted cover, and radio that reaches past your library.
  • Honest labels. A song you don't own is marked as such until you add it.
  • Import your lists. Bring playlists and liked songs from Spotify, Apple Music and more as a TuneMyMusic file, or add a public Spotify playlist or album link, to see what your library has of each list, keep one as a playlist, and let Octo fetch the rest a few songs an hour. On the desktop it is in the sidebar; on the phone, under Settings, Server. Needs an Octo with imports.

These need Octo 2026.09.29 or newer.

With any Subsonic server

With Navidrome or any Subsonic server, both apps are full players for the music you have:

  • Browse by artist, album, song, genre or folder, with favorites, ratings and playlists shared with your other apps.
  • Synced lyrics, gapless playback, an equalizer with presets, ReplayGain and a sleep timer.
  • A queue that follows you between the desktop and the phone, and plays reported to your server.

The desktop app

For Windows and Linux. Several servers with one-click switching, a song table you can sort and resize, Ctrl+K to search or run a command from anywhere, live lists built from rules, Library health, a mini player, and media keys.

An album, with the songs you have marked
An album, with the songs you have marked
The full player
The full player
Search: your music, then what Octo found
Search: your music, then what Octo found
An artist
An artist
Live lyrics, word by word
Live lyrics, word by word
The queue beside an album
The queue beside an album
Albums
Albums
Ctrl+K from anywhere
Ctrl+K from anywhere
A live list
A live list
Library health
Library health
A station with its painted cover
A station with its painted cover
Genres
Genres

The Android app

For Android 10 and newer. Your phone's music and your server's make one library. Download songs, albums and playlists for offline, set streaming quality for Wi-Fi and mobile data, and use the notification, lock screen and widgets.

Home
Home
Search
Search
An album
An album
Songs you can add
Songs you can add
An artist found online
An artist found online
The player
The player
Live lyrics
Live lyrics
Up next
Up next
Albums
Albums
An artist in your library
An artist in your library
Library health
Library health

Install

Download the latest release:

  • Octo for Windows and Linux: an .msi or portable zip for Windows, and a .deb, .rpm or portable zip for Linux. The Windows installer needs no administrator rights. It isn't code signed yet, so Windows asks the first time you open Octo.
  • Octo for Android: an .apk for Android 10 and newer. Allow your browser or file manager to install apps when Android asks.
  • Or add Octo's F-Droid repository in F-Droid, Droid-ify or Neo Store, and the Android app updates there like any other.

New versions appear on the Octo Releases page, tagged desktop-v and android-v.

Build from source

You need JDK 17. The Android app also needs the Android SDK (platform 37). The desktop app plays through its own audio engine, written in Rust, so it needs Rust 1.88 or newer and:

  • Windows: the MSVC build tools.
  • Linux: libasound2-dev and pkg-config (Fedora: alsa-lib-devel), plus fakeroot and rpm to build packages.
git clone https://github.com/winters27/octo-player.git
cd octo-player

# Android: a debug APK, which installs beside a release build
./gradlew :app:assembleDebug

# Desktop: run it
./gradlew :desktop:run

# Desktop installers, each on its own system
./gradlew :desktop:packageMsi :desktop:packagePortableZip                        # Windows
./gradlew :desktop:packageDeb :desktop:packageRpm :desktop:packagePortableZip    # Linux

# Tests
./gradlew :shared:core:allTests :app:testDebugUnitTest :desktop:test
(cd audio-engine && cargo test)
  • The debug APK lands in app/build/outputs/apk/debug/, and desktop installers in desktop/build/compose/binaries/main/.
  • ./gradlew :app:assembleRelease signs the APK when OCTO_ANDROID_KEYSTORE, OCTO_ANDROID_KEYSTORE_PASSWORD, OCTO_ANDROID_KEY_ALIAS and OCTO_ANDROID_KEY_PASSWORD are set, and leaves it unsigned otherwise.
  • -Pocto.noSystemShim=true builds the desktop app without its media-controls helper, which is also written in Rust.
Folder What's there
app/ the Android app
desktop/ the desktop app
shared/core/ what both apps share: lyrics, sound, queue rules, song matching, covers, updates
subsonic/ the Subsonic and OpenSubsonic client, with Octo's extensions
design/, desktop-design/ colours, type, icons and fonts
audio-engine/ the desktop audio engine (Rust)

License

GPL-3.0

Credits