{"adoption": {"forks": 234, "observed_at": "2026-08-28T04:05:33.985988+00:00", "stars": 1770}, "canonical_url": "https://ross.abutalabs.com/products/python-betterproto", "card": {"archived": false, "artifact_type": "library", "description": "Clean, modern, Python 3.6+ code generator & library for Protobuf 3 and async gRPC", "domain": ["developer-tools", "apis", "backend"], "enriched": true, "function": ["serialization", "rpc"], "health_score": 47, "homepage": null, "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["danielgtaylor/python-betterproto"], "name": "danielgtaylor/python-betterproto", "platform": ["python", "cross-platform"], "pushed_at": "2025-07-17T12:50:40+00:00", "repo": "danielgtaylor/python-betterproto", "stars": 1770, "tags": ["protobuf", "grpc", "asyncio", "dataclasses", "pydantic", "protoc-plugin", "code-generator", "code-generation"], "topics": ["python-3", "protocol-buffer-compiler", "asyncio", "grpc", "code-generator", "plugin"], "urls": [], "use_cases": ["generate idiomatic python code from protobuf definitions", "async grpc client and server in python", "serialize protobuf messages to binary and json", "generate pydantic models from proto files", "replace official google protobuf python codegen", "type-checked protobuf stubs with mypy support"], "what_it_is": "A Python code generator and runtime library for Protobuf 3 and async gRPC that produces idiomatic, typed, dataclass-based Python code. It serves as a modern alternative to the official Google protoc Python plugin, with built-in binary/JSON serialization and async/await support.", "when_to_avoid": ["you need Protobuf 2 or legacy feature support", "you require a strict drop-in replacement for the official protobuf runtime", "you want the most actively developed version - the project has moved to betterproto2"], "when_to_choose": ["you want modern, readable, typed Python code from .proto files", "you need async/await gRPC support out of the box", "you want built-in JSON serialization and pydantic model generation"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/python-betterproto", "repo": "danielgtaylor/python-betterproto", "role": "main", "score": 37}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.985988+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:26:02.720819+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a4662f38052b242ba8ca3431f6fea94b091811f3efcaadafcb4611df3c573523", "fetched_at": "2026-08-28T04:05:33.985988+00:00", "kind": "readme", "missing": false, "url": "https://github.com/danielgtaylor/python-betterproto"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.985988+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:26:02.720819+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a4662f38052b242ba8ca3431f6fea94b091811f3efcaadafcb4611df3c573523", "fetched_at": "2026-08-28T04:05:33.985988+00:00", "kind": "readme", "missing": false, "url": "https://github.com/danielgtaylor/python-betterproto"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:26:02.720819+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a4662f38052b242ba8ca3431f6fea94b091811f3efcaadafcb4611df3c573523", "fetched_at": "2026-08-28T04:05:33.985988+00:00", "kind": "readme", "missing": false, "url": "https://github.com/danielgtaylor/python-betterproto"}], "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:05:33.985988+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.985988+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.985988+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:26:02.720819+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a4662f38052b242ba8ca3431f6fea94b091811f3efcaadafcb4611df3c573523", "fetched_at": "2026-08-28T04:05:33.985988+00:00", "kind": "readme", "missing": false, "url": "https://github.com/danielgtaylor/python-betterproto"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.985988+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.985988+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:26:02.720819+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a4662f38052b242ba8ca3431f6fea94b091811f3efcaadafcb4611df3c573523", "fetched_at": "2026-08-28T04:05:33.985988+00:00", "kind": "readme", "missing": false, "url": "https://github.com/danielgtaylor/python-betterproto"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.985988+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.985988+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.985988+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:26:02.720819+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a4662f38052b242ba8ca3431f6fea94b091811f3efcaadafcb4611df3c573523", "fetched_at": "2026-08-28T04:05:33.985988+00:00", "kind": "readme", "missing": false, "url": "https://github.com/danielgtaylor/python-betterproto"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.985988+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.985988+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:26:02.720819+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a4662f38052b242ba8ca3431f6fea94b091811f3efcaadafcb4611df3c573523", "fetched_at": "2026-08-28T04:05:33.985988+00:00", "kind": "readme", "missing": false, "url": "https://github.com/danielgtaylor/python-betterproto"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:26:02.720819+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a4662f38052b242ba8ca3431f6fea94b091811f3efcaadafcb4611df3c573523", "fetched_at": "2026-08-28T04:05:33.985988+00:00", "kind": "readme", "missing": false, "url": "https://github.com/danielgtaylor/python-betterproto"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:26:02.720819+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a4662f38052b242ba8ca3431f6fea94b091811f3efcaadafcb4611df3c573523", "fetched_at": "2026-08-28T04:05:33.985988+00:00", "kind": "readme", "missing": false, "url": "https://github.com/danielgtaylor/python-betterproto"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:26:02.720819+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a4662f38052b242ba8ca3431f6fea94b091811f3efcaadafcb4611df3c573523", "fetched_at": "2026-08-28T04:05:33.985988+00:00", "kind": "readme", "missing": false, "url": "https://github.com/danielgtaylor/python-betterproto"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 32, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2519, "days_push": 412, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 37, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}