Skip to main content

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-ios target: rustup target add aarch64-apple-ios
  • Tauri CLI: cargo install tauri-cli
  • CocoaPods (if using Swift plugins): gem install cocoapods
Android (macOS, Linux, or Windows):
  • 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_HOME and NDK_HOME environment 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:
This uses the same Tauri WebView but without the native mobile plugins. Mobile-specific commands (haptics, audio session) return placeholder values when running on desktop.

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)