| Crates.io | tauri-plugin-apple-music-kit |
| lib.rs | tauri-plugin-apple-music-kit |
| version | 0.2.5 |
| created_at | 2025-07-11 13:44:15.224396+00 |
| updated_at | 2025-07-14 09:19:21.970177+00 |
| description | Tauri plugin for Apple MusicKit integration |
| homepage | |
| repository | https://github.com/patrickquinn/tauri-plugin-apple-music-kit |
| max_upload_size | |
| id | 1747964 |
| size | 255,258 |
A Tauri 2 plugin focused on providing comprehensive Apple MusicKit integration for iOS and macOS applications. It allows you to programmatically control music playback, manage queues, handle authorization, and respond to music events through a unified API.
Add the plugin to your Tauri app's src-tauri/Cargo.toml:
[dependencies]
tauri-plugin-apple-music-kit = "0.1.0"
Install the TypeScript API bindings:
npm install tauri-plugin-apple-music-kit-api
# or
yarn add tauri-plugin-apple-music-kit-api
# or
pnpm add tauri-plugin-apple-music-kit-api
In your src-tauri/src/main.rs, register the plugin:
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_apple_music_kit::init())
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
Add the required permissions to your src-tauri/tauri.conf.json:
{
"tauri": {
"allowlist": {
"all": false
},
"bundle": {
"active": true
},
"security": {
"csp": null
},
"plugins": {
"apple-music-kit": {
"scope": ["authorize", "getAuthorizationStatus", "initialize", "play", "pause", "skipToNext", "skipToPrevious", "getCurrentTrack", "getPlaybackState", "addToQueue", "getQueue", "getUserToken", "getDeveloperToken", "getStorefrontId"]
}
}
}
}
import { invoke } from '@tauri-apps/api/core';
import { listen } from '@tauri-apps/api/event';
// Initialize the plugin
await invoke('plugin:apple-music-kit|initialize');
// Request authorization
const authResult = await invoke('plugin:apple-music-kit|authorize');
console.log('Authorization status:', authResult);
// Control playback
await invoke('plugin:apple-music-kit|play');
await invoke('plugin:apple-music-kit|pause');
await invoke('plugin:apple-music-kit|skipToNext');
await invoke('plugin:apple-music-kit|skipToPrevious');
// Get current track
const currentTrack = await invoke('plugin:apple-music-kit|getCurrentTrack');
console.log('Current track:', currentTrack);
// Get playback state
const playbackState = await invoke('plugin:apple-music-kit|getPlaybackState');
console.log('Playback state:', playbackState);
// Add track to queue
await invoke('plugin:apple-music-kit|addToQueue', {
trackId: '123456789'
});
// Listen to events
await listen('apple-music-kit://playback-state-changed', (event) => {
console.log('Playback state changed:', event.payload);
});
await listen('apple-music-kit://track-changed', (event) => {
console.log('Track changed:', event.payload);
});
| Command | Description | Parameters | Returns |
|---|---|---|---|
initialize |
Initialize the MusicKit plugin | None | { success: boolean } |
authorize |
Request Apple Music authorization | None | { status: string } |
getAuthorizationStatus |
Check current authorization status | None | { status: string } |
play |
Start or resume playback | None | { success: boolean } |
pause |
Pause playback | None | { success: boolean } |
skipToNext |
Skip to next track | None | { success: boolean } |
skipToPrevious |
Skip to previous track | None | { success: boolean } |
getCurrentTrack |
Get current track information | None | TrackInfo | null |
getPlaybackState |
Get current playback state | None | PlaybackState |
addToQueue |
Add track to queue | { trackId: string } |
{ success: boolean } |
getQueue |
Get current queue | None | TrackInfo[] |
getUserToken |
Get user token (iOS only) | None | string | null |
getDeveloperToken |
Get developer token (iOS only) | None | string | null |
getStorefrontId |
Get storefront ID | None | string |
| Event | Description | Payload |
|---|---|---|
apple-music-kit://playback-state-changed |
Playback state changed | PlaybackState |
apple-music-kit://track-changed |
Current track changed | TrackInfo |
apple-music-kit://queue-changed |
Queue updated | TrackInfo[] |
apple-music-kit://authorization-changed |
Authorization status changed | { status: string } |
interface TrackInfo {
id: string;
title: string;
artist: string;
album: string;
artworkUrl?: string;
duration: number;
isExplicit: boolean;
}
interface PlaybackState {
isPlaying: boolean;
isPaused: boolean;
isStopped: boolean;
currentTime: number;
duration: number;
repeatMode: 'none' | 'one' | 'all';
shuffleMode: 'off' | 'on';
}
interface AuthorizationStatus {
status: 'notDetermined' | 'denied' | 'restricted' | 'authorized';
}
# Clone the repository
git clone https://github.com/patrickquinn/tauri-plugin-apple-music-kit.git
cd tauri-plugin-apple-music-kit
# Install dependencies
bun install
# Build the project
bun run build
# Run checks
bun run check
# Build iOS Swift code
cd ios
xcodebuild -scheme MusicKitPlugin -destination 'generic/platform=iOS' build
# Build macOS Swift code
cd macos
xcodebuild -scheme MusicKitPlugin -destination 'generic/platform=macOS' build
UnsupportedPlatform errorsLicensed under either of
at your option.
git checkout -b feature/amazing-feature)git commit -m 'Add some amazing feature')git push origin feature/amazing-feature)tauri-plugin-apple-music-kit on crates.iotauri-plugin-apple-music-kit-api on npm