{"adoption": {"forks": 119, "observed_at": "2026-08-28T04:05:01.720573+00:00", "stars": 1547}, "canonical_url": "https://ross.abutalabs.com/products/zoro", "card": {"archived": false, "artifact_type": "cli-tool", "description": "zoro can help you expose local server to external network. Support both TCP/UDP, of course support HTTP.  Zero-Configuration.", "domain": ["networking", "developer-tools", "self-hosted"], "enriched": true, "function": ["proxy", "networking", "http-server", "websocket"], "health_score": 72, "homepage": "https://www.txthinking.com", "language": "Go", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["txthinking/zoro"], "name": "txthinking/zoro", "platform": ["windows", "cross-platform", "cli", "go"], "pushed_at": "2026-03-18T22:54:10+00:00", "repo": "txthinking/zoro", "stars": 1547, "tags": ["tunnel", "nat-traversal", "reverse-proxy", "tcp-udp", "zero-configuration", "ngrok-alternative", "command-line", "linux", "macos"], "topics": ["expose", "tunnel", "proxy", "firewall", "tcp", "udp", "nat", "zero-configuration"], "urls": [], "use_cases": ["expose local web server to the internet", "share local SSH server through a remote machine", "tunnel a local DNS server over UDP", "serve a local dev server on a public HTTPS subdomain", "bypass NAT to access home services remotely", "self-hosted ngrok alternative"], "what_it_is": "zoro is a Go CLI tool that exposes local TCP/UDP servers to the external network through a remote relay server, with zero-configuration setup. It also supports exposing local HTTP servers via HTTPS subdomains using wildcard certificates.", "when_to_avoid": ["you need a managed service with dashboards and auth tokens", "you need WebSocket-only or HTTP/2-specific tunneling features", "you want GUI-based tunnel management", "you need built-in load balancing across multiple clients"], "when_to_choose": ["you need both TCP and UDP tunneling", "you want a simple self-hosted tunnel with no config files", "you need HTTPS subdomain exposure for local HTTP services", "you prefer a single lightweight Go binary"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/zoro", "repo": "txthinking/zoro", "role": "main", "score": 55}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.720573+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:30:30.932700+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "86e3afef019b49f7fc9a9793e47e64a7ec72d9da4e4a3a1ddc6ae624f1a77a09", "fetched_at": "2026-08-28T04:05:01.720573+00:00", "kind": "readme", "missing": false, "url": "https://github.com/txthinking/zoro"}, {"content_hash": "49df0c9c0fac2bb9b63081147689ac8231400dcae10e5ce8cae8cb527682d534", "fetched_at": "2026-08-29T11:31:24.351806+00:00", "kind": "homepage", "missing": false, "url": "https://www.txthinking.com"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.720573+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:30:30.932700+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "86e3afef019b49f7fc9a9793e47e64a7ec72d9da4e4a3a1ddc6ae624f1a77a09", "fetched_at": "2026-08-28T04:05:01.720573+00:00", "kind": "readme", "missing": false, "url": "https://github.com/txthinking/zoro"}, {"content_hash": "49df0c9c0fac2bb9b63081147689ac8231400dcae10e5ce8cae8cb527682d534", "fetched_at": "2026-08-29T11:31:24.351806+00:00", "kind": "homepage", "missing": false, "url": "https://www.txthinking.com"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:30:30.932700+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "86e3afef019b49f7fc9a9793e47e64a7ec72d9da4e4a3a1ddc6ae624f1a77a09", "fetched_at": "2026-08-28T04:05:01.720573+00:00", "kind": "readme", "missing": false, "url": "https://github.com/txthinking/zoro"}, {"content_hash": "49df0c9c0fac2bb9b63081147689ac8231400dcae10e5ce8cae8cb527682d534", "fetched_at": "2026-08-29T11:31:24.351806+00:00", "kind": "homepage", "missing": false, "url": "https://www.txthinking.com"}], "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:01.720573+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.720573+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.720573+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:30:30.932700+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "86e3afef019b49f7fc9a9793e47e64a7ec72d9da4e4a3a1ddc6ae624f1a77a09", "fetched_at": "2026-08-28T04:05:01.720573+00:00", "kind": "readme", "missing": false, "url": "https://github.com/txthinking/zoro"}, {"content_hash": "49df0c9c0fac2bb9b63081147689ac8231400dcae10e5ce8cae8cb527682d534", "fetched_at": "2026-08-29T11:31:24.351806+00:00", "kind": "homepage", "missing": false, "url": "https://www.txthinking.com"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.720573+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.720573+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:30:30.932700+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "86e3afef019b49f7fc9a9793e47e64a7ec72d9da4e4a3a1ddc6ae624f1a77a09", "fetched_at": "2026-08-28T04:05:01.720573+00:00", "kind": "readme", "missing": false, "url": "https://github.com/txthinking/zoro"}, {"content_hash": "49df0c9c0fac2bb9b63081147689ac8231400dcae10e5ce8cae8cb527682d534", "fetched_at": "2026-08-29T11:31:24.351806+00:00", "kind": "homepage", "missing": false, "url": "https://www.txthinking.com"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.720573+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.720573+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.720573+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:30:30.932700+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "86e3afef019b49f7fc9a9793e47e64a7ec72d9da4e4a3a1ddc6ae624f1a77a09", "fetched_at": "2026-08-28T04:05:01.720573+00:00", "kind": "readme", "missing": false, "url": "https://github.com/txthinking/zoro"}, {"content_hash": "49df0c9c0fac2bb9b63081147689ac8231400dcae10e5ce8cae8cb527682d534", "fetched_at": "2026-08-29T11:31:24.351806+00:00", "kind": "homepage", "missing": false, "url": "https://www.txthinking.com"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.720573+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.720573+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:30:30.932700+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "86e3afef019b49f7fc9a9793e47e64a7ec72d9da4e4a3a1ddc6ae624f1a77a09", "fetched_at": "2026-08-28T04:05:01.720573+00:00", "kind": "readme", "missing": false, "url": "https://github.com/txthinking/zoro"}, {"content_hash": "49df0c9c0fac2bb9b63081147689ac8231400dcae10e5ce8cae8cb527682d534", "fetched_at": "2026-08-29T11:31:24.351806+00:00", "kind": "homepage", "missing": false, "url": "https://www.txthinking.com"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:30:30.932700+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "86e3afef019b49f7fc9a9793e47e64a7ec72d9da4e4a3a1ddc6ae624f1a77a09", "fetched_at": "2026-08-28T04:05:01.720573+00:00", "kind": "readme", "missing": false, "url": "https://github.com/txthinking/zoro"}, {"content_hash": "49df0c9c0fac2bb9b63081147689ac8231400dcae10e5ce8cae8cb527682d534", "fetched_at": "2026-08-29T11:31:24.351806+00:00", "kind": "homepage", "missing": false, "url": "https://www.txthinking.com"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:30:30.932700+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "86e3afef019b49f7fc9a9793e47e64a7ec72d9da4e4a3a1ddc6ae624f1a77a09", "fetched_at": "2026-08-28T04:05:01.720573+00:00", "kind": "readme", "missing": false, "url": "https://github.com/txthinking/zoro"}, {"content_hash": "49df0c9c0fac2bb9b63081147689ac8231400dcae10e5ce8cae8cb527682d534", "fetched_at": "2026-08-29T11:31:24.351806+00:00", "kind": "homepage", "missing": false, "url": "https://www.txthinking.com"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:30:30.932700+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "86e3afef019b49f7fc9a9793e47e64a7ec72d9da4e4a3a1ddc6ae624f1a77a09", "fetched_at": "2026-08-28T04:05:01.720573+00:00", "kind": "readme", "missing": false, "url": "https://github.com/txthinking/zoro"}, {"content_hash": "49df0c9c0fac2bb9b63081147689ac8231400dcae10e5ce8cae8cb527682d534", "fetched_at": "2026-08-29T11:31:24.351806+00:00", "kind": "homepage", "missing": false, "url": "https://www.txthinking.com"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 72, "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": 2687, "days_push": 168, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 55, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}