{"adoption": {"forks": 71, "observed_at": "2026-08-28T04:03:46.154468+00:00", "stars": 1148}, "canonical_url": "https://ross.abutalabs.com/products/peru", "card": {"archived": false, "artifact_type": "cli-tool", "description": "a generic package manager, for including other people's code in your projects", "domain": ["developer-tools", "version-control"], "enriched": true, "function": ["package-manager", "cli", "developer-tools", "build-tool"], "health_score": 49, "homepage": null, "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["buildinspace/peru"], "name": "buildinspace/peru", "platform": ["windows", "python", "cli"], "pushed_at": "2025-10-22T17:17:36+00:00", "repo": "buildinspace/peru", "stars": 1148, "tags": ["dependency-management", "vendoring", "reproducible-builds", "git-submodules-alternative", "polyglot-dependencies", "command-line", "automation", "linux", "macos"], "topics": ["dependency-manager", "package-manager", "plugin-manager", "packaging", "toolchain"], "urls": [], "use_cases": ["vendor third-party code into my repo without git submodules", "pin exact versions of dependencies fetched from git or tarballs", "automate fetching external libraries as part of a make build", "manage dependencies from mixed sources like hg, svn, and tarballs", "keep vendored dependencies in sync automatically on every build", "replace copy-pasted shared code with a tracked dependency"], "what_it_is": "Peru is a generic package manager for including other people's code in your projects. It fetches dependencies from git, hg, svn, or tarballs, pins exact versions for reproducibility, and integrates into scripts and Makefiles.", "when_to_avoid": ["you need a language-ecosystem package manager with registry search and semantic version resolution", "you want runtime dependency installation rather than build-time code fetching", "your project already works well with git submodules or a native package manager"], "when_to_choose": ["you build with make or plain scripts and want dependency fetching automated", "your dependencies come from heterogeneous sources (git, hg, svn, tarballs)", "you want reproducible vendored dependencies without global installs or source-control interference"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/peru", "repo": "buildinspace/peru", "role": "main", "score": 54}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.154468+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:33:49.537441+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "17e167b07dae6854253ef10447fe31c325797cdf0af69194c81a41bc08be4d1f", "fetched_at": "2026-08-28T04:03:46.154468+00:00", "kind": "readme", "missing": false, "url": "https://github.com/buildinspace/peru"}, {"content_hash": "458f33d27484df813d483f1a379e7b6c6dc5d8138997181381f515f4a0dbddb3", "fetched_at": "2026-08-29T12:38:58.715681+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/peru/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.154468+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:33:49.537441+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "17e167b07dae6854253ef10447fe31c325797cdf0af69194c81a41bc08be4d1f", "fetched_at": "2026-08-28T04:03:46.154468+00:00", "kind": "readme", "missing": false, "url": "https://github.com/buildinspace/peru"}, {"content_hash": "458f33d27484df813d483f1a379e7b6c6dc5d8138997181381f515f4a0dbddb3", "fetched_at": "2026-08-29T12:38:58.715681+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/peru/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:33:49.537441+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "17e167b07dae6854253ef10447fe31c325797cdf0af69194c81a41bc08be4d1f", "fetched_at": "2026-08-28T04:03:46.154468+00:00", "kind": "readme", "missing": false, "url": "https://github.com/buildinspace/peru"}, {"content_hash": "458f33d27484df813d483f1a379e7b6c6dc5d8138997181381f515f4a0dbddb3", "fetched_at": "2026-08-29T12:38:58.715681+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/peru/json"}], "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:03:46.154468+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.154468+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.154468+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:33:49.537441+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "17e167b07dae6854253ef10447fe31c325797cdf0af69194c81a41bc08be4d1f", "fetched_at": "2026-08-28T04:03:46.154468+00:00", "kind": "readme", "missing": false, "url": "https://github.com/buildinspace/peru"}, {"content_hash": "458f33d27484df813d483f1a379e7b6c6dc5d8138997181381f515f4a0dbddb3", "fetched_at": "2026-08-29T12:38:58.715681+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/peru/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.154468+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.154468+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:33:49.537441+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "17e167b07dae6854253ef10447fe31c325797cdf0af69194c81a41bc08be4d1f", "fetched_at": "2026-08-28T04:03:46.154468+00:00", "kind": "readme", "missing": false, "url": "https://github.com/buildinspace/peru"}, {"content_hash": "458f33d27484df813d483f1a379e7b6c6dc5d8138997181381f515f4a0dbddb3", "fetched_at": "2026-08-29T12:38:58.715681+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/peru/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.154468+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.154468+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.154468+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:33:49.537441+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "17e167b07dae6854253ef10447fe31c325797cdf0af69194c81a41bc08be4d1f", "fetched_at": "2026-08-28T04:03:46.154468+00:00", "kind": "readme", "missing": false, "url": "https://github.com/buildinspace/peru"}, {"content_hash": "458f33d27484df813d483f1a379e7b6c6dc5d8138997181381f515f4a0dbddb3", "fetched_at": "2026-08-29T12:38:58.715681+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/peru/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.154468+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.154468+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:33:49.537441+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "17e167b07dae6854253ef10447fe31c325797cdf0af69194c81a41bc08be4d1f", "fetched_at": "2026-08-28T04:03:46.154468+00:00", "kind": "readme", "missing": false, "url": "https://github.com/buildinspace/peru"}, {"content_hash": "458f33d27484df813d483f1a379e7b6c6dc5d8138997181381f515f4a0dbddb3", "fetched_at": "2026-08-29T12:38:58.715681+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/peru/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:33:49.537441+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "17e167b07dae6854253ef10447fe31c325797cdf0af69194c81a41bc08be4d1f", "fetched_at": "2026-08-28T04:03:46.154468+00:00", "kind": "readme", "missing": false, "url": "https://github.com/buildinspace/peru"}, {"content_hash": "458f33d27484df813d483f1a379e7b6c6dc5d8138997181381f515f4a0dbddb3", "fetched_at": "2026-08-29T12:38:58.715681+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/peru/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:33:49.537441+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "17e167b07dae6854253ef10447fe31c325797cdf0af69194c81a41bc08be4d1f", "fetched_at": "2026-08-28T04:03:46.154468+00:00", "kind": "readme", "missing": false, "url": "https://github.com/buildinspace/peru"}, {"content_hash": "458f33d27484df813d483f1a379e7b6c6dc5d8138997181381f515f4a0dbddb3", "fetched_at": "2026-08-29T12:38:58.715681+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/peru/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:33:49.537441+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "17e167b07dae6854253ef10447fe31c325797cdf0af69194c81a41bc08be4d1f", "fetched_at": "2026-08-28T04:03:46.154468+00:00", "kind": "readme", "missing": false, "url": "https://github.com/buildinspace/peru"}, {"content_hash": "458f33d27484df813d483f1a379e7b6c6dc5d8138997181381f515f4a0dbddb3", "fetched_at": "2026-08-29T12:38:58.715681+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/peru/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 48, "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": 4694, "days_push": 315, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 54, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}