{"adoption": {"forks": 484, "observed_at": "2026-08-28T04:08:15.635735+00:00", "stars": 3725}, "canonical_url": "https://ross.abutalabs.com/products/mosdns", "card": {"archived": false, "artifact_type": "application", "description": "一个 DNS 转发器", "domain": ["networking", "privacy", "self-hosted", "developer-tools"], "enriched": true, "function": ["http-server", "proxy", "networking", "caching", "security"], "health_score": 79, "homepage": null, "language": "Go", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["IrineSistiana/mosdns"], "name": "IrineSistiana/mosdns", "platform": ["windows", "self-hosted", "go", "cross-platform"], "pushed_at": "2026-02-27T07:01:08+00:00", "repo": "IrineSistiana/mosdns", "stars": 3725, "tags": ["dns-server", "dns-over-https", "dns-over-tls", "dns-over-quic", "dns-forwarder", "dns-proxy", "dns-routing", "linux", "macos", "docker"], "topics": ["dns-server", "mosdns", "dns-over-https", "dns-over-tls", "dns-proxy", "dns", "dns-over-http", "dns-over-quic"], "urls": [], "use_cases": ["run a local DNS forwarder with encrypted upstreams", "split DNS resolution between domestic and foreign domains", "cache DNS responses to speed up browsing", "block ads and trackers at the DNS level", "set up DNS-over-HTTPS or DNS-over-TLS on a home router", "route DNS queries based on custom rules and plugins"], "what_it_is": "mosdns is a programmable DNS forwarder and resolver written in Go that supports DNS-over-HTTPS, DNS-over-TLS, DNS-over-QUIC, and custom routing/forwarding rules. It is configured via plugins to route, cache, and filter DNS queries for self-hosted or network-wide setups.", "when_to_avoid": ["you want a simple set-and-forget DNS server with a GUI like Pi-hole or AdGuard Home", "you need an authoritative DNS server for hosting your own domains", "you prefer a solution without manual config-file setup"], "when_to_choose": ["you need a highly configurable DNS forwarder with plugin-based routing", "you want encrypted DNS protocols like DoH, DoT, or DoQ", "you self-host DNS on a router, NAS, or server", "you need conditional forwarding and caching in one tool"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/mosdns", "repo": "IrineSistiana/mosdns", "role": "main", "score": 63}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.635735+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:29:15.970785+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7a29a475c50864708b8314b6d6b71b4174dd770d6b7ce961bc100ae741145eb4", "fetched_at": "2026-08-28T04:08:15.635735+00:00", "kind": "readme", "missing": false, "url": "https://github.com/IrineSistiana/mosdns"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.635735+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:29:15.970785+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7a29a475c50864708b8314b6d6b71b4174dd770d6b7ce961bc100ae741145eb4", "fetched_at": "2026-08-28T04:08:15.635735+00:00", "kind": "readme", "missing": false, "url": "https://github.com/IrineSistiana/mosdns"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:29:15.970785+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7a29a475c50864708b8314b6d6b71b4174dd770d6b7ce961bc100ae741145eb4", "fetched_at": "2026-08-28T04:08:15.635735+00:00", "kind": "readme", "missing": false, "url": "https://github.com/IrineSistiana/mosdns"}], "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:08:15.635735+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.635735+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.635735+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:29:15.970785+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7a29a475c50864708b8314b6d6b71b4174dd770d6b7ce961bc100ae741145eb4", "fetched_at": "2026-08-28T04:08:15.635735+00:00", "kind": "readme", "missing": false, "url": "https://github.com/IrineSistiana/mosdns"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.635735+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.635735+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:29:15.970785+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7a29a475c50864708b8314b6d6b71b4174dd770d6b7ce961bc100ae741145eb4", "fetched_at": "2026-08-28T04:08:15.635735+00:00", "kind": "readme", "missing": false, "url": "https://github.com/IrineSistiana/mosdns"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.635735+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.635735+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.635735+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:29:15.970785+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7a29a475c50864708b8314b6d6b71b4174dd770d6b7ce961bc100ae741145eb4", "fetched_at": "2026-08-28T04:08:15.635735+00:00", "kind": "readme", "missing": false, "url": "https://github.com/IrineSistiana/mosdns"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.635735+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.635735+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:29:15.970785+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7a29a475c50864708b8314b6d6b71b4174dd770d6b7ce961bc100ae741145eb4", "fetched_at": "2026-08-28T04:08:15.635735+00:00", "kind": "readme", "missing": false, "url": "https://github.com/IrineSistiana/mosdns"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:29:15.970785+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7a29a475c50864708b8314b6d6b71b4174dd770d6b7ce961bc100ae741145eb4", "fetched_at": "2026-08-28T04:08:15.635735+00:00", "kind": "readme", "missing": false, "url": "https://github.com/IrineSistiana/mosdns"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:29:15.970785+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7a29a475c50864708b8314b6d6b71b4174dd770d6b7ce961bc100ae741145eb4", "fetched_at": "2026-08-28T04:08:15.635735+00:00", "kind": "readme", "missing": false, "url": "https://github.com/IrineSistiana/mosdns"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:29:15.970785+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7a29a475c50864708b8314b6d6b71b4174dd770d6b7ce961bc100ae741145eb4", "fetched_at": "2026-08-28T04:08:15.635735+00:00", "kind": "readme", "missing": false, "url": "https://github.com/IrineSistiana/mosdns"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 69, "longevity": 100, "rhythm": 33}, "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": 2106, "days_push": 187, "days_rel": 234, "gap_med": null, "n_releases_24m": 1}, "score": 63, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}