{"adoption": {"forks": 195, "observed_at": "2026-08-28T04:08:10.976626+00:00", "stars": 3581}, "canonical_url": "https://ross.abutalabs.com/products/node-rate-limiter-flexible", "card": {"archived": false, "artifact_type": "library", "description": "Atomic and non-atomic counters and rate limiting tools. Limit resource access at any scale.", "domain": ["security", "web-development", "backend", "apis", "developer-tools"], "enriched": true, "function": ["rate-limiting", "security", "caching", "middleware"], "health_score": 91, "homepage": null, "language": "JavaScript", "license": "ISC", "license_family": "permissive", "maturity": "stable", "member_repos": ["animir/node-rate-limiter-flexible"], "name": "animir/node-rate-limiter-flexible", "platform": ["browser", "cross-platform"], "pushed_at": "2026-06-08T17:55:21+00:00", "repo": "animir/node-rate-limiter-flexible", "stars": 3581, "tags": ["brute-force-protection", "dos-protection", "throttling", "express", "koa", "nestjs", "redis", "dynamodb", "postgresql", "memcached", "mongodb", "sqlite", "fixed-window", "distributed-rate-limiting", "nodejs", "deno", "web-server"], "topics": ["security", "limit", "ratelimter", "bruteforce", "throttle", "koa", "express", "hapi", "nestjs", "rate-limiting", "dynamodb", "postgresql", "redis", "prisma", "valkey", "sqlite", "drizzle"], "urls": [], "use_cases": ["rate limit api requests per ip address", "protect login endpoint from brute force attacks", "throttle requests in express or koa middleware", "distributed rate limiting across multiple servers with redis", "limit user actions like password resets or otp requests", "prevent dos attacks on nodejs application", "rate limiting without external store using in-memory counters"], "what_it_is": "A Node.js/Deno library for counting and limiting events with atomic rate limiting across many backends including Redis, Valkey, Memcached, MongoDB, DynamoDB, MySQL, PostgreSQL, SQLite, Prisma, and in-process memory. It provides a unified API to throttle requests, block keys, and protect against DoS and brute force attacks at any scale.", "when_to_avoid": ["you need advanced algorithms like token bucket or sliding window log with precise guarantees", "you are not on a JavaScript runtime (Node.js, Deno, or browser)", "you only need simple HTTP-level rate limiting already provided by your API gateway or reverse proxy"], "when_to_choose": ["you need a unified rate limiter API that can switch between memory, Redis, and SQL/NoSQL stores as your app scales", "you need atomic increments to avoid race conditions in distributed environments", "you use Express, Koa, Hapi, or NestJS and need drop-in throttling middleware", "you need features like key blocking, action delays, and insurance/failover options"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/node-rate-limiter-flexible", "repo": "animir/node-rate-limiter-flexible", "role": "main", "score": 89}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.976626+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:33:58.147922+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53edf2ee536eccaeeda6285235abc2af3396caf30cc9bd8aadced1cca2203f82", "fetched_at": "2026-08-28T04:08:10.976626+00:00", "kind": "readme", "missing": false, "url": "https://github.com/animir/node-rate-limiter-flexible"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.976626+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:33:58.147922+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53edf2ee536eccaeeda6285235abc2af3396caf30cc9bd8aadced1cca2203f82", "fetched_at": "2026-08-28T04:08:10.976626+00:00", "kind": "readme", "missing": false, "url": "https://github.com/animir/node-rate-limiter-flexible"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:33:58.147922+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53edf2ee536eccaeeda6285235abc2af3396caf30cc9bd8aadced1cca2203f82", "fetched_at": "2026-08-28T04:08:10.976626+00:00", "kind": "readme", "missing": false, "url": "https://github.com/animir/node-rate-limiter-flexible"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.976626+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.976626+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.976626+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:33:58.147922+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53edf2ee536eccaeeda6285235abc2af3396caf30cc9bd8aadced1cca2203f82", "fetched_at": "2026-08-28T04:08:10.976626+00:00", "kind": "readme", "missing": false, "url": "https://github.com/animir/node-rate-limiter-flexible"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.976626+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.976626+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:33:58.147922+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53edf2ee536eccaeeda6285235abc2af3396caf30cc9bd8aadced1cca2203f82", "fetched_at": "2026-08-28T04:08:10.976626+00:00", "kind": "readme", "missing": false, "url": "https://github.com/animir/node-rate-limiter-flexible"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.976626+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.976626+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.976626+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:33:58.147922+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53edf2ee536eccaeeda6285235abc2af3396caf30cc9bd8aadced1cca2203f82", "fetched_at": "2026-08-28T04:08:10.976626+00:00", "kind": "readme", "missing": false, "url": "https://github.com/animir/node-rate-limiter-flexible"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.976626+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.976626+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:33:58.147922+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53edf2ee536eccaeeda6285235abc2af3396caf30cc9bd8aadced1cca2203f82", "fetched_at": "2026-08-28T04:08:10.976626+00:00", "kind": "readme", "missing": false, "url": "https://github.com/animir/node-rate-limiter-flexible"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:33:58.147922+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53edf2ee536eccaeeda6285235abc2af3396caf30cc9bd8aadced1cca2203f82", "fetched_at": "2026-08-28T04:08:10.976626+00:00", "kind": "readme", "missing": false, "url": "https://github.com/animir/node-rate-limiter-flexible"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:33:58.147922+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53edf2ee536eccaeeda6285235abc2af3396caf30cc9bd8aadced1cca2203f82", "fetched_at": "2026-08-28T04:08:10.976626+00:00", "kind": "readme", "missing": false, "url": "https://github.com/animir/node-rate-limiter-flexible"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:33:58.147922+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53edf2ee536eccaeeda6285235abc2af3396caf30cc9bd8aadced1cca2203f82", "fetched_at": "2026-08-28T04:08:10.976626+00:00", "kind": "readme", "missing": false, "url": "https://github.com/animir/node-rate-limiter-flexible"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 86, "longevity": 100, "rhythm": 87}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3041, "days_push": 86, "days_rel": 86, "gap_med": 13, "n_releases_24m": 26}, "score": 89, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}