{"adoption": {"forks": 292, "observed_at": "2026-08-28T04:07:10.010134+00:00", "stars": 2681}, "canonical_url": "https://ross.abutalabs.com/products/shadow-tls", "card": {"archived": false, "artifact_type": "service", "description": "A proxy to expose real tls handshake to the firewall", "domain": ["privacy", "censorship-circumvention", "networking", "security"], "enriched": true, "function": ["proxy", "security", "networking"], "health_score": 35, "homepage": "https://www.ihcblog.com/a-better-tls-obfs-proxy/", "language": "Rust", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["ihciah/shadow-tls"], "name": "ihciah/shadow-tls", "platform": ["self-hosted", "cli"], "pushed_at": "2025-04-25T16:27:14+00:00", "repo": "ihciah/shadow-tls", "stars": 2681, "tags": ["tls-obfuscation", "anti-censorship", "shadowsocks-companion", "trojan-alternative", "rust", "io-uring", "linux", "macos", "docker"], "topics": ["proxy", "tls"], "urls": [], "use_cases": ["hide proxy traffic behind a real TLS handshake with a trusted certificate", "bypass DPI and active probing of proxy servers", "use someone else's valid TLS certificate without signing your own", "pair with shadowsocks to build a censorship-resistant tunnel", "deploy a trojan-like proxy without managing certificates"], "what_it_is": "ShadowTLS is a TLS camouflage proxy written in Rust that relays a real TLS handshake with a valid certificate of your choice to the firewall, then switches to relaying encrypted proxy traffic. It is deployed on both sides of a firewall and is designed to be paired with an encryption proxy such as Shadowsocks, which it does not include itself.", "when_to_avoid": ["you need Windows support, which is not available due to the monoio runtime", "you want an all-in-one proxy with built-in encryption and request encapsulation", "you need a simple setup without deploying components on both sides of the firewall"], "when_to_choose": ["you need TLS-level obfuscation that survives active probing and shows a real valid certificate", "you already run an encrypted proxy like shadowsocks and want to wrap it in TLS camouflage", "you deploy on Linux or macOS servers and clients with Docker or prebuilt binaries"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/shadow-tls", "repo": "ihciah/shadow-tls", "role": "main", "score": 31}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.010134+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:17:55.546215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5b74cd649172497849428a2aa3f97ee38aa23b43583fa148d4ec077c96415b0d", "fetched_at": "2026-08-28T04:07:10.010134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ihciah/shadow-tls"}, {"content_hash": "2c08b9809ec8d80137eed0ac955f0e5255908ac5ebc70ec05a24cc3f2ae4bb9a", "fetched_at": "2026-08-29T10:00:10.477178+00:00", "kind": "homepage", "missing": false, "url": "https://www.ihcblog.com/a-better-tls-obfs-proxy/"}, {"content_hash": "ec0d6790c26ef60058a5d0796f021615a9a79330a11e1147eaa6e99735ede66a", "fetched_at": "2026-08-29T10:00:10.487184+00:00", "kind": "site_page", "missing": false, "url": "https://www.ihcblog.com/about"}, {"content_hash": "2ee4887342c0c84465bc2a98152677479177ae37cb7267657062e3ad48f96448", "fetched_at": "2026-08-29T10:00:10.488987+00:00", "kind": "registry_crates", "missing": false, "url": "https://crates.io/api/v1/crates/shadow-tls"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.010134+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:17:55.546215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5b74cd649172497849428a2aa3f97ee38aa23b43583fa148d4ec077c96415b0d", "fetched_at": "2026-08-28T04:07:10.010134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ihciah/shadow-tls"}, {"content_hash": "2c08b9809ec8d80137eed0ac955f0e5255908ac5ebc70ec05a24cc3f2ae4bb9a", "fetched_at": "2026-08-29T10:00:10.477178+00:00", "kind": "homepage", "missing": false, "url": "https://www.ihcblog.com/a-better-tls-obfs-proxy/"}, {"content_hash": "ec0d6790c26ef60058a5d0796f021615a9a79330a11e1147eaa6e99735ede66a", "fetched_at": "2026-08-29T10:00:10.487184+00:00", "kind": "site_page", "missing": false, "url": "https://www.ihcblog.com/about"}, {"content_hash": "2ee4887342c0c84465bc2a98152677479177ae37cb7267657062e3ad48f96448", "fetched_at": "2026-08-29T10:00:10.488987+00:00", "kind": "registry_crates", "missing": false, "url": "https://crates.io/api/v1/crates/shadow-tls"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:17:55.546215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5b74cd649172497849428a2aa3f97ee38aa23b43583fa148d4ec077c96415b0d", "fetched_at": "2026-08-28T04:07:10.010134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ihciah/shadow-tls"}, {"content_hash": "2c08b9809ec8d80137eed0ac955f0e5255908ac5ebc70ec05a24cc3f2ae4bb9a", "fetched_at": "2026-08-29T10:00:10.477178+00:00", "kind": "homepage", "missing": false, "url": "https://www.ihcblog.com/a-better-tls-obfs-proxy/"}, {"content_hash": "ec0d6790c26ef60058a5d0796f021615a9a79330a11e1147eaa6e99735ede66a", "fetched_at": "2026-08-29T10:00:10.487184+00:00", "kind": "site_page", "missing": false, "url": "https://www.ihcblog.com/about"}, {"content_hash": "2ee4887342c0c84465bc2a98152677479177ae37cb7267657062e3ad48f96448", "fetched_at": "2026-08-29T10:00:10.488987+00:00", "kind": "registry_crates", "missing": false, "url": "https://crates.io/api/v1/crates/shadow-tls"}], "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:10.010134+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.010134+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.010134+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:17:55.546215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5b74cd649172497849428a2aa3f97ee38aa23b43583fa148d4ec077c96415b0d", "fetched_at": "2026-08-28T04:07:10.010134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ihciah/shadow-tls"}, {"content_hash": "2c08b9809ec8d80137eed0ac955f0e5255908ac5ebc70ec05a24cc3f2ae4bb9a", "fetched_at": "2026-08-29T10:00:10.477178+00:00", "kind": "homepage", "missing": false, "url": "https://www.ihcblog.com/a-better-tls-obfs-proxy/"}, {"content_hash": "ec0d6790c26ef60058a5d0796f021615a9a79330a11e1147eaa6e99735ede66a", "fetched_at": "2026-08-29T10:00:10.487184+00:00", "kind": "site_page", "missing": false, "url": "https://www.ihcblog.com/about"}, {"content_hash": "2ee4887342c0c84465bc2a98152677479177ae37cb7267657062e3ad48f96448", "fetched_at": "2026-08-29T10:00:10.488987+00:00", "kind": "registry_crates", "missing": false, "url": "https://crates.io/api/v1/crates/shadow-tls"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.010134+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.010134+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:17:55.546215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5b74cd649172497849428a2aa3f97ee38aa23b43583fa148d4ec077c96415b0d", "fetched_at": "2026-08-28T04:07:10.010134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ihciah/shadow-tls"}, {"content_hash": "2c08b9809ec8d80137eed0ac955f0e5255908ac5ebc70ec05a24cc3f2ae4bb9a", "fetched_at": "2026-08-29T10:00:10.477178+00:00", "kind": "homepage", "missing": false, "url": "https://www.ihcblog.com/a-better-tls-obfs-proxy/"}, {"content_hash": "ec0d6790c26ef60058a5d0796f021615a9a79330a11e1147eaa6e99735ede66a", "fetched_at": "2026-08-29T10:00:10.487184+00:00", "kind": "site_page", "missing": false, "url": "https://www.ihcblog.com/about"}, {"content_hash": "2ee4887342c0c84465bc2a98152677479177ae37cb7267657062e3ad48f96448", "fetched_at": "2026-08-29T10:00:10.488987+00:00", "kind": "registry_crates", "missing": false, "url": "https://crates.io/api/v1/crates/shadow-tls"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.010134+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.010134+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.010134+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:17:55.546215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5b74cd649172497849428a2aa3f97ee38aa23b43583fa148d4ec077c96415b0d", "fetched_at": "2026-08-28T04:07:10.010134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ihciah/shadow-tls"}, {"content_hash": "2c08b9809ec8d80137eed0ac955f0e5255908ac5ebc70ec05a24cc3f2ae4bb9a", "fetched_at": "2026-08-29T10:00:10.477178+00:00", "kind": "homepage", "missing": false, "url": "https://www.ihcblog.com/a-better-tls-obfs-proxy/"}, {"content_hash": "ec0d6790c26ef60058a5d0796f021615a9a79330a11e1147eaa6e99735ede66a", "fetched_at": "2026-08-29T10:00:10.487184+00:00", "kind": "site_page", "missing": false, "url": "https://www.ihcblog.com/about"}, {"content_hash": "2ee4887342c0c84465bc2a98152677479177ae37cb7267657062e3ad48f96448", "fetched_at": "2026-08-29T10:00:10.488987+00:00", "kind": "registry_crates", "missing": false, "url": "https://crates.io/api/v1/crates/shadow-tls"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.010134+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.010134+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:17:55.546215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5b74cd649172497849428a2aa3f97ee38aa23b43583fa148d4ec077c96415b0d", "fetched_at": "2026-08-28T04:07:10.010134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ihciah/shadow-tls"}, {"content_hash": "2c08b9809ec8d80137eed0ac955f0e5255908ac5ebc70ec05a24cc3f2ae4bb9a", "fetched_at": "2026-08-29T10:00:10.477178+00:00", "kind": "homepage", "missing": false, "url": "https://www.ihcblog.com/a-better-tls-obfs-proxy/"}, {"content_hash": "ec0d6790c26ef60058a5d0796f021615a9a79330a11e1147eaa6e99735ede66a", "fetched_at": "2026-08-29T10:00:10.487184+00:00", "kind": "site_page", "missing": false, "url": "https://www.ihcblog.com/about"}, {"content_hash": "2ee4887342c0c84465bc2a98152677479177ae37cb7267657062e3ad48f96448", "fetched_at": "2026-08-29T10:00:10.488987+00:00", "kind": "registry_crates", "missing": false, "url": "https://crates.io/api/v1/crates/shadow-tls"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:17:55.546215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5b74cd649172497849428a2aa3f97ee38aa23b43583fa148d4ec077c96415b0d", "fetched_at": "2026-08-28T04:07:10.010134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ihciah/shadow-tls"}, {"content_hash": "2c08b9809ec8d80137eed0ac955f0e5255908ac5ebc70ec05a24cc3f2ae4bb9a", "fetched_at": "2026-08-29T10:00:10.477178+00:00", "kind": "homepage", "missing": false, "url": "https://www.ihcblog.com/a-better-tls-obfs-proxy/"}, {"content_hash": "ec0d6790c26ef60058a5d0796f021615a9a79330a11e1147eaa6e99735ede66a", "fetched_at": "2026-08-29T10:00:10.487184+00:00", "kind": "site_page", "missing": false, "url": "https://www.ihcblog.com/about"}, {"content_hash": "2ee4887342c0c84465bc2a98152677479177ae37cb7267657062e3ad48f96448", "fetched_at": "2026-08-29T10:00:10.488987+00:00", "kind": "registry_crates", "missing": false, "url": "https://crates.io/api/v1/crates/shadow-tls"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:17:55.546215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5b74cd649172497849428a2aa3f97ee38aa23b43583fa148d4ec077c96415b0d", "fetched_at": "2026-08-28T04:07:10.010134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ihciah/shadow-tls"}, {"content_hash": "2c08b9809ec8d80137eed0ac955f0e5255908ac5ebc70ec05a24cc3f2ae4bb9a", "fetched_at": "2026-08-29T10:00:10.477178+00:00", "kind": "homepage", "missing": false, "url": "https://www.ihcblog.com/a-better-tls-obfs-proxy/"}, {"content_hash": "ec0d6790c26ef60058a5d0796f021615a9a79330a11e1147eaa6e99735ede66a", "fetched_at": "2026-08-29T10:00:10.487184+00:00", "kind": "site_page", "missing": false, "url": "https://www.ihcblog.com/about"}, {"content_hash": "2ee4887342c0c84465bc2a98152677479177ae37cb7267657062e3ad48f96448", "fetched_at": "2026-08-29T10:00:10.488987+00:00", "kind": "registry_crates", "missing": false, "url": "https://crates.io/api/v1/crates/shadow-tls"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:17:55.546215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5b74cd649172497849428a2aa3f97ee38aa23b43583fa148d4ec077c96415b0d", "fetched_at": "2026-08-28T04:07:10.010134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ihciah/shadow-tls"}, {"content_hash": "2c08b9809ec8d80137eed0ac955f0e5255908ac5ebc70ec05a24cc3f2ae4bb9a", "fetched_at": "2026-08-29T10:00:10.477178+00:00", "kind": "homepage", "missing": false, "url": "https://www.ihcblog.com/a-better-tls-obfs-proxy/"}, {"content_hash": "ec0d6790c26ef60058a5d0796f021615a9a79330a11e1147eaa6e99735ede66a", "fetched_at": "2026-08-29T10:00:10.487184+00:00", "kind": "site_page", "missing": false, "url": "https://www.ihcblog.com/about"}, {"content_hash": "2ee4887342c0c84465bc2a98152677479177ae37cb7267657062e3ad48f96448", "fetched_at": "2026-08-29T10:00:10.488987+00:00", "kind": "registry_crates", "missing": false, "url": "https://crates.io/api/v1/crates/shadow-tls"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 18, "longevity": 100, "rhythm": 8}, "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": 1469, "days_push": 495, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 31, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}