Store Grand Re-opening: Loading Android Data with Coroutines
Article Summary
Dropbox just took over Store, the popular Android data loading library, and rewrote it from scratch in Kotlin. The reason? RxJava was making it too easy for developers to leak memory.
Originally created at the New York Times, Store (3,500+ GitHub stars) helps Android apps manage data fetching, caching, and sharing. Dropbox rebuilt it as Store 4 using Kotlin Coroutines and Flow to align with modern Android architecture and solve critical memory management issues.
Key Takeaways
- Switched from RxJava to Kotlin Flow for structured concurrency and automatic leak prevention
- Fills the Repository gap in Android Jetpack's architecture with reusable abstractions
- Prevents duplicate network requests through inflight debouncing (major data usage reduction at NYT)
- Supports disk as source of truth with Room, SQLDelight, or Realm for offline-first apps
- Returns sealed class responses (Loading/Data/Error) so UI streams never break on errors
Store 4 provides production-ready repository pattern implementation with memory caching, disk persistence, request deduplication, and guaranteed leak prevention through Kotlin's structured concurrency.
About This Article
Android apps were using too much data because RxJava's disposable-based subscription model made it easy for engineers to forget calling dispose(). This directly caused memory leaks in embedded systems that had limited resources.
Dropbox rewrote Store 4 in Kotlin using Flow's suspend functions. These enforce structured concurrency by requiring coroutine scope definition at creation time, rather than relying on manual disposal later.
Store's built-in inflight debouncer prevented duplicate requests for identical data. After the New York Times implemented it, data usage dropped significantly.