misa198/airmedy

🎧 A modern local music player with an Apple Music-inspired UI. (macOS, Windows, Linux, Android) - NO ELECTRON

Kotlin

26

892 commits

updated Sep 27, 2026

See the code

See what people are saying

SourceMessageScoreDate

I wanted an Apple Music inspired local music player so I built Tune (r/SideProject)

Hey everyone, ​I was trying to find a local Android music player on GitHub with that clean Apple Music inspired look, the blurred artworks and floating lyrics. ​Almost everything I came across was either outdated, bad looking, desktop only, or just wasn't a true offline mobile player. I eventually…

1

Sep 27, 2026

README

Airmedy

Airmedy

All in one offline music player.

License Go Wails KMP Last.fm

Desktop CI Mobile CI

MacoOS Windows Linux Android

Website Latest Release Desktop Downloads


Airmedy - All in one offline music player

Screenshots
Home

Home

Tracks

Tracks

Tracks (compact mode)

Tracks (compact mode)

Albums

Albums

Album

Album

Artists

Artists

Genres

Genres

Playlists

Playlists

Playlist

Playlist

Fullscreen player

Fullscreen player

Mini player

Mini player

Search

Search

Remote control

Remote control

Mobile app

Mobile app


Features

  • Your whole library β€” add any folder and Airmedy scans it, even with tens of thousands of tracks. Rescans on a configurable interval (default hourly) to pick up changes made outside the app.
  • Lyrics that follow along β€” synced lyrics scroll line-by-line as the song plays. Plain-text lyrics shown when sync data isn't available. Sources, in priority order: local lyric files next to the track (.lrc, then .txt), embedded lyrics, then online lyrics from LRCLIB and Kugou. Search and pick lyrics manually, optionally saving the result as a .lrc file (dedicated lyrics folder, subfolder next to the track, or next to the track itself, in that order).
  • Offline romanization β€” read Chinese and Korean lyrics in Latin script without sending your lyrics anywhere. Toggle it directly from the lyrics view.
  • Fullscreen & miniplayer modes β€” go fullscreen for an immersive listening experience, or shrink to a miniplayer that stays out of your way.
  • Playlists β€” create and manage playlists, import and export them, and browse your collection by genre, artist, or album.
  • Gapless playback β€” tracks transition without any silence or interruption.
  • Crossfade β€” overlap the end of the current track with the start of the next using an equal-power fade curve. Adjustable from 1 to 12 seconds in Playback settings, or turn it off for pure gapless transitions.
  • 10-band equalizer β€” tune the sound to your headphones or speakers. Runs natively on macOS (SFBAudioEngine) and Windows/Linux (miniaudio) for optimal performance.
  • Lock screen & media keys β€” control playback from your keyboard, lock screen, or Control Center β€” just like a first-party app.
  • Last.fm scrobbling β€” sync your listening history and loved tracks automatically.
  • Listening insights β€” see your listening activity, total time, qualified plays, top artists, and most-played tracks over the last 7 days, 30 days, or all time. When tracks have the same play count, longer listening time breaks the tie.
  • Fast search β€” find any track, album, or artist in milliseconds.
  • Metadata editor β€” update track titles, artists, albums, and other tags. Support for updating album artwork with automatic JPEG conversion.
  • Plays in the background β€” close the window and music keeps going. Quit when you actually mean it.
  • Tray menu β€” control playback from the system tray.
  • Prevent sleep β€” optionally keep your system awake while music is playing.
  • Themes β€” light, dark (gray), and black (pure black for OLED screens) themes.
  • Artist images β€” uses local artist.jpg/.jpeg/.webp files from your music folders (in the artist folder or beside the songs), or set your own custom image per artist. Toggle "Online Artist Artwork" to use Deezer images instead; turn it off to use your local files.
  • Remote control β€” control playback from any browser on the same network. Enable the remote server in settings, open the displayed URL on your phone or tablet, and enter the PIN to start controlling playback, managing the queue, and viewing lyrics remotely.
  • Volume normalization β€” consistent loudness across your library, no more reaching for the volume knob between tracks. Analyzes your library with FFmpeg (LUFS loudness + true peak), then applies per-track pre-amp gain at playback. Track mode normalizes each song individually; album mode keeps an album's natural dynamics by applying one gain across all its tracks. Target loudness is configurable (default -14 LUFS), with an optional prevent-clipping guard.
  • Mood Radio β€” start an auto-refilling radio queue from any track. Finds similar tracks across your whole library by comparing energy, danceability, and tempo derived from per-track audio analysis.
  • Smart Playlists β€” auto-updating playlists built from rules (genre, artist, year, play count, rating, and more) or from a mood picker that filters your library by energy Γ— danceability.
  • Player quick settings β€” right-click the footer player bar to toggle prevent sleep, player indicator, and crossfade on/off, switch EQ presets, or jump straight to Playback settings β€” all without leaving the current view.

Mobile

Airmedy Mobile is an Android-first companion app, built with native Jetpack Compose for Android 12 and newer. It is independently usable and pairs with Airmedy Desktop when you want your library on the go.

  • Pair and sync your library β€” scan a QR code to securely sync tracks, artwork, playlists, favorites, and listening history from a paired desktop.
  • Offline playback β€” play synced local music through the native FFmpeg + AAudio player, with a persistent mini player, playback queue, seek controls, shuffle, and repeat.
  • Immersive player & lyrics β€” open a full-screen player for artwork and controls, then follow synced bilingual lyrics or tap a line to seek directly to it.
  • Browse your collection β€” explore tracks, albums, artists, genres, composers, playlists, and listening insights in a native mobile UI.
  • Your listening, kept in sync β€” scrobbles to Last.fm directly from the app and reconciles listening activity and playlist changes with your desktop.

Keyboard Shortcuts

Ctrl on Windows/Linux, Cmd on macOS. Ignored while typing in an input/textarea.

ShortcutAction
SpacePlay / pause
Ctrl/Cmd + β†’Next track
Ctrl/Cmd + Alt + β†’Fast forward
Ctrl/Cmd + ←Previous track
Ctrl/Cmd + Alt + ←Rewind
Ctrl/Cmd + ↑Volume up
Ctrl/Cmd + ↓Volume down
Ctrl/Cmd + Alt + ↓Mute toggle
Ctrl/Cmd + SShuffle toggle
Ctrl/Cmd + RCycle repeat mode
Ctrl/Cmd + FGo to search
Ctrl + Cmd + F (macOS), Ctrl + Alt + F (Windows)Toggle fullscreen
Ctrl/Cmd + ,Open settings

Audio Format Support

Every format plays on macOS Β· Windows Β· Linux.

FormatExtensions
MP3.mp3
AAC / ALAC.m4a .aac .mp4
FLAC.flac
WAV / AIFF.wav .aiff
Ogg Vorbis.ogg
Opus.opus
APE (Monkey's Audio).ape
WavPack.wv
DSD.dsf .dff

On macOS, playback runs through SFBAudioEngine β€” a powerful, high-performance audio engine that provides native support for almost every format without needing FFmpeg. On Windows and Linux, miniaudio provides high-performance audio output, while FFmpeg serves as the universal decoding backend for all supported formats, ensuring consistent and robust playback across the entire library.

flowchart TB
    subgraph Core["Airmedy Core"]
        subgraph macOS["macOS Path"]
            SFB["SFBAudioEngine<br/>(All Formats)"]
        end
        subgraph WinLinux["Windows / Linux Path"]
            FF["FFmpeg Decoder<br/>(All Formats)"] --> MA["miniaudio<br/>(output engine)"]
        end
        SFB --> Stream
        MA --> Stream["Consistent Audio Stream<br/>(Float32 PCM)"]
    end

The FFmpeg libraries are statically compiled and bundled inside internal/infra/audio/ffmpeg_libs/. No system FFmpeg installation is ever required.


Tech Stack

LayerTechnology
Backend runtimeGo 1.25, Wails v3
Dependency injectionuber-go/fx
DatabaseSQLite via golang-migrate
Search indexBleve
Audio (macOS)SFBAudioEngine + CGo
Audio (Win/Linux)miniaudio + FFmpeg (CGo)
Metadatago-taglib
Frontend frameworkVue 3 (Composition API)
State managementPinia 3
UI componentsRadix Vue + Tailwind CSS v4
Monorepopnpm workspaces + Turbo
UI package@airmedy/ui (packages/ui)
Utils package@airmedy/utils (packages/utils)
LyricsLocal .lrc/.txt, embedded tags, LRCLIB + Kugou

Mobile Tech Stack

LayerTechnology
PlatformKotlin Multiplatform, Android 12+
UIJetpack Compose
Local storageRoom + DataStore
AudioFFmpeg + AAudio
Shared logicsharedLogic (models, use cases, ports)

Architecture

Airmedy follows a Hexagonal / Ports & Adapters pattern:

main.go                      # Entry point

internal/
β”œβ”€β”€ domain/                  # Business logic, interfaces, DTOs
β”œβ”€β”€ app/                     # Application services (use cases)
└── infra/
    β”œβ”€β”€ audio/               # SFBAudioEngine / miniaudio / FFmpeg adapters
    β”œβ”€β”€ db/                  # SQLite migrations and queries
    β”œβ”€β”€ search/              # Bleve index adapter
    └── wails/               # Thin Wails bindings (frontend ↔ app)

frontend/                    # Main desktop UI (Vue 3)
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/          # Feature components (AlbumCard, TrackTable…)
β”‚   β”œβ”€β”€ views/               # Route-level pages
β”‚   β”œβ”€β”€ stores/              # Pinia stores
β”‚   β”œβ”€β”€ composables/         # Shared logic
β”‚   └── locales/             # i18n locale files

packages/
β”œβ”€β”€ ui/                      # @airmedy/ui β€” stateless UI primitives (Slider, Input…)
└── utils/                   # @airmedy/utils β€” shared utilities (logger, utils)

remote/                      # Browser-based remote control SPA (Vue 3)
└── src/
    β”œβ”€β”€ components/          # Remote UI components
    β”œβ”€β”€ stores/              # Pinia stores (player state over WS)
    └── locales/             # i18n locale files

mobile/                      # Android-first Kotlin Multiplatform app
β”œβ”€β”€ androidApp/              # Compose UI, ViewModels, Android adapters
└── sharedLogic/             # Platform-neutral models, use cases, and ports

Dependencies always point inward β€” infra depends on app, app depends on domain, never the reverse.


Building from Source

Prerequisites

ToolVersion
Goβ‰₯ 1.25
Node.jsβ‰₯ 20
pnpmβ‰₯ 9
Tasktaskfile.dev
Wails CLI v3go install github.com/wailsapp/wails/v3/cmd/wails@latest
JDK11 (mobile builds)
Android SDKPlatform 36 (mobile builds)
Android NDK30.0.15729638 (mobile audio builds)

No system FFmpeg required. FFmpeg is the decode backend on Windows/Linux only β€” macOS uses SFBAudioEngine and ships no FFmpeg. Pre-built static libraries for windows/amd64, windows/arm64, linux/amd64, and linux/arm64 are bundled in internal/infra/audio/ffmpeg_libs/.

To rebuild them: scripts/build-ffmpeg-linux.sh and scripts/build-ffmpeg-windows.sh (the latter cross-compiles amd64 + arm64 from Linux via gcc-mingw-w64). scripts/build-ffmpeg-windows-msys2.sh builds Windows amd64 natively inside an MSYS2 MINGW64 shell. All produce minimal static .a libs (FFmpeg 8.1.2, decoders only).

Clone & Run

git clone https://github.com/misa198/airmedy.git
cd airmedy

# Run in development mode
wails3 dev

# Build production binary
wails3 build

Verify

wails3 task verify   # runs all Go unit tests + Vue component tests + linters

# Mobile shared-logic tests
./mobile/gradlew :sharedLogic:testAndroidHostTest

Run task

wails3 task {task_name}

Build Mobile (Android)

Build the Android FFmpeg libraries once, then assemble either installable variant:

bash scripts/build-ffmpeg-android.sh arm64-v8a
./mobile/gradlew :androidApp:assembleDevDebug
./mobile/gradlew :androidApp:assembleProdDebug

dev and prod use separate application IDs, so both can be installed on one device. Android requires API 31 (Android 12) or newer.


Roadmap

  • AirPlay 2 β€” stream to any AirPlay speaker or Apple TV directly from Airmedy.

Contributing

  1. Fork the repo and create a feature branch
  2. Follow Conventional Commits β€” enforced by the commit-msg hook (wails3 task setup:hooks)
  3. All new features and bug fixes require accompanying tests
  4. Open a pull request against master

License

GPL-3.0 Β© misa198. Third-party licenses in NOTICES.


android
avfoundation
ffmpeg
golang
kmp
library
linux
lossless
macos
music
music-player
no-electron
player
wails
windows

Contributors

misa198

862 commits

airmedy[bot]

15 commits

misa198/airmedy

🎧 A modern local music player with an Apple Music-inspired UI. (macOS, Windows, Linux, Android) - NO ELECTRON

Kotlin

26

892 commits

updated Sep 27, 2026

See the code

See what people are saying

SourceMessageScoreDate

I wanted an Apple Music inspired local music player so I built Tune (r/SideProject)

Hey everyone, ​I was trying to find a local Android music player on GitHub with that clean Apple Music inspired look, the blurred artworks and floating lyrics. ​Almost everything I came across was either outdated, bad looking, desktop only, or just wasn't a true offline mobile player. I eventually…

1

Sep 27, 2026

README

Airmedy

Airmedy

All in one offline music player.

License Go Wails KMP Last.fm

Desktop CI Mobile CI

MacoOS Windows Linux Android

Website Latest Release Desktop Downloads


Airmedy - All in one offline music player

Screenshots
Home

Home

Tracks

Tracks

Tracks (compact mode)

Tracks (compact mode)

Albums

Albums

Album

Album

Artists

Artists

Genres

Genres

Playlists

Playlists

Playlist

Playlist

Fullscreen player

Fullscreen player

Mini player

Mini player

Search

Search

Remote control

Remote control

Mobile app

Mobile app


Features

  • Your whole library β€” add any folder and Airmedy scans it, even with tens of thousands of tracks. Rescans on a configurable interval (default hourly) to pick up changes made outside the app.
  • Lyrics that follow along β€” synced lyrics scroll line-by-line as the song plays. Plain-text lyrics shown when sync data isn't available. Sources, in priority order: local lyric files next to the track (.lrc, then .txt), embedded lyrics, then online lyrics from LRCLIB and Kugou. Search and pick lyrics manually, optionally saving the result as a .lrc file (dedicated lyrics folder, subfolder next to the track, or next to the track itself, in that order).
  • Offline romanization β€” read Chinese and Korean lyrics in Latin script without sending your lyrics anywhere. Toggle it directly from the lyrics view.
  • Fullscreen & miniplayer modes β€” go fullscreen for an immersive listening experience, or shrink to a miniplayer that stays out of your way.
  • Playlists β€” create and manage playlists, import and export them, and browse your collection by genre, artist, or album.
  • Gapless playback β€” tracks transition without any silence or interruption.
  • Crossfade β€” overlap the end of the current track with the start of the next using an equal-power fade curve. Adjustable from 1 to 12 seconds in Playback settings, or turn it off for pure gapless transitions.
  • 10-band equalizer β€” tune the sound to your headphones or speakers. Runs natively on macOS (SFBAudioEngine) and Windows/Linux (miniaudio) for optimal performance.
  • Lock screen & media keys β€” control playback from your keyboard, lock screen, or Control Center β€” just like a first-party app.
  • Last.fm scrobbling β€” sync your listening history and loved tracks automatically.
  • Listening insights β€” see your listening activity, total time, qualified plays, top artists, and most-played tracks over the last 7 days, 30 days, or all time. When tracks have the same play count, longer listening time breaks the tie.
  • Fast search β€” find any track, album, or artist in milliseconds.
  • Metadata editor β€” update track titles, artists, albums, and other tags. Support for updating album artwork with automatic JPEG conversion.
  • Plays in the background β€” close the window and music keeps going. Quit when you actually mean it.
  • Tray menu β€” control playback from the system tray.
  • Prevent sleep β€” optionally keep your system awake while music is playing.
  • Themes β€” light, dark (gray), and black (pure black for OLED screens) themes.
  • Artist images β€” uses local artist.jpg/.jpeg/.webp files from your music folders (in the artist folder or beside the songs), or set your own custom image per artist. Toggle "Online Artist Artwork" to use Deezer images instead; turn it off to use your local files.
  • Remote control β€” control playback from any browser on the same network. Enable the remote server in settings, open the displayed URL on your phone or tablet, and enter the PIN to start controlling playback, managing the queue, and viewing lyrics remotely.
  • Volume normalization β€” consistent loudness across your library, no more reaching for the volume knob between tracks. Analyzes your library with FFmpeg (LUFS loudness + true peak), then applies per-track pre-amp gain at playback. Track mode normalizes each song individually; album mode keeps an album's natural dynamics by applying one gain across all its tracks. Target loudness is configurable (default -14 LUFS), with an optional prevent-clipping guard.
  • Mood Radio β€” start an auto-refilling radio queue from any track. Finds similar tracks across your whole library by comparing energy, danceability, and tempo derived from per-track audio analysis.
  • Smart Playlists β€” auto-updating playlists built from rules (genre, artist, year, play count, rating, and more) or from a mood picker that filters your library by energy Γ— danceability.
  • Player quick settings β€” right-click the footer player bar to toggle prevent sleep, player indicator, and crossfade on/off, switch EQ presets, or jump straight to Playback settings β€” all without leaving the current view.

Mobile

Airmedy Mobile is an Android-first companion app, built with native Jetpack Compose for Android 12 and newer. It is independently usable and pairs with Airmedy Desktop when you want your library on the go.

  • Pair and sync your library β€” scan a QR code to securely sync tracks, artwork, playlists, favorites, and listening history from a paired desktop.
  • Offline playback β€” play synced local music through the native FFmpeg + AAudio player, with a persistent mini player, playback queue, seek controls, shuffle, and repeat.
  • Immersive player & lyrics β€” open a full-screen player for artwork and controls, then follow synced bilingual lyrics or tap a line to seek directly to it.
  • Browse your collection β€” explore tracks, albums, artists, genres, composers, playlists, and listening insights in a native mobile UI.
  • Your listening, kept in sync β€” scrobbles to Last.fm directly from the app and reconciles listening activity and playlist changes with your desktop.

Keyboard Shortcuts

Ctrl on Windows/Linux, Cmd on macOS. Ignored while typing in an input/textarea.

ShortcutAction
SpacePlay / pause
Ctrl/Cmd + β†’Next track
Ctrl/Cmd + Alt + β†’Fast forward
Ctrl/Cmd + ←Previous track
Ctrl/Cmd + Alt + ←Rewind
Ctrl/Cmd + ↑Volume up
Ctrl/Cmd + ↓Volume down
Ctrl/Cmd + Alt + ↓Mute toggle
Ctrl/Cmd + SShuffle toggle
Ctrl/Cmd + RCycle repeat mode
Ctrl/Cmd + FGo to search
Ctrl + Cmd + F (macOS), Ctrl + Alt + F (Windows)Toggle fullscreen
Ctrl/Cmd + ,Open settings

Audio Format Support

Every format plays on macOS Β· Windows Β· Linux.

FormatExtensions
MP3.mp3
AAC / ALAC.m4a .aac .mp4
FLAC.flac
WAV / AIFF.wav .aiff
Ogg Vorbis.ogg
Opus.opus
APE (Monkey's Audio).ape
WavPack.wv
DSD.dsf .dff

On macOS, playback runs through SFBAudioEngine β€” a powerful, high-performance audio engine that provides native support for almost every format without needing FFmpeg. On Windows and Linux, miniaudio provides high-performance audio output, while FFmpeg serves as the universal decoding backend for all supported formats, ensuring consistent and robust playback across the entire library.

flowchart TB
    subgraph Core["Airmedy Core"]
        subgraph macOS["macOS Path"]
            SFB["SFBAudioEngine<br/>(All Formats)"]
        end
        subgraph WinLinux["Windows / Linux Path"]
            FF["FFmpeg Decoder<br/>(All Formats)"] --> MA["miniaudio<br/>(output engine)"]
        end
        SFB --> Stream
        MA --> Stream["Consistent Audio Stream<br/>(Float32 PCM)"]
    end

The FFmpeg libraries are statically compiled and bundled inside internal/infra/audio/ffmpeg_libs/. No system FFmpeg installation is ever required.


Tech Stack

LayerTechnology
Backend runtimeGo 1.25, Wails v3
Dependency injectionuber-go/fx
DatabaseSQLite via golang-migrate
Search indexBleve
Audio (macOS)SFBAudioEngine + CGo
Audio (Win/Linux)miniaudio + FFmpeg (CGo)
Metadatago-taglib
Frontend frameworkVue 3 (Composition API)
State managementPinia 3
UI componentsRadix Vue + Tailwind CSS v4
Monorepopnpm workspaces + Turbo
UI package@airmedy/ui (packages/ui)
Utils package@airmedy/utils (packages/utils)
LyricsLocal .lrc/.txt, embedded tags, LRCLIB + Kugou

Mobile Tech Stack

LayerTechnology
PlatformKotlin Multiplatform, Android 12+
UIJetpack Compose
Local storageRoom + DataStore
AudioFFmpeg + AAudio
Shared logicsharedLogic (models, use cases, ports)

Architecture

Airmedy follows a Hexagonal / Ports & Adapters pattern:

main.go                      # Entry point

internal/
β”œβ”€β”€ domain/                  # Business logic, interfaces, DTOs
β”œβ”€β”€ app/                     # Application services (use cases)
└── infra/
    β”œβ”€β”€ audio/               # SFBAudioEngine / miniaudio / FFmpeg adapters
    β”œβ”€β”€ db/                  # SQLite migrations and queries
    β”œβ”€β”€ search/              # Bleve index adapter
    └── wails/               # Thin Wails bindings (frontend ↔ app)

frontend/                    # Main desktop UI (Vue 3)
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/          # Feature components (AlbumCard, TrackTable…)
β”‚   β”œβ”€β”€ views/               # Route-level pages
β”‚   β”œβ”€β”€ stores/              # Pinia stores
β”‚   β”œβ”€β”€ composables/         # Shared logic
β”‚   └── locales/             # i18n locale files

packages/
β”œβ”€β”€ ui/                      # @airmedy/ui β€” stateless UI primitives (Slider, Input…)
└── utils/                   # @airmedy/utils β€” shared utilities (logger, utils)

remote/                      # Browser-based remote control SPA (Vue 3)
└── src/
    β”œβ”€β”€ components/          # Remote UI components
    β”œβ”€β”€ stores/              # Pinia stores (player state over WS)
    └── locales/             # i18n locale files

mobile/                      # Android-first Kotlin Multiplatform app
β”œβ”€β”€ androidApp/              # Compose UI, ViewModels, Android adapters
└── sharedLogic/             # Platform-neutral models, use cases, and ports

Dependencies always point inward β€” infra depends on app, app depends on domain, never the reverse.


Building from Source

Prerequisites

ToolVersion
Goβ‰₯ 1.25
Node.jsβ‰₯ 20
pnpmβ‰₯ 9
Tasktaskfile.dev
Wails CLI v3go install github.com/wailsapp/wails/v3/cmd/wails@latest
JDK11 (mobile builds)
Android SDKPlatform 36 (mobile builds)
Android NDK30.0.15729638 (mobile audio builds)

No system FFmpeg required. FFmpeg is the decode backend on Windows/Linux only β€” macOS uses SFBAudioEngine and ships no FFmpeg. Pre-built static libraries for windows/amd64, windows/arm64, linux/amd64, and linux/arm64 are bundled in internal/infra/audio/ffmpeg_libs/.

To rebuild them: scripts/build-ffmpeg-linux.sh and scripts/build-ffmpeg-windows.sh (the latter cross-compiles amd64 + arm64 from Linux via gcc-mingw-w64). scripts/build-ffmpeg-windows-msys2.sh builds Windows amd64 natively inside an MSYS2 MINGW64 shell. All produce minimal static .a libs (FFmpeg 8.1.2, decoders only).

Clone & Run

git clone https://github.com/misa198/airmedy.git
cd airmedy

# Run in development mode
wails3 dev

# Build production binary
wails3 build

Verify

wails3 task verify   # runs all Go unit tests + Vue component tests + linters

# Mobile shared-logic tests
./mobile/gradlew :sharedLogic:testAndroidHostTest

Run task

wails3 task {task_name}

Build Mobile (Android)

Build the Android FFmpeg libraries once, then assemble either installable variant:

bash scripts/build-ffmpeg-android.sh arm64-v8a
./mobile/gradlew :androidApp:assembleDevDebug
./mobile/gradlew :androidApp:assembleProdDebug

dev and prod use separate application IDs, so both can be installed on one device. Android requires API 31 (Android 12) or newer.


Roadmap

  • AirPlay 2 β€” stream to any AirPlay speaker or Apple TV directly from Airmedy.

Contributing

  1. Fork the repo and create a feature branch
  2. Follow Conventional Commits β€” enforced by the commit-msg hook (wails3 task setup:hooks)
  3. All new features and bug fixes require accompanying tests
  4. Open a pull request against master

License

GPL-3.0 Β© misa198. Third-party licenses in NOTICES.


android
avfoundation
ffmpeg
golang
kmp
library
linux
lossless
macos
music
music-player
no-electron
player
wails
windows

Contributors

misa198

862 commits

airmedy[bot]

15 commits

Languages

Kotlin

37.9%

Go

29.3%

Vue

15.9%

TypeScript

8.7%

Shell

2.2%

C

2.0%

C++

1.7%