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

zembil

v1.0.4

Published

Offline Package & Docs Cache for developers with unreliable internet

Readme

Zembil - Offline Package & Docs Cache

Zembil (Amharic for "stash" or "store") is an offline package and documentation cache system designed for developers in areas with unreliable internet connectivity and frequent power outages.

The Problem

Developers in regions with poor internet infrastructure face:

  • Hours of failed npm install attempts
  • Inability to access documentation during outages
  • Wasted development time due to connectivity issues
  • Difficulty learning new packages without internet access

Why Zembil vs npm/pip/maven?

What npm/pip/maven can't do:

  1. Offline installs fail - Even with npm cache, you need internet to resolve dependencies
  2. No documentation caching - Docs are online-only, inaccessible during outages
  3. No queue system - Can't plan ahead and download later
  4. Single manager focus - Each tool only handles its own ecosystem
  5. No progress tracking - Can't pause/resume downloads manually

What Zembil adds:

  1. True offline installs - Install packages completely offline once cached
  2. Documentation included - Full docs cached with packages for offline access
  3. Queue system - Queue 50+ packages when you have 5 minutes of good internet, download later
  4. Multi-manager unified cache - One tool for npm, pip, maven packages
  5. Manual pause/resume - Control downloads with progress tracking
  6. Team sharing - Share cache directories across devices/teams

🎯 When to use Zembil:

  • ✅ Unreliable/poor internet connection
  • ✅ Need to work offline frequently
  • ✅ Want offline documentation access
  • ✅ Use multiple package managers (npm + pip + maven)
  • ✅ Team collaboration with shared cache
  • ✅ Air-gapped or bandwidth-limited environments

🚀 When npm/pip/maven is fine:

  • ✅ Stable internet connection
  • ✅ Only need packages (not docs)
  • ✅ Single package manager
  • ✅ No need for offline workflow

The Solution

Zembil allows developers to:

  1. Queue packages they need during good connectivity periods
  2. Download and cache packages with full documentation
  3. Install instantly from local cache when offline
  4. Access documentation with zero latency
  5. Automatic interruption tracking - progress saved automatically, resume anytime
  6. Sync across devices when connectivity returns

Features

  • 🚀 Multi-package manager support: npm, pip, Maven, and more
  • 📚 Full documentation caching: API docs, examples, tutorials
  • ⏸️ Pause/Resume downloads: Manual control with progress tracking
  • 📊 Real-time progress: See download progress with visual indicators
  • Cancel downloads: Cancel specific packages or all pending downloads
  • 🧹 Cache management: Clean specific packages or entire cache
  • 🔄 Smart sync: Only download what's changed
  • 💾 Efficient storage: Compressed, deduplicated cache
  • 🎯 IDE integration: Works with VS Code, IntelliJ, etc.
  • 🌐 Offline-first: Designed for unreliable connections
  • Power outage resilient: Graceful handling of interruptions

Quick Start

CLI Usage

# Install Zembil
npm install -g zembil

# Initialize cache directory
zembil init

# Queue packages for download
zembil queue add [email protected]
zembil queue add [email protected]
zembil queue add [email protected]

# Download queued packages (when you have good internet)
zembil sync
# ⬇️  [email protected]: [████████░░░░░░░░░░░░] 45% (2.3MB / 5.1MB)

# If interrupted (network loss, Ctrl+C), progress is automatically saved!
# Check status anytime:
zembil queue list
# ⏸️ [email protected] (npm) - interrupted
#    Progress: [████████░░░░░░░░░░░░] 45% (2.3MB / 5.1MB) (interrupted, will resume)

# Resume when ready (just run sync again, or use resume command)
zembil queue resume  # Optional: marks interrupted items for retry
zembil sync          # Continues from where it left off

# Cancel downloads if needed
zembil queue cancel react           # Cancel specific package
zembil queue cancel-all             # Cancel all pending downloads

# Manage cache
zembil cache clean react            # Remove all versions of a package
zembil cache clean --all            # Remove all cached packages
zembil cache cleanup                # Clean orphaned files

# Install from cache (works offline!)
zembil install react express lodash

Programmatic Usage

import { Zembil } from 'zembil';

// Initialize Zembil
const zembil = new Zembil('./cache');
await zembil.initialize();

// Queue packages
await zembil.queue.add('react', '18.2.0', 'npm', 10);
await zembil.queue.add('express', '4.18.0', 'npm', 8);

// Download packages (progress tracked automatically)
await zembil.sync();

// If interrupted (network error, Ctrl+C), progress is automatically saved!
// Check status to see what was interrupted
const status = await zembil.queue.getStatus();
const items = await zembil.queue.list();
items.forEach(item => {
  if (item.progress) {
    console.log(`${item.packageName}: ${item.progress.percentage}% (interrupted, will resume)`);
  }
});

// Resume interrupted downloads (optional - sync will also retry them)
await zembil.queue.resume();
await zembil.sync(); // Continues from where it left off

// Install from cache
await zembil.install('react', './node_modules');

Architecture

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   Good Internet │    │   Local Cache   │    │  Offline Usage  │
│                 │    │                 │    │                 │
│ • Queue packages│───▶│ • Package files │───▶│ • Instant install│
│ • Download docs │    │ • Documentation │    │ • Fast docs     │
│ • Sync metadata │    │ • Examples       │    │ • No latency    │
└─────────────────┘    └─────────────────┘    └─────────────────┘

Documentation

Installation

As a CLI Tool

npm install -g zembil

As a Library

npm install zembil

License

MIT License - Built for the global developer community