{"adoption": {"forks": 63, "observed_at": "2026-08-28T04:04:30.105245+00:00", "stars": 1361}, "canonical_url": "https://ross.abutalabs.com/products/integrant", "card": {"archived": false, "artifact_type": "framework", "description": "Micro-framework for data-driven architecture", "domain": ["backend", "web-development", "developer-tools", "programming-languages"], "enriched": true, "function": ["configuration-management", "middleware", "developer-tools"], "health_score": 57, "homepage": null, "language": "Clojure", "license": "MIT", "license_family": "permissive", "maturity": "stable", "member_repos": ["weavejester/integrant"], "name": "weavejester/integrant", "platform": ["jvm", "cross-platform"], "pushed_at": "2026-01-07T12:08:00+00:00", "repo": "weavejester/integrant", "stars": 1361, "tags": ["clojure", "clojurescript", "dependency-injection", "micro-framework", "edn", "system-configuration", "component-alternative"], "topics": ["micro-framework", "clojure", "data-driven"], "urls": [], "use_cases": ["manage application lifecycle and dependency wiring in a Clojure web app", "define system architecture as data instead of code", "replace Component or Mount for stateful service management", "initialize and halt services like HTTP servers and database connections from an EDN config", "build modular Clojure applications with declarative configuration"], "what_it_is": "Integrant is a Clojure and ClojureScript micro-framework for building applications with data-driven architecture, where systems are defined as configuration maps (typically EDN) and initialized into running components. It serves as an alternative to Component or Mount, resolving dependencies between arbitrary configuration keys before initialization.", "when_to_avoid": ["you're not working in Clojure or ClojureScript", "you need a full-featured web framework rather than a system lifecycle micro-framework", "your project already standardizes on Component or Mount and migration isn't worthwhile", "you need runtime service discovery across distributed services rather than in-process wiring"], "when_to_choose": ["you're writing a Clojure or ClojureScript application and want data-driven system composition", "you find Component's record-based approach too rigid and want anything to be a dependency", "you prefer configuration in EDN files over programmatic system construction", "you use the Duct framework or want a lightweight lifecycle manager"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/integrant", "repo": "weavejester/integrant", "role": "main", "score": 60}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:30.105245+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:41:36.875663+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "eabe094a1906cd5b38d1e05e0e081e5b2903f8f334372b919c9e43679b0d6bed", "fetched_at": "2026-08-28T04:04:30.105245+00:00", "kind": "readme", "missing": false, "url": "https://github.com/weavejester/integrant"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:30.105245+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:41:36.875663+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "eabe094a1906cd5b38d1e05e0e081e5b2903f8f334372b919c9e43679b0d6bed", "fetched_at": "2026-08-28T04:04:30.105245+00:00", "kind": "readme", "missing": false, "url": "https://github.com/weavejester/integrant"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:41:36.875663+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "eabe094a1906cd5b38d1e05e0e081e5b2903f8f334372b919c9e43679b0d6bed", "fetched_at": "2026-08-28T04:04:30.105245+00:00", "kind": "readme", "missing": false, "url": "https://github.com/weavejester/integrant"}], "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:30.105245+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:30.105245+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:30.105245+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:41:36.875663+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "eabe094a1906cd5b38d1e05e0e081e5b2903f8f334372b919c9e43679b0d6bed", "fetched_at": "2026-08-28T04:04:30.105245+00:00", "kind": "readme", "missing": false, "url": "https://github.com/weavejester/integrant"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:30.105245+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:30.105245+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:41:36.875663+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "eabe094a1906cd5b38d1e05e0e081e5b2903f8f334372b919c9e43679b0d6bed", "fetched_at": "2026-08-28T04:04:30.105245+00:00", "kind": "readme", "missing": false, "url": "https://github.com/weavejester/integrant"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:30.105245+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:30.105245+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:30.105245+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:41:36.875663+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "eabe094a1906cd5b38d1e05e0e081e5b2903f8f334372b919c9e43679b0d6bed", "fetched_at": "2026-08-28T04:04:30.105245+00:00", "kind": "readme", "missing": false, "url": "https://github.com/weavejester/integrant"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:30.105245+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:30.105245+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:41:36.875663+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "eabe094a1906cd5b38d1e05e0e081e5b2903f8f334372b919c9e43679b0d6bed", "fetched_at": "2026-08-28T04:04:30.105245+00:00", "kind": "readme", "missing": false, "url": "https://github.com/weavejester/integrant"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:41:36.875663+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "eabe094a1906cd5b38d1e05e0e081e5b2903f8f334372b919c9e43679b0d6bed", "fetched_at": "2026-08-28T04:04:30.105245+00:00", "kind": "readme", "missing": false, "url": "https://github.com/weavejester/integrant"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:41:36.875663+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "eabe094a1906cd5b38d1e05e0e081e5b2903f8f334372b919c9e43679b0d6bed", "fetched_at": "2026-08-28T04:04:30.105245+00:00", "kind": "readme", "missing": false, "url": "https://github.com/weavejester/integrant"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:41:36.875663+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "eabe094a1906cd5b38d1e05e0e081e5b2903f8f334372b919c9e43679b0d6bed", "fetched_at": "2026-08-28T04:04:30.105245+00:00", "kind": "readme", "missing": false, "url": "https://github.com/weavejester/integrant"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 61, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3559, "days_push": 238, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 60, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}