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

react-native-nitro-unzip

v0.5.3

Published

High-performance ZIP extraction for React Native, powered by Nitro Modules

Readme

react-native-nitro-unzip

npm npm downloads license CI Platform - iOS Platform - Android

High-performance ZIP operations for React Native, powered by Nitro Modules.

Read the full documentation

Features

  • Fast — ~9,000+ files/sec on Android (post-NIO / java.util.zip.ZipFile migration in 0.5.0) and ~10,000+ files/sec on iOS (O_NOFOLLOW streaming writes), measured on nested 1000-entry archives on dev hardware
  • Zero bridge overhead — progress callbacks via JSI, no serialization
  • Cancellable — mid-write cancellation on Android (Thread.interrupt() + interruptible NIO channels), per-entry cancellation on iOS (Swift Concurrency)
  • AES-256 password support — encrypted archives, zip & unzip, on both platforms
  • Transactional extraction — zero partial state on mid-stream failure (rollback on both platforms)
  • Concurrent operations — multiple tasks run independently
  • Background execution — iOS background task management

Installation

npm install react-native-nitro-unzip react-native-nitro-modules
cd ios && pod install

Requires React Native 0.75+, Nitro Modules 0.35+, iOS 15.5+, Android minSdk 26+ (since 0.5.0), and Java 17 (Android).

Security defences (0.5.0+)

The 0.5.0 release added the same Zip Slip / symlink / case-collision / BiDi-spoofing defences to both Android and iOS:

  • Path traversal (../escape), absolute paths, backslash separators
  • NUL bytes, BiDi overrides/isolates (CVE-2021-42574 class), C0 control characters
  • Length cap (1024 chars), empty entries, dot/dot-dot resolutions
  • Case-insensitive + NFC-normalised duplicate detection (FAT32/HFS+/APFS-CI overwrite prevention)
  • Symlink injection at the entry target OR in any ancestor directory
  • Transactional extraction: any failure mid-extraction (corrupt entry, disk full, write error, cancellation) rolls back every file AND every intermediate directory we created before the error surfaces — the destination is either fully extracted or untouched

Errors carry a stable code (e.g. ENTRY_OUTSIDE_DESTINATION, SYMLINK_IN_ANCESTRY, WRONG_PASSWORD, CANCELLED) so JS handlers can branch programmatically rather than parsing localised messages.

iOS deployment target

The library depends on SSZipArchive, which requires iOS 15.5+. Ensure your app's Podfile (or Expo Podfile.properties.json) sets ios.deploymentTarget to 15.5 or higher.

Quick Example

import { getUnzip } from 'react-native-nitro-unzip';

const unzip = getUnzip();
const task = unzip.extract('/path/to/archive.zip', '/path/to/output');

task.onProgress((p) => {
  console.log(`${(p.progress * 100).toFixed(0)}% — ${p.extractedFiles}/${p.totalFiles} files`);
});

const result = await task.await();
console.log(`Extracted ${result.extractedFiles} files in ${result.duration}ms`);

Documentation

Visit the docs site for:

Example

See the example app for a working demo.

Contributing

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

License

MIT