{"adoption": {"forks": 118, "observed_at": "2026-08-28T04:04:27.618521+00:00", "stars": 1347}, "canonical_url": "https://ross.abutalabs.com/products/cement", "card": {"archived": false, "artifact_type": "framework", "description": "Application Framework for Python", "domain": ["developer-tools", "backend", "web-development"], "enriched": true, "function": ["cli", "web-framework", "configuration-management", "logging", "caching", "plugin-system", "templating"], "health_score": 98, "homepage": "http://builtoncement.com", "language": "Python", "license": "BSD-3-Clause", "license_family": "permissive", "maturity": "stable", "member_repos": ["datafolklabs/cement"], "name": "datafolklabs/cement", "platform": ["python", "cli", "cross-platform"], "pushed_at": "2026-08-10T01:36:38+00:00", "repo": "datafolklabs/cement", "stars": 1347, "tags": ["cli-framework", "application-framework", "handlers", "interfaces", "zero-dependencies", "command-line"], "topics": [], "urls": [], "use_cases": ["build a command line tool in python", "structure a multi-command cli application with subcommands", "add plugin support to a python cli app", "parse config files and merge them with command line arguments", "add logging and output rendering to a backend python application", "rapidly scaffold a python cli framework with zero dependencies"], "what_it_is": "Cement is an advanced application framework for Python with a primary focus on building command line interfaces, ranging from single-file scripts to complex multi-tier applications. It provides a handler/interface system with built-in support for configuration parsing, argument handling, logging, plugins, output rendering, caching, and controllers with sub-commands.", "when_to_avoid": ["you only need a simple argument parser (use argparse or click instead)", "you are building a web application or GUI rather than a CLI/backend tool", "you prefer a minimal micro-framework with less structure", "you need support for Python versions older than 3.10"], "when_to_choose": ["you need a full-featured, battle-tested framework for complex CLI applications", "you want extensibility via handlers, interfaces, hooks, and plugins", "you want zero external dependencies in the core", "you need config, logging, argument parsing, and output handled in one framework"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/cement", "repo": "datafolklabs/cement", "role": "main", "score": 85}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.618521+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:42:36.322687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "573a2e65dcc2f74361b2ffb47c8b3b3ea00d56385437ce79f691a69dd6216045", "fetched_at": "2026-08-28T04:04:27.618521+00:00", "kind": "readme", "missing": false, "url": "https://github.com/datafolklabs/cement"}, {"content_hash": "60d729ea79d9833521bd78140a2423a656d29c05766f732ecc2ec4647f7b6774", "fetched_at": "2026-08-29T12:01:37.389705+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/cement/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.618521+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:42:36.322687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "573a2e65dcc2f74361b2ffb47c8b3b3ea00d56385437ce79f691a69dd6216045", "fetched_at": "2026-08-28T04:04:27.618521+00:00", "kind": "readme", "missing": false, "url": "https://github.com/datafolklabs/cement"}, {"content_hash": "60d729ea79d9833521bd78140a2423a656d29c05766f732ecc2ec4647f7b6774", "fetched_at": "2026-08-29T12:01:37.389705+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/cement/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:42:36.322687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "573a2e65dcc2f74361b2ffb47c8b3b3ea00d56385437ce79f691a69dd6216045", "fetched_at": "2026-08-28T04:04:27.618521+00:00", "kind": "readme", "missing": false, "url": "https://github.com/datafolklabs/cement"}, {"content_hash": "60d729ea79d9833521bd78140a2423a656d29c05766f732ecc2ec4647f7b6774", "fetched_at": "2026-08-29T12:01:37.389705+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/cement/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:04:27.618521+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.618521+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.618521+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:42:36.322687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "573a2e65dcc2f74361b2ffb47c8b3b3ea00d56385437ce79f691a69dd6216045", "fetched_at": "2026-08-28T04:04:27.618521+00:00", "kind": "readme", "missing": false, "url": "https://github.com/datafolklabs/cement"}, {"content_hash": "60d729ea79d9833521bd78140a2423a656d29c05766f732ecc2ec4647f7b6774", "fetched_at": "2026-08-29T12:01:37.389705+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/cement/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.618521+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.618521+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:42:36.322687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "573a2e65dcc2f74361b2ffb47c8b3b3ea00d56385437ce79f691a69dd6216045", "fetched_at": "2026-08-28T04:04:27.618521+00:00", "kind": "readme", "missing": false, "url": "https://github.com/datafolklabs/cement"}, {"content_hash": "60d729ea79d9833521bd78140a2423a656d29c05766f732ecc2ec4647f7b6774", "fetched_at": "2026-08-29T12:01:37.389705+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/cement/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.618521+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.618521+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.618521+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:42:36.322687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "573a2e65dcc2f74361b2ffb47c8b3b3ea00d56385437ce79f691a69dd6216045", "fetched_at": "2026-08-28T04:04:27.618521+00:00", "kind": "readme", "missing": false, "url": "https://github.com/datafolklabs/cement"}, {"content_hash": "60d729ea79d9833521bd78140a2423a656d29c05766f732ecc2ec4647f7b6774", "fetched_at": "2026-08-29T12:01:37.389705+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/cement/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.618521+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.618521+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:42:36.322687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "573a2e65dcc2f74361b2ffb47c8b3b3ea00d56385437ce79f691a69dd6216045", "fetched_at": "2026-08-28T04:04:27.618521+00:00", "kind": "readme", "missing": false, "url": "https://github.com/datafolklabs/cement"}, {"content_hash": "60d729ea79d9833521bd78140a2423a656d29c05766f732ecc2ec4647f7b6774", "fetched_at": "2026-08-29T12:01:37.389705+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/cement/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:42:36.322687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "573a2e65dcc2f74361b2ffb47c8b3b3ea00d56385437ce79f691a69dd6216045", "fetched_at": "2026-08-28T04:04:27.618521+00:00", "kind": "readme", "missing": false, "url": "https://github.com/datafolklabs/cement"}, {"content_hash": "60d729ea79d9833521bd78140a2423a656d29c05766f732ecc2ec4647f7b6774", "fetched_at": "2026-08-29T12:01:37.389705+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/cement/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:42:36.322687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "573a2e65dcc2f74361b2ffb47c8b3b3ea00d56385437ce79f691a69dd6216045", "fetched_at": "2026-08-28T04:04:27.618521+00:00", "kind": "readme", "missing": false, "url": "https://github.com/datafolklabs/cement"}, {"content_hash": "60d729ea79d9833521bd78140a2423a656d29c05766f732ecc2ec4647f7b6774", "fetched_at": "2026-08-29T12:01:37.389705+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/cement/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:42:36.322687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "573a2e65dcc2f74361b2ffb47c8b3b3ea00d56385437ce79f691a69dd6216045", "fetched_at": "2026-08-28T04:04:27.618521+00:00", "kind": "readme", "missing": false, "url": "https://github.com/datafolklabs/cement"}, {"content_hash": "60d729ea79d9833521bd78140a2423a656d29c05766f732ecc2ec4647f7b6774", "fetched_at": "2026-08-29T12:01:37.389705+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/cement/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 96, "longevity": 100, "rhythm": 61}, "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": 6115, "days_push": 24, "days_rel": 51, "gap_med": null, "n_releases_24m": 1}, "score": 85, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}