{"adoption": {"forks": 239, "observed_at": "2026-08-28T04:05:57.395484+00:00", "stars": 1941}, "canonical_url": "https://ross.abutalabs.com/products/forest", "card": {"archived": false, "artifact_type": "framework", "description": "A high-level and lightweight declarative HTTP client framework for Java. it makes sending HTTP requests in Java easier.", "domain": ["web-development", "backend", "apis", "developer-tools"], "enriched": true, "function": ["http-client", "serialization", "middleware", "web-framework"], "health_score": 74, "homepage": null, "language": "Java", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["dromara/forest"], "name": "dromara/forest", "platform": ["jvm", "cross-platform"], "pushed_at": "2026-01-26T21:37:49+00:00", "repo": "dromara/forest", "stars": 1941, "tags": ["declarative-http-client", "annotations", "spring-boot-starter", "okhttp", "httpclient", "rest-client", "feign-alternative", "retrofit-alternative", "oauth2", "file-upload", "sse", "async-requests", "spring"], "topics": ["declarative-http-client", "http", "http-client", "https", "rest", "restful", "socks", "java-http-client", "request", "fegin", "retrofit"], "urls": [], "use_cases": ["call third-party REST APIs from Java without boilerplate", "define HTTP clients as annotated interfaces like Feign or Retrofit", "send GET/POST/PUT/DELETE requests declaratively in Spring Boot", "upload and download files over HTTP in Java", "serialize request and response bodies as JSON, XML, or Protobuf", "handle OAuth2 authentication for external APIs", "send asynchronous HTTP requests with callbacks", "consume Server-Sent Events (SSE) endpoints in Java"], "what_it_is": "Forest is a high-level, lightweight declarative HTTP client framework for Java that lets developers send HTTP requests by defining annotated interfaces and calling local-looking methods. It supports multiple backends (HttpClient, OkHttp), template expressions, interceptors, JSON/XML/Protobuf serialization, OAuth2, file upload/download, async calls, and Spring/Spring Boot integration.", "when_to_avoid": ["you need a reactive, non-blocking HTTP client with backpressure (e.g., WebFlux WebClient)", "your project is not on the JVM or does not use Java 8+", "you only need simple one-off requests where a plain HttpClient or OkHttp call suffices", "you require gRPC or binary RPC rather than HTTP/REST"], "when_to_choose": ["you want a Feign/Retrofit-style declarative HTTP client without Spring Cloud or a registry", "you need flexible template expressions and custom annotations for request definitions", "you want pluggable JSON/XML converters (Fast, Jackson, Gson, JAXB)", "you need both programmatic and declarative request styles in one framework"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/forest", "repo": "dromara/forest", "role": "main", "score": 67}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.395484+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:08:06.169372+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7ae64cbe177c9b1d80dca30d7e45ed2d2d1b6167891c0ded2ffd514585b2a03c", "fetched_at": "2026-08-28T04:05:57.395484+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/forest"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.395484+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:08:06.169372+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7ae64cbe177c9b1d80dca30d7e45ed2d2d1b6167891c0ded2ffd514585b2a03c", "fetched_at": "2026-08-28T04:05:57.395484+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/forest"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:08:06.169372+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7ae64cbe177c9b1d80dca30d7e45ed2d2d1b6167891c0ded2ffd514585b2a03c", "fetched_at": "2026-08-28T04:05:57.395484+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/forest"}], "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:57.395484+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.395484+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.395484+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:08:06.169372+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7ae64cbe177c9b1d80dca30d7e45ed2d2d1b6167891c0ded2ffd514585b2a03c", "fetched_at": "2026-08-28T04:05:57.395484+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/forest"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.395484+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.395484+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:08:06.169372+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7ae64cbe177c9b1d80dca30d7e45ed2d2d1b6167891c0ded2ffd514585b2a03c", "fetched_at": "2026-08-28T04:05:57.395484+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/forest"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.395484+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.395484+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.395484+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:08:06.169372+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7ae64cbe177c9b1d80dca30d7e45ed2d2d1b6167891c0ded2ffd514585b2a03c", "fetched_at": "2026-08-28T04:05:57.395484+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/forest"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.395484+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.395484+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:08:06.169372+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7ae64cbe177c9b1d80dca30d7e45ed2d2d1b6167891c0ded2ffd514585b2a03c", "fetched_at": "2026-08-28T04:05:57.395484+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/forest"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:08:06.169372+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7ae64cbe177c9b1d80dca30d7e45ed2d2d1b6167891c0ded2ffd514585b2a03c", "fetched_at": "2026-08-28T04:05:57.395484+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/forest"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:08:06.169372+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7ae64cbe177c9b1d80dca30d7e45ed2d2d1b6167891c0ded2ffd514585b2a03c", "fetched_at": "2026-08-28T04:05:57.395484+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/forest"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:08:06.169372+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7ae64cbe177c9b1d80dca30d7e45ed2d2d1b6167891c0ded2ffd514585b2a03c", "fetched_at": "2026-08-28T04:05:57.395484+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/forest"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 64, "longevity": 100, "rhythm": 51}, "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": 3421, "days_push": 219, "days_rel": 327, "gap_med": 0, "n_releases_24m": 12}, "score": 67, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}