{"adoption": {"forks": 7760, "observed_at": "2026-08-28T04:11:57.897371+00:00", "stars": 32885}, "canonical_url": "https://ross.abutalabs.com/products/shadowsocks", "card": {"archived": false, "artifact_type": "application", "description": "Next Generation of ShadowsocksX", "domain": ["privacy", "censorship-circumvention", "networking", "security", "operating-systems"], "enriched": true, "function": ["proxy", "vpn", "privacy", "networking", "security"], "health_score": 29, "homepage": null, "language": "Swift", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "maintenance", "member_repos": ["shadowsocks/shadowsocks-gui", "shadowsocks/shadowsocks-iOS", "shadowsocks/ShadowsocksX-NG"], "name": "Shadowsocks", "platform": [], "pushed_at": "2024-10-29T12:19:30+00:00", "repo": "shadowsocks/ShadowsocksX-NG", "stars": 32885, "tags": ["shadowsocks", "socks5-proxy", "gfw-list", "v2ray-plugin", "kcptun", "aead-ciphers", "pac", "qrcode-profile-sharing", "macos", "desktop"], "topics": ["shadowsocks", "swift", "macos", "shadowsocksx-ng", "v2ray-plugin", "kcptun"], "urls": [], "use_cases": ["bypass internet censorship on macOS with a shadowsocks proxy", "set up a SOCKS5 proxy client on my Mac", "share proxy server profiles via QR code", "use v2ray-plugin or kcptun with shadowsocks", "configure PAC-based proxy rules with GFW List", "route specific apps through a proxy with custom PAC rules"], "what_it_is": "ShadowsocksX-NG is a macOS GUI client for the Shadowsocks proxy protocol, rewritten in Swift with ss-local running as a background Launch Agent. It supports SIP003 plugins (kcptun, simple-obfs, v2ray-plugin), AEAD ciphers, PAC/GFW List updates, and server profile sharing via QR codes or URLs.", "when_to_avoid": ["you need a client for Windows, Linux, iOS, or Android", "you want a headless/CLI-only proxy client", "you need protocols beyond shadowsocks such as WireGuard or OpenVPN", "you require frequent updates - the project is in maintenance mode"], "when_to_choose": ["you need a native macOS shadowsocks client with a GUI", "you want plugin support like v2ray-plugin, kcptun, or simple-obfs", "you need QR code import/export of server profiles", "you want PAC-based system proxy configuration with custom rules"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/repos/shadowsocks/ShadowsocksX-NG", "repo": "shadowsocks/ShadowsocksX-NG", "role": "main", "score": 23}, {"path": "/repos/shadowsocks/shadowsocks-iOS", "repo": "shadowsocks/shadowsocks-iOS", "role": "mirror", "score": 23}, {"path": "/repos/shadowsocks/shadowsocks-gui", "repo": "shadowsocks/shadowsocks-gui", "role": "frontend", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:11:57.897371+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T16:51:54.212002+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16bef69636668e77cfedb42d40047a487e80d200638e1ca265b699c908cbf5ad", "fetched_at": "2026-08-28T04:11:57.897371+00:00", "kind": "readme", "missing": false, "url": "https://github.com/shadowsocks/ShadowsocksX-NG"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:11:57.897371+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T16:51:54.212002+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16bef69636668e77cfedb42d40047a487e80d200638e1ca265b699c908cbf5ad", "fetched_at": "2026-08-28T04:11:57.897371+00:00", "kind": "readme", "missing": false, "url": "https://github.com/shadowsocks/ShadowsocksX-NG"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T16:51:54.212002+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16bef69636668e77cfedb42d40047a487e80d200638e1ca265b699c908cbf5ad", "fetched_at": "2026-08-28T04:11:57.897371+00:00", "kind": "readme", "missing": false, "url": "https://github.com/shadowsocks/ShadowsocksX-NG"}], "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:11:57.897371+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:11:57.897371+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:11:57.897371+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T16:51:54.212002+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16bef69636668e77cfedb42d40047a487e80d200638e1ca265b699c908cbf5ad", "fetched_at": "2026-08-28T04:11:57.897371+00:00", "kind": "readme", "missing": false, "url": "https://github.com/shadowsocks/ShadowsocksX-NG"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:11:57.897371+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:11:57.897371+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T16:51:54.212002+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16bef69636668e77cfedb42d40047a487e80d200638e1ca265b699c908cbf5ad", "fetched_at": "2026-08-28T04:11:57.897371+00:00", "kind": "readme", "missing": false, "url": "https://github.com/shadowsocks/ShadowsocksX-NG"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:11:57.897371+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:11:57.897371+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:11:57.897371+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T16:51:54.212002+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16bef69636668e77cfedb42d40047a487e80d200638e1ca265b699c908cbf5ad", "fetched_at": "2026-08-28T04:11:57.897371+00:00", "kind": "readme", "missing": false, "url": "https://github.com/shadowsocks/ShadowsocksX-NG"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:11:57.897371+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:11:57.897371+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T16:51:54.212002+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16bef69636668e77cfedb42d40047a487e80d200638e1ca265b699c908cbf5ad", "fetched_at": "2026-08-28T04:11:57.897371+00:00", "kind": "readme", "missing": false, "url": "https://github.com/shadowsocks/ShadowsocksX-NG"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T16:51:54.212002+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16bef69636668e77cfedb42d40047a487e80d200638e1ca265b699c908cbf5ad", "fetched_at": "2026-08-28T04:11:57.897371+00:00", "kind": "readme", "missing": false, "url": "https://github.com/shadowsocks/ShadowsocksX-NG"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T16:51:54.212002+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16bef69636668e77cfedb42d40047a487e80d200638e1ca265b699c908cbf5ad", "fetched_at": "2026-08-28T04:11:57.897371+00:00", "kind": "readme", "missing": false, "url": "https://github.com/shadowsocks/ShadowsocksX-NG"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T16:51:54.212002+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16bef69636668e77cfedb42d40047a487e80d200638e1ca265b699c908cbf5ad", "fetched_at": "2026-08-28T04:11:57.897371+00:00", "kind": "readme", "missing": false, "url": "https://github.com/shadowsocks/ShadowsocksX-NG"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "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": 3736, "days_push": 673, "days_rel": 673, "gap_med": null, "n_releases_24m": 1}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}