{"adoption": {"forks": 379, "observed_at": "2026-08-28T04:06:28.028838+00:00", "stars": 2225}, "canonical_url": "https://ross.abutalabs.com/products/doobie", "card": {"archived": false, "artifact_type": "library", "description": "Functional JDBC layer for Scala.", "domain": ["databases", "backend", "developer-tools"], "enriched": true, "function": ["database-driver", "orm", "testing"], "health_score": 99, "homepage": "https://typelevel.org/doobie/", "language": "Scala", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["typelevel/doobie"], "name": "typelevel/doobie", "platform": ["jvm"], "pushed_at": "2026-08-24T04:32:28+00:00", "repo": "typelevel/doobie", "stars": 2225, "tags": ["jdbc", "scala", "cats-effect", "functional-programming", "typelevel", "sql", "transactor", "fs2"], "topics": ["typelevel", "fp", "functional-programming", "scala", "database", "jdbc"], "urls": [], "use_cases": ["query a SQL database from Scala in a functional style", "map JDBC result rows to Scala case classes", "typecheck SQL queries against the database schema at test time", "stream large query results with fs2", "manage database connections and transactions with a Transactor", "write unit-testable database code in Cats Effect applications"], "what_it_is": "doobie is a pure functional JDBC layer for Scala built on Cats and Cats Effect, providing a monadic API (ConnectionIO) for constructing type-safe database programs. It is not an ORM or relational algebra; it maps JDBC operations into composable functional values with query typechecking and streaming support.", "when_to_avoid": ["you want an ORM with schema management, relations, and migrations", "your team is not familiar with functional programming and effect systems", "you are not on the JVM/Scala ecosystem"], "when_to_choose": ["you use Cats/Cats Effect and want pure functional database access on the JVM", "you want type-safe JDBC mappings and query validation without a full ORM", "you need composable, streamable database programs in Scala 2 or 3"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/doobie", "repo": "typelevel/doobie", "role": "main", "score": 87}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:28.028838+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:44:56.604472+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3ca34f244fd820b2359b55475288f790c9de84646793e2a3de21218fadfcea00", "fetched_at": "2026-08-28T04:06:28.028838+00:00", "kind": "readme", "missing": false, "url": "https://github.com/typelevel/doobie"}, {"content_hash": "8a87db032a1f09cb045f8550126384496093bb17a16ca34b290d92c5f4f7e9e5", "fetched_at": "2026-08-29T10:25:38.509533+00:00", "kind": "homepage", "missing": false, "url": "https://typelevel.org/doobie/"}, {"content_hash": "cb455d2696d53193fbf7dff7db5f749906199aa90b958ae3e3f8fc201bbedbd3", "fetched_at": "2026-08-29T10:25:38.512094+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/index.html"}, {"content_hash": "c207bdd717b21807dcaa371a99813c020e0c9171236c7c18e461ce8678ae52bf", "fetched_at": "2026-08-29T10:25:38.513870+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/01-Introduction.html"}, {"content_hash": "57561195564743df29e06f8ba2a80d1f5b69f481662ef957cf649e13d948d7b5", "fetched_at": "2026-08-29T10:25:38.515643+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/02-Toolkit.html"}, {"content_hash": "4c71ebd3d0eb3c5e747bb904b122a577a6abd4488e8fa9f15e70d58d1811699a", "fetched_at": "2026-08-29T10:25:38.517409+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/03-Connecting.html"}, {"content_hash": "f5f2bd08c4b3e407f0682902942dd1051100845c5e37505a91523fdcb9ca05df", "fetched_at": "2026-08-29T10:25:38.519204+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/04-Selecting.html"}, {"content_hash": "e018b12504aef0fcccb0a1153b114ac53441422f698fe65c5955effc64325280", "fetched_at": "2026-08-29T10:25:38.521210+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/05-Parameterized.html"}, {"content_hash": "02f659d0a6f367e98fec852cd2cc4bde518645733cb85f9aca333ef9380f1d75", "fetched_at": "2026-08-29T10:25:38.523212+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/06-Checking.html"}, {"content_hash": "3668afacdcd0adaace82501a8d07348c6a00f5e7279804cd289c808a6c0b5d5f", "fetched_at": "2026-08-29T10:25:38.524919+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/07-Updating.html"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:28.028838+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:44:56.604472+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3ca34f244fd820b2359b55475288f790c9de84646793e2a3de21218fadfcea00", "fetched_at": "2026-08-28T04:06:28.028838+00:00", "kind": "readme", "missing": false, "url": "https://github.com/typelevel/doobie"}, {"content_hash": "8a87db032a1f09cb045f8550126384496093bb17a16ca34b290d92c5f4f7e9e5", "fetched_at": "2026-08-29T10:25:38.509533+00:00", "kind": "homepage", "missing": false, "url": "https://typelevel.org/doobie/"}, {"content_hash": "cb455d2696d53193fbf7dff7db5f749906199aa90b958ae3e3f8fc201bbedbd3", "fetched_at": "2026-08-29T10:25:38.512094+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/index.html"}, {"content_hash": "c207bdd717b21807dcaa371a99813c020e0c9171236c7c18e461ce8678ae52bf", "fetched_at": "2026-08-29T10:25:38.513870+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/01-Introduction.html"}, {"content_hash": "57561195564743df29e06f8ba2a80d1f5b69f481662ef957cf649e13d948d7b5", "fetched_at": "2026-08-29T10:25:38.515643+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/02-Toolkit.html"}, {"content_hash": "4c71ebd3d0eb3c5e747bb904b122a577a6abd4488e8fa9f15e70d58d1811699a", "fetched_at": "2026-08-29T10:25:38.517409+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/03-Connecting.html"}, {"content_hash": "f5f2bd08c4b3e407f0682902942dd1051100845c5e37505a91523fdcb9ca05df", "fetched_at": "2026-08-29T10:25:38.519204+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/04-Selecting.html"}, {"content_hash": "e018b12504aef0fcccb0a1153b114ac53441422f698fe65c5955effc64325280", "fetched_at": "2026-08-29T10:25:38.521210+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/05-Parameterized.html"}, {"content_hash": "02f659d0a6f367e98fec852cd2cc4bde518645733cb85f9aca333ef9380f1d75", "fetched_at": "2026-08-29T10:25:38.523212+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/06-Checking.html"}, {"content_hash": "3668afacdcd0adaace82501a8d07348c6a00f5e7279804cd289c808a6c0b5d5f", "fetched_at": "2026-08-29T10:25:38.524919+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/07-Updating.html"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:44:56.604472+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3ca34f244fd820b2359b55475288f790c9de84646793e2a3de21218fadfcea00", "fetched_at": "2026-08-28T04:06:28.028838+00:00", "kind": "readme", "missing": false, "url": "https://github.com/typelevel/doobie"}, {"content_hash": "8a87db032a1f09cb045f8550126384496093bb17a16ca34b290d92c5f4f7e9e5", "fetched_at": "2026-08-29T10:25:38.509533+00:00", "kind": "homepage", "missing": false, "url": "https://typelevel.org/doobie/"}, {"content_hash": "cb455d2696d53193fbf7dff7db5f749906199aa90b958ae3e3f8fc201bbedbd3", "fetched_at": "2026-08-29T10:25:38.512094+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/index.html"}, {"content_hash": "c207bdd717b21807dcaa371a99813c020e0c9171236c7c18e461ce8678ae52bf", "fetched_at": "2026-08-29T10:25:38.513870+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/01-Introduction.html"}, {"content_hash": "57561195564743df29e06f8ba2a80d1f5b69f481662ef957cf649e13d948d7b5", "fetched_at": "2026-08-29T10:25:38.515643+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/02-Toolkit.html"}, {"content_hash": "4c71ebd3d0eb3c5e747bb904b122a577a6abd4488e8fa9f15e70d58d1811699a", "fetched_at": "2026-08-29T10:25:38.517409+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/03-Connecting.html"}, {"content_hash": "f5f2bd08c4b3e407f0682902942dd1051100845c5e37505a91523fdcb9ca05df", "fetched_at": "2026-08-29T10:25:38.519204+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/04-Selecting.html"}, {"content_hash": "e018b12504aef0fcccb0a1153b114ac53441422f698fe65c5955effc64325280", "fetched_at": "2026-08-29T10:25:38.521210+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/05-Parameterized.html"}, {"content_hash": "02f659d0a6f367e98fec852cd2cc4bde518645733cb85f9aca333ef9380f1d75", "fetched_at": "2026-08-29T10:25:38.523212+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/06-Checking.html"}, {"content_hash": "3668afacdcd0adaace82501a8d07348c6a00f5e7279804cd289c808a6c0b5d5f", "fetched_at": "2026-08-29T10:25:38.524919+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/07-Updating.html"}], "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:06:28.028838+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:28.028838+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:28.028838+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:44:56.604472+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3ca34f244fd820b2359b55475288f790c9de84646793e2a3de21218fadfcea00", "fetched_at": "2026-08-28T04:06:28.028838+00:00", "kind": "readme", "missing": false, "url": "https://github.com/typelevel/doobie"}, {"content_hash": "8a87db032a1f09cb045f8550126384496093bb17a16ca34b290d92c5f4f7e9e5", "fetched_at": "2026-08-29T10:25:38.509533+00:00", "kind": "homepage", "missing": false, "url": "https://typelevel.org/doobie/"}, {"content_hash": "cb455d2696d53193fbf7dff7db5f749906199aa90b958ae3e3f8fc201bbedbd3", "fetched_at": "2026-08-29T10:25:38.512094+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/index.html"}, {"content_hash": "c207bdd717b21807dcaa371a99813c020e0c9171236c7c18e461ce8678ae52bf", "fetched_at": "2026-08-29T10:25:38.513870+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/01-Introduction.html"}, {"content_hash": "57561195564743df29e06f8ba2a80d1f5b69f481662ef957cf649e13d948d7b5", "fetched_at": "2026-08-29T10:25:38.515643+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/02-Toolkit.html"}, {"content_hash": "4c71ebd3d0eb3c5e747bb904b122a577a6abd4488e8fa9f15e70d58d1811699a", "fetched_at": "2026-08-29T10:25:38.517409+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/03-Connecting.html"}, {"content_hash": "f5f2bd08c4b3e407f0682902942dd1051100845c5e37505a91523fdcb9ca05df", "fetched_at": "2026-08-29T10:25:38.519204+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/04-Selecting.html"}, {"content_hash": "e018b12504aef0fcccb0a1153b114ac53441422f698fe65c5955effc64325280", "fetched_at": "2026-08-29T10:25:38.521210+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/05-Parameterized.html"}, {"content_hash": "02f659d0a6f367e98fec852cd2cc4bde518645733cb85f9aca333ef9380f1d75", "fetched_at": "2026-08-29T10:25:38.523212+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/06-Checking.html"}, {"content_hash": "3668afacdcd0adaace82501a8d07348c6a00f5e7279804cd289c808a6c0b5d5f", "fetched_at": "2026-08-29T10:25:38.524919+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/07-Updating.html"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:28.028838+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:28.028838+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:44:56.604472+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3ca34f244fd820b2359b55475288f790c9de84646793e2a3de21218fadfcea00", "fetched_at": "2026-08-28T04:06:28.028838+00:00", "kind": "readme", "missing": false, "url": "https://github.com/typelevel/doobie"}, {"content_hash": "8a87db032a1f09cb045f8550126384496093bb17a16ca34b290d92c5f4f7e9e5", "fetched_at": "2026-08-29T10:25:38.509533+00:00", "kind": "homepage", "missing": false, "url": "https://typelevel.org/doobie/"}, {"content_hash": "cb455d2696d53193fbf7dff7db5f749906199aa90b958ae3e3f8fc201bbedbd3", "fetched_at": "2026-08-29T10:25:38.512094+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/index.html"}, {"content_hash": "c207bdd717b21807dcaa371a99813c020e0c9171236c7c18e461ce8678ae52bf", "fetched_at": "2026-08-29T10:25:38.513870+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/01-Introduction.html"}, {"content_hash": "57561195564743df29e06f8ba2a80d1f5b69f481662ef957cf649e13d948d7b5", "fetched_at": "2026-08-29T10:25:38.515643+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/02-Toolkit.html"}, {"content_hash": "4c71ebd3d0eb3c5e747bb904b122a577a6abd4488e8fa9f15e70d58d1811699a", "fetched_at": "2026-08-29T10:25:38.517409+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/03-Connecting.html"}, {"content_hash": "f5f2bd08c4b3e407f0682902942dd1051100845c5e37505a91523fdcb9ca05df", "fetched_at": "2026-08-29T10:25:38.519204+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/04-Selecting.html"}, {"content_hash": "e018b12504aef0fcccb0a1153b114ac53441422f698fe65c5955effc64325280", "fetched_at": "2026-08-29T10:25:38.521210+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/05-Parameterized.html"}, {"content_hash": "02f659d0a6f367e98fec852cd2cc4bde518645733cb85f9aca333ef9380f1d75", "fetched_at": "2026-08-29T10:25:38.523212+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/06-Checking.html"}, {"content_hash": "3668afacdcd0adaace82501a8d07348c6a00f5e7279804cd289c808a6c0b5d5f", "fetched_at": "2026-08-29T10:25:38.524919+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/07-Updating.html"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:28.028838+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:28.028838+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:28.028838+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:44:56.604472+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3ca34f244fd820b2359b55475288f790c9de84646793e2a3de21218fadfcea00", "fetched_at": "2026-08-28T04:06:28.028838+00:00", "kind": "readme", "missing": false, "url": "https://github.com/typelevel/doobie"}, {"content_hash": "8a87db032a1f09cb045f8550126384496093bb17a16ca34b290d92c5f4f7e9e5", "fetched_at": "2026-08-29T10:25:38.509533+00:00", "kind": "homepage", "missing": false, "url": "https://typelevel.org/doobie/"}, {"content_hash": "cb455d2696d53193fbf7dff7db5f749906199aa90b958ae3e3f8fc201bbedbd3", "fetched_at": "2026-08-29T10:25:38.512094+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/index.html"}, {"content_hash": "c207bdd717b21807dcaa371a99813c020e0c9171236c7c18e461ce8678ae52bf", "fetched_at": "2026-08-29T10:25:38.513870+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/01-Introduction.html"}, {"content_hash": "57561195564743df29e06f8ba2a80d1f5b69f481662ef957cf649e13d948d7b5", "fetched_at": "2026-08-29T10:25:38.515643+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/02-Toolkit.html"}, {"content_hash": "4c71ebd3d0eb3c5e747bb904b122a577a6abd4488e8fa9f15e70d58d1811699a", "fetched_at": "2026-08-29T10:25:38.517409+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/03-Connecting.html"}, {"content_hash": "f5f2bd08c4b3e407f0682902942dd1051100845c5e37505a91523fdcb9ca05df", "fetched_at": "2026-08-29T10:25:38.519204+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/04-Selecting.html"}, {"content_hash": "e018b12504aef0fcccb0a1153b114ac53441422f698fe65c5955effc64325280", "fetched_at": "2026-08-29T10:25:38.521210+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/05-Parameterized.html"}, {"content_hash": "02f659d0a6f367e98fec852cd2cc4bde518645733cb85f9aca333ef9380f1d75", "fetched_at": "2026-08-29T10:25:38.523212+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/06-Checking.html"}, {"content_hash": "3668afacdcd0adaace82501a8d07348c6a00f5e7279804cd289c808a6c0b5d5f", "fetched_at": "2026-08-29T10:25:38.524919+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/07-Updating.html"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:28.028838+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:28.028838+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:44:56.604472+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3ca34f244fd820b2359b55475288f790c9de84646793e2a3de21218fadfcea00", "fetched_at": "2026-08-28T04:06:28.028838+00:00", "kind": "readme", "missing": false, "url": "https://github.com/typelevel/doobie"}, {"content_hash": "8a87db032a1f09cb045f8550126384496093bb17a16ca34b290d92c5f4f7e9e5", "fetched_at": "2026-08-29T10:25:38.509533+00:00", "kind": "homepage", "missing": false, "url": "https://typelevel.org/doobie/"}, {"content_hash": "cb455d2696d53193fbf7dff7db5f749906199aa90b958ae3e3f8fc201bbedbd3", "fetched_at": "2026-08-29T10:25:38.512094+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/index.html"}, {"content_hash": "c207bdd717b21807dcaa371a99813c020e0c9171236c7c18e461ce8678ae52bf", "fetched_at": "2026-08-29T10:25:38.513870+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/01-Introduction.html"}, {"content_hash": "57561195564743df29e06f8ba2a80d1f5b69f481662ef957cf649e13d948d7b5", "fetched_at": "2026-08-29T10:25:38.515643+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/02-Toolkit.html"}, {"content_hash": "4c71ebd3d0eb3c5e747bb904b122a577a6abd4488e8fa9f15e70d58d1811699a", "fetched_at": "2026-08-29T10:25:38.517409+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/03-Connecting.html"}, {"content_hash": "f5f2bd08c4b3e407f0682902942dd1051100845c5e37505a91523fdcb9ca05df", "fetched_at": "2026-08-29T10:25:38.519204+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/04-Selecting.html"}, {"content_hash": "e018b12504aef0fcccb0a1153b114ac53441422f698fe65c5955effc64325280", "fetched_at": "2026-08-29T10:25:38.521210+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/05-Parameterized.html"}, {"content_hash": "02f659d0a6f367e98fec852cd2cc4bde518645733cb85f9aca333ef9380f1d75", "fetched_at": "2026-08-29T10:25:38.523212+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/06-Checking.html"}, {"content_hash": "3668afacdcd0adaace82501a8d07348c6a00f5e7279804cd289c808a6c0b5d5f", "fetched_at": "2026-08-29T10:25:38.524919+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/07-Updating.html"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:44:56.604472+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3ca34f244fd820b2359b55475288f790c9de84646793e2a3de21218fadfcea00", "fetched_at": "2026-08-28T04:06:28.028838+00:00", "kind": "readme", "missing": false, "url": "https://github.com/typelevel/doobie"}, {"content_hash": "8a87db032a1f09cb045f8550126384496093bb17a16ca34b290d92c5f4f7e9e5", "fetched_at": "2026-08-29T10:25:38.509533+00:00", "kind": "homepage", "missing": false, "url": "https://typelevel.org/doobie/"}, {"content_hash": "cb455d2696d53193fbf7dff7db5f749906199aa90b958ae3e3f8fc201bbedbd3", "fetched_at": "2026-08-29T10:25:38.512094+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/index.html"}, {"content_hash": "c207bdd717b21807dcaa371a99813c020e0c9171236c7c18e461ce8678ae52bf", "fetched_at": "2026-08-29T10:25:38.513870+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/01-Introduction.html"}, {"content_hash": "57561195564743df29e06f8ba2a80d1f5b69f481662ef957cf649e13d948d7b5", "fetched_at": "2026-08-29T10:25:38.515643+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/02-Toolkit.html"}, {"content_hash": "4c71ebd3d0eb3c5e747bb904b122a577a6abd4488e8fa9f15e70d58d1811699a", "fetched_at": "2026-08-29T10:25:38.517409+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/03-Connecting.html"}, {"content_hash": "f5f2bd08c4b3e407f0682902942dd1051100845c5e37505a91523fdcb9ca05df", "fetched_at": "2026-08-29T10:25:38.519204+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/04-Selecting.html"}, {"content_hash": "e018b12504aef0fcccb0a1153b114ac53441422f698fe65c5955effc64325280", "fetched_at": "2026-08-29T10:25:38.521210+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/05-Parameterized.html"}, {"content_hash": "02f659d0a6f367e98fec852cd2cc4bde518645733cb85f9aca333ef9380f1d75", "fetched_at": "2026-08-29T10:25:38.523212+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/06-Checking.html"}, {"content_hash": "3668afacdcd0adaace82501a8d07348c6a00f5e7279804cd289c808a6c0b5d5f", "fetched_at": "2026-08-29T10:25:38.524919+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/07-Updating.html"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:44:56.604472+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3ca34f244fd820b2359b55475288f790c9de84646793e2a3de21218fadfcea00", "fetched_at": "2026-08-28T04:06:28.028838+00:00", "kind": "readme", "missing": false, "url": "https://github.com/typelevel/doobie"}, {"content_hash": "8a87db032a1f09cb045f8550126384496093bb17a16ca34b290d92c5f4f7e9e5", "fetched_at": "2026-08-29T10:25:38.509533+00:00", "kind": "homepage", "missing": false, "url": "https://typelevel.org/doobie/"}, {"content_hash": "cb455d2696d53193fbf7dff7db5f749906199aa90b958ae3e3f8fc201bbedbd3", "fetched_at": "2026-08-29T10:25:38.512094+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/index.html"}, {"content_hash": "c207bdd717b21807dcaa371a99813c020e0c9171236c7c18e461ce8678ae52bf", "fetched_at": "2026-08-29T10:25:38.513870+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/01-Introduction.html"}, {"content_hash": "57561195564743df29e06f8ba2a80d1f5b69f481662ef957cf649e13d948d7b5", "fetched_at": "2026-08-29T10:25:38.515643+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/02-Toolkit.html"}, {"content_hash": "4c71ebd3d0eb3c5e747bb904b122a577a6abd4488e8fa9f15e70d58d1811699a", "fetched_at": "2026-08-29T10:25:38.517409+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/03-Connecting.html"}, {"content_hash": "f5f2bd08c4b3e407f0682902942dd1051100845c5e37505a91523fdcb9ca05df", "fetched_at": "2026-08-29T10:25:38.519204+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/04-Selecting.html"}, {"content_hash": "e018b12504aef0fcccb0a1153b114ac53441422f698fe65c5955effc64325280", "fetched_at": "2026-08-29T10:25:38.521210+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/05-Parameterized.html"}, {"content_hash": "02f659d0a6f367e98fec852cd2cc4bde518645733cb85f9aca333ef9380f1d75", "fetched_at": "2026-08-29T10:25:38.523212+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/06-Checking.html"}, {"content_hash": "3668afacdcd0adaace82501a8d07348c6a00f5e7279804cd289c808a6c0b5d5f", "fetched_at": "2026-08-29T10:25:38.524919+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/07-Updating.html"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:44:56.604472+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3ca34f244fd820b2359b55475288f790c9de84646793e2a3de21218fadfcea00", "fetched_at": "2026-08-28T04:06:28.028838+00:00", "kind": "readme", "missing": false, "url": "https://github.com/typelevel/doobie"}, {"content_hash": "8a87db032a1f09cb045f8550126384496093bb17a16ca34b290d92c5f4f7e9e5", "fetched_at": "2026-08-29T10:25:38.509533+00:00", "kind": "homepage", "missing": false, "url": "https://typelevel.org/doobie/"}, {"content_hash": "cb455d2696d53193fbf7dff7db5f749906199aa90b958ae3e3f8fc201bbedbd3", "fetched_at": "2026-08-29T10:25:38.512094+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/index.html"}, {"content_hash": "c207bdd717b21807dcaa371a99813c020e0c9171236c7c18e461ce8678ae52bf", "fetched_at": "2026-08-29T10:25:38.513870+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/01-Introduction.html"}, {"content_hash": "57561195564743df29e06f8ba2a80d1f5b69f481662ef957cf649e13d948d7b5", "fetched_at": "2026-08-29T10:25:38.515643+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/02-Toolkit.html"}, {"content_hash": "4c71ebd3d0eb3c5e747bb904b122a577a6abd4488e8fa9f15e70d58d1811699a", "fetched_at": "2026-08-29T10:25:38.517409+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/03-Connecting.html"}, {"content_hash": "f5f2bd08c4b3e407f0682902942dd1051100845c5e37505a91523fdcb9ca05df", "fetched_at": "2026-08-29T10:25:38.519204+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/04-Selecting.html"}, {"content_hash": "e018b12504aef0fcccb0a1153b114ac53441422f698fe65c5955effc64325280", "fetched_at": "2026-08-29T10:25:38.521210+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/05-Parameterized.html"}, {"content_hash": "02f659d0a6f367e98fec852cd2cc4bde518645733cb85f9aca333ef9380f1d75", "fetched_at": "2026-08-29T10:25:38.523212+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/06-Checking.html"}, {"content_hash": "3668afacdcd0adaace82501a8d07348c6a00f5e7279804cd289c808a6c0b5d5f", "fetched_at": "2026-08-29T10:25:38.524919+00:00", "kind": "site_page", "missing": false, "url": "https://typelevel.org/doobie/docs/07-Updating.html"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 64}, "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": 4664, "days_push": 9, "days_rel": 82, "gap_med": 98, "n_releases_24m": 8}, "score": 87, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}