{"adoption": {"forks": 238, "observed_at": "2026-08-28T04:04:35.239469+00:00", "stars": 1388}, "canonical_url": "https://ross.abutalabs.com/products/gracejs", "card": {"archived": false, "artifact_type": "framework", "description": "A Nodejs BFF framework, build with koa2（基于koa2的标准前后端分离框架）", "domain": ["web-development", "backend", "apis"], "enriched": true, "function": ["web-framework", "http-server", "proxy", "routing", "templating", "middleware"], "health_score": 28, "homepage": "https://grace.wilee.me", "language": "JavaScript", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["xiongwilee/Gracejs"], "name": "xiongwilee/Gracejs", "platform": ["cross-platform"], "pushed_at": "2025-03-27T08:47:57+00:00", "repo": "xiongwilee/Gracejs", "stars": 1388, "tags": ["bff", "koa2", "mvc", "restful", "front-back-separation", "mock", "multi-site", "nodejs", "web-server"], "topics": ["koa", "nodejs", "mvc", "proxy", "sfb", "framework", "grace", "gracejs", "koa-grace"], "urls": [], "use_cases": ["build a BFF layer between frontend apps and backend microservices", "serve multiple sites from one Node.js server with virtual hosts", "render server-side pages by aggregating several REST APIs concurrently", "mock backend API data during frontend development", "structure a Node.js app with MVC controllers and templates"], "what_it_is": "Gracejs (formerly koa-grace v2) is a Node.js BFF framework built on Koa 2 that implements an MVC + RESTful architecture for front-end/back-end separation. It serves multiple site applications from a single Node process, with a proxy mechanism for fetching backend API data concurrently and built-in mock support.", "when_to_avoid": ["you need a full-stack framework with a real database/ORM layer", "you prefer modern actively evolving frameworks like Next.js or NestJS", "your project is a pure SPA without server-side rendering needs", "you need long-term community support for a small project"], "when_to_choose": ["you need a Koa 2 based front-end/back-end separation framework with MVC routing", "you want one Node process to host multiple site applications", "your pages need concurrent aggregation of multiple backend HTTP APIs", "you want built-in data mocking for development"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/gracejs", "repo": "xiongwilee/Gracejs", "role": "main", "score": 38}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.239469+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:39:47.910913+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f46c39399d285b26b4ecb32720ea7745f98e5b50f1d6479720ddba1deced6e9", "fetched_at": "2026-08-28T04:04:35.239469+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xiongwilee/Gracejs"}, {"content_hash": "1897f9019bbfbdc841392d94bf299f3a8d33d27b749e1e8e57f44de63b7fdbc1", "fetched_at": "2026-08-29T11:55:31.061068+00:00", "kind": "homepage", "missing": false, "url": "https://grace.wilee.me"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.239469+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:39:47.910913+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f46c39399d285b26b4ecb32720ea7745f98e5b50f1d6479720ddba1deced6e9", "fetched_at": "2026-08-28T04:04:35.239469+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xiongwilee/Gracejs"}, {"content_hash": "1897f9019bbfbdc841392d94bf299f3a8d33d27b749e1e8e57f44de63b7fdbc1", "fetched_at": "2026-08-29T11:55:31.061068+00:00", "kind": "homepage", "missing": false, "url": "https://grace.wilee.me"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:39:47.910913+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f46c39399d285b26b4ecb32720ea7745f98e5b50f1d6479720ddba1deced6e9", "fetched_at": "2026-08-28T04:04:35.239469+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xiongwilee/Gracejs"}, {"content_hash": "1897f9019bbfbdc841392d94bf299f3a8d33d27b749e1e8e57f44de63b7fdbc1", "fetched_at": "2026-08-29T11:55:31.061068+00:00", "kind": "homepage", "missing": false, "url": "https://grace.wilee.me"}], "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.239469+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.239469+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.239469+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:39:47.910913+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f46c39399d285b26b4ecb32720ea7745f98e5b50f1d6479720ddba1deced6e9", "fetched_at": "2026-08-28T04:04:35.239469+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xiongwilee/Gracejs"}, {"content_hash": "1897f9019bbfbdc841392d94bf299f3a8d33d27b749e1e8e57f44de63b7fdbc1", "fetched_at": "2026-08-29T11:55:31.061068+00:00", "kind": "homepage", "missing": false, "url": "https://grace.wilee.me"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.239469+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.239469+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:39:47.910913+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f46c39399d285b26b4ecb32720ea7745f98e5b50f1d6479720ddba1deced6e9", "fetched_at": "2026-08-28T04:04:35.239469+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xiongwilee/Gracejs"}, {"content_hash": "1897f9019bbfbdc841392d94bf299f3a8d33d27b749e1e8e57f44de63b7fdbc1", "fetched_at": "2026-08-29T11:55:31.061068+00:00", "kind": "homepage", "missing": false, "url": "https://grace.wilee.me"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.239469+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.239469+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.239469+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:39:47.910913+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f46c39399d285b26b4ecb32720ea7745f98e5b50f1d6479720ddba1deced6e9", "fetched_at": "2026-08-28T04:04:35.239469+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xiongwilee/Gracejs"}, {"content_hash": "1897f9019bbfbdc841392d94bf299f3a8d33d27b749e1e8e57f44de63b7fdbc1", "fetched_at": "2026-08-29T11:55:31.061068+00:00", "kind": "homepage", "missing": false, "url": "https://grace.wilee.me"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.239469+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.239469+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:39:47.910913+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f46c39399d285b26b4ecb32720ea7745f98e5b50f1d6479720ddba1deced6e9", "fetched_at": "2026-08-28T04:04:35.239469+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xiongwilee/Gracejs"}, {"content_hash": "1897f9019bbfbdc841392d94bf299f3a8d33d27b749e1e8e57f44de63b7fdbc1", "fetched_at": "2026-08-29T11:55:31.061068+00:00", "kind": "homepage", "missing": false, "url": "https://grace.wilee.me"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:39:47.910913+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f46c39399d285b26b4ecb32720ea7745f98e5b50f1d6479720ddba1deced6e9", "fetched_at": "2026-08-28T04:04:35.239469+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xiongwilee/Gracejs"}, {"content_hash": "1897f9019bbfbdc841392d94bf299f3a8d33d27b749e1e8e57f44de63b7fdbc1", "fetched_at": "2026-08-29T11:55:31.061068+00:00", "kind": "homepage", "missing": false, "url": "https://grace.wilee.me"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:39:47.910913+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f46c39399d285b26b4ecb32720ea7745f98e5b50f1d6479720ddba1deced6e9", "fetched_at": "2026-08-28T04:04:35.239469+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xiongwilee/Gracejs"}, {"content_hash": "1897f9019bbfbdc841392d94bf299f3a8d33d27b749e1e8e57f44de63b7fdbc1", "fetched_at": "2026-08-29T11:55:31.061068+00:00", "kind": "homepage", "missing": false, "url": "https://grace.wilee.me"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:39:47.910913+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f46c39399d285b26b4ecb32720ea7745f98e5b50f1d6479720ddba1deced6e9", "fetched_at": "2026-08-28T04:04:35.239469+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xiongwilee/Gracejs"}, {"content_hash": "1897f9019bbfbdc841392d94bf299f3a8d33d27b749e1e8e57f44de63b7fdbc1", "fetched_at": "2026-08-29T11:55:31.061068+00:00", "kind": "homepage", "missing": false, "url": "https://grace.wilee.me"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 13, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3865, "days_push": 524, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 38, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}