Overview
Launch includes a production-ready file upload system that supports:- Secure uploads via S3 presigned URLs (no credentials exposed to client)
- Resumable multipart uploads for large files
- Native background uploads for iOS/Android (survives app backgrounding)
- Parallel uploads for multiple files
- Progress tracking with persistence across navigation
Prerequisites
- S3 bucket and credentials
- Backend running with S3 env vars (copy from
apps/api/example.env) - File uploads feature enabled in
apps/mobile/features/feature-registry.tsx
Architecture
Upload Strategies
Launch automatically selects the best upload strategy based on file size:| File Size | Strategy | Description |
|---|---|---|
| < 10 MB | Simple Upload | Single presigned URL PUT request |
| 10-40 MB | Multipart Upload | Chunked upload with 5MB parts, resumable |
| > 40 MB | Native Background | iOS URLSession / Android coroutines |
Features
Presigned URLs
Secure, time-limited URLs. No S3 credentials on client.
Resumable
Multipart uploads can resume after network interruption.
Background Uploads
Native iOS/Android uploads continue when app is backgrounded.
Progress Tracking
Per-file progress with UI persistence across navigation.
Steps
- Configure S3 and backend env vars: Backend Setup
- Integrate the mobile UI: Mobile Setup
- Enable the feature flag:
apps/mobile/features/feature-registry.tsx → featureFlags.fileUploads = true
How It Works
- Mobile requests presigned URLs from the API
- Uploads go directly to S3
- The API confirms and records uploads
Quick Links
Backend Setup
Configure S3, environment variables, and API endpoints.
Mobile Setup
Integrate file uploads in your React Native app.
Native Uploads
Deep dive into iOS/Android background upload module.
API Reference
Complete API documentation for upload endpoints.
Test Checklist
- Select a photo and upload successfully
- Large file triggers multipart or native upload
- Uploaded file appears in the list
Troubleshooting
Start with Troubleshooting and verify S3 credentials and CORS configuration.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.