{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreiecxsgo7a5s5t3ffzzgbbc7wp7lbyki6knldj445h6kidzm5rhpji",
"uri": "at://did:plc:25rdn5elo5izoxrmtis34zuk/app.bsky.feed.post/3momtnxvjbcq2"
},
"coverImage": {
"$type": "blob",
"ref": {
"$link": "bafkreia4hf6uxiij7zxp5aeuijp3pmh4hxdqffoy7j6eznlwic6rwo7yyu"
},
"mimeType": "image/webp",
"size": 64668
},
"path": "/rohit_chavan_ee3aebf1d592/stop-fighting-react-native-file-systems-meet-rn-file-toolkit-3aag",
"publishedAt": "2026-06-19T07:26:43.000Z",
"site": "https://dev.to",
"tags": [
"reactnative",
"react",
"software",
"npm",
"rn-file-toolkit",
"https://github.com/chavan-labs/rn-file-toolkit",
"https://www.npmjs.com/package/rn-file-toolkit",
"https://chavan-labs.github.io/rn-file-toolkit/"
],
"textContent": "If you've built React Native apps for long enough, you've probably fought with file downloads, uploads, and filesystem management.\n\nHistorically, the community relied on `rn-fetch-blob` or `react-native-fs`. While these libraries were absolute lifesavers in their prime, they haven't aged gracefully. They often lack active maintenance, struggle with background persistence, and require a lot of manual boilerplate to manage things like download queues or multipart uploads.\n\nEven `expo-file-system`, while excellent for the basics, can fall short when you need advanced queueing or robust background management without writing custom native code.\n\nThat's why I built **rn-file-toolkit**.\n\n## What is rn-file-toolkit?\n\n`rn-file-toolkit` is the ultimate, unified native file management toolkit for React Native & Expo. It's designed to be the modern replacement for legacy file libraries.\n\nBuilt entirely with modern native implementations (Kotlin for Android, Swift for iOS) and **zero third-party dependencies** , it taps directly into OS-level managers (`URLSession` on iOS, `DownloadManager` on Android) to provide maximum reliability and battery efficiency.\n\n### Key Features That Will Make Your Life Easier:\n\n * **Drop-in React Hooks (`useDownload`)**: No more manual event listeners and state management. You get rich progress tracking (speed, ETA, percentages) and controls (pause, resume, cancel) right out of the box.\n * **True Background Readiness** : Downloads and uploads survive app suspension and automatic re-attachment when the user opens the app again.\n * **Smart Queueing** : Need to download 50 images? You can cap concurrency and set priorities with a simple config object. No need to build your own queueing system.\n * **Resilient Auto-Retries** : Network flaked? The library handles auto-retries with exponential backoff and HTTP resume.\n * **Zero-Dependency Zip/Unzip** : Extract archives or compress user data directly on the device natively.\n * **First-Class Expo Support** : Works seamlessly with Expo custom dev clients. An Expo config plugin is included automatically.\n\n\n\n## Quick Example: Using `useDownload`\n\nHere’s how simple it is to download a large video file and show progress, speed, and ETA:\n\n\n\n import React from 'react';\n import { View, Text, Button } from 'react-native';\n import { useDownload } from 'rn-file-toolkit';\n\n export default function DownloadScreen() {\n const { start, pause, resume, cancel, status, progress, result } = useDownload();\n\n return (\n <View style={{ padding: 20 }}>\n <Button\n title=\"Start Download\"\n onPress={() =>\n start({\n url: 'https://example.com/large-video.mp4',\n destination: 'documents',\n })\n }\n />\n {status === 'downloading' && progress && (\n <View style={{ marginTop: 20 }}>\n <Text>Progress: {progress.percent.toFixed(1)}%</Text>\n <Text>Speed: {(progress.speedBps / 1024 / 1024).toFixed(2)} MB/s</Text>\n <Text>ETA: {progress.etaSeconds.toFixed(0)} seconds</Text>\n\n <Button title=\"Pause\" onPress={pause} />\n </View>\n )}\n {status === 'done' && <Text>✅ Saved at: {result?.filePath}</Text>}\n </View>\n );\n }\n\n\n\n## How It Compares\n\nFeature | `rn-file-toolkit` | `react-native-fs` & `rn-fetch-blob`\n---|---|---\n**Background Persistence** | ✅ Yes | ⚠️ Spotty / Legacy\n**Smart Queueing** | ✅ Built-in | ❌ Write your own\n**React Hooks** | ✅ Out-of-the-box | ❌ Manual\n**Auto-Retries** | ✅ Yes | ❌ Manual\n**Zero 3rd-party Deps** | ✅ Yes | ❌ Varies\n\n## Try It Out\n\nIf you’re tired of stitching together multiple unmaintained libraries just to download a file reliably, give `rn-file-toolkit` a try.\n\n * **GitHub** : https://github.com/chavan-labs/rn-file-toolkit\n * **NPM** : https://www.npmjs.com/package/rn-file-toolkit\n * **Docs** : https://chavan-labs.github.io/rn-file-toolkit/\n\n\n\nI'd love to hear your feedback, feature requests, or see any PRs! ⭐ Drop a star on the repo if you find it useful.",
"title": "Stop Fighting React Native File Systems: Meet rn-file-toolkit"
}