{"adoption": {"forks": 255, "observed_at": "2026-08-28T04:06:50.342299+00:00", "stars": 2416}, "canonical_url": "https://ross.abutalabs.com/products/actionhero", "card": {"archived": false, "artifact_type": "framework", "description": "Actionhero is a realtime multi-transport nodejs API Server with integrated cluster capabilities and delayed tasks", "domain": ["backend", "web-development", "apis", "developer-tools"], "enriched": true, "function": ["api-framework", "http-server", "websocket", "cli", "scheduling", "message-queue", "middleware", "routing"], "health_score": 96, "homepage": "https://www.actionherojs.com", "language": "TypeScript", "license": "Apache-2.0", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["actionhero/actionhero", "actionhero/node-resque"], "name": "Actionhero", "platform": ["cross-platform", "cli"], "pushed_at": "2026-07-23T00:53:19+00:00", "repo": "actionhero/actionhero", "stars": 2416, "tags": ["api-server", "multi-transport", "delayed-tasks", "background-jobs", "cluster", "resque", "typescript", "zero-downtime-deploys", "realtime", "real-time", "nodejs"], "topics": ["nodejs", "javascript", "socket-client", "server", "websocket", "tcp", "framework", "delayed-jobs", "http", "https", "api", "api-server", "actionhero", "delayed-tasks", "cluster", "ts", "async-await", "frameworks", "typescript"], "urls": [{"kind": "homepage", "url": "https://www.actionherojs.com"}, {"kind": "site_page", "url": "https://docs.actionherojs.com"}], "use_cases": ["build a REST API server in nodejs", "serve the same API over HTTP and websockets", "run background jobs and delayed tasks in node", "build a realtime chat server", "create a clustered node API server with zero-downtime deploys", "generate a typescript API project scaffold", "build a game backend speaking multiple protocols"], "what_it_is": "Actionhero is a Node.js/TypeScript API framework that serves the same actions over HTTP, HTTPS, and WebSockets, with built-in clustering, background task queues (via node-resque), and a project generator CLI. It targets reusable, scalable APIs for stateless and stateful applications including realtime chat, IoT, and games.", "when_to_avoid": ["you need a minimal or micro framework with full control over middleware choices", "your stack is not Node.js/TypeScript", "you want GraphQL-first or heavy ORM features included", "the project has a successor (Keryx) you'd rather adopt for new Bun-based work"], "when_to_choose": ["you want one action codebase served over multiple transports (HTTP, WebSocket)", "you need integrated background task queues and scheduling out of the box", "you want clustering and 0-downtime deploys built into the framework", "you prefer a batteries-included framework over assembling express + bull + socket.io"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/repos/actionhero/actionhero", "repo": "actionhero/actionhero", "role": "main", "score": 84}, {"path": "/repos/actionhero/node-resque", "repo": "actionhero/node-resque", "role": "backend", "score": 93}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:50.342299+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:33:08.419946+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9b325a998de0143732e4653051622391dae742308472477d8b3e207ec2dd53f0", "fetched_at": "2026-08-28T04:06:50.342299+00:00", "kind": "readme", "missing": false, "url": "https://github.com/actionhero/actionhero"}, {"content_hash": "bc99ac039ff521c18cd50243321fcb363a7a5dbf1904263cff4b8b1cc99bd0c3", "fetched_at": "2026-08-29T10:14:23.452141+00:00", "kind": "homepage", "missing": false, "url": "https://www.actionherojs.com"}, {"content_hash": "52075a993e923f53184d8d27761ae4253e2f2f6b455df4f1e567f14d4b9a7acf", "fetched_at": "2026-08-29T10:14:23.490867+00:00", "kind": "site_page", "missing": false, "url": "https://docs.actionherojs.com"}, {"content_hash": "614460b9d97cd83cdc0947dd82e3ccc90cf4f72d4cbea6add801213132954dc9", "fetched_at": "2026-08-29T10:14:23.644761+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/node-resque"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:50.342299+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:33:08.419946+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9b325a998de0143732e4653051622391dae742308472477d8b3e207ec2dd53f0", "fetched_at": "2026-08-28T04:06:50.342299+00:00", "kind": "readme", "missing": false, "url": "https://github.com/actionhero/actionhero"}, {"content_hash": "bc99ac039ff521c18cd50243321fcb363a7a5dbf1904263cff4b8b1cc99bd0c3", "fetched_at": "2026-08-29T10:14:23.452141+00:00", "kind": "homepage", "missing": false, "url": "https://www.actionherojs.com"}, {"content_hash": "52075a993e923f53184d8d27761ae4253e2f2f6b455df4f1e567f14d4b9a7acf", "fetched_at": "2026-08-29T10:14:23.490867+00:00", "kind": "site_page", "missing": false, "url": "https://docs.actionherojs.com"}, {"content_hash": "614460b9d97cd83cdc0947dd82e3ccc90cf4f72d4cbea6add801213132954dc9", "fetched_at": "2026-08-29T10:14:23.644761+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/node-resque"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:33:08.419946+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9b325a998de0143732e4653051622391dae742308472477d8b3e207ec2dd53f0", "fetched_at": "2026-08-28T04:06:50.342299+00:00", "kind": "readme", "missing": false, "url": "https://github.com/actionhero/actionhero"}, {"content_hash": "bc99ac039ff521c18cd50243321fcb363a7a5dbf1904263cff4b8b1cc99bd0c3", "fetched_at": "2026-08-29T10:14:23.452141+00:00", "kind": "homepage", "missing": false, "url": "https://www.actionherojs.com"}, {"content_hash": "52075a993e923f53184d8d27761ae4253e2f2f6b455df4f1e567f14d4b9a7acf", "fetched_at": "2026-08-29T10:14:23.490867+00:00", "kind": "site_page", "missing": false, "url": "https://docs.actionherojs.com"}, {"content_hash": "614460b9d97cd83cdc0947dd82e3ccc90cf4f72d4cbea6add801213132954dc9", "fetched_at": "2026-08-29T10:14:23.644761+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/node-resque"}], "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:06:50.342299+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:50.342299+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:50.342299+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:33:08.419946+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9b325a998de0143732e4653051622391dae742308472477d8b3e207ec2dd53f0", "fetched_at": "2026-08-28T04:06:50.342299+00:00", "kind": "readme", "missing": false, "url": "https://github.com/actionhero/actionhero"}, {"content_hash": "bc99ac039ff521c18cd50243321fcb363a7a5dbf1904263cff4b8b1cc99bd0c3", "fetched_at": "2026-08-29T10:14:23.452141+00:00", "kind": "homepage", "missing": false, "url": "https://www.actionherojs.com"}, {"content_hash": "52075a993e923f53184d8d27761ae4253e2f2f6b455df4f1e567f14d4b9a7acf", "fetched_at": "2026-08-29T10:14:23.490867+00:00", "kind": "site_page", "missing": false, "url": "https://docs.actionherojs.com"}, {"content_hash": "614460b9d97cd83cdc0947dd82e3ccc90cf4f72d4cbea6add801213132954dc9", "fetched_at": "2026-08-29T10:14:23.644761+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/node-resque"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:50.342299+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:50.342299+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:33:08.419946+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9b325a998de0143732e4653051622391dae742308472477d8b3e207ec2dd53f0", "fetched_at": "2026-08-28T04:06:50.342299+00:00", "kind": "readme", "missing": false, "url": "https://github.com/actionhero/actionhero"}, {"content_hash": "bc99ac039ff521c18cd50243321fcb363a7a5dbf1904263cff4b8b1cc99bd0c3", "fetched_at": "2026-08-29T10:14:23.452141+00:00", "kind": "homepage", "missing": false, "url": "https://www.actionherojs.com"}, {"content_hash": "52075a993e923f53184d8d27761ae4253e2f2f6b455df4f1e567f14d4b9a7acf", "fetched_at": "2026-08-29T10:14:23.490867+00:00", "kind": "site_page", "missing": false, "url": "https://docs.actionherojs.com"}, {"content_hash": "614460b9d97cd83cdc0947dd82e3ccc90cf4f72d4cbea6add801213132954dc9", "fetched_at": "2026-08-29T10:14:23.644761+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/node-resque"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:50.342299+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:50.342299+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:50.342299+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:33:08.419946+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9b325a998de0143732e4653051622391dae742308472477d8b3e207ec2dd53f0", "fetched_at": "2026-08-28T04:06:50.342299+00:00", "kind": "readme", "missing": false, "url": "https://github.com/actionhero/actionhero"}, {"content_hash": "bc99ac039ff521c18cd50243321fcb363a7a5dbf1904263cff4b8b1cc99bd0c3", "fetched_at": "2026-08-29T10:14:23.452141+00:00", "kind": "homepage", "missing": false, "url": "https://www.actionherojs.com"}, {"content_hash": "52075a993e923f53184d8d27761ae4253e2f2f6b455df4f1e567f14d4b9a7acf", "fetched_at": "2026-08-29T10:14:23.490867+00:00", "kind": "site_page", "missing": false, "url": "https://docs.actionherojs.com"}, {"content_hash": "614460b9d97cd83cdc0947dd82e3ccc90cf4f72d4cbea6add801213132954dc9", "fetched_at": "2026-08-29T10:14:23.644761+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/node-resque"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:50.342299+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:50.342299+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:33:08.419946+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9b325a998de0143732e4653051622391dae742308472477d8b3e207ec2dd53f0", "fetched_at": "2026-08-28T04:06:50.342299+00:00", "kind": "readme", "missing": false, "url": "https://github.com/actionhero/actionhero"}, {"content_hash": "bc99ac039ff521c18cd50243321fcb363a7a5dbf1904263cff4b8b1cc99bd0c3", "fetched_at": "2026-08-29T10:14:23.452141+00:00", "kind": "homepage", "missing": false, "url": "https://www.actionherojs.com"}, {"content_hash": "52075a993e923f53184d8d27761ae4253e2f2f6b455df4f1e567f14d4b9a7acf", "fetched_at": "2026-08-29T10:14:23.490867+00:00", "kind": "site_page", "missing": false, "url": "https://docs.actionherojs.com"}, {"content_hash": "614460b9d97cd83cdc0947dd82e3ccc90cf4f72d4cbea6add801213132954dc9", "fetched_at": "2026-08-29T10:14:23.644761+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/node-resque"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:33:08.419946+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9b325a998de0143732e4653051622391dae742308472477d8b3e207ec2dd53f0", "fetched_at": "2026-08-28T04:06:50.342299+00:00", "kind": "readme", "missing": false, "url": "https://github.com/actionhero/actionhero"}, {"content_hash": "bc99ac039ff521c18cd50243321fcb363a7a5dbf1904263cff4b8b1cc99bd0c3", "fetched_at": "2026-08-29T10:14:23.452141+00:00", "kind": "homepage", "missing": false, "url": "https://www.actionherojs.com"}, {"content_hash": "52075a993e923f53184d8d27761ae4253e2f2f6b455df4f1e567f14d4b9a7acf", "fetched_at": "2026-08-29T10:14:23.490867+00:00", "kind": "site_page", "missing": false, "url": "https://docs.actionherojs.com"}, {"content_hash": "614460b9d97cd83cdc0947dd82e3ccc90cf4f72d4cbea6add801213132954dc9", "fetched_at": "2026-08-29T10:14:23.644761+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/node-resque"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:33:08.419946+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9b325a998de0143732e4653051622391dae742308472477d8b3e207ec2dd53f0", "fetched_at": "2026-08-28T04:06:50.342299+00:00", "kind": "readme", "missing": false, "url": "https://github.com/actionhero/actionhero"}, {"content_hash": "bc99ac039ff521c18cd50243321fcb363a7a5dbf1904263cff4b8b1cc99bd0c3", "fetched_at": "2026-08-29T10:14:23.452141+00:00", "kind": "homepage", "missing": false, "url": "https://www.actionherojs.com"}, {"content_hash": "52075a993e923f53184d8d27761ae4253e2f2f6b455df4f1e567f14d4b9a7acf", "fetched_at": "2026-08-29T10:14:23.490867+00:00", "kind": "site_page", "missing": false, "url": "https://docs.actionherojs.com"}, {"content_hash": "614460b9d97cd83cdc0947dd82e3ccc90cf4f72d4cbea6add801213132954dc9", "fetched_at": "2026-08-29T10:14:23.644761+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/node-resque"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:33:08.419946+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9b325a998de0143732e4653051622391dae742308472477d8b3e207ec2dd53f0", "fetched_at": "2026-08-28T04:06:50.342299+00:00", "kind": "readme", "missing": false, "url": "https://github.com/actionhero/actionhero"}, {"content_hash": "bc99ac039ff521c18cd50243321fcb363a7a5dbf1904263cff4b8b1cc99bd0c3", "fetched_at": "2026-08-29T10:14:23.452141+00:00", "kind": "homepage", "missing": false, "url": "https://www.actionherojs.com"}, {"content_hash": "52075a993e923f53184d8d27761ae4253e2f2f6b455df4f1e567f14d4b9a7acf", "fetched_at": "2026-08-29T10:14:23.490867+00:00", "kind": "site_page", "missing": false, "url": "https://docs.actionherojs.com"}, {"content_hash": "614460b9d97cd83cdc0947dd82e3ccc90cf4f72d4cbea6add801213132954dc9", "fetched_at": "2026-08-29T10:14:23.644761+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/node-resque"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 93, "longevity": 100, "rhythm": 62}, "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": 5451, "days_push": 42, "days_rel": 42, "gap_med": 239.0, "n_releases_24m": 3}, "score": 84, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}