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.

All the Offline Features You Need.

Widevine
& FairPlay Support

Handle license acquisition and offline playback for Android (Widevine) and iOS (FairPlay), ensuring premium content remains protected on both platforms.

Offline
License Lifecycle

Acquire, store, and renew licenses locally; automatically revoke or expire them if the user’s subscription ends or time limits are reached.

Secure
Key Storage

Utilize platform-specific secure enclaves (iOS Keychain, Android Keystore) to encrypt and store DRM keys, preventing unauthorized access.

Multiple DRM
Provider Compatibility

Support various licensing servers and frameworks (e.g., PlayReady, third-party DRM) to broaden content availability.

Time-Based
Playback Restrictions

Enforce viewing windows (e.g., 48 hours after download), ensuring offline playback stops automatically once the content expires.

Error Handling
& Debug Tools

Provide clear logs and error codes when license requests fail or decryption errors occur, simplifying troubleshooting on both Android and iOS.

Flexible

Track Selection

Choose specific bitrates, audio tracks, or subtitle tracks from your HLS or DASH .m3u8 and .mpd manifests.

Multi‑Platform
HLS Support

Download HLS streams on both Android and iOS, guaranteeing a consistent offline experience across devices. Handle DASH DRM downloads on Android if needed.

Reliable background
uploader

The SDK supports stable background uploads with automatic retries, queueing, and robust error handling. Even under spotty connections, covering countless edge cases along the way.

Pause/Resume
+ Queue Management

Queue multiple downloads, pause or resume tasks on demand, and maintain progress across app restarts on both iOS and Android.

Multi Subtitles
& Audio

Include or exclude subtitles and multiple audio tracks as needed, providing localized offline playback experiences.

Developer‑Friendly
Integration

Continue using react-native-video normally, while the SDK manages all offline operations with minimal changes to your current workflow.

Centralized
Offline Library

Group and manage all downloaded media in a single repository, simplifying how you track offline videos, audio, and subtitles.

Storage
Optimization

Prevent excessive space usage by controlling which resolutions, audio, and subtitles are saved. Download only what you actually need.

Easy Metadata
Access

Easily retrieve or update metadata (e.g., titles, expiration dates) for each offline asset, streamlining your in-app library management.

Automatic
Clean‑Up

Remove expired or unwanted files to free device space and keep your offline library lean based on predefined configuration. No extra manual steps needed.

Secure Handling
of Assets

Leverage iOS Keychain and Android Keystore (when used with DRMLeverage iOS Keychain and Android Keystore (when using DRM) to store asset keys or tokens, protecting sensitive data.

Flexible
Integration

Offer complete control over how offline assets are displayed, updated, and accessed allowing you to maintain your existing workflows.
Bring Your Vision to Life with Our Custom App Development!
Creating React Native app from scratch
Starting from zero? No problem! Our Build App From Scratch service is the perfect solution for transforming your visionary ideas into reality. With a focus on innovation, user experience, and cutting-edge technology, our team guides you through every step of the development process. From initial concept to final launch, we ensure your app not only meets the current market demands but is also primed for future growth. Whether you're a startup looking to disrupt the market or an established business aiming to expand your digital presence, we're here to make your dream app a reality.
Platform Support
  • Android Background Execution (>5 minutes with foreground service / WorkManager)
  • iOS Background Tasks (continue uploads when minimized)
1
Tailored Solutions:
Get a custom-built app that perfectly aligns with your business goals and user needs.
2
Innovative Design and UX:
Create an engaging user experience with our design-first approach, ensuring high user retention and satisfaction.
Scalability and Flexibility:
Build a solid foundation for your app, with scalability and flexibility at its core, to easily adapt to future demands and growth.
By clicking “Accept All Cookies”, you agree to the storing of cookies on your device to enhance site navigation, analyze site usage, and assist in our marketing efforts. View our Privacy Policy for more information.

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

Ready to start, and talk about your business growth?

No credit card required. No immediate purchase. Let’s talk about your project and how our SDK can power your next launch.
Start using Offline Video SDK