{"adoption": {"forks": 528, "observed_at": "2026-08-28T04:07:54.058340+00:00", "stars": 3294}, "canonical_url": "https://ross.abutalabs.com/products/satis", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Simple static Composer repository generator - For a full private Composer repo use Private Packagist", "domain": ["developer-tools", "self-hosted"], "enriched": true, "function": ["package-manager", "developer-tools", "cli", "self-hosted"], "health_score": 79, "homepage": null, "language": "PHP", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["composer/satis"], "name": "composer/satis", "platform": ["php", "cli", "self-hosted", "cross-platform"], "pushed_at": "2026-08-20T11:25:49+00:00", "repo": "composer/satis", "stars": 3294, "tags": ["composer", "packagist", "static-repository", "private-packages", "php", "command-line", "docker"], "topics": ["composer", "packagist", "static-packagist", "static-repository", "hacktoberfest"], "urls": [], "use_cases": ["host a private composer package repository", "generate a static packagist mirror for my packages", "self-host composer packages for my company", "speed up composer installs with a local package registry", "mirror only selected composer packages", "serve private php packages without private packagist"], "what_it_is": "Satis is a PHP CLI tool that generates a static Composer package repository from a set of package sources. The resulting registry can be hosted anywhere as static files, giving teams a private, self-controlled alternative to Packagist.", "when_to_avoid": ["you need a full-featured private Composer repository with a web UI, per-package access control, or on-the-fly metadata - use Private Packagist or satisfy instead", "your package set changes frequently and you cannot run periodic rebuilds, since the repository is static"], "when_to_choose": ["you need a simple, static, self-hosted Composer repository you can host on any web server or GitHub Pages", "you want control over which packages are exposed without paying for Private Packagist", "you want faster, more reliable Composer installs via a local mirror"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/satis", "repo": "composer/satis", "role": "main", "score": 67}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:54.058340+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:42:58.458125+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a30af1662b0d04d395e053cfcfa7f348dbf6f33f3dfe5a4ddd7fef580ed3317b", "fetched_at": "2026-08-28T04:07:54.058340+00:00", "kind": "readme", "missing": false, "url": "https://github.com/composer/satis"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:54.058340+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:42:58.458125+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a30af1662b0d04d395e053cfcfa7f348dbf6f33f3dfe5a4ddd7fef580ed3317b", "fetched_at": "2026-08-28T04:07:54.058340+00:00", "kind": "readme", "missing": false, "url": "https://github.com/composer/satis"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:42:58.458125+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a30af1662b0d04d395e053cfcfa7f348dbf6f33f3dfe5a4ddd7fef580ed3317b", "fetched_at": "2026-08-28T04:07:54.058340+00:00", "kind": "readme", "missing": false, "url": "https://github.com/composer/satis"}], "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:07:54.058340+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:54.058340+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:54.058340+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:42:58.458125+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a30af1662b0d04d395e053cfcfa7f348dbf6f33f3dfe5a4ddd7fef580ed3317b", "fetched_at": "2026-08-28T04:07:54.058340+00:00", "kind": "readme", "missing": false, "url": "https://github.com/composer/satis"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:54.058340+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:54.058340+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:42:58.458125+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a30af1662b0d04d395e053cfcfa7f348dbf6f33f3dfe5a4ddd7fef580ed3317b", "fetched_at": "2026-08-28T04:07:54.058340+00:00", "kind": "readme", "missing": false, "url": "https://github.com/composer/satis"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:54.058340+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:54.058340+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:54.058340+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:42:58.458125+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a30af1662b0d04d395e053cfcfa7f348dbf6f33f3dfe5a4ddd7fef580ed3317b", "fetched_at": "2026-08-28T04:07:54.058340+00:00", "kind": "readme", "missing": false, "url": "https://github.com/composer/satis"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:54.058340+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:54.058340+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:42:58.458125+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a30af1662b0d04d395e053cfcfa7f348dbf6f33f3dfe5a4ddd7fef580ed3317b", "fetched_at": "2026-08-28T04:07:54.058340+00:00", "kind": "readme", "missing": false, "url": "https://github.com/composer/satis"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:42:58.458125+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a30af1662b0d04d395e053cfcfa7f348dbf6f33f3dfe5a4ddd7fef580ed3317b", "fetched_at": "2026-08-28T04:07:54.058340+00:00", "kind": "readme", "missing": false, "url": "https://github.com/composer/satis"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:42:58.458125+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a30af1662b0d04d395e053cfcfa7f348dbf6f33f3dfe5a4ddd7fef580ed3317b", "fetched_at": "2026-08-28T04:07:54.058340+00:00", "kind": "readme", "missing": false, "url": "https://github.com/composer/satis"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:42:58.458125+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a30af1662b0d04d395e053cfcfa7f348dbf6f33f3dfe5a4ddd7fef580ed3317b", "fetched_at": "2026-08-28T04:07:54.058340+00:00", "kind": "readme", "missing": false, "url": "https://github.com/composer/satis"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 100, "rhythm": 8}, "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": 5343, "days_push": 13, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 67, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}