{"adoption": {"forks": 195, "observed_at": "2026-08-28T04:03:51.759267+00:00", "stars": 1172}, "canonical_url": "https://ross.abutalabs.com/products/go-doudou", "card": {"archived": false, "artifact_type": "framework", "description": "go-doudou（doudou pronounce /dəudəu/）is OpenAPI 3.0 (for REST) spec and Protobuf v3 (for grpc) based lightweight microservice framework. It supports monolith service application as well.", "domain": ["microservices", "backend", "web-development", "apis", "cloud-computing"], "enriched": true, "function": ["web-framework", "api-framework", "rpc", "middleware", "rate-limiting", "configuration-management", "service-discovery"], "health_score": 82, "homepage": "https://go-doudou.github.io", "language": "Go", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["unionj-cloud/go-doudou"], "name": "unionj-cloud/go-doudou", "platform": ["go", "windows", "cloud"], "pushed_at": "2026-05-02T09:53:12+00:00", "repo": "unionj-cloud/go-doudou", "stars": 1172, "tags": ["openapi-3", "grpc", "protobuf", "rest", "service-governance", "circuit-breaker", "load-balancer", "nacos", "etcd", "apollo", "code-generator", "monolith", "cloud-native", "code-generation", "linux", "macos", "docker", "kubernetes"], "topics": ["golang", "microservice", "apollo", "cloud-native", "framework", "go", "nacos", "openapi", "orm", "rest", "restful-api", "swagger3", "grpc", "grpc-go", "etcd", "rate-limiting", "service-mesh"], "urls": [], "use_cases": ["build rest microservices in go", "generate openapi 3 spec from go interfaces", "build grpc microservices without writing protobuf by hand", "add rate limiting and circuit breaking to go services", "integrate service discovery with nacos or etcd", "build a monolith rest api in go", "remote configuration management for go microservices"], "what_it_is": "go-doudou is a lightweight Go microservice framework based on OpenAPI 3.0 (for REST) and Protobuf v3 (for gRPC), with a built-in code generator CLI that starts from plain Go interfaces. It supports both monolith and microservice architectures and includes service governance features like load balancing, rate limiting, circuit breaking, and remote configuration.", "when_to_avoid": ["you need the ecosystem maturity of Go-kit, Kratos, or Go-micro", "you only need a simple HTTP router or REST API framework without microservice features", "your team prefers writing OpenAPI or Protobuf definitions directly", "you need non-Go polyglot service definitions"], "when_to_choose": ["you want a code-generation-first Go microservice framework without learning a separate IDL", "you need both REST and gRPC support with built-in service governance", "you want flexibility to start with a monolith and split into microservices later", "you use Nacos, Etcd, or Apollo for config and discovery in a Go stack"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/go-doudou", "repo": "unionj-cloud/go-doudou", "role": "main", "score": 68}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:51.759267+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:28:28.614853+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "af0ca2c2ea5812324ba5ab48a177c984798a040e9d924c029c3fcb91a6d061fb", "fetched_at": "2026-08-28T04:03:51.759267+00:00", "kind": "readme", "missing": false, "url": "https://github.com/unionj-cloud/go-doudou"}, {"content_hash": "7eed614fc49790b74fe6ed31ff4cb33d151b0ce07efa81cfc74567e14aad3d6d", "fetched_at": "2026-08-29T12:33:51.841455+00:00", "kind": "homepage", "missing": false, "url": "https://go-doudou.github.io"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:51.759267+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:28:28.614853+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "af0ca2c2ea5812324ba5ab48a177c984798a040e9d924c029c3fcb91a6d061fb", "fetched_at": "2026-08-28T04:03:51.759267+00:00", "kind": "readme", "missing": false, "url": "https://github.com/unionj-cloud/go-doudou"}, {"content_hash": "7eed614fc49790b74fe6ed31ff4cb33d151b0ce07efa81cfc74567e14aad3d6d", "fetched_at": "2026-08-29T12:33:51.841455+00:00", "kind": "homepage", "missing": false, "url": "https://go-doudou.github.io"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:28:28.614853+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "af0ca2c2ea5812324ba5ab48a177c984798a040e9d924c029c3fcb91a6d061fb", "fetched_at": "2026-08-28T04:03:51.759267+00:00", "kind": "readme", "missing": false, "url": "https://github.com/unionj-cloud/go-doudou"}, {"content_hash": "7eed614fc49790b74fe6ed31ff4cb33d151b0ce07efa81cfc74567e14aad3d6d", "fetched_at": "2026-08-29T12:33:51.841455+00:00", "kind": "homepage", "missing": false, "url": "https://go-doudou.github.io"}], "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:03:51.759267+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:51.759267+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:51.759267+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:28:28.614853+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "af0ca2c2ea5812324ba5ab48a177c984798a040e9d924c029c3fcb91a6d061fb", "fetched_at": "2026-08-28T04:03:51.759267+00:00", "kind": "readme", "missing": false, "url": "https://github.com/unionj-cloud/go-doudou"}, {"content_hash": "7eed614fc49790b74fe6ed31ff4cb33d151b0ce07efa81cfc74567e14aad3d6d", "fetched_at": "2026-08-29T12:33:51.841455+00:00", "kind": "homepage", "missing": false, "url": "https://go-doudou.github.io"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:51.759267+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:51.759267+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:28:28.614853+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "af0ca2c2ea5812324ba5ab48a177c984798a040e9d924c029c3fcb91a6d061fb", "fetched_at": "2026-08-28T04:03:51.759267+00:00", "kind": "readme", "missing": false, "url": "https://github.com/unionj-cloud/go-doudou"}, {"content_hash": "7eed614fc49790b74fe6ed31ff4cb33d151b0ce07efa81cfc74567e14aad3d6d", "fetched_at": "2026-08-29T12:33:51.841455+00:00", "kind": "homepage", "missing": false, "url": "https://go-doudou.github.io"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:51.759267+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:51.759267+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:51.759267+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:28:28.614853+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "af0ca2c2ea5812324ba5ab48a177c984798a040e9d924c029c3fcb91a6d061fb", "fetched_at": "2026-08-28T04:03:51.759267+00:00", "kind": "readme", "missing": false, "url": "https://github.com/unionj-cloud/go-doudou"}, {"content_hash": "7eed614fc49790b74fe6ed31ff4cb33d151b0ce07efa81cfc74567e14aad3d6d", "fetched_at": "2026-08-29T12:33:51.841455+00:00", "kind": "homepage", "missing": false, "url": "https://go-doudou.github.io"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:51.759267+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:51.759267+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:28:28.614853+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "af0ca2c2ea5812324ba5ab48a177c984798a040e9d924c029c3fcb91a6d061fb", "fetched_at": "2026-08-28T04:03:51.759267+00:00", "kind": "readme", "missing": false, "url": "https://github.com/unionj-cloud/go-doudou"}, {"content_hash": "7eed614fc49790b74fe6ed31ff4cb33d151b0ce07efa81cfc74567e14aad3d6d", "fetched_at": "2026-08-29T12:33:51.841455+00:00", "kind": "homepage", "missing": false, "url": "https://go-doudou.github.io"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:28:28.614853+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "af0ca2c2ea5812324ba5ab48a177c984798a040e9d924c029c3fcb91a6d061fb", "fetched_at": "2026-08-28T04:03:51.759267+00:00", "kind": "readme", "missing": false, "url": "https://github.com/unionj-cloud/go-doudou"}, {"content_hash": "7eed614fc49790b74fe6ed31ff4cb33d151b0ce07efa81cfc74567e14aad3d6d", "fetched_at": "2026-08-29T12:33:51.841455+00:00", "kind": "homepage", "missing": false, "url": "https://go-doudou.github.io"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:28:28.614853+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "af0ca2c2ea5812324ba5ab48a177c984798a040e9d924c029c3fcb91a6d061fb", "fetched_at": "2026-08-28T04:03:51.759267+00:00", "kind": "readme", "missing": false, "url": "https://github.com/unionj-cloud/go-doudou"}, {"content_hash": "7eed614fc49790b74fe6ed31ff4cb33d151b0ce07efa81cfc74567e14aad3d6d", "fetched_at": "2026-08-29T12:33:51.841455+00:00", "kind": "homepage", "missing": false, "url": "https://go-doudou.github.io"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:28:28.614853+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "af0ca2c2ea5812324ba5ab48a177c984798a040e9d924c029c3fcb91a6d061fb", "fetched_at": "2026-08-28T04:03:51.759267+00:00", "kind": "readme", "missing": false, "url": "https://github.com/unionj-cloud/go-doudou"}, {"content_hash": "7eed614fc49790b74fe6ed31ff4cb33d151b0ce07efa81cfc74567e14aad3d6d", "fetched_at": "2026-08-29T12:33:51.841455+00:00", "kind": "homepage", "missing": false, "url": "https://go-doudou.github.io"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 80, "longevity": 100, "rhythm": 34}, "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": 2016, "days_push": 123, "days_rel": 362, "gap_med": 35.0, "n_releases_24m": 11}, "score": 68, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}