{"adoption": {"forks": 66, "observed_at": "2026-08-28T04:03:44.201257+00:00", "stars": 1139}, "canonical_url": "https://ross.abutalabs.com/products/uplink", "card": {"archived": false, "artifact_type": "library", "description": "A Declarative HTTP Client for Python", "domain": ["web-development", "apis", "developer-tools"], "enriched": true, "function": ["http-client", "serialization", "middleware", "auth"], "health_score": 49, "homepage": "https://uplink.prkumar.dev", "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["prkumar/uplink"], "name": "prkumar/uplink", "platform": ["python", "cross-platform"], "pushed_at": "2025-06-14T20:23:45+00:00", "repo": "prkumar/uplink", "stars": 1139, "tags": ["declarative", "retrofit-inspired", "rest-client", "aiohttp", "twisted", "pydantic", "marshmallow", "async"], "topics": ["python", "http", "http-client", "rest-api", "retrofit", "requests", "api-client", "aiohttp"], "urls": [], "use_cases": ["build a python client for a rest api", "define api clients declaratively with decorators", "make async http requests with aiohttp", "deserialize json responses into pydantic models", "wrap a third-party rest api in a reusable class", "swap http backends without rewriting client code"], "what_it_is": "Uplink is a declarative HTTP client library for Python, inspired by Retrofit, that turns REST APIs into Python classes using decorators and type hints. It supports pluggable HTTP backends (requests, aiohttp, Twisted), async I/O, and converters for pydantic and marshmallow models.", "when_to_avoid": ["you need a simple one-off HTTP request", "you prefer writing requests calls directly", "you need a client for a non-REST protocol like GraphQL or gRPC"], "when_to_choose": ["you want a structured, class-based API client instead of ad-hoc requests calls", "you like Retrofit's declarative style in Python", "you need async support via aiohttp or Twisted", "you want built-in serialization with pydantic or marshmallow"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/uplink", "repo": "prkumar/uplink", "role": "main", "score": 34}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.201257+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:36:06.224162+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "186bffedc769c8285e26ad378b7834cb93a25c2dc4a03defc24a653174e706be", "fetched_at": "2026-08-28T04:03:44.201257+00:00", "kind": "readme", "missing": false, "url": "https://github.com/prkumar/uplink"}, {"content_hash": "f72ac170725044358d925edfade8e60b473a398ad895e791c6b8690d15f8f358", "fetched_at": "2026-08-29T12:41:11.729012+00:00", "kind": "homepage", "missing": false, "url": "https://uplink.prkumar.dev"}, {"content_hash": "23bca0ad8c99775348d5c8979d5c08b83d9edf3527e3b208e9e454d012eb5361", "fetched_at": "2026-08-29T12:41:11.734001+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/user/install"}, {"content_hash": "ce6ea4a8af9388b02681428a798e518e78a9f00451a57a24a132d3e1acb04dcf", "fetched_at": "2026-08-29T12:41:11.735689+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/user/quickstart"}, {"content_hash": "7b3ce2a77b8f517683d4aeb10d97e5f3329fe849406d6c96e917c2c287301f6f", "fetched_at": "2026-08-29T12:41:11.737588+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/uplink/json"}, {"content_hash": "0e52b24f9b408c55475d032fc1586e270150273336a95e515fbe67603462fce2", "fetched_at": "2026-08-29T12:41:11.731840+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/changelog"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.201257+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:36:06.224162+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "186bffedc769c8285e26ad378b7834cb93a25c2dc4a03defc24a653174e706be", "fetched_at": "2026-08-28T04:03:44.201257+00:00", "kind": "readme", "missing": false, "url": "https://github.com/prkumar/uplink"}, {"content_hash": "f72ac170725044358d925edfade8e60b473a398ad895e791c6b8690d15f8f358", "fetched_at": "2026-08-29T12:41:11.729012+00:00", "kind": "homepage", "missing": false, "url": "https://uplink.prkumar.dev"}, {"content_hash": "23bca0ad8c99775348d5c8979d5c08b83d9edf3527e3b208e9e454d012eb5361", "fetched_at": "2026-08-29T12:41:11.734001+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/user/install"}, {"content_hash": "ce6ea4a8af9388b02681428a798e518e78a9f00451a57a24a132d3e1acb04dcf", "fetched_at": "2026-08-29T12:41:11.735689+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/user/quickstart"}, {"content_hash": "7b3ce2a77b8f517683d4aeb10d97e5f3329fe849406d6c96e917c2c287301f6f", "fetched_at": "2026-08-29T12:41:11.737588+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/uplink/json"}, {"content_hash": "0e52b24f9b408c55475d032fc1586e270150273336a95e515fbe67603462fce2", "fetched_at": "2026-08-29T12:41:11.731840+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/changelog"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:36:06.224162+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "186bffedc769c8285e26ad378b7834cb93a25c2dc4a03defc24a653174e706be", "fetched_at": "2026-08-28T04:03:44.201257+00:00", "kind": "readme", "missing": false, "url": "https://github.com/prkumar/uplink"}, {"content_hash": "f72ac170725044358d925edfade8e60b473a398ad895e791c6b8690d15f8f358", "fetched_at": "2026-08-29T12:41:11.729012+00:00", "kind": "homepage", "missing": false, "url": "https://uplink.prkumar.dev"}, {"content_hash": "23bca0ad8c99775348d5c8979d5c08b83d9edf3527e3b208e9e454d012eb5361", "fetched_at": "2026-08-29T12:41:11.734001+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/user/install"}, {"content_hash": "ce6ea4a8af9388b02681428a798e518e78a9f00451a57a24a132d3e1acb04dcf", "fetched_at": "2026-08-29T12:41:11.735689+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/user/quickstart"}, {"content_hash": "7b3ce2a77b8f517683d4aeb10d97e5f3329fe849406d6c96e917c2c287301f6f", "fetched_at": "2026-08-29T12:41:11.737588+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/uplink/json"}, {"content_hash": "0e52b24f9b408c55475d032fc1586e270150273336a95e515fbe67603462fce2", "fetched_at": "2026-08-29T12:41:11.731840+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/changelog"}], "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:03:44.201257+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.201257+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.201257+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:36:06.224162+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "186bffedc769c8285e26ad378b7834cb93a25c2dc4a03defc24a653174e706be", "fetched_at": "2026-08-28T04:03:44.201257+00:00", "kind": "readme", "missing": false, "url": "https://github.com/prkumar/uplink"}, {"content_hash": "f72ac170725044358d925edfade8e60b473a398ad895e791c6b8690d15f8f358", "fetched_at": "2026-08-29T12:41:11.729012+00:00", "kind": "homepage", "missing": false, "url": "https://uplink.prkumar.dev"}, {"content_hash": "23bca0ad8c99775348d5c8979d5c08b83d9edf3527e3b208e9e454d012eb5361", "fetched_at": "2026-08-29T12:41:11.734001+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/user/install"}, {"content_hash": "ce6ea4a8af9388b02681428a798e518e78a9f00451a57a24a132d3e1acb04dcf", "fetched_at": "2026-08-29T12:41:11.735689+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/user/quickstart"}, {"content_hash": "7b3ce2a77b8f517683d4aeb10d97e5f3329fe849406d6c96e917c2c287301f6f", "fetched_at": "2026-08-29T12:41:11.737588+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/uplink/json"}, {"content_hash": "0e52b24f9b408c55475d032fc1586e270150273336a95e515fbe67603462fce2", "fetched_at": "2026-08-29T12:41:11.731840+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/changelog"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.201257+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.201257+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:36:06.224162+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "186bffedc769c8285e26ad378b7834cb93a25c2dc4a03defc24a653174e706be", "fetched_at": "2026-08-28T04:03:44.201257+00:00", "kind": "readme", "missing": false, "url": "https://github.com/prkumar/uplink"}, {"content_hash": "f72ac170725044358d925edfade8e60b473a398ad895e791c6b8690d15f8f358", "fetched_at": "2026-08-29T12:41:11.729012+00:00", "kind": "homepage", "missing": false, "url": "https://uplink.prkumar.dev"}, {"content_hash": "23bca0ad8c99775348d5c8979d5c08b83d9edf3527e3b208e9e454d012eb5361", "fetched_at": "2026-08-29T12:41:11.734001+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/user/install"}, {"content_hash": "ce6ea4a8af9388b02681428a798e518e78a9f00451a57a24a132d3e1acb04dcf", "fetched_at": "2026-08-29T12:41:11.735689+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/user/quickstart"}, {"content_hash": "7b3ce2a77b8f517683d4aeb10d97e5f3329fe849406d6c96e917c2c287301f6f", "fetched_at": "2026-08-29T12:41:11.737588+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/uplink/json"}, {"content_hash": "0e52b24f9b408c55475d032fc1586e270150273336a95e515fbe67603462fce2", "fetched_at": "2026-08-29T12:41:11.731840+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/changelog"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.201257+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.201257+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.201257+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:36:06.224162+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "186bffedc769c8285e26ad378b7834cb93a25c2dc4a03defc24a653174e706be", "fetched_at": "2026-08-28T04:03:44.201257+00:00", "kind": "readme", "missing": false, "url": "https://github.com/prkumar/uplink"}, {"content_hash": "f72ac170725044358d925edfade8e60b473a398ad895e791c6b8690d15f8f358", "fetched_at": "2026-08-29T12:41:11.729012+00:00", "kind": "homepage", "missing": false, "url": "https://uplink.prkumar.dev"}, {"content_hash": "23bca0ad8c99775348d5c8979d5c08b83d9edf3527e3b208e9e454d012eb5361", "fetched_at": "2026-08-29T12:41:11.734001+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/user/install"}, {"content_hash": "ce6ea4a8af9388b02681428a798e518e78a9f00451a57a24a132d3e1acb04dcf", "fetched_at": "2026-08-29T12:41:11.735689+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/user/quickstart"}, {"content_hash": "7b3ce2a77b8f517683d4aeb10d97e5f3329fe849406d6c96e917c2c287301f6f", "fetched_at": "2026-08-29T12:41:11.737588+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/uplink/json"}, {"content_hash": "0e52b24f9b408c55475d032fc1586e270150273336a95e515fbe67603462fce2", "fetched_at": "2026-08-29T12:41:11.731840+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/changelog"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.201257+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.201257+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:36:06.224162+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "186bffedc769c8285e26ad378b7834cb93a25c2dc4a03defc24a653174e706be", "fetched_at": "2026-08-28T04:03:44.201257+00:00", "kind": "readme", "missing": false, "url": "https://github.com/prkumar/uplink"}, {"content_hash": "f72ac170725044358d925edfade8e60b473a398ad895e791c6b8690d15f8f358", "fetched_at": "2026-08-29T12:41:11.729012+00:00", "kind": "homepage", "missing": false, "url": "https://uplink.prkumar.dev"}, {"content_hash": "23bca0ad8c99775348d5c8979d5c08b83d9edf3527e3b208e9e454d012eb5361", "fetched_at": "2026-08-29T12:41:11.734001+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/user/install"}, {"content_hash": "ce6ea4a8af9388b02681428a798e518e78a9f00451a57a24a132d3e1acb04dcf", "fetched_at": "2026-08-29T12:41:11.735689+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/user/quickstart"}, {"content_hash": "7b3ce2a77b8f517683d4aeb10d97e5f3329fe849406d6c96e917c2c287301f6f", "fetched_at": "2026-08-29T12:41:11.737588+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/uplink/json"}, {"content_hash": "0e52b24f9b408c55475d032fc1586e270150273336a95e515fbe67603462fce2", "fetched_at": "2026-08-29T12:41:11.731840+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/changelog"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:36:06.224162+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "186bffedc769c8285e26ad378b7834cb93a25c2dc4a03defc24a653174e706be", "fetched_at": "2026-08-28T04:03:44.201257+00:00", "kind": "readme", "missing": false, "url": "https://github.com/prkumar/uplink"}, {"content_hash": "f72ac170725044358d925edfade8e60b473a398ad895e791c6b8690d15f8f358", "fetched_at": "2026-08-29T12:41:11.729012+00:00", "kind": "homepage", "missing": false, "url": "https://uplink.prkumar.dev"}, {"content_hash": "23bca0ad8c99775348d5c8979d5c08b83d9edf3527e3b208e9e454d012eb5361", "fetched_at": "2026-08-29T12:41:11.734001+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/user/install"}, {"content_hash": "ce6ea4a8af9388b02681428a798e518e78a9f00451a57a24a132d3e1acb04dcf", "fetched_at": "2026-08-29T12:41:11.735689+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/user/quickstart"}, {"content_hash": "7b3ce2a77b8f517683d4aeb10d97e5f3329fe849406d6c96e917c2c287301f6f", "fetched_at": "2026-08-29T12:41:11.737588+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/uplink/json"}, {"content_hash": "0e52b24f9b408c55475d032fc1586e270150273336a95e515fbe67603462fce2", "fetched_at": "2026-08-29T12:41:11.731840+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/changelog"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:36:06.224162+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "186bffedc769c8285e26ad378b7834cb93a25c2dc4a03defc24a653174e706be", "fetched_at": "2026-08-28T04:03:44.201257+00:00", "kind": "readme", "missing": false, "url": "https://github.com/prkumar/uplink"}, {"content_hash": "f72ac170725044358d925edfade8e60b473a398ad895e791c6b8690d15f8f358", "fetched_at": "2026-08-29T12:41:11.729012+00:00", "kind": "homepage", "missing": false, "url": "https://uplink.prkumar.dev"}, {"content_hash": "23bca0ad8c99775348d5c8979d5c08b83d9edf3527e3b208e9e454d012eb5361", "fetched_at": "2026-08-29T12:41:11.734001+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/user/install"}, {"content_hash": "ce6ea4a8af9388b02681428a798e518e78a9f00451a57a24a132d3e1acb04dcf", "fetched_at": "2026-08-29T12:41:11.735689+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/user/quickstart"}, {"content_hash": "7b3ce2a77b8f517683d4aeb10d97e5f3329fe849406d6c96e917c2c287301f6f", "fetched_at": "2026-08-29T12:41:11.737588+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/uplink/json"}, {"content_hash": "0e52b24f9b408c55475d032fc1586e270150273336a95e515fbe67603462fce2", "fetched_at": "2026-08-29T12:41:11.731840+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/changelog"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:36:06.224162+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "186bffedc769c8285e26ad378b7834cb93a25c2dc4a03defc24a653174e706be", "fetched_at": "2026-08-28T04:03:44.201257+00:00", "kind": "readme", "missing": false, "url": "https://github.com/prkumar/uplink"}, {"content_hash": "f72ac170725044358d925edfade8e60b473a398ad895e791c6b8690d15f8f358", "fetched_at": "2026-08-29T12:41:11.729012+00:00", "kind": "homepage", "missing": false, "url": "https://uplink.prkumar.dev"}, {"content_hash": "23bca0ad8c99775348d5c8979d5c08b83d9edf3527e3b208e9e454d012eb5361", "fetched_at": "2026-08-29T12:41:11.734001+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/user/install"}, {"content_hash": "ce6ea4a8af9388b02681428a798e518e78a9f00451a57a24a132d3e1acb04dcf", "fetched_at": "2026-08-29T12:41:11.735689+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/user/quickstart"}, {"content_hash": "7b3ce2a77b8f517683d4aeb10d97e5f3329fe849406d6c96e917c2c287301f6f", "fetched_at": "2026-08-29T12:41:11.737588+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/uplink/json"}, {"content_hash": "0e52b24f9b408c55475d032fc1586e270150273336a95e515fbe67603462fce2", "fetched_at": "2026-08-29T12:41:11.731840+00:00", "kind": "site_page", "missing": false, "url": "https://uplink.prkumar.dev/changelog"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 26, "longevity": 100, "rhythm": 8}, "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": 3264, "days_push": 445, "days_rel": 445, "gap_med": null, "n_releases_24m": 1}, "score": 34, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}