{"adoption": {"forks": 179, "observed_at": "2026-08-28T04:04:35.189256+00:00", "stars": 1387}, "canonical_url": "https://ross.abutalabs.com/products/functions-framework-nodejs", "card": {"archived": false, "artifact_type": "framework", "description": "FaaS (Function as a service) framework for writing portable Node.js functions", "domain": ["backend", "cloud-computing", "web-development", "apis"], "enriched": true, "function": ["web-framework", "http-server", "middleware", "serverless"], "health_score": 97, "homepage": null, "language": "TypeScript", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["GoogleCloudPlatform/functions-framework-nodejs"], "name": "GoogleCloudPlatform/functions-framework-nodejs", "platform": ["cloud", "self-hosted"], "pushed_at": "2026-08-10T23:23:29+00:00", "repo": "GoogleCloudPlatform/functions-framework-nodejs", "stars": 1387, "tags": ["faas", "google-cloud-functions", "cloudevents", "express", "serverless", "nodejs", "docker"], "topics": ["nodejs", "functions-as-a-service", "google-cloud", "cloud-functions"], "urls": [], "use_cases": ["run node.js functions locally without writing an http server", "deploy portable functions to google cloud run functions", "handle cloudevents in serverless functions", "test cloud functions on localhost before deploying", "write functions that run on knative-based environments"], "what_it_is": "An open-source FaaS framework for Node.js, based on Express, for writing portable functions that run on Google Cloud Run functions, Cloud Run, Knative, or locally. It handles HTTP server setup and CloudEvents unmarshalling so developers only write function logic.", "when_to_avoid": ["you need a full web application framework with routing and middleware ecosystems", "you are not targeting serverless or event-driven deployment models", "you use a runtime other than Node.js"], "when_to_choose": ["you are developing Google Cloud Run functions or Cloud Run services in Node.js", "you want portable serverless functions across Knative-compatible platforms", "you need quick local testing of function handlers"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/functions-framework-nodejs", "repo": "GoogleCloudPlatform/functions-framework-nodejs", "role": "main", "score": 95}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.189256+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:39:48.475414+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "94d1c4cacfcf6f077dd37ace54ae36e803afa5c8322d723a720a07d3e8e0885c", "fetched_at": "2026-08-28T04:04:35.189256+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GoogleCloudPlatform/functions-framework-nodejs"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.189256+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:39:48.475414+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "94d1c4cacfcf6f077dd37ace54ae36e803afa5c8322d723a720a07d3e8e0885c", "fetched_at": "2026-08-28T04:04:35.189256+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GoogleCloudPlatform/functions-framework-nodejs"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:39:48.475414+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "94d1c4cacfcf6f077dd37ace54ae36e803afa5c8322d723a720a07d3e8e0885c", "fetched_at": "2026-08-28T04:04:35.189256+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GoogleCloudPlatform/functions-framework-nodejs"}], "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:04:35.189256+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.189256+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.189256+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:39:48.475414+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "94d1c4cacfcf6f077dd37ace54ae36e803afa5c8322d723a720a07d3e8e0885c", "fetched_at": "2026-08-28T04:04:35.189256+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GoogleCloudPlatform/functions-framework-nodejs"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.189256+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.189256+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:39:48.475414+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "94d1c4cacfcf6f077dd37ace54ae36e803afa5c8322d723a720a07d3e8e0885c", "fetched_at": "2026-08-28T04:04:35.189256+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GoogleCloudPlatform/functions-framework-nodejs"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.189256+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.189256+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.189256+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:39:48.475414+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "94d1c4cacfcf6f077dd37ace54ae36e803afa5c8322d723a720a07d3e8e0885c", "fetched_at": "2026-08-28T04:04:35.189256+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GoogleCloudPlatform/functions-framework-nodejs"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.189256+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.189256+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:39:48.475414+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "94d1c4cacfcf6f077dd37ace54ae36e803afa5c8322d723a720a07d3e8e0885c", "fetched_at": "2026-08-28T04:04:35.189256+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GoogleCloudPlatform/functions-framework-nodejs"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:39:48.475414+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "94d1c4cacfcf6f077dd37ace54ae36e803afa5c8322d723a720a07d3e8e0885c", "fetched_at": "2026-08-28T04:04:35.189256+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GoogleCloudPlatform/functions-framework-nodejs"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:39:48.475414+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "94d1c4cacfcf6f077dd37ace54ae36e803afa5c8322d723a720a07d3e8e0885c", "fetched_at": "2026-08-28T04:04:35.189256+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GoogleCloudPlatform/functions-framework-nodejs"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:39:48.475414+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "94d1c4cacfcf6f077dd37ace54ae36e803afa5c8322d723a720a07d3e8e0885c", "fetched_at": "2026-08-28T04:04:35.189256+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GoogleCloudPlatform/functions-framework-nodejs"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 97, "longevity": 100, "rhythm": 90}, "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": 2707, "days_push": 23, "days_rel": 65, "gap_med": 17.5, "n_releases_24m": 13}, "score": 95, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}