{"adoption": {"forks": 333, "observed_at": "2026-08-28T04:04:54.421554+00:00", "stars": 1502}, "canonical_url": "https://ross.abutalabs.com/products/sttp", "card": {"archived": false, "artifact_type": "library", "description": "The Scala HTTP client you always wanted!", "domain": ["web-development", "apis", "developer-tools"], "enriched": true, "function": ["http-client", "serialization", "websocket", "tracing", "testing", "file-upload"], "health_score": 100, "homepage": "https://sttp.softwaremill.com", "language": "Scala", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["softwaremill/sttp"], "name": "softwaremill/sttp", "platform": ["jvm", "cross-platform", "wasm"], "pushed_at": "2026-08-25T00:24:18+00:00", "repo": "softwaremill/sttp", "stars": 1502, "tags": ["scala", "scala-js", "scala-native", "cats-effect", "zio", "akka-http", "pekko", "okhttp", "uri-interpolation", "-integration", "streaming"], "topics": ["scala", "http", "httpclient", "interpolator", "uri", "asynchronous", "synchronous", "akka-http", "monix", "scalaz", "reactive-streams", "okhttp", "cats", "zipkin", "zipkin-brave", "distributed-tracing", "client", "http-client"], "urls": [], "use_cases": ["make http requests from scala", "call  apis with automatic serialization", "upload and download files over http", "work with websockets in scala", "send multipart form data", "trace http calls with opentelemetry", "test http client interactions", "use one http client across jvm js and native"], "what_it_is": "sttp is a popular open-source HTTP client library for Scala with a clean, type-safe request description API. It supports synchronous, Future-based, and functional effect system programming styles, and runs on the JVM, Scala.js, and Scala Native.", "when_to_avoid": ["you are not using Scala or the JVM/Scala ecosystem", "you need a full HTTP server, not just a client", "you want a zero-dependency minimal client and prefer raw Java HttpClient directly", "your project is locked into a different HTTP stack with no need for an abstraction layer"], "when_to_choose": ["you write Scala and want a programmer-friendly, type-safe HTTP client", "you need integration with cats-effect, ZIO, Monix, or other effect systems", "you want pluggable backends (Java HttpClient, Akka/Pekko HTTP, http4s, OkHttp, Armeria)", "you need JSON library integration (circe, uPickle, play-, etc.) and streaming support", "you target multiple platforms: JVM, Scala.js, and Scala Native"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/sttp", "repo": "softwaremill/sttp", "role": "main", "score": 97}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.421554+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:32:54.801276+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "144dcdac7a47b85717ea19b173060d14c76ad73509181385747752e8be22d04a", "fetched_at": "2026-08-28T04:04:54.421554+00:00", "kind": "readme", "missing": false, "url": "https://github.com/softwaremill/sttp"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.421554+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:32:54.801276+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "144dcdac7a47b85717ea19b173060d14c76ad73509181385747752e8be22d04a", "fetched_at": "2026-08-28T04:04:54.421554+00:00", "kind": "readme", "missing": false, "url": "https://github.com/softwaremill/sttp"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:32:54.801276+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "144dcdac7a47b85717ea19b173060d14c76ad73509181385747752e8be22d04a", "fetched_at": "2026-08-28T04:04:54.421554+00:00", "kind": "readme", "missing": false, "url": "https://github.com/softwaremill/sttp"}], "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:54.421554+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.421554+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.421554+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:32:54.801276+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "144dcdac7a47b85717ea19b173060d14c76ad73509181385747752e8be22d04a", "fetched_at": "2026-08-28T04:04:54.421554+00:00", "kind": "readme", "missing": false, "url": "https://github.com/softwaremill/sttp"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.421554+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.421554+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:32:54.801276+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "144dcdac7a47b85717ea19b173060d14c76ad73509181385747752e8be22d04a", "fetched_at": "2026-08-28T04:04:54.421554+00:00", "kind": "readme", "missing": false, "url": "https://github.com/softwaremill/sttp"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.421554+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.421554+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.421554+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:32:54.801276+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "144dcdac7a47b85717ea19b173060d14c76ad73509181385747752e8be22d04a", "fetched_at": "2026-08-28T04:04:54.421554+00:00", "kind": "readme", "missing": false, "url": "https://github.com/softwaremill/sttp"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.421554+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.421554+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:32:54.801276+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "144dcdac7a47b85717ea19b173060d14c76ad73509181385747752e8be22d04a", "fetched_at": "2026-08-28T04:04:54.421554+00:00", "kind": "readme", "missing": false, "url": "https://github.com/softwaremill/sttp"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:32:54.801276+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "144dcdac7a47b85717ea19b173060d14c76ad73509181385747752e8be22d04a", "fetched_at": "2026-08-28T04:04:54.421554+00:00", "kind": "readme", "missing": false, "url": "https://github.com/softwaremill/sttp"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:32:54.801276+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "144dcdac7a47b85717ea19b173060d14c76ad73509181385747752e8be22d04a", "fetched_at": "2026-08-28T04:04:54.421554+00:00", "kind": "readme", "missing": false, "url": "https://github.com/softwaremill/sttp"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:32:54.801276+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "144dcdac7a47b85717ea19b173060d14c76ad73509181385747752e8be22d04a", "fetched_at": "2026-08-28T04:04:54.421554+00:00", "kind": "readme", "missing": false, "url": "https://github.com/softwaremill/sttp"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 92}, "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": 3351, "days_push": 9, "days_rel": 56, "gap_med": 9.0, "n_releases_24m": 41}, "score": 97, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}