Reliable Background Uploads for React Native

Queue, chunk, and resume large file uploads — even under poor connectivity and app restarts. Plug-and-play integration for your app.
TRUSTED BY LEADING COMPANIES

Onboarding Steps

If you have any questions, all answers are in our documentation.  

View Documentation
Learn more
  • 1. Install the SDK

    Add the Background Upload SDK to your React Native app via npm or yarn.

    Installation Guide →
  • 2. Initialize in App Root

    Initialize the singleton uploader in your root component and configure permissions.

    Integration Docs →
  • 3. Queue Your First File

    Add a file to the upload queue, track progress, and watch it complete reliably — even offline.

Core Upload Engine
  • Queue Management (Zustand-based global queue)
  • One-Part & Multi-Part Uploads (automatic splitting for large files)
  • Retry & Resume (with exponential backoff)
  • Offline-Aware (abort + resume when connection returns)
  • Progress & Status Tracking (real-time updates for UI)
  • Automatic Clean-Up (delete local files after confirmation)
Platform Support
  • Android Background Execution (>5 minutes with foreground service / WorkManager)
  • iOS Background Tasks (continue uploads when minimized)
  • Configurable Multipart Threshold (default ~10MB, adjustable)
  • Adaptive Concurrency (control parallel uploads vs. bandwidth)

Provider Integration

AWS S3 Multipart (presigned URLs)

Cloudflare R2 (presigned arrays)

TUS Protocol (Coming Soon, for >200MB uploads)

Custom Backend (any provider issuing presigned URLs)

System Scenarios Covered

No Internet

Weak/unstable network

App sent to background (Android/iOS)

App terminated by the user

Device reboot / power off

User logs out

Large file interrupted mid-transfer

Multiple uploads queued simultaneously

Exceeded Android 5-minute background limit

File successfully uploaded but app crashes before cleanup

Uploads are aborted when the device goes offline, marked as “awaiting resume,” and automatically retried when the connection returns.
Failed chunks are retried with exponential backoff. The uploader adapts concurrency so that uploads can still finish under poor conditions.
Uploads continue in the background. On Android this requires a foreground service / WorkManager, and on iOS background tasks are used.
The queue state is persisted. When the app restarts, the uploader restores the queue and resumes incomplete uploads.
Incomplete uploads are not lost. After the device restarts and the app is opened, the SDK resumes from the last known state.
Uploads continue as long as presigned URLs are valid. Already-authorized uploads finish even if tokens expire.
Only the missing chunks are retried, not the entire file, which saves bandwidth and time.
The SDK controls concurrency (configurable), making sure smaller files aren’t blocked by very large ones.
By default Android stops background tasks after ~5 minutes, but with the right setup (foreground service) the SDK keeps uploading until completion.
After restart, the SDK verifies completion with the server and cleans up local storage to free space.

Open Core

License Model

React Native First

Pluginable architecture

Offline Video SDK

Yes (access to React Native Video core is open source)
Flexible (App Based or Impression based)
This is React Native SDK. Only
You can add your own plugins and customize the open core

Commercial players

No (closed source)
Impression based
Supports React Native
Paid service
/*.comparison_main_wrapper { display: flex; overflow-x: auto; /* Enables horizontal scrolling if needed */ overflow-y: hidden; /* Prevents vertical scrolling */ white-space: nowrap; /* Prevents wrapping */ -webkit-overflow-scrolling: touch; /* Smooth scrolling on iOS */ }

FAQ

Having questions? Check answers below.

How does the Background Uploader handle unstable or poor network conditions during an upload?

Arrow icon

The SDK automatically detects unstable connections, aborts failing requests, and retries them with exponential backoff. Once the network stabilizes, the uploader resumes the transfer from the point of failure.

Can large files be resumed from the exact point of failure after a network interruption or app restart?

Arrow icon

Yes. The uploader stores progress for each chunk of a multipart upload, so if the app is restarted or the network is lost, it only retries the missing chunks instead of starting the entire upload again.

Is the multipart upload threshold configurable, and can I adjust it for different file sizes?

Arrow icon

Yes, the multipart threshold is fully configurable. By default it is set to around 10 MB, but you can change it to suit your application’s needs, for example lowering it to 5 MB or raising it to 20 MB.

Will uploads continue running in the background for more than 5 minutes on Android, and what permissions are required?

Arrow icon

Yes, uploads can continue beyond the 5-minute Android system limit if the proper configuration is applied. This usually involves enabling a foreground service or using WorkManager with the correct permissions in the manifest.

Does the SDK automatically retry failed parts, and how many retry attempts are supported by default?

Arrow icon

Yes, failed parts are retried automatically. The number of retries is configurable, and by default the SDK uses safe retry limits with exponential backoff to balance reliability and performance.

Can I monitor real-time upload progress and status updates for each file in the queue?

Arrow icon

Yes, the SDK provides real-time progress and status updates through its global queue, which is implemented with Zustand. Your app can subscribe to these updates and display indicators such as percentage completion, errors, or “paused” status.

Does the Background Uploader support AWS S3, Cloudflare R2, and other providers using presigned URLs?

Arrow icon

Yes, AWS S3 multipart uploads and Cloudflare R2 presigned arrays are supported out of the box. The uploader is provider-agnostic, which means any service that issues presigned URLs can be integrated.

Is the TUS protocol supported for very large uploads, and if not, when will it be available?

Arrow icon

TUS is not yet supported in the current release. However, support is planned and will include a native TUS client wrapper designed to handle extremely large uploads (over 200 MB) with robust resume and cancel capabilities.

What happens if a user logs out of the app while uploads are still in progress?

Arrow icon

Uploads continue as long as presigned URLs have already been generated. Since these URLs are pre-authorized, the uploads finish successfully even if the user logs out or the session token expires.

Can I customize concurrency limits to control how many files are uploaded simultaneously?

Arrow icon

Yes, concurrency is fully configurable. Developers can set how many files are uploaded at the same time, which makes it easy to balance speed, bandwidth usage, and device performance.Offline Video SDK is the best choice when you need to download videos. You don’t need to rely on expensive commercial players - instead, you can use our SDK, which offers flexible pricing tailored to your company or app. Additionally, you can continue using open-source solutions, contributing to and benefiting from the developer community.

Does the SDK support automatic cleanup of files after successful uploads?

Arrow icon

Yes, once an upload is confirmed as complete, the SDK removes the local file or temporary data to free up device storage.

What happens if the app crashes during an upload?

Arrow icon

If the app crashes, the SDK restores the queue and resumes incomplete uploads when the app restarts. Completed parts are not uploaded again.

How does the SDK behave if the device is restarted during an upload?

Arrow icon

When the device is restarted, uploads are paused until the app is opened again. The SDK then restores the queue from the persisted state and resumes uploads from the last saved progress.

Does the Background Uploader support simultaneous uploads and queuing multiple files?

Arrow icon

Yes, the uploader manages a queue of multiple files and can upload them sequentially or in parallel, depending on the concurrency settings you choose.

Can I integrate custom authentication flows with the uploader?

Arrow icon

Yes, the recommended approach is to obtain presigned URLs from your backend after authentication. The uploader then uses these URLs directly, which keeps your upload flow secure and independent of session state.

Haven’t found your answer?

Book a free demo call, and let’s tackle your questions, 
and see how we can help with your product.

Book a free demo

Plug-and-play integration for your app.

Get Starter Project