Airdrome fork for music.mairup.space — native sharing + synced lyrics. Upstream: github.com/JPGuillemin/Airdrome (AGPL-3.0)
  • HTML 57.1%
  • Vue 24.7%
  • TypeScript 12.7%
  • SCSS 3.7%
  • JavaScript 1.5%
  • Other 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Mai 0b6c1b65a4
Some checks failed
Deploy Vue App / build (push) Has been cancelled
Deploy Vue App / deploy (push) Has been cancelled
fix(player): never request aac (ADTS is undecodable in <audio>), respect the user's codec choice, stop the onerror skip cascade, and release the transition lock when play() stalls
- getCodec(): drop the audio/aac branch; Navidrome serves format=aac as raw ADTS
  which browsers cannot decode (AAC is decodable only in an MP4 container), and
  Navidrome itself discards AAC profiles in getTranscodeDecision. Opus for
  Chrome/Android, mp3 for Safari.
- boot no longer overwrites an explicit opus/mp3 choice written by the quality UI.
- onerror: retry the same track once from byte 0 (cache-busting param), then stop
  and release the lock; no unbounded next(true) cascade.
- onended: clear a stuck inTransition/transitionCount before advancing, so one
  stalled load cannot kill every later track end.
- audio.ts playElement(): race el.play() against a timeout so a stalled chunked
  stream cannot hang loadTrack() and leave the transition lock set.
2026-10-30 09:27:24 +01:00
.archive rewrite and cleanup of capacitor media session plugin 2026-05-09 10:23:18 +02:00
.github/workflows add CICD for APK 5 2026-05-23 19:17:40 +02:00
.gradle add missing modules 2026-06-20 19:11:36 +02:00
build/reports/problems add missing modules 2026-06-20 19:11:36 +02:00
docker Offline mode from Service Worker 2026-02-25 20:39:23 +01:00
docker.template fix(nginx): use correct subsonic auth token for /share-lyrics/ 2026-10-25 16:01:07 +01:00
gradle/wrapper post-migration to Vue3 2025-10-18 19:47:14 +02:00
public fix(ui): resolve mobile tap/hover stickiness, touch popup selection, optimistic playback, and lyrics dock layout 2026-10-26 19:25:04 +01:00
screenshots Bump version, updated screenshots 2026-05-14 14:03:56 +02:00
src fix(player): never request aac (ADTS is undecodable in <audio>), respect the user's codec choice, stop the onerror skip cascade, and release the transition lock when play() stalls 2026-10-30 09:27:24 +01:00
.dockerignore build(docker): add multi-stage Dockerfile and docker-compose.yml for self-contained deployment 2026-10-24 22:32:12 +02:00
.editorconfig add eslint 2020-08-11 18:32:51 +02:00
.eslintignore Add Capacitor Android build with native MediaSession 2026-04-26 12:14:46 -07:00
.eslintrc.cjs Add Capacitor Android build with native MediaSession 2026-04-26 12:14:46 -07:00
.gitignore chore: gitignore host ops artifacts (merge timer logs/scripts) 2026-10-24 22:48:43 +02:00
build-public-dockers.sh adjust player slider align 2026-10-21 15:00:55 +02:00
build.gradle post-migration to Vue3 2025-10-18 19:47:14 +02:00
build.sh feat(mairup): native synced lyrics, navidrome sharing, public /share/:id view, and same-origin subsonic nginx config 2026-10-24 22:30:57 +02:00
docker-compose.yml build(docker): add multi-stage Dockerfile and docker-compose.yml for self-contained deployment 2026-10-24 22:32:12 +02:00
Dockerfile build(docker): add multi-stage Dockerfile and docker-compose.yml for self-contained deployment 2026-10-24 22:32:12 +02:00
eslint.config.js Add Capacitor Android build with native MediaSession 2026-04-26 12:14:46 -07:00
gradle.properties post-migration to Vue3 2025-10-18 19:47:14 +02:00
gradlew post-migration to Vue3 2025-10-18 19:47:14 +02:00
gradlew.bat post-migration to Vue3 2025-10-18 19:47:14 +02:00
index.html feat: unbrighten after-album auto-appended tracks with visual divider, and rename fork to Maidrome 2026-10-25 09:24:33 +01:00
LICENSE Initial commit 2020-07-27 12:42:20 +02:00
manifest-checksum.txt post-migration to Vue3 2025-10-18 19:47:14 +02:00
package-lock.json feat(share): add client-side zip packaging with jszip when share is not marked downloadable on server 2026-10-25 14:12:43 +01:00
package.json feat(share): add client-side zip packaging with jszip when share is not marked downloadable on server 2026-10-25 14:12:43 +01:00
README.md update README : add test URL 2026-05-22 15:04:24 +02:00
settings.gradle post-migration to Vue3 2025-10-18 19:47:14 +02:00
stats.html add missing modules 2026-06-20 19:11:36 +02:00
store_icon.png post-migration to Vue3 2025-10-18 19:47:14 +02:00
tsconfig.json Update node modules 2026-06-13 17:25:56 +02:00
txt async setupAudio 2026-09-24 21:09:21 +02:00
VERSION VERSION 6.2 2026-10-10 20:34:33 +02:00
vite.config.mjs fix(ui): resolve mobile tap/hover stickiness, touch popup selection, optimistic playback, and lyrics dock layout 2026-10-26 19:25:04 +01:00
yarn.lock feat(share): add client-side zip packaging with jszip when share is not marked downloadable on server 2026-10-25 14:12:43 +01:00

Airdrome Music Player

Screenshot

Airdrome is a powerful modern application for Android and Desktop, supporting navidrome, airsonic-advanced, NextCloud Music and other subsonic compatible music servers.

Test the latest version here : AIRDROME NIGHTLY

Features

  • "Cockpit" library home page with playback suggestions based on recent listenings
  • Library browsing for albums, artist, genres, playlists, favourites
  • "Radio like" dynamic playlists for anything : Genre, Album, Artist, Recent albums, Favourites, Random
  • 3 "CD quality" OPUS transcoding modes
  • Native Gapless playback
  • 2 modes Replay Gain support
  • Full mediaSession integration
  • Persistent queue, repeat, shuffle
  • 4 color themes
  • Responsive UI for Android, and WEB browser (standard page or PWA)
  • Persistant cache and download for offline listening
  • View, create, and edit playlists
  • Full text search with sorted results by artists, albums, tracks
  • Favourites tagging

Screenshots

Run from Docker Hub

$ docker run -d \
  --name=airdrome \
  --restart on-failure \
  --network=bridge \
  -p 8080:80 \
  h7p3ri0n/airdrome:latest

Build your own Docker image

$ yarn install
$ yarn build

Bundle can be found in the dist folder.

Build docker image:

$ docker build -f docker/Dockerfile -t local/airdrome .

$ docker run -d \
  --name=airdrome \
  --restart on-failure \
  --network=bridge \
  -p 8080:80 \
  local/airdrome:latest

OpenSubsonic endpoints

  • getAlbumList2
  • getArtistInfo2
  • getAlbumInfo2
  • getStarred2
  • search3
  • getSongsByGenre
  • getRandomSongs
  • getPlayQueue
  • savePlayQueue
  • getScanStatus
  • startScan
  • getOpenSubsonicExtensions

Contributors

  • chunjiw — Capacitor-based Android build

License

Licensed under the AGPLv3 license.