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 🙏

© 2026 – Pkg Stats / Ryan Hefner

offline-layer

v0.1.0

Published

Drop-in offline-first layer for any web app

Readme

Offline Layer

A drop-in JavaScript library that adds offline-first capabilities to any web application. This library enables your web app to work seamlessly both online and offline by caching requests, queuing operations, and providing real-time status feedback.

Features

  • Automatic Request Handling: Intercepts and queues non-GET requests when offline
  • Response Caching: Caches GET responses for offline access
  • Automatic Synchronization: Syncs queued requests when connectivity is restored
  • Form Input Persistence: Saves form inputs to prevent data loss during offline sessions
  • Network Status Detection: Uses reliable connection detection beyond the basic navigator.onLine API
  • User Interface: Provides an optional status UI showing connection state and sync progress
  • XHR & Fetch Interception: Works with both modern fetch API and legacy XHR requests

Installation

npm install offline-layer

Basic Usage

import { OfflineLayer } from "offline-layer";

// Initialize with default options
const offlineLayer = new OfflineLayer();

// That's it! Your app now works offline

Configuration Options

const offlineLayer = new OfflineLayer({
  // Automatically sync queued requests when coming back online
  autoSync: true,

  // Show the status UI
  showUI: true,

  // Automatically hide status UI after being online for a few seconds
  autoHideUI: true,

  // Maximum number of sync retries when coming back online
  maxRetries: 3,
});

Manual Operations

If you need more control, you can use the following methods:

// Manually trigger synchronization
offlineLayer.syncNow();

// Destroy the instance and cleanup (remove listeners, restore original XHR/fetch)
offlineLayer.destroy();

How It Works

Request Interception

Offline Layer intercepts all network requests made through the Fetch API and XMLHttpRequest:

  • GET Requests: When online, responses are cached for offline use
  • Non-GET Requests: When offline, these are queued for later execution
  • Automatic Replay: Queued requests are automatically replayed when connection is restored

Data Persistence

The library uses a combination of:

  • IndexedDB: For caching GET responses with proper headers and body content
  • LocalStorage: For queuing requests and storing form inputs

Status UI

The library includes an optional status UI that shows:

  • Current connection status (online/offline/syncing)
  • Number of queued requests
  • Sync status and errors

Compatibility

  • Works in all modern browsers that support IndexedDB, LocalStorage, and Fetch API
  • Requires minimal polyfills for older browsers

Testing

npm test

License

MIT