{"adoption": {"forks": 213, "observed_at": "2026-08-28T04:07:04.456723+00:00", "stars": 2612}, "canonical_url": "https://ross.abutalabs.com/products/wormholy", "card": {"archived": false, "artifact_type": "library", "description": "iOS network debugging, like a wizard 🧙‍♂️", "domain": ["mobile-development", "developer-tools", "networking"], "enriched": true, "function": ["logging", "monitoring", "developer-tools"], "health_score": 88, "homepage": null, "language": "Swift", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["pmusolino/Wormholy"], "name": "pmusolino/Wormholy", "platform": [], "pushed_at": "2026-05-23T17:17:13+00:00", "repo": "pmusolino/Wormholy", "stars": 2612, "tags": ["network-debugging", "urlsession", "http-inspector", "shake-gesture", "postman-export", "curl-export", "debug-only", "debugging", "ios", "swift", "mobile"], "topics": ["network", "debugger", "ios", "nsurlsession", "alamofire", "logger", "logging", "https", "charles"], "urls": [], "use_cases": ["debug http requests in my ios app without charles proxy", "inspect urlsession traffic on device by shaking the phone", "view response headers and bodies for alamofire requests", "export api requests as a postman collection", "share a curl command for a failing request", "filter network logs by status code while debugging", "blacklist analytics hosts from network logging"], "what_it_is": "Wormholy is an iOS library that records all app network traffic made through NSURLSession (including Alamofire and AFNetworking) and lets developers inspect requests, responses, and headers via a shake gesture, with no code or imports required. It supports filtering, host blacklisting, and exporting requests as Postman collections or cURL commands, and is intended for debug builds only.", "when_to_avoid": ["you need network debugging for Android or non-Apple platforms", "you want traffic monitoring in production builds (Wormholy is debug-only by recommendation)", "you need a desktop cross-platform proxy like Charles or Proxyman", "you require persistent long-term network analytics rather than ad-hoc debugging"], "when_to_choose": ["you need on-device network debugging for iOS without running a desktop proxy", "you want zero-code integration that works with URLSession, Alamofire, or AFNetworking", "you need to export captured requests to Postman or cURL", "you want HTTPS inspection without dealing with SSL certificates"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/wormholy", "repo": "pmusolino/Wormholy", "role": "main", "score": 79}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:04.456723+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:20:39.477603+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "089cae2f0a58eee06abd94d04538d81ed4ca7a19e8e5b8c430733a0b15c2a453", "fetched_at": "2026-08-28T04:07:04.456723+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pmusolino/Wormholy"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:04.456723+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:20:39.477603+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "089cae2f0a58eee06abd94d04538d81ed4ca7a19e8e5b8c430733a0b15c2a453", "fetched_at": "2026-08-28T04:07:04.456723+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pmusolino/Wormholy"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:20:39.477603+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "089cae2f0a58eee06abd94d04538d81ed4ca7a19e8e5b8c430733a0b15c2a453", "fetched_at": "2026-08-28T04:07:04.456723+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pmusolino/Wormholy"}], "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:07:04.456723+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:04.456723+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:04.456723+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:20:39.477603+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "089cae2f0a58eee06abd94d04538d81ed4ca7a19e8e5b8c430733a0b15c2a453", "fetched_at": "2026-08-28T04:07:04.456723+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pmusolino/Wormholy"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:04.456723+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:04.456723+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:20:39.477603+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "089cae2f0a58eee06abd94d04538d81ed4ca7a19e8e5b8c430733a0b15c2a453", "fetched_at": "2026-08-28T04:07:04.456723+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pmusolino/Wormholy"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:04.456723+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:04.456723+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:04.456723+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:20:39.477603+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "089cae2f0a58eee06abd94d04538d81ed4ca7a19e8e5b8c430733a0b15c2a453", "fetched_at": "2026-08-28T04:07:04.456723+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pmusolino/Wormholy"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:04.456723+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:04.456723+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:20:39.477603+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "089cae2f0a58eee06abd94d04538d81ed4ca7a19e8e5b8c430733a0b15c2a453", "fetched_at": "2026-08-28T04:07:04.456723+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pmusolino/Wormholy"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:20:39.477603+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "089cae2f0a58eee06abd94d04538d81ed4ca7a19e8e5b8c430733a0b15c2a453", "fetched_at": "2026-08-28T04:07:04.456723+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pmusolino/Wormholy"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:20:39.477603+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "089cae2f0a58eee06abd94d04538d81ed4ca7a19e8e5b8c430733a0b15c2a453", "fetched_at": "2026-08-28T04:07:04.456723+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pmusolino/Wormholy"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:20:39.477603+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "089cae2f0a58eee06abd94d04538d81ed4ca7a19e8e5b8c430733a0b15c2a453", "fetched_at": "2026-08-28T04:07:04.456723+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pmusolino/Wormholy"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 83, "longevity": 100, "rhythm": 63}, "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": 3068, "days_push": 102, "days_rel": 165, "gap_med": 78.5, "n_releases_24m": 7}, "score": 79, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}