npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@keithj/react-native-offline-sync

v1.0.2

Published

A React Native library to manage offline API request queuing and automatic syncing when the device regains network connectivity.

Readme

react-native-offline-sync

npm version

A lightweight React Native library to queue API requests when offline and automatically sync them when the device is back online.

🚀 Features

  • 📡 Detects network status using @react-native-community/netinfo
  • 📦 Queues failed or offline API requests
  • 🔁 Automatically retries requests when online
  • 🔄 Retry logic with max retry limit
  • 🧠 Real-time queue size tracking
  • 🧪 Hook-based API — no Redux required!

📦 Installation

npm install @keithj/react-native-offline-sync

Or with Yarn:

yarn add @keithj/react-native-offline-sync

You also need to install these peer dependencies:

yarn add @react-native-async-storage/async-storage @react-native-community/netinfo axios

🧠 Usage

import React from 'react';
import { View, Text, Button } from 'react-native';
import { useOfflineSync } from '@keithj/react-native-offline-sync';

export default function App() {
  const { isOnline, enqueueRequest, queueLength } = useOfflineSync();

  const handleSend = () => {
    enqueueRequest({
      request: {
        url: 'https://jsonplaceholder.typicode.com/posts',
        method: 'POST',
        data: {
          title: 'Offline Test',
          body: 'This request will be queued if offline.',
        },
      },
      options: {
        maxRetries: 5,
        preventDuplicate: true, // Optional: avoid enqueueing the same request again
      },
    });
  };

  return (
    <View>
      <Text>Network: {isOnline ? 'Online ✅' : 'Offline ❌'}</Text>
      <Text>Queue Length: {queueLength}</Text>
      <Button title="Send Request" onPress={handleSend} />
    </View>
  );
}

🔁 By default, the library will retry each request up to 3 times.
You can override this by passing maxRetries in the options object.


📌 Roadmap

  • [x] Retry with max attempts
  • [x] Queue length tracking
  • [ ] Pause/resume queue
  • [ ] Exponential backoff strategy
  • [ ] Devtools panel (debug view)
  • [ ] Configurable storage adapter

🧑‍💻 Contributing

See the contributing guide to learn how to contribute to the repository and development workflow.


📄 License

MIT © Ketan Jingar


GitHub: keithj/react-native-offline-sync


Made with create-react-native-library