{"adoption": {"forks": 426, "observed_at": "2026-08-28T04:05:59.927089+00:00", "stars": 1966}, "canonical_url": "https://ross.abutalabs.com/products/servant", "card": {"archived": false, "artifact_type": "framework", "description": "Servant is a Haskell DSL for describing, serving, querying, mocking, documenting web applications and more!", "domain": ["web-development", "backend", "apis", "developer-tools"], "enriched": true, "function": ["web-framework", "api-framework", "http-server", "http-client", "routing", "mock-api", "api-documentation", "type-system"], "health_score": 79, "homepage": "https://docs.servant.dev/", "language": "Haskell", "license": null, "license_family": "other", "maturity": "active", "member_repos": ["haskell-servant/servant"], "name": "haskell-servant/servant", "platform": ["cli"], "pushed_at": "2026-08-22T13:29:39+00:00", "repo": "haskell-servant/servant", "stars": 1966, "tags": ["type-level-dsl", "rest", "haskell", "code-generation", "openapi", "web-server"], "topics": ["hacktoberfest", "haskell"], "urls": [], "use_cases": ["build a type-safe REST API server in Haskell", "generate API clients from a single API definition", "auto-generate API documentation from code", "mock a web service for testing", "define an API once and derive server and client", "serve a JSON web service with compile-time route checking"], "what_it_is": "Servant is a Haskell DSL for describing web APIs at the type level, from which servers, clients, mocks, and documentation can be derived. It lets you define an API once and automatically get type-safe serving, querying, mocking, and documenting of that API.", "when_to_avoid": ["you need a framework in a non-Haskell language", "your team is not comfortable with advanced Haskell type-level programming", "you want a batteries-included framework with built-in ORM and templating"], "when_to_choose": ["you write Haskell and want compile-time guarantees that server and client match the API", "you want to derive documentation, clients, and mocks from one API type", "you value type-level correctness for routing and serialization"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/servant", "repo": "haskell-servant/servant", "role": "main", "score": 77}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.927089+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:05:26.975253+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b8fc2b6c2636e0860326eb7991f247727caa9315898e89703f176b78ed9f56b", "fetched_at": "2026-08-28T04:05:59.927089+00:00", "kind": "readme", "missing": false, "url": "https://github.com/haskell-servant/servant"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.927089+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:05:26.975253+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b8fc2b6c2636e0860326eb7991f247727caa9315898e89703f176b78ed9f56b", "fetched_at": "2026-08-28T04:05:59.927089+00:00", "kind": "readme", "missing": false, "url": "https://github.com/haskell-servant/servant"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:05:26.975253+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b8fc2b6c2636e0860326eb7991f247727caa9315898e89703f176b78ed9f56b", "fetched_at": "2026-08-28T04:05:59.927089+00:00", "kind": "readme", "missing": false, "url": "https://github.com/haskell-servant/servant"}], "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:59.927089+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.927089+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.927089+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:05:26.975253+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b8fc2b6c2636e0860326eb7991f247727caa9315898e89703f176b78ed9f56b", "fetched_at": "2026-08-28T04:05:59.927089+00:00", "kind": "readme", "missing": false, "url": "https://github.com/haskell-servant/servant"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.927089+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.927089+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:05:26.975253+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b8fc2b6c2636e0860326eb7991f247727caa9315898e89703f176b78ed9f56b", "fetched_at": "2026-08-28T04:05:59.927089+00:00", "kind": "readme", "missing": false, "url": "https://github.com/haskell-servant/servant"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.927089+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.927089+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.927089+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:05:26.975253+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b8fc2b6c2636e0860326eb7991f247727caa9315898e89703f176b78ed9f56b", "fetched_at": "2026-08-28T04:05:59.927089+00:00", "kind": "readme", "missing": false, "url": "https://github.com/haskell-servant/servant"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.927089+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.927089+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:05:26.975253+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b8fc2b6c2636e0860326eb7991f247727caa9315898e89703f176b78ed9f56b", "fetched_at": "2026-08-28T04:05:59.927089+00:00", "kind": "readme", "missing": false, "url": "https://github.com/haskell-servant/servant"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:05:26.975253+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b8fc2b6c2636e0860326eb7991f247727caa9315898e89703f176b78ed9f56b", "fetched_at": "2026-08-28T04:05:59.927089+00:00", "kind": "readme", "missing": false, "url": "https://github.com/haskell-servant/servant"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:05:26.975253+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b8fc2b6c2636e0860326eb7991f247727caa9315898e89703f176b78ed9f56b", "fetched_at": "2026-08-28T04:05:59.927089+00:00", "kind": "readme", "missing": false, "url": "https://github.com/haskell-servant/servant"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:05:26.975253+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b8fc2b6c2636e0860326eb7991f247727caa9315898e89703f176b78ed9f56b", "fetched_at": "2026-08-28T04:05:59.927089+00:00", "kind": "readme", "missing": false, "url": "https://github.com/haskell-servant/servant"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4292, "days_push": 11, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 77, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}