{"adoption": {"forks": 121, "observed_at": "2026-08-28T04:05:32.079411+00:00", "stars": 1756}, "canonical_url": "https://ross.abutalabs.com/products/caddy-l4", "card": {"archived": false, "artifact_type": "plugin", "description": "Layer 4 (TCP/UDP) app for Caddy", "domain": ["networking", "backend", "self-hosted"], "enriched": true, "function": ["proxy", "routing", "middleware", "networking", "security"], "health_score": 97, "homepage": null, "language": "Go", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["mholt/caddy-l4"], "name": "mholt/caddy-l4", "platform": ["windows", "cross-platform", "go"], "pushed_at": "2026-08-01T18:43:10+00:00", "repo": "mholt/caddy-l4", "stars": 1756, "tags": ["caddy", "layer4", "tcp", "udp", "tls-termination", "stream-proxy", "protocol-detection", "sni-routing", "devops", "linux", "macos"], "topics": [], "urls": [], "use_cases": ["proxy raw TCP traffic to a backend server", "route connections by TLS SNI or HTTP Host without terminating TLS", "terminate TLS then forward HTTP to one port and other protocols elsewhere", "block connections from specific IP ranges", "echo server for testing TCP/UDP clients", "multiplex SSH, HTTP, and HTTPS on a single port", "throttle bandwidth to simulate slow clients"], "what_it_is": "A layer 4 (TCP/UDP) app for Caddy that enables composable handling of raw connections based on connection properties or stream content. It supports routing, TLS termination, proxying, echoing, blocking, and throttling via Caddy-style matchers and handlers.", "when_to_avoid": ["you need a battle-tested production L4 load balancer with zero breaking changes", "you need UDP-specific features beyond basic proxying", "you don't use Caddy and want a standalone proxy"], "when_to_choose": ["you already use Caddy and need TCP/UDP routing alongside HTTP", "you need protocol sniffing and SNI-based routing on raw sockets", "you want declarative JSON or Caddyfile config for layer 4 proxying"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/caddy-l4", "repo": "mholt/caddy-l4", "role": "main", "score": 91}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.079411+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:27:52.552138+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "254cfbb5ab83022e15cad31abe0eb6aa63e0e66dee87f1de011d18ba95bdcc15", "fetched_at": "2026-08-28T04:05:32.079411+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mholt/caddy-l4"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.079411+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:27:52.552138+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "254cfbb5ab83022e15cad31abe0eb6aa63e0e66dee87f1de011d18ba95bdcc15", "fetched_at": "2026-08-28T04:05:32.079411+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mholt/caddy-l4"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:27:52.552138+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "254cfbb5ab83022e15cad31abe0eb6aa63e0e66dee87f1de011d18ba95bdcc15", "fetched_at": "2026-08-28T04:05:32.079411+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mholt/caddy-l4"}], "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:32.079411+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.079411+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.079411+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:27:52.552138+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "254cfbb5ab83022e15cad31abe0eb6aa63e0e66dee87f1de011d18ba95bdcc15", "fetched_at": "2026-08-28T04:05:32.079411+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mholt/caddy-l4"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.079411+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.079411+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:27:52.552138+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "254cfbb5ab83022e15cad31abe0eb6aa63e0e66dee87f1de011d18ba95bdcc15", "fetched_at": "2026-08-28T04:05:32.079411+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mholt/caddy-l4"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.079411+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.079411+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.079411+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:27:52.552138+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "254cfbb5ab83022e15cad31abe0eb6aa63e0e66dee87f1de011d18ba95bdcc15", "fetched_at": "2026-08-28T04:05:32.079411+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mholt/caddy-l4"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.079411+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.079411+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:27:52.552138+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "254cfbb5ab83022e15cad31abe0eb6aa63e0e66dee87f1de011d18ba95bdcc15", "fetched_at": "2026-08-28T04:05:32.079411+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mholt/caddy-l4"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:27:52.552138+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "254cfbb5ab83022e15cad31abe0eb6aa63e0e66dee87f1de011d18ba95bdcc15", "fetched_at": "2026-08-28T04:05:32.079411+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mholt/caddy-l4"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:27:52.552138+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "254cfbb5ab83022e15cad31abe0eb6aa63e0e66dee87f1de011d18ba95bdcc15", "fetched_at": "2026-08-28T04:05:32.079411+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mholt/caddy-l4"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:27:52.552138+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "254cfbb5ab83022e15cad31abe0eb6aa63e0e66dee87f1de011d18ba95bdcc15", "fetched_at": "2026-08-28T04:05:32.079411+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mholt/caddy-l4"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 95, "longevity": 100, "rhythm": 81}, "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": 2305, "days_push": 32, "days_rel": 48, "gap_med": 63.0, "n_releases_24m": 3}, "score": 91, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}