Songbird Mobile
Mobile foundation for the Songbird DAW — iOS and Android apps built with Tauri v2, sharing the same React UI and Rust audio engine as the desktop app.Architecture
Why Tauri v2 (not React Native / Flutter / Capacitor)
Project Structure
Getting Started
Prerequisites
iOS (requires macOS):- Xcode 16+ with iOS 16+ SDK
- Rust with
aarch64-apple-iostarget:rustup target add aarch64-apple-ios - Tauri CLI:
cargo install tauri-cli - CocoaPods (if using Swift plugins):
gem install cocoapods
- Android Studio with SDK 26+ (Android 8.0 Oreo)
- Android NDK (installed via Android Studio SDK Manager)
- Rust with Android targets:
- Tauri CLI:
cargo install tauri-cli - Set
ANDROID_HOMEandNDK_HOMEenvironment variables
Build & Run
Desktop Development
The mobile app crates can also be compiled and run on the desktop host for rapid iteration without a simulator:Mobile-Specific IPC Commands
These commands extend the shared desktop command set with mobile-only functionality:
All shared commands (transport, mixer, state, tempo, audio session, haptics) live in
songbird-mobile-shared::commands and are used by both iOS and Android apps.
Only get_device_info is platform-specific (returns different defaults per platform).
Audio Session Lifecycle
iOS (AVAudioSession)
Android (AudioManager)
Workspace & Dependency Graph
The mobile crates live in their own Cargo workspace (mobile/Cargo.toml) that
references the core rust/ crates via path dependencies. This keeps a single
Cargo.lock for mobile while sharing the same engine code:
Roadmap
Phase 1: Foundation (this PR)
- Mobile workspace structure with iOS + Android Tauri apps
- Shared mobile crate (audio session, haptics, platform, IPC commands)
- Shared IPC commands — no duplication between iOS and Android
- iOS Xcode project scaffold + Swift AudioSessionPlugin
- Android Gradle project scaffold + Kotlin AudioSessionPlugin
- Build scripts:
utils/build-ios.sh,utils/build-android.sh
Phase 2: Audio Engine Integration
- cpal audio output on iOS (CoreAudio via AVAudioSession)
- cpal audio output on Android (AAudio/Oboe)
- Background audio playback (iOS UIBackgroundMode, Android ForegroundService)
- Audio interruption handling (phone calls, Siri, alarms)
- MIDI device support (CoreMIDI on iOS, android.media.midi on Android)
Phase 3: Touch UI Adaptations
- Responsive layout: phone vs tablet detection
- Touch-optimized piano roll (larger hit targets, pinch-to-zoom)
- Touch-optimized mixer (swipe between tracks, gesture faders)
- Safe area insets for notch/home indicator/nav bar
- Haptic feedback integration for note entry and controls
Phase 4: Platform Features
- AUv3 plugin hosting on iOS (load third-party Audio Unit plugins)
- Inter-app audio on iOS
- Files app integration (iOS) / SAF integration (Android)
- .bird file type association (open Songbird files from Files/file manager)
- Share sheet support (export stems, share projects)
Phase 5: Release
- App Store submission (iOS)
- Play Store submission (Android)
- App icon and launch screen assets
- In-app purchase integration (if applicable)