{"adoption": {"forks": 375, "observed_at": "2026-08-28T04:05:10.770884+00:00", "stars": 1609}, "canonical_url": "https://ross.abutalabs.com/products/stunserver", "card": {"archived": false, "artifact_type": "service", "description": "Version 1.2. This is the source code to STUNTMAN - an open source STUN server and client code by john selbie.  Compliant with the latest RFCs including 5389, 5769, and 5780. Also includes backwards compatibility for RFC 3489. Compiles on Linux, MacOS, BSD, Solaris, and Win32 with Cygwin. Windows binaries avaialble from www.stunprotocol.org.", "domain": ["networking", "web-development", "developer-tools", "self-hosted"], "enriched": true, "function": ["networking", "http-server", "cli", "developer-tools"], "health_score": 69, "homepage": "http://www.stunprotocol.org", "language": "C++", "license": "Apache-2.0", "license_family": "permissive", "maturity": "stable", "member_repos": ["jselbie/stunserver"], "name": "jselbie/stunserver", "platform": ["windows", "bsd", "cross-platform", "cli", "self-hosted"], "pushed_at": "2026-05-12T01:29:29+00:00", "repo": "jselbie/stunserver", "stars": 1609, "tags": ["stun", "nat-traversal", "webrtc", "rfc5389", "voip", "c-plus-plus", "linux", "macos"], "topics": [], "urls": [], "use_cases": ["self-host a STUN server for WebRTC applications", "discover a client's public IP address and port behind NAT", "run NAT behavior and filtering detection tests", "test STUN clients against a local server", "embed STUN client functionality in a C++ application", "deploy a STUN service on Amazon EC2"], "what_it_is": "STUNTMAN is an open source STUN server and client implementation in C++, compliant with RFCs 5389, 5769, and 5780 with backwards compatibility for RFC 3489. It supports UDP and TCP over IPv4 and IPv6, runs in basic or full mode, and includes a client library for embedding STUN in applications.", "when_to_avoid": ["you need STUN over TLS, which is not implemented", "you need built-in authentication with user credential lookup out of the box", "you need a TURN relay server rather than just STUN", "you prefer a managed cloud STUN service instead of self-hosting"], "when_to_choose": ["you need a self-hosted, RFC-compliant STUN server for WebRTC or VoIP", "you need both UDP and TCP support with IPv4 and IPv6", "you want a C++ STUN client library to embed in your own app", "you need NAT behavior detection in full mode with two IP interfaces"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/stunserver", "repo": "jselbie/stunserver", "role": "main", "score": 69}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.770884+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:51:17.346498+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53b5043f4174b2ef9d1fea33a0eb537f4fa03b4ae59e07ebd86fc0457fa1cf08", "fetched_at": "2026-08-28T04:05:10.770884+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jselbie/stunserver"}, {"content_hash": "c7a97f04dbc216646d8c88bed2ed0f7f0f5de6495663a30b042c82221e8e89fb", "fetched_at": "2026-08-29T11:23:23.793118+00:00", "kind": "homepage", "missing": false, "url": "http://www.stunprotocol.org"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.770884+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:51:17.346498+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53b5043f4174b2ef9d1fea33a0eb537f4fa03b4ae59e07ebd86fc0457fa1cf08", "fetched_at": "2026-08-28T04:05:10.770884+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jselbie/stunserver"}, {"content_hash": "c7a97f04dbc216646d8c88bed2ed0f7f0f5de6495663a30b042c82221e8e89fb", "fetched_at": "2026-08-29T11:23:23.793118+00:00", "kind": "homepage", "missing": false, "url": "http://www.stunprotocol.org"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:51:17.346498+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53b5043f4174b2ef9d1fea33a0eb537f4fa03b4ae59e07ebd86fc0457fa1cf08", "fetched_at": "2026-08-28T04:05:10.770884+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jselbie/stunserver"}, {"content_hash": "c7a97f04dbc216646d8c88bed2ed0f7f0f5de6495663a30b042c82221e8e89fb", "fetched_at": "2026-08-29T11:23:23.793118+00:00", "kind": "homepage", "missing": false, "url": "http://www.stunprotocol.org"}], "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:10.770884+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.770884+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.770884+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:51:17.346498+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53b5043f4174b2ef9d1fea33a0eb537f4fa03b4ae59e07ebd86fc0457fa1cf08", "fetched_at": "2026-08-28T04:05:10.770884+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jselbie/stunserver"}, {"content_hash": "c7a97f04dbc216646d8c88bed2ed0f7f0f5de6495663a30b042c82221e8e89fb", "fetched_at": "2026-08-29T11:23:23.793118+00:00", "kind": "homepage", "missing": false, "url": "http://www.stunprotocol.org"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.770884+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.770884+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:51:17.346498+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53b5043f4174b2ef9d1fea33a0eb537f4fa03b4ae59e07ebd86fc0457fa1cf08", "fetched_at": "2026-08-28T04:05:10.770884+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jselbie/stunserver"}, {"content_hash": "c7a97f04dbc216646d8c88bed2ed0f7f0f5de6495663a30b042c82221e8e89fb", "fetched_at": "2026-08-29T11:23:23.793118+00:00", "kind": "homepage", "missing": false, "url": "http://www.stunprotocol.org"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.770884+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.770884+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.770884+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:51:17.346498+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53b5043f4174b2ef9d1fea33a0eb537f4fa03b4ae59e07ebd86fc0457fa1cf08", "fetched_at": "2026-08-28T04:05:10.770884+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jselbie/stunserver"}, {"content_hash": "c7a97f04dbc216646d8c88bed2ed0f7f0f5de6495663a30b042c82221e8e89fb", "fetched_at": "2026-08-29T11:23:23.793118+00:00", "kind": "homepage", "missing": false, "url": "http://www.stunprotocol.org"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.770884+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.770884+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:51:17.346498+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53b5043f4174b2ef9d1fea33a0eb537f4fa03b4ae59e07ebd86fc0457fa1cf08", "fetched_at": "2026-08-28T04:05:10.770884+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jselbie/stunserver"}, {"content_hash": "c7a97f04dbc216646d8c88bed2ed0f7f0f5de6495663a30b042c82221e8e89fb", "fetched_at": "2026-08-29T11:23:23.793118+00:00", "kind": "homepage", "missing": false, "url": "http://www.stunprotocol.org"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:51:17.346498+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53b5043f4174b2ef9d1fea33a0eb537f4fa03b4ae59e07ebd86fc0457fa1cf08", "fetched_at": "2026-08-28T04:05:10.770884+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jselbie/stunserver"}, {"content_hash": "c7a97f04dbc216646d8c88bed2ed0f7f0f5de6495663a30b042c82221e8e89fb", "fetched_at": "2026-08-29T11:23:23.793118+00:00", "kind": "homepage", "missing": false, "url": "http://www.stunprotocol.org"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:51:17.346498+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53b5043f4174b2ef9d1fea33a0eb537f4fa03b4ae59e07ebd86fc0457fa1cf08", "fetched_at": "2026-08-28T04:05:10.770884+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jselbie/stunserver"}, {"content_hash": "c7a97f04dbc216646d8c88bed2ed0f7f0f5de6495663a30b042c82221e8e89fb", "fetched_at": "2026-08-29T11:23:23.793118+00:00", "kind": "homepage", "missing": false, "url": "http://www.stunprotocol.org"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:51:17.346498+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53b5043f4174b2ef9d1fea33a0eb537f4fa03b4ae59e07ebd86fc0457fa1cf08", "fetched_at": "2026-08-28T04:05:10.770884+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jselbie/stunserver"}, {"content_hash": "c7a97f04dbc216646d8c88bed2ed0f7f0f5de6495663a30b042c82221e8e89fb", "fetched_at": "2026-08-29T11:23:23.793118+00:00", "kind": "homepage", "missing": false, "url": "http://www.stunprotocol.org"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 81, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 5501, "days_push": 114, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 69, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}