TL;DR A fetch() upload dies when the OS suspends your app, and your JS context is recreated with no memory of it. We are going to build an upload that is a persisted record plus a state machine , hand the actual transfer to a native background session, and reconcile against the server when the app comes back. About 150 lines. Versions this was written against: Expo SDK 54 (React Native 0.81) and …