{"adoption": {"forks": 274, "observed_at": "2026-08-28T04:08:48.530734+00:00", "stars": 4412}, "canonical_url": "https://ross.abutalabs.com/products/redbird", "card": {"archived": false, "artifact_type": "library", "description": "A modern reverse proxy for node", "domain": ["networking", "web-development", "backend"], "enriched": true, "function": ["proxy", "routing", "http-server", "websocket", "load-testing"], "health_score": 29, "homepage": null, "language": "TypeScript", "license": "BSD-2-Clause", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["OptimalBits/redbird"], "name": "OptimalBits/redbird", "platform": ["cross-platform"], "pushed_at": "2024-09-30T08:57:11+00:00", "repo": "OptimalBits/redbird", "stars": 4412, "tags": ["reverse-proxy", "letsencrypt", "ssl-termination", "http-proxy", "dynamic-routing", "zero-downtime", "docker-integration", "load-balancing", "devops", "containers", "nodejs", "docker", "web-server"], "topics": [], "urls": [], "use_cases": ["route multiple domains from one host to different backend services", "terminate SSL and auto-renew Let's Encrypt certificates for proxied apps", "reverse proxy websockets alongside HTTP traffic", "load balance requests across several backend servers", "automatically register Docker containers as proxy routes", "register and unregister proxy routes at runtime for zero-downtime deployments"], "what_it_is": "Redbird is a TypeScript library for building dynamic reverse proxies on Node.js, built on top of http-proxy. It supports programmatic route registration without restarts, automatic Let's Encrypt TLS certificates, websockets, HTTP2, load balancing, and automatic Docker container registration.", "when_to_avoid": ["you need a full-featured standalone proxy like nginx, HAProxy, or Traefik", "your stack is not Node.js based", "you need advanced traffic shaping, retries, or observability features of mature proxies", "you require a GUI or declarative configuration file workflow"], "when_to_choose": ["you need a programmable reverse proxy inside a Node.js application", "you want automatic HTTPS with Let's Encrypt without a separate tool", "you run many small services on one host and need dynamic virtual hosts", "you want Docker containers to be proxied automatically as they start"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/redbird", "repo": "OptimalBits/redbird", "role": "main", "score": 34}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:48.530734+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:21:02.901957+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7dc810cb8a0012b930122fe48d9c26983c72fc5cb2ac5b6f5a74184d2d32d94a", "fetched_at": "2026-08-28T04:08:48.530734+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OptimalBits/redbird"}, {"content_hash": "e6a4c41a08ca3f5891d3da91c646831bd99deacb7b4dd7f1dff844e5d74d7b66", "fetched_at": "2026-08-29T09:09:02.389210+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/redbird"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:48.530734+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:21:02.901957+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7dc810cb8a0012b930122fe48d9c26983c72fc5cb2ac5b6f5a74184d2d32d94a", "fetched_at": "2026-08-28T04:08:48.530734+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OptimalBits/redbird"}, {"content_hash": "e6a4c41a08ca3f5891d3da91c646831bd99deacb7b4dd7f1dff844e5d74d7b66", "fetched_at": "2026-08-29T09:09:02.389210+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/redbird"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:21:02.901957+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7dc810cb8a0012b930122fe48d9c26983c72fc5cb2ac5b6f5a74184d2d32d94a", "fetched_at": "2026-08-28T04:08:48.530734+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OptimalBits/redbird"}, {"content_hash": "e6a4c41a08ca3f5891d3da91c646831bd99deacb7b4dd7f1dff844e5d74d7b66", "fetched_at": "2026-08-29T09:09:02.389210+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/redbird"}], "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:48.530734+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:48.530734+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:48.530734+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:21:02.901957+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7dc810cb8a0012b930122fe48d9c26983c72fc5cb2ac5b6f5a74184d2d32d94a", "fetched_at": "2026-08-28T04:08:48.530734+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OptimalBits/redbird"}, {"content_hash": "e6a4c41a08ca3f5891d3da91c646831bd99deacb7b4dd7f1dff844e5d74d7b66", "fetched_at": "2026-08-29T09:09:02.389210+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/redbird"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:48.530734+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:48.530734+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:21:02.901957+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7dc810cb8a0012b930122fe48d9c26983c72fc5cb2ac5b6f5a74184d2d32d94a", "fetched_at": "2026-08-28T04:08:48.530734+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OptimalBits/redbird"}, {"content_hash": "e6a4c41a08ca3f5891d3da91c646831bd99deacb7b4dd7f1dff844e5d74d7b66", "fetched_at": "2026-08-29T09:09:02.389210+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/redbird"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:48.530734+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:48.530734+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:48.530734+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:21:02.901957+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7dc810cb8a0012b930122fe48d9c26983c72fc5cb2ac5b6f5a74184d2d32d94a", "fetched_at": "2026-08-28T04:08:48.530734+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OptimalBits/redbird"}, {"content_hash": "e6a4c41a08ca3f5891d3da91c646831bd99deacb7b4dd7f1dff844e5d74d7b66", "fetched_at": "2026-08-29T09:09:02.389210+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/redbird"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:48.530734+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:48.530734+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:21:02.901957+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7dc810cb8a0012b930122fe48d9c26983c72fc5cb2ac5b6f5a74184d2d32d94a", "fetched_at": "2026-08-28T04:08:48.530734+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OptimalBits/redbird"}, {"content_hash": "e6a4c41a08ca3f5891d3da91c646831bd99deacb7b4dd7f1dff844e5d74d7b66", "fetched_at": "2026-08-29T09:09:02.389210+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/redbird"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:21:02.901957+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7dc810cb8a0012b930122fe48d9c26983c72fc5cb2ac5b6f5a74184d2d32d94a", "fetched_at": "2026-08-28T04:08:48.530734+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OptimalBits/redbird"}, {"content_hash": "e6a4c41a08ca3f5891d3da91c646831bd99deacb7b4dd7f1dff844e5d74d7b66", "fetched_at": "2026-08-29T09:09:02.389210+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/redbird"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:21:02.901957+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7dc810cb8a0012b930122fe48d9c26983c72fc5cb2ac5b6f5a74184d2d32d94a", "fetched_at": "2026-08-28T04:08:48.530734+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OptimalBits/redbird"}, {"content_hash": "e6a4c41a08ca3f5891d3da91c646831bd99deacb7b4dd7f1dff844e5d74d7b66", "fetched_at": "2026-08-29T09:09:02.389210+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/redbird"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:21:02.901957+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7dc810cb8a0012b930122fe48d9c26983c72fc5cb2ac5b6f5a74184d2d32d94a", "fetched_at": "2026-08-28T04:08:48.530734+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OptimalBits/redbird"}, {"content_hash": "e6a4c41a08ca3f5891d3da91c646831bd99deacb7b4dd7f1dff844e5d74d7b66", "fetched_at": "2026-08-29T09:09:02.389210+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/redbird"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 40}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4411, "days_push": 702, "days_rel": 702, "gap_med": 5.0, "n_releases_24m": 3}, "score": 34, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}