{"adoption": {"forks": 192, "observed_at": "2026-08-28T04:05:20.565842+00:00", "stars": 1676}, "canonical_url": "https://ross.abutalabs.com/products/eventhorizon", "card": {"archived": false, "artifact_type": "library", "description": "Event Sourcing for Go!", "domain": ["developer-tools", "backend", "microservices", "databases"], "enriched": true, "function": ["middleware", "tracing", "serialization"], "health_score": 99, "homepage": null, "language": "Go", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["looplab/eventhorizon"], "name": "looplab/eventhorizon", "platform": ["go", "windows", "cloud"], "pushed_at": "2026-08-24T21:08:14+00:00", "repo": "looplab/eventhorizon", "stars": 1676, "tags": ["event-sourcing", "cqrs", "ddd", "event-store", "aggregate", "command-bus", "event-bus", "read-models", "mongodb", "kafka", "nats", "redis", "linux", "macos", "docker"], "topics": ["go", "cqrs", "ddd", "event-horizon", "event-sourcing", "domain-driven-design", "google-cloud", "aws", "eventsourcing", "entity", "nats", "jetstream", "redis", "mongodb", "opentracing", "kafka"], "urls": [], "use_cases": ["build event-sourced applications in Go", "implement CQRS command/query separation", "store domain events in MongoDB or Kafka", "build audit logs from recorded events", "create read models projected from events", "model domains with aggregates and commands"], "what_it_is": "Event Horizon is a CQRS and Event Sourcing toolkit for Go, providing command handling, event stores, event buses, and read model support. It ships with official event store implementations for memory, MongoDB, and tracing, plus third-party stores for AWS DynamoDB, Postgres, and others.", "when_to_avoid": ["you need a finalized, stable API for long-term projects", "your project is simple CRUD without event sourcing needs", "you work outside the Go ecosystem", "your aggregates may exceed MongoDB's 16MB document limit with the v1 store"], "when_to_choose": ["you are building Go services with event sourcing or CQRS patterns", "you need pluggable event stores across MongoDB, Kafka, NATS, or Redis", "you want traceability and audit logging of all state changes", "you follow domain-driven design with aggregates and commands"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/eventhorizon", "repo": "looplab/eventhorizon", "role": "main", "score": 84}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.565842+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:42:26.564525+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6f0eb976a4aa0113ae60bbe7f05a9455582e9274d82d65ab1d461e9c9847b681", "fetched_at": "2026-08-28T04:05:20.565842+00:00", "kind": "readme", "missing": false, "url": "https://github.com/looplab/eventhorizon"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.565842+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:42:26.564525+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6f0eb976a4aa0113ae60bbe7f05a9455582e9274d82d65ab1d461e9c9847b681", "fetched_at": "2026-08-28T04:05:20.565842+00:00", "kind": "readme", "missing": false, "url": "https://github.com/looplab/eventhorizon"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:42:26.564525+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6f0eb976a4aa0113ae60bbe7f05a9455582e9274d82d65ab1d461e9c9847b681", "fetched_at": "2026-08-28T04:05:20.565842+00:00", "kind": "readme", "missing": false, "url": "https://github.com/looplab/eventhorizon"}], "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:20.565842+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.565842+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.565842+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:42:26.564525+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6f0eb976a4aa0113ae60bbe7f05a9455582e9274d82d65ab1d461e9c9847b681", "fetched_at": "2026-08-28T04:05:20.565842+00:00", "kind": "readme", "missing": false, "url": "https://github.com/looplab/eventhorizon"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.565842+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.565842+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:42:26.564525+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6f0eb976a4aa0113ae60bbe7f05a9455582e9274d82d65ab1d461e9c9847b681", "fetched_at": "2026-08-28T04:05:20.565842+00:00", "kind": "readme", "missing": false, "url": "https://github.com/looplab/eventhorizon"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.565842+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.565842+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.565842+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:42:26.564525+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6f0eb976a4aa0113ae60bbe7f05a9455582e9274d82d65ab1d461e9c9847b681", "fetched_at": "2026-08-28T04:05:20.565842+00:00", "kind": "readme", "missing": false, "url": "https://github.com/looplab/eventhorizon"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.565842+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.565842+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:42:26.564525+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6f0eb976a4aa0113ae60bbe7f05a9455582e9274d82d65ab1d461e9c9847b681", "fetched_at": "2026-08-28T04:05:20.565842+00:00", "kind": "readme", "missing": false, "url": "https://github.com/looplab/eventhorizon"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:42:26.564525+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6f0eb976a4aa0113ae60bbe7f05a9455582e9274d82d65ab1d461e9c9847b681", "fetched_at": "2026-08-28T04:05:20.565842+00:00", "kind": "readme", "missing": false, "url": "https://github.com/looplab/eventhorizon"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:42:26.564525+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6f0eb976a4aa0113ae60bbe7f05a9455582e9274d82d65ab1d461e9c9847b681", "fetched_at": "2026-08-28T04:05:20.565842+00:00", "kind": "readme", "missing": false, "url": "https://github.com/looplab/eventhorizon"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:42:26.564525+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6f0eb976a4aa0113ae60bbe7f05a9455582e9274d82d65ab1d461e9c9847b681", "fetched_at": "2026-08-28T04:05:20.565842+00:00", "kind": "readme", "missing": false, "url": "https://github.com/looplab/eventhorizon"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 57}, "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": 4307, "days_push": 9, "days_rel": 78, "gap_med": null, "n_releases_24m": 1}, "score": 84, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}