{"adoption": {"forks": 746, "observed_at": "2026-08-28T04:09:48.386529+00:00", "stars": 6762}, "canonical_url": "https://ross.abutalabs.com/products/go-grpc-middleware", "card": {"archived": false, "artifact_type": "library", "description": "Golang gRPC Middlewares: interceptor chaining, auth, logging, retries and more.", "domain": ["developer-tools", "backend", "microservices", "apis", "monitoring"], "enriched": true, "function": ["middleware", "logging", "auth", "tracing", "monitoring", "rate-limiting", "rpc", "testing"], "health_score": 94, "homepage": null, "language": "Go", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["grpc-ecosystem/go-grpc-middleware", "grpc-ecosystem/go-grpc-prometheus"], "name": "go-grpc-middleware", "platform": ["go", "windows", "cross-platform"], "pushed_at": "2026-08-21T15:56:39+00:00", "repo": "grpc-ecosystem/go-grpc-middleware", "stars": 6762, "tags": ["grpc", "interceptors", "observability", "retries", "panic-recovery", "opentelemetry", "linux", "macos"], "topics": ["grpc", "golang", "middleware", "generic-functions", "library", "logging", "authentication", "retries", "testing", "interceptor"], "urls": [], "use_cases": ["chain grpc interceptors in go", "add authentication to grpc server", "add logging and tracing to grpc services", "grpc retry and rate limiting middleware", "add prometheus metrics to grpc", "recover from panics in grpc handlers", "build consistent observability across microservices"], "what_it_is": "A Go library of gRPC middleware (interceptors) providing chained, ready-to-use implementations for auth, logging, tracing, metrics, retries, recovery, and more. It is the official grpc-ecosystem collection for building consistent cross-cutting concerns across gRPC servers and clients.", "when_to_avoid": ["you use a non-Go language (see language-specific gRPC middleware instead)", "your framework is HTTP/REST rather than gRPC", "you need highly custom interceptor behavior beyond what the provided middlewares offer"], "when_to_choose": ["you build gRPC services in Go and need standard cross-cutting middleware", "you want consistent logging, tracing, and metrics instrumentation across multiple microservices", "you need chained interceptors for auth, retries, and panic recovery"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/repos/grpc-ecosystem/go-grpc-middleware", "repo": "grpc-ecosystem/go-grpc-middleware", "role": "main", "score": 79}, {"path": "/repos/grpc-ecosystem/go-grpc-prometheus", "repo": "grpc-ecosystem/go-grpc-prometheus", "role": "plugin", "score": 10}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:48.386529+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:42:33.773832+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da35f62449df4fc1b6feca0a0ce12552d38ebad3776246c14ae623eaa81fed05", "fetched_at": "2026-08-28T04:09:48.386529+00:00", "kind": "readme", "missing": false, "url": "https://github.com/grpc-ecosystem/go-grpc-middleware"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:48.386529+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:42:33.773832+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da35f62449df4fc1b6feca0a0ce12552d38ebad3776246c14ae623eaa81fed05", "fetched_at": "2026-08-28T04:09:48.386529+00:00", "kind": "readme", "missing": false, "url": "https://github.com/grpc-ecosystem/go-grpc-middleware"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:42:33.773832+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da35f62449df4fc1b6feca0a0ce12552d38ebad3776246c14ae623eaa81fed05", "fetched_at": "2026-08-28T04:09:48.386529+00:00", "kind": "readme", "missing": false, "url": "https://github.com/grpc-ecosystem/go-grpc-middleware"}], "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:09:48.386529+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:48.386529+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:48.386529+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:42:33.773832+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da35f62449df4fc1b6feca0a0ce12552d38ebad3776246c14ae623eaa81fed05", "fetched_at": "2026-08-28T04:09:48.386529+00:00", "kind": "readme", "missing": false, "url": "https://github.com/grpc-ecosystem/go-grpc-middleware"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:48.386529+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:48.386529+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:42:33.773832+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da35f62449df4fc1b6feca0a0ce12552d38ebad3776246c14ae623eaa81fed05", "fetched_at": "2026-08-28T04:09:48.386529+00:00", "kind": "readme", "missing": false, "url": "https://github.com/grpc-ecosystem/go-grpc-middleware"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:48.386529+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:48.386529+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:48.386529+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:42:33.773832+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da35f62449df4fc1b6feca0a0ce12552d38ebad3776246c14ae623eaa81fed05", "fetched_at": "2026-08-28T04:09:48.386529+00:00", "kind": "readme", "missing": false, "url": "https://github.com/grpc-ecosystem/go-grpc-middleware"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:48.386529+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:48.386529+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:42:33.773832+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da35f62449df4fc1b6feca0a0ce12552d38ebad3776246c14ae623eaa81fed05", "fetched_at": "2026-08-28T04:09:48.386529+00:00", "kind": "readme", "missing": false, "url": "https://github.com/grpc-ecosystem/go-grpc-middleware"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:42:33.773832+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da35f62449df4fc1b6feca0a0ce12552d38ebad3776246c14ae623eaa81fed05", "fetched_at": "2026-08-28T04:09:48.386529+00:00", "kind": "readme", "missing": false, "url": "https://github.com/grpc-ecosystem/go-grpc-middleware"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:42:33.773832+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da35f62449df4fc1b6feca0a0ce12552d38ebad3776246c14ae623eaa81fed05", "fetched_at": "2026-08-28T04:09:48.386529+00:00", "kind": "readme", "missing": false, "url": "https://github.com/grpc-ecosystem/go-grpc-middleware"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:42:33.773832+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da35f62449df4fc1b6feca0a0ce12552d38ebad3776246c14ae623eaa81fed05", "fetched_at": "2026-08-28T04:09:48.386529+00:00", "kind": "readme", "missing": false, "url": "https://github.com/grpc-ecosystem/go-grpc-middleware"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 100, "rhythm": 43}, "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": 3763, "days_push": 12, "days_rel": 302, "gap_med": 57, "n_releases_24m": 6}, "score": 79, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}