{"adoption": {"forks": 67, "observed_at": "2026-09-01T02:14:00.617864+00:00", "stars": 1181}, "canonical_url": "https://ross.abutalabs.com/products/custom-components-pyscript", "card": {"archived": false, "artifact_type": "plugin", "description": "Pyscript adds rich Python scripting to HASS", "domain": ["iot", "developer-tools"], "enriched": true, "function": ["workflow-automation", "interpreter", "sdk"], "health_score": 100, "homepage": null, "language": "Python", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["custom-components/pyscript"], "name": "custom-components/pyscript", "platform": ["python", "self-hosted", "iot"], "pushed_at": "2026-08-31T14:59:09+00:00", "repo": "custom-components/pyscript", "stars": 1181, "tags": ["home-assistant", "hacs", "custom-component", "jupyter-kernel", "python-scripting", "smart-home", "automation"], "topics": ["home-assistant", "homeassistant", "custom-component", "custom-components", "hacs", "integration", "jupyter"], "urls": [], "use_cases": ["write home assistant automations in python", "replace yaml automations with python scripts", "trigger functions on state changes or events in home assistant", "test home assistant logic interactively in jupyter", "call home assistant services from python code", "build complex smart home logic with python"], "what_it_is": "Pyscript is a Home Assistant custom integration (installable via HACS) that lets you write automations and logic as Python functions, with state variables bound to Python variables and services callable as functions. It also ships a Jupyter kernel for interactively developing and testing pyscript code against a live Home Assistant instance.", "when_to_avoid": ["you only need simple automations that YAML or the UI editor already handle well", "you don't use Home Assistant", "you want a fully supported, core-integration solution rather than a community custom component", "you need automations editable by non-programmers through the UI"], "when_to_choose": ["you want to write Home Assistant automations in Python instead of YAML", "you need rich logic like loops, conditionals, and long-running tasks in automations", "you want to develop and debug automations interactively with Jupyter", "you prefer Python variable bindings to state variables and service calls"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/custom-components-pyscript", "repo": "custom-components/pyscript", "role": "main", "score": 95}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-09-01T02:14:00.617864+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:25:01.457858+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "22bec9190d454d934938f48a46f3204a2536afc9186307fc61a33189da5aea11", "fetched_at": "2026-09-01T02:14:00.617864+00:00", "kind": "readme", "missing": false, "url": "https://github.com/custom-components/pyscript"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-09-01T02:14:00.617864+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:25:01.457858+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "22bec9190d454d934938f48a46f3204a2536afc9186307fc61a33189da5aea11", "fetched_at": "2026-09-01T02:14:00.617864+00:00", "kind": "readme", "missing": false, "url": "https://github.com/custom-components/pyscript"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:25:01.457858+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "22bec9190d454d934938f48a46f3204a2536afc9186307fc61a33189da5aea11", "fetched_at": "2026-09-01T02:14:00.617864+00:00", "kind": "readme", "missing": false, "url": "https://github.com/custom-components/pyscript"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-09-01T02:14:00.617864+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-09-01T02:14:00.617864+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-09-01T02:14:00.617864+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:25:01.457858+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "22bec9190d454d934938f48a46f3204a2536afc9186307fc61a33189da5aea11", "fetched_at": "2026-09-01T02:14:00.617864+00:00", "kind": "readme", "missing": false, "url": "https://github.com/custom-components/pyscript"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-09-01T02:14:00.617864+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-09-01T02:14:00.617864+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:25:01.457858+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "22bec9190d454d934938f48a46f3204a2536afc9186307fc61a33189da5aea11", "fetched_at": "2026-09-01T02:14:00.617864+00:00", "kind": "readme", "missing": false, "url": "https://github.com/custom-components/pyscript"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-09-01T02:14:00.617864+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-09-01T02:14:00.617864+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-09-01T02:14:00.617864+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:25:01.457858+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "22bec9190d454d934938f48a46f3204a2536afc9186307fc61a33189da5aea11", "fetched_at": "2026-09-01T02:14:00.617864+00:00", "kind": "readme", "missing": false, "url": "https://github.com/custom-components/pyscript"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-09-01T02:14:00.617864+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-09-01T02:14:00.617864+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:25:01.457858+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "22bec9190d454d934938f48a46f3204a2536afc9186307fc61a33189da5aea11", "fetched_at": "2026-09-01T02:14:00.617864+00:00", "kind": "readme", "missing": false, "url": "https://github.com/custom-components/pyscript"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:25:01.457858+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "22bec9190d454d934938f48a46f3204a2536afc9186307fc61a33189da5aea11", "fetched_at": "2026-09-01T02:14:00.617864+00:00", "kind": "readme", "missing": false, "url": "https://github.com/custom-components/pyscript"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:25:01.457858+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "22bec9190d454d934938f48a46f3204a2536afc9186307fc61a33189da5aea11", "fetched_at": "2026-09-01T02:14:00.617864+00:00", "kind": "readme", "missing": false, "url": "https://github.com/custom-components/pyscript"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:25:01.457858+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "22bec9190d454d934938f48a46f3204a2536afc9186307fc61a33189da5aea11", "fetched_at": "2026-09-01T02:14:00.617864+00:00", "kind": "readme", "missing": false, "url": "https://github.com/custom-components/pyscript"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 100, "longevity": 100, "rhythm": 85}, "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": 2225, "days_push": 2, "days_rel": 22, "gap_med": 57.5, "n_releases_24m": 7}, "score": 95, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 5, "stale_scrape": false}}