Overview
For files larger than 40MB, Launch uses native background upload modules that:- Continue uploading when the app is backgrounded
- Handle network interruptions gracefully
- Provide system-level progress tracking
- Work reliably for very large files (up to 5GB)
Module Location
iOS Implementation
UsesURLSession with background configuration:
Key Features
- Background transfers: iOS manages uploads even when app is suspended
- Automatic retries: System retries on network failure
- Progress callbacks: Real-time progress via delegate methods
Android Implementation
Uses Kotlin Coroutines for async uploads:For true background persistence on Android, consider migrating to WorkManager.
The current coroutine implementation works well but may be interrupted on app
kill.
JavaScript API
Starting an Upload
Available Events
Utility Functions
Persistence
Upload state is persisted to AsyncStorage for resilience:- Saved queue is loaded from AsyncStorage
- Native module is queried for active uploads
- Listeners are re-attached for ongoing uploads
- Progress UI is restored
Limitations
Debugging
Enable console logs to trace upload flow:- iOS: Xcode Console
- Android:
adb logcat | grep LaunchReactNativeFileUploader
Test Checklist
- Large file (>40MB) uses native upload
- Progress events fire and UI updates
- Upload completes after backgrounding the app
Troubleshooting
If native uploads stall, verify device background permissions and check native logs for errors.Remove / Disable
To disable uploads while you configure S3, set:apps/mobile/features/feature-registry.tsx → featureFlags.fileUploads = false
For production removal guidance, see Removing Features.