{"adoption": {"forks": 559, "observed_at": "2026-08-28T04:09:52.585586+00:00", "stars": 6996}, "canonical_url": "https://ross.abutalabs.com/products/wstunnel", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Tunnel all your traffic over Websocket or HTTP2 - Bypass firewalls/DPI - Static binary available ", "domain": ["networking", "security", "privacy", "censorship-circumvention"], "enriched": true, "function": ["proxy", "networking", "websocket", "vpn", "security"], "health_score": 100, "homepage": null, "language": "Rust", "license": "BSD-3-Clause", "license_family": "permissive", "maturity": "active", "member_repos": ["erebe/wstunnel"], "name": "erebe/wstunnel", "platform": ["windows", "cross-platform", "cli"], "pushed_at": "2026-08-25T19:21:22+00:00", "repo": "erebe/wstunnel", "stars": 6996, "tags": ["tunneling", "websocket-tunnel", "firewall-bypass", "dpi-evasion", "socks5-proxy", "wireguard", "http2", "static-binary", "reverse-tunnel", "transparent-proxy", "command-line", "linux", "macos"], "topics": ["reverse-tunnel", "socks5-proxy", "tcp-tunnel", "transparent-proxy", "tunneling", "udp-tunnel", "websocket", "wireguard", "wireguard-tunnel", "http2", "socks", "socks5"], "urls": [], "use_cases": ["bypass firewall or DPI restrictions on a public network", "tunnel traffic over websocket since http is always allowed", "expose a service behind NAT via reverse tunnel", "create a socks5 proxy over a websocket connection", "tunnel wireguard udp traffic over websocket", "route traffic through an http proxy gateway"], "what_it_is": "wstunnel is a Rust CLI tool that tunnels arbitrary TCP, UDP, Unix socket, or stdio traffic over WebSocket, HTTP2, or WebTransport to bypass firewalls, proxies, and DPI. It supports static and dynamic (Socks5, HTTP, transparent) tunneling in both forward and reverse directions, with TLS/mTLS and standalone static binaries.", "when_to_avoid": ["you need a general-purpose VPN with full network-layer encryption like WireGuard alone", "you need a GUI-managed VPN solution for non-technical users", "your network already allows direct connections and you just need a plain VPN"], "when_to_choose": ["you need to tunnel arbitrary TCP/UDP traffic through networks that only allow HTTP/WebSocket", "you want a single static binary with no runtime dependencies", "you need reverse tunneling or dynamic socks5/transparent proxying", "you want TLS/mTLS with certificate auto-reload out of the box"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/wstunnel", "repo": "erebe/wstunnel", "role": "main", "score": 97}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.585586+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:41:05.986510+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ccac248f71ccacbd8691404a9bb86dd3aeaeb9eda13ad6f77f3fce495f4d32b3", "fetched_at": "2026-08-28T04:09:52.585586+00:00", "kind": "readme", "missing": false, "url": "https://github.com/erebe/wstunnel"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.585586+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:41:05.986510+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ccac248f71ccacbd8691404a9bb86dd3aeaeb9eda13ad6f77f3fce495f4d32b3", "fetched_at": "2026-08-28T04:09:52.585586+00:00", "kind": "readme", "missing": false, "url": "https://github.com/erebe/wstunnel"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:41:05.986510+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ccac248f71ccacbd8691404a9bb86dd3aeaeb9eda13ad6f77f3fce495f4d32b3", "fetched_at": "2026-08-28T04:09:52.585586+00:00", "kind": "readme", "missing": false, "url": "https://github.com/erebe/wstunnel"}], "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:09:52.585586+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.585586+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.585586+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:41:05.986510+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ccac248f71ccacbd8691404a9bb86dd3aeaeb9eda13ad6f77f3fce495f4d32b3", "fetched_at": "2026-08-28T04:09:52.585586+00:00", "kind": "readme", "missing": false, "url": "https://github.com/erebe/wstunnel"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.585586+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.585586+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:41:05.986510+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ccac248f71ccacbd8691404a9bb86dd3aeaeb9eda13ad6f77f3fce495f4d32b3", "fetched_at": "2026-08-28T04:09:52.585586+00:00", "kind": "readme", "missing": false, "url": "https://github.com/erebe/wstunnel"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.585586+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.585586+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.585586+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:41:05.986510+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ccac248f71ccacbd8691404a9bb86dd3aeaeb9eda13ad6f77f3fce495f4d32b3", "fetched_at": "2026-08-28T04:09:52.585586+00:00", "kind": "readme", "missing": false, "url": "https://github.com/erebe/wstunnel"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.585586+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.585586+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:41:05.986510+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ccac248f71ccacbd8691404a9bb86dd3aeaeb9eda13ad6f77f3fce495f4d32b3", "fetched_at": "2026-08-28T04:09:52.585586+00:00", "kind": "readme", "missing": false, "url": "https://github.com/erebe/wstunnel"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:41:05.986510+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ccac248f71ccacbd8691404a9bb86dd3aeaeb9eda13ad6f77f3fce495f4d32b3", "fetched_at": "2026-08-28T04:09:52.585586+00:00", "kind": "readme", "missing": false, "url": "https://github.com/erebe/wstunnel"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:41:05.986510+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ccac248f71ccacbd8691404a9bb86dd3aeaeb9eda13ad6f77f3fce495f4d32b3", "fetched_at": "2026-08-28T04:09:52.585586+00:00", "kind": "readme", "missing": false, "url": "https://github.com/erebe/wstunnel"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:41:05.986510+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ccac248f71ccacbd8691404a9bb86dd3aeaeb9eda13ad6f77f3fce495f4d32b3", "fetched_at": "2026-08-28T04:09:52.585586+00:00", "kind": "readme", "missing": false, "url": "https://github.com/erebe/wstunnel"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 93}, "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": 3763, "days_push": 8, "days_rel": 46, "gap_med": 18.5, "n_releases_24m": 25}, "score": 97, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}