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

advanced-cuckoo-filter

v1.0.2

Published

An advanced Cuckoo Filter with auto-persistence, Parquet & JSON support, and dynamic resizing.

Readme

Advanced Cuckoo Filter

A high-performance JavaScript implementation of a Cuckoo Filter, a probabilistic data structure that supports approximate membership queries with better space efficiency and performance characteristics compared to Bloom Filters.

Features

  • Efficient Membership Testing: Fast approximate membership testing with controllable false positive rate
  • Element Deletion Support: Unlike Bloom filters, Cuckoo filters support element deletion
  • Configurable Parameters: Adjust bucket size, fingerprint length, and other parameters
  • High Load Factor: Works efficiently even at high occupancy rates
  • Performance Monitoring: Built-in statistics tracking

Usage

const AdvancedCuckooFilter = require('./AdvancedCuckooFilter');

// Create a new filter with initial capacity of 1000 items
// bucketSize = 4, fingerprintBits = 8
const filter = new AdvancedCuckooFilter(1000, 4, 8);

// Insert items
filter.insert('apple');
filter.insert('banana');

// Check membership
console.log(filter.lookup('apple'));  // true
console.log(filter.lookup('grape'));  // false (true would be a false positive)

// Remove items
filter.remove('apple');
console.log(filter.lookup('apple'));  // false

// Get statistics
console.log(filter.getStats());

API

Constructor

const filter = new AdvancedCuckooFilter(capacity, bucketSize, fingerprintBits, maxNumKicks);
  • capacity: Initial number of buckets (will be rounded to next power of 2)
  • bucketSize: Number of entries per bucket (default: 4)
  • fingerprintBits: Number of bits for fingerprint (default: 8)
  • maxNumKicks: Maximum number of kicks for insertion (default: 500)

Methods

  • insert(item): Insert an item into the filter. Returns true if successful.
  • lookup(item): Check if an item might be in the filter. Returns true if the item might be present.
  • remove(item): Remove an item from the filter. Returns true if successful.
  • clear(): Remove all items from the filter.
  • getLoadFactor(): Returns the current load factor (between 0 and 1).
  • getStats(): Returns detailed statistics about the filter.

Implementation Details

This cuckoo filter implementation uses:

  1. Two Hash Functions: To determine the two possible bucket locations for each item
  2. Fingerprinting: Instead of storing the full items, we store small fingerprints
  3. Cuckoo Hashing: Items that cannot be placed directly are inserted using the cuckoo displacement strategy
  4. Power-of-2 Sizing: Bucket count is always a power of 2 for efficient modulo operations

Performance Considerations

  • Fingerprint Size: Larger fingerprints reduce false positives but increase memory usage
  • Bucket Size: Larger bucket sizes increase the load factor threshold but may slow down lookups
  • Load Factor: Performance degrades as the filter approaches its capacity