{"adoption": {"forks": 244, "observed_at": "2026-08-28T04:08:11.884235+00:00", "stars": 3622}, "canonical_url": "https://ross.abutalabs.com/products/ploomber", "card": {"archived": true, "artifact_type": "framework", "description": "The fastest ⚡️ way to build data pipelines. Develop iteratively, deploy anywhere. ☁️", "domain": ["data-science", "machine-learning", "developer-tools"], "enriched": true, "function": ["workflow-automation", "etl", "machine-learning", "data-science", "scheduling"], "health_score": 10, "homepage": "https://docs.ploomber.io", "language": "Python", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["ploomber/ploomber"], "name": "ploomber/ploomber", "platform": ["python", "cross-platform", "cloud"], "pushed_at": "2025-05-29T22:02:03+00:00", "repo": "ploomber/ploomber", "stars": 3622, "tags": ["data-pipelines", "jupyter-notebooks", "mlops", "airflow", "papermill", "notebook-pipelines", "data-engineering", "kubernetes"], "topics": ["workflow", "machine-learning", "data-science", "data-engineering", "mlops", "papermill", "jupyter", "jupyter-notebooks", "pipelines", "vscode", "pycharm", "notebooks"], "urls": [], "use_cases": ["build data pipelines from jupyter notebooks", "convert notebooks into modular pipelines", "deploy data pipelines to airflow or kubernetes", "orchestrate machine learning workflows in python", "develop data pipelines iteratively in vscode or pycharm", "run pipelines on aws batch or slurm"], "what_it_is": "Ploomber is a Python framework for building maintainable data pipelines from scripts and Jupyter notebooks, with iterative local development and deployment to Kubernetes, Airflow, AWS Batch, or SLURM without code changes. It can also refactor legacy notebooks into modular pipelines with a single command.", "when_to_avoid": ["you need a general-purpose workflow scheduler for non-Python tasks", "your team is standardized on another orchestrator like Dagster or Prefect", "you only need simple one-off scripts with no pipeline structure"], "when_to_choose": ["your pipelines are built from Python scripts or Jupyter notebooks", "you want interactive, iterative development with production deployment", "you need to deploy the same pipeline code to multiple backends like Airflow, Kubernetes, or SLURM", "you have legacy notebooks that need refactoring into modular pipelines"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/ploomber", "repo": "ploomber/ploomber", "role": "main", "score": 10}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:11.884235+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:31:57.695547+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8c8e3e8b90ba82dd6161769ec8f78a74c03fb6609eec576c372751f37044b6ef", "fetched_at": "2026-08-28T04:08:11.884235+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ploomber/ploomber"}, {"content_hash": "aef627396951c80d64afa34a45092ba1a590082327942e0a9d7f3504677416d0", "fetched_at": "2026-08-29T09:26:41.973324+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/ploomber/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:11.884235+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:31:57.695547+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8c8e3e8b90ba82dd6161769ec8f78a74c03fb6609eec576c372751f37044b6ef", "fetched_at": "2026-08-28T04:08:11.884235+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ploomber/ploomber"}, {"content_hash": "aef627396951c80d64afa34a45092ba1a590082327942e0a9d7f3504677416d0", "fetched_at": "2026-08-29T09:26:41.973324+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/ploomber/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:31:57.695547+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8c8e3e8b90ba82dd6161769ec8f78a74c03fb6609eec576c372751f37044b6ef", "fetched_at": "2026-08-28T04:08:11.884235+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ploomber/ploomber"}, {"content_hash": "aef627396951c80d64afa34a45092ba1a590082327942e0a9d7f3504677416d0", "fetched_at": "2026-08-29T09:26:41.973324+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/ploomber/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:08:11.884235+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:11.884235+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:11.884235+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:31:57.695547+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8c8e3e8b90ba82dd6161769ec8f78a74c03fb6609eec576c372751f37044b6ef", "fetched_at": "2026-08-28T04:08:11.884235+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ploomber/ploomber"}, {"content_hash": "aef627396951c80d64afa34a45092ba1a590082327942e0a9d7f3504677416d0", "fetched_at": "2026-08-29T09:26:41.973324+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/ploomber/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:11.884235+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:11.884235+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:31:57.695547+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8c8e3e8b90ba82dd6161769ec8f78a74c03fb6609eec576c372751f37044b6ef", "fetched_at": "2026-08-28T04:08:11.884235+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ploomber/ploomber"}, {"content_hash": "aef627396951c80d64afa34a45092ba1a590082327942e0a9d7f3504677416d0", "fetched_at": "2026-08-29T09:26:41.973324+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/ploomber/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:11.884235+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:11.884235+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:11.884235+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:31:57.695547+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8c8e3e8b90ba82dd6161769ec8f78a74c03fb6609eec576c372751f37044b6ef", "fetched_at": "2026-08-28T04:08:11.884235+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ploomber/ploomber"}, {"content_hash": "aef627396951c80d64afa34a45092ba1a590082327942e0a9d7f3504677416d0", "fetched_at": "2026-08-29T09:26:41.973324+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/ploomber/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:11.884235+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:11.884235+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:31:57.695547+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8c8e3e8b90ba82dd6161769ec8f78a74c03fb6609eec576c372751f37044b6ef", "fetched_at": "2026-08-28T04:08:11.884235+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ploomber/ploomber"}, {"content_hash": "aef627396951c80d64afa34a45092ba1a590082327942e0a9d7f3504677416d0", "fetched_at": "2026-08-29T09:26:41.973324+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/ploomber/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:31:57.695547+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8c8e3e8b90ba82dd6161769ec8f78a74c03fb6609eec576c372751f37044b6ef", "fetched_at": "2026-08-28T04:08:11.884235+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ploomber/ploomber"}, {"content_hash": "aef627396951c80d64afa34a45092ba1a590082327942e0a9d7f3504677416d0", "fetched_at": "2026-08-29T09:26:41.973324+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/ploomber/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:31:57.695547+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8c8e3e8b90ba82dd6161769ec8f78a74c03fb6609eec576c372751f37044b6ef", "fetched_at": "2026-08-28T04:08:11.884235+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ploomber/ploomber"}, {"content_hash": "aef627396951c80d64afa34a45092ba1a590082327942e0a9d7f3504677416d0", "fetched_at": "2026-08-29T09:26:41.973324+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/ploomber/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:31:57.695547+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8c8e3e8b90ba82dd6161769ec8f78a74c03fb6609eec576c372751f37044b6ef", "fetched_at": "2026-08-28T04:08:11.884235+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ploomber/ploomber"}, {"content_hash": "aef627396951c80d64afa34a45092ba1a590082327942e0a9d7f3504677416d0", "fetched_at": "2026-08-29T09:26:41.973324+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/ploomber/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 24, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases", "archived"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2417, "days_push": 461, "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}}