{"adoption": {"forks": 78, "observed_at": "2026-08-28T04:04:05.546306+00:00", "stars": 1238}, "canonical_url": "https://ross.abutalabs.com/products/grpc-tools", "card": {"archived": false, "artifact_type": "cli-tool", "description": "A suite of gRPC debugging tools. Like Fiddler/Charles but for gRPC.", "domain": ["developer-tools", "apis", "networking", "testing"], "enriched": true, "function": ["proxy", "rpc", "middleware", "logging"], "health_score": 20, "homepage": null, "language": "Go", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["bradleyjkemp/grpc-tools"], "name": "bradleyjkemp/grpc-tools", "platform": ["windows", "go", "cli"], "pushed_at": "2023-11-14T10:42:44+00:00", "repo": "bradleyjkemp/grpc-tools", "stars": 1238, "tags": ["grpc", "grpc-debugging", "traffic-dumping", "request-replay", "charles-for-grpc", "debugging", "linux", "macos"], "topics": ["grpc", "debugging-tool", "proxy", "interceptor", "tls", "middleware"], "urls": [], "use_cases": ["debug grpc traffic between services", "dump grpc requests as a proxy like charles", "replay recorded grpc requests to a server", "mock grpc server responses from saved fixtures", "inspect grpc messages without proto files", "capture grpc-web requests with metadata"], "what_it_is": "A suite of Go-based gRPC debugging tools, including grpc-dump (a transparent proxy that logs gRPC/gRPC-Web traffic as JSON), grpc-replay, grpc-fixture, and a reusable intercepting proxy library. It works like Fiddler or Charles but for gRPC, without requiring code changes to apps or servers.", "when_to_avoid": ["you need a mature, production-hardened tool - the project is explicitly in alpha with breaking changes", "you only need HTTP/REST debugging, where Fiddler or Charles are better fits", "you need actively maintained tooling - the latest release was in 2023"], "when_to_choose": ["you need to inspect or debug gRPC traffic transparently without modifying application code", "you want to record and replay gRPC requests or serve fixture responses", "you lack .proto files but still need human-readable message dumps"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/grpc-tools", "repo": "bradleyjkemp/grpc-tools", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.546306+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T05:10:02.977578+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "47d69de35a90c19ff32f3e093217ed1c06378b813a9d2a91f012db1ea3ef2373", "fetched_at": "2026-08-28T04:04:05.546306+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bradleyjkemp/grpc-tools"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.546306+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T05:10:02.977578+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "47d69de35a90c19ff32f3e093217ed1c06378b813a9d2a91f012db1ea3ef2373", "fetched_at": "2026-08-28T04:04:05.546306+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bradleyjkemp/grpc-tools"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T05:10:02.977578+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "47d69de35a90c19ff32f3e093217ed1c06378b813a9d2a91f012db1ea3ef2373", "fetched_at": "2026-08-28T04:04:05.546306+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bradleyjkemp/grpc-tools"}], "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:05.546306+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.546306+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.546306+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T05:10:02.977578+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "47d69de35a90c19ff32f3e093217ed1c06378b813a9d2a91f012db1ea3ef2373", "fetched_at": "2026-08-28T04:04:05.546306+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bradleyjkemp/grpc-tools"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.546306+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.546306+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T05:10:02.977578+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "47d69de35a90c19ff32f3e093217ed1c06378b813a9d2a91f012db1ea3ef2373", "fetched_at": "2026-08-28T04:04:05.546306+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bradleyjkemp/grpc-tools"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.546306+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.546306+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.546306+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T05:10:02.977578+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "47d69de35a90c19ff32f3e093217ed1c06378b813a9d2a91f012db1ea3ef2373", "fetched_at": "2026-08-28T04:04:05.546306+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bradleyjkemp/grpc-tools"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.546306+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.546306+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T05:10:02.977578+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "47d69de35a90c19ff32f3e093217ed1c06378b813a9d2a91f012db1ea3ef2373", "fetched_at": "2026-08-28T04:04:05.546306+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bradleyjkemp/grpc-tools"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T05:10:02.977578+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "47d69de35a90c19ff32f3e093217ed1c06378b813a9d2a91f012db1ea3ef2373", "fetched_at": "2026-08-28T04:04:05.546306+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bradleyjkemp/grpc-tools"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T05:10:02.977578+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "47d69de35a90c19ff32f3e093217ed1c06378b813a9d2a91f012db1ea3ef2373", "fetched_at": "2026-08-28T04:04:05.546306+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bradleyjkemp/grpc-tools"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T05:10:02.977578+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "47d69de35a90c19ff32f3e093217ed1c06378b813a9d2a91f012db1ea3ef2373", "fetched_at": "2026-08-28T04:04:05.546306+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bradleyjkemp/grpc-tools"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "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": 2698, "days_push": 1023, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}