{"adoption": {"forks": 730, "observed_at": "2026-08-28T04:08:07.987749+00:00", "stars": 3523}, "canonical_url": "https://ross.abutalabs.com/products/cnpmjsorg", "card": {"archived": true, "artifact_type": "service", "description": "‼️ ‼️ ‼️ ‼️  DEPRECATED, please use https://github.com/cnpm/cnpmcore ‼️ ‼️ ‼️ ‼️ ", "domain": ["developer-tools", "web-development", "self-hosted", "apis"], "enriched": true, "function": ["package-manager", "http-server", "developer-tools", "self-hosted"], "health_score": 10, "homepage": "https://npmmirror.com", "language": "JavaScript", "license": "NOASSERTION", "license_family": "other", "maturity": "maintenance", "member_repos": ["cnpm/cnpmjs.org"], "name": "cnpm/cnpmjs.org", "platform": ["self-hosted", "windows"], "pushed_at": "2024-06-01T19:41:29+00:00", "repo": "cnpm/cnpmjs.org", "stars": 3523, "tags": ["npm-registry", "private-registry", "npm-mirror", "package-registry", "koa", "mysql", "cnpm", "registry-sync", "deprecated", "s3-storage", "nodejs", "web-server", "linux", "macos", "docker"], "topics": ["npm", "cnpmjs", "registry", "npmjs", "npm-registry"], "urls": [], "use_cases": ["host a private npm registry for my company", "set up an npm mirror for faster package downloads", "self-host an npm registry that supports scoped packages", "automatically sync npm packages from an upstream registry on demand", "run an internal package registry with MySQL and S3 storage", "replace npmjs.com with a read-only mirror registry"], "what_it_is": "A self-hosted private npm registry and web application for enterprises, built on Koa, MySQL/MariaDB/SQLite/PostgreSQL, and pluggable object storage for tarballs (e.g., Amazon S3). It supports scoped packages, automatic and manual synchronization from an upstream registry, and powered npmmirror.com, but is now deprecated in favor of cnpmcore.", "when_to_avoid": ["you are starting a new private npm registry or mirror project - use cnpmcore instead, as this project is explicitly deprecated", "you need actively developed features, modern npm registry protocol support, or long-term security maintenance", "you do not want to operate Node.js plus a relational database and object storage infrastructure"], "when_to_choose": ["you are maintaining or extending an existing cnpmjs.org deployment", "you need a battle-tested legacy registry stack (Node.js/Koa + MySQL) and cannot migrate yet", "you want to reproduce an npmmirror-style mirror with the original software"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/cnpmjsorg", "repo": "cnpm/cnpmjs.org", "role": "main", "score": 10}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:07.987749+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:35:11.267114+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a6efa375b68c8cec401cbbaf09371e32597579f15f6bca3d41e5a78f06b97f78", "fetched_at": "2026-08-28T04:08:07.987749+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cnpm/cnpmjs.org"}, {"content_hash": "f383e08ddf565a1e6e5e766f7b1357de37db9ef292f62e2619d3b91f423c2ac9", "fetched_at": "2026-08-29T09:29:32.487671+00:00", "kind": "homepage", "missing": false, "url": "https://npmmirror.com"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:07.987749+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:35:11.267114+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a6efa375b68c8cec401cbbaf09371e32597579f15f6bca3d41e5a78f06b97f78", "fetched_at": "2026-08-28T04:08:07.987749+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cnpm/cnpmjs.org"}, {"content_hash": "f383e08ddf565a1e6e5e766f7b1357de37db9ef292f62e2619d3b91f423c2ac9", "fetched_at": "2026-08-29T09:29:32.487671+00:00", "kind": "homepage", "missing": false, "url": "https://npmmirror.com"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:35:11.267114+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a6efa375b68c8cec401cbbaf09371e32597579f15f6bca3d41e5a78f06b97f78", "fetched_at": "2026-08-28T04:08:07.987749+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cnpm/cnpmjs.org"}, {"content_hash": "f383e08ddf565a1e6e5e766f7b1357de37db9ef292f62e2619d3b91f423c2ac9", "fetched_at": "2026-08-29T09:29:32.487671+00:00", "kind": "homepage", "missing": false, "url": "https://npmmirror.com"}], "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:07.987749+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:07.987749+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:07.987749+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:35:11.267114+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a6efa375b68c8cec401cbbaf09371e32597579f15f6bca3d41e5a78f06b97f78", "fetched_at": "2026-08-28T04:08:07.987749+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cnpm/cnpmjs.org"}, {"content_hash": "f383e08ddf565a1e6e5e766f7b1357de37db9ef292f62e2619d3b91f423c2ac9", "fetched_at": "2026-08-29T09:29:32.487671+00:00", "kind": "homepage", "missing": false, "url": "https://npmmirror.com"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:07.987749+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:07.987749+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:35:11.267114+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a6efa375b68c8cec401cbbaf09371e32597579f15f6bca3d41e5a78f06b97f78", "fetched_at": "2026-08-28T04:08:07.987749+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cnpm/cnpmjs.org"}, {"content_hash": "f383e08ddf565a1e6e5e766f7b1357de37db9ef292f62e2619d3b91f423c2ac9", "fetched_at": "2026-08-29T09:29:32.487671+00:00", "kind": "homepage", "missing": false, "url": "https://npmmirror.com"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:07.987749+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:07.987749+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:07.987749+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:35:11.267114+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a6efa375b68c8cec401cbbaf09371e32597579f15f6bca3d41e5a78f06b97f78", "fetched_at": "2026-08-28T04:08:07.987749+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cnpm/cnpmjs.org"}, {"content_hash": "f383e08ddf565a1e6e5e766f7b1357de37db9ef292f62e2619d3b91f423c2ac9", "fetched_at": "2026-08-29T09:29:32.487671+00:00", "kind": "homepage", "missing": false, "url": "https://npmmirror.com"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:07.987749+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:07.987749+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:35:11.267114+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a6efa375b68c8cec401cbbaf09371e32597579f15f6bca3d41e5a78f06b97f78", "fetched_at": "2026-08-28T04:08:07.987749+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cnpm/cnpmjs.org"}, {"content_hash": "f383e08ddf565a1e6e5e766f7b1357de37db9ef292f62e2619d3b91f423c2ac9", "fetched_at": "2026-08-29T09:29:32.487671+00:00", "kind": "homepage", "missing": false, "url": "https://npmmirror.com"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:35:11.267114+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a6efa375b68c8cec401cbbaf09371e32597579f15f6bca3d41e5a78f06b97f78", "fetched_at": "2026-08-28T04:08:07.987749+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cnpm/cnpmjs.org"}, {"content_hash": "f383e08ddf565a1e6e5e766f7b1357de37db9ef292f62e2619d3b91f423c2ac9", "fetched_at": "2026-08-29T09:29:32.487671+00:00", "kind": "homepage", "missing": false, "url": "https://npmmirror.com"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:35:11.267114+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a6efa375b68c8cec401cbbaf09371e32597579f15f6bca3d41e5a78f06b97f78", "fetched_at": "2026-08-28T04:08:07.987749+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cnpm/cnpmjs.org"}, {"content_hash": "f383e08ddf565a1e6e5e766f7b1357de37db9ef292f62e2619d3b91f423c2ac9", "fetched_at": "2026-08-29T09:29:32.487671+00:00", "kind": "homepage", "missing": false, "url": "https://npmmirror.com"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:35:11.267114+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a6efa375b68c8cec401cbbaf09371e32597579f15f6bca3d41e5a78f06b97f78", "fetched_at": "2026-08-28T04:08:07.987749+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cnpm/cnpmjs.org"}, {"content_hash": "f383e08ddf565a1e6e5e766f7b1357de37db9ef292f62e2619d3b91f423c2ac9", "fetched_at": "2026-08-29T09:29:32.487671+00:00", "kind": "homepage", "missing": false, "url": "https://npmmirror.com"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["archived", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4656, "days_push": 823, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 10, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}