{"adoption": {"forks": 94, "observed_at": "2026-08-28T04:05:39.322370+00:00", "stars": 1808}, "canonical_url": "https://ross.abutalabs.com/products/enetx-surf", "card": {"archived": false, "artifact_type": "library", "description": "SURF - Advanced Go HTTP client with Chrome/Firefox browser impersonation, HTTP/3 with QUIC fingerprinting, JA3/JA4 TLS emulation, and anti-bot bypass for web automation and scraping.", "domain": ["web-development", "developer-tools", "crawlers", "networking", "privacy"], "enriched": true, "function": ["http-client", "web-scraping", "security", "middleware", "caching"], "health_score": 98, "homepage": "https://enetx.surf", "language": "Go", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["enetx/surf"], "name": "enetx/surf", "platform": ["go", "cross-platform"], "pushed_at": "2026-08-10T09:14:46+00:00", "repo": "enetx/surf", "stars": 1808, "tags": ["browser-impersonation", "tls-fingerprinting", "ja3", "ja4", "http3", "quic", "anti-bot-bypass", "fluent-api", "http2"], "topics": [], "urls": [], "use_cases": ["scrape websites that block bots", "make http requests that look like chrome", "bypass cloudflare with go http client", "send requests with custom ja3 tls fingerprint", "use http3 quic from go", "rotate proxies for web scraping in go", "impersonate firefox headers and tls in go"], "what_it_is": "Surf is an advanced HTTP client library for Go with fluent, chainable API design. It supports browser impersonation (Chrome/Firefox), JA3/JA4 TLS fingerprint emulation, HTTP/3 over QUIC, and middleware for web automation and scraping.", "when_to_avoid": ["you only need simple HTTP requests without fingerprinting", "you are not using Go", "you need a scraping framework with parsing/extraction built in", "impersonating browsers for abusive purposes is not acceptable in your context"], "when_to_choose": ["you need to evade anti-bot detection with accurate browser fingerprints", "you want a fluent, feature-rich alternative to net/http in Go", "you need HTTP/2/HTTP/3 with fine-grained protocol settings", "you need proxy, retry, and middleware support in one client"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/enetx-surf", "repo": "enetx/surf", "role": "main", "score": 83}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:39.322370+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:21:22.419978+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d5acd8ca8567cd3bd531f7e0f5fea4930303b558d2e30f7cefec1e4ad9c04e3d", "fetched_at": "2026-08-28T04:05:39.322370+00:00", "kind": "readme", "missing": false, "url": "https://github.com/enetx/surf"}, {"content_hash": "c2a72cd0186ff3790dda5b26ccbd40f56861963696798bda0a9340e8de092182", "fetched_at": "2026-08-29T11:00:13.632406+00:00", "kind": "homepage", "missing": false, "url": "https://enetx.surf"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:39.322370+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:21:22.419978+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d5acd8ca8567cd3bd531f7e0f5fea4930303b558d2e30f7cefec1e4ad9c04e3d", "fetched_at": "2026-08-28T04:05:39.322370+00:00", "kind": "readme", "missing": false, "url": "https://github.com/enetx/surf"}, {"content_hash": "c2a72cd0186ff3790dda5b26ccbd40f56861963696798bda0a9340e8de092182", "fetched_at": "2026-08-29T11:00:13.632406+00:00", "kind": "homepage", "missing": false, "url": "https://enetx.surf"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:21:22.419978+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d5acd8ca8567cd3bd531f7e0f5fea4930303b558d2e30f7cefec1e4ad9c04e3d", "fetched_at": "2026-08-28T04:05:39.322370+00:00", "kind": "readme", "missing": false, "url": "https://github.com/enetx/surf"}, {"content_hash": "c2a72cd0186ff3790dda5b26ccbd40f56861963696798bda0a9340e8de092182", "fetched_at": "2026-08-29T11:00:13.632406+00:00", "kind": "homepage", "missing": false, "url": "https://enetx.surf"}], "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:39.322370+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:39.322370+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:39.322370+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:21:22.419978+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d5acd8ca8567cd3bd531f7e0f5fea4930303b558d2e30f7cefec1e4ad9c04e3d", "fetched_at": "2026-08-28T04:05:39.322370+00:00", "kind": "readme", "missing": false, "url": "https://github.com/enetx/surf"}, {"content_hash": "c2a72cd0186ff3790dda5b26ccbd40f56861963696798bda0a9340e8de092182", "fetched_at": "2026-08-29T11:00:13.632406+00:00", "kind": "homepage", "missing": false, "url": "https://enetx.surf"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:39.322370+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:39.322370+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:21:22.419978+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d5acd8ca8567cd3bd531f7e0f5fea4930303b558d2e30f7cefec1e4ad9c04e3d", "fetched_at": "2026-08-28T04:05:39.322370+00:00", "kind": "readme", "missing": false, "url": "https://github.com/enetx/surf"}, {"content_hash": "c2a72cd0186ff3790dda5b26ccbd40f56861963696798bda0a9340e8de092182", "fetched_at": "2026-08-29T11:00:13.632406+00:00", "kind": "homepage", "missing": false, "url": "https://enetx.surf"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:39.322370+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:39.322370+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:39.322370+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:21:22.419978+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d5acd8ca8567cd3bd531f7e0f5fea4930303b558d2e30f7cefec1e4ad9c04e3d", "fetched_at": "2026-08-28T04:05:39.322370+00:00", "kind": "readme", "missing": false, "url": "https://github.com/enetx/surf"}, {"content_hash": "c2a72cd0186ff3790dda5b26ccbd40f56861963696798bda0a9340e8de092182", "fetched_at": "2026-08-29T11:00:13.632406+00:00", "kind": "homepage", "missing": false, "url": "https://enetx.surf"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:39.322370+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:39.322370+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:21:22.419978+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d5acd8ca8567cd3bd531f7e0f5fea4930303b558d2e30f7cefec1e4ad9c04e3d", "fetched_at": "2026-08-28T04:05:39.322370+00:00", "kind": "readme", "missing": false, "url": "https://github.com/enetx/surf"}, {"content_hash": "c2a72cd0186ff3790dda5b26ccbd40f56861963696798bda0a9340e8de092182", "fetched_at": "2026-08-29T11:00:13.632406+00:00", "kind": "homepage", "missing": false, "url": "https://enetx.surf"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:21:22.419978+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d5acd8ca8567cd3bd531f7e0f5fea4930303b558d2e30f7cefec1e4ad9c04e3d", "fetched_at": "2026-08-28T04:05:39.322370+00:00", "kind": "readme", "missing": false, "url": "https://github.com/enetx/surf"}, {"content_hash": "c2a72cd0186ff3790dda5b26ccbd40f56861963696798bda0a9340e8de092182", "fetched_at": "2026-08-29T11:00:13.632406+00:00", "kind": "homepage", "missing": false, "url": "https://enetx.surf"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:21:22.419978+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d5acd8ca8567cd3bd531f7e0f5fea4930303b558d2e30f7cefec1e4ad9c04e3d", "fetched_at": "2026-08-28T04:05:39.322370+00:00", "kind": "readme", "missing": false, "url": "https://github.com/enetx/surf"}, {"content_hash": "c2a72cd0186ff3790dda5b26ccbd40f56861963696798bda0a9340e8de092182", "fetched_at": "2026-08-29T11:00:13.632406+00:00", "kind": "homepage", "missing": false, "url": "https://enetx.surf"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:21:22.419978+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d5acd8ca8567cd3bd531f7e0f5fea4930303b558d2e30f7cefec1e4ad9c04e3d", "fetched_at": "2026-08-28T04:05:39.322370+00:00", "kind": "readme", "missing": false, "url": "https://github.com/enetx/surf"}, {"content_hash": "c2a72cd0186ff3790dda5b26ccbd40f56861963696798bda0a9340e8de092182", "fetched_at": "2026-08-29T11:00:13.632406+00:00", "kind": "homepage", "missing": false, "url": "https://enetx.surf"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 97, "longevity": 26, "rhythm": 97}, "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": 368, "days_push": 23, "days_rel": 23, "gap_med": 1, "n_releases_24m": 40}, "score": 83, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}