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

stpd

v1.0.2

Published

😈 Stpd - and Powerful Cache.

Downloads

1

Readme

Stpd Cache

A simple yet powerful caching module. The name Stpd (stupid) doesn't reflect its simplicity, but rather the irony that a seemingly simple concept like caching, when properly implemented, can be a game-changer for massive projects.

Features

  • Multiple Storage Backends: Memory and Redis support
  • Configurable Rules: Define when to cache or clear items
  • Statistics Tracking: Monitor cache hits and misses
  • Automatic Cleanup: Configurable TTL and cleanup intervals
  • Async Support: Full Promise-based API

Installation

npm install stpd

Basic Usage

import Stpd from 'stpd';

// Create a new cache instance with default memory storage
const stpd = new Stpd({
    ttlSeconds: 60, // Time to live in seconds
    cleanupIntervalMinutes: 5, // How often to clean expired items
    enableStats: true // Enable hit/miss statistics
});

// Cache a value with automatic generation / key = ['user','123']
const result = await stpd.cache(['user','123'], async () => {
    // This function only runs if the value isn't in cache
    return await fetchUserFromDatabase('123');
});

// Clear a specific item from cache
await cache.clear(['user','123']);

// Get cache statistics
const stats = stpd.getStats();
// stats = { hits: 0, misses: 1 }

Advanced Usage

Custom Caching Rules

cache.setRuleCache((id) => {
    return id[0] === 'user';
});

Redis Storage

import { RedisStorage, Stpd } from 'stpd';
import { createClient } from 'redis';

const client = createClient();
await client.connect();

const storage = new RedisStorage({ client });
const stpd = new Stpd({ ttlSeconds: 5, storage }); // 5 second TTL

async function getOne() {
    return stpd.cache({ n: 1 }, async () => {
        console.log('Generating 1');
        await new Promise(resolve => setTimeout(resolve, 1000));
        return '{ n: 1 }';
    });
}

console.log('First call (should generate):', await getOne());
console.log('Second call (should use cache):', await getOne());
console.log('Waiting 6 seconds...');
await new Promise(resolve => setTimeout(resolve, 6000));
console.log('Third call (should generate again):', await getOne());

stpd.close();

Output

First call (should generate): { n: 1 }
Second call (should use cache): { n: 1 }
Waiting 6 seconds...
Generating 1
Third call (should generate again): { n: 1 }

Memory Storage with Custom Settings

import { MemoryStorage } from 'stpd';

const cache = new Stpd({
    storage: new MemoryStorage({
        ttlSeconds: 300, // 5 minutes
        cleanupIntervalMinutes: 5 // Clean every minute
    })
});

API Reference

Stpd Constructor Options

  • ttlSeconds (number): Default time to live in seconds (default: 60)
  • cleanupIntervalMinutes (number): How often to clean expired items (default: 5)
  • enableStats (boolean): Enable hit/miss statistics (default: true)
  • storage (Storage): Custom storage implementation (default: MemoryStorage)

Methods

  • cache(id, generator): Get or compute value if not in cache
  • clear(id): Remove item from cache
  • getStats(): Get cache statistics
  • setRuleCache(rule): Set rule for when to cache items
  • setRuleClear(rule): Set rule for when to clear items
  • close(): Clean up resources

Storage Implementations

MemoryStorage

  • In-memory storage with automatic cleanup
  • Perfect for single-process applications

RedisStorage

  • Distributed cache using Redis
  • Ideal for multi-process or distributed applications

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT