DNS Propagation Checker
Compare DNS answers from Cloudflare, Google, and Quad9 resolvers in parallel via DoH
Query DNS-over-HTTPS resolvers (Cloudflare 1.1.1.1, Google 8.8.8.8, Quad9) in parallel for a domain and record type. Reports whether answers agree, each resolver's values, and response time.
Features
- GET /check - parallel DoH queries across three public resolvers
- Supports A, AAAA, CNAME, MX, TXT, NS record types
- Agreement summary plus per-resolver values and latency
API Reference
GET /check
domain string (required) - Hostname to query (no scheme).
type string (required) - Record type: A, AAAA, CNAME, MX, TXT, or NS.
Example Request
curl "https://your-worker.workers.dev/check?domain=example.com&type=A"Success Response
{
"domain": "example.com",
"type": "A",
"agreement": true,
"resolvers": [
{ "name": "Cloudflare", "values": ["93.184.216.34"], "responseTimeMs": 42, "error": null }
]
}Error Codes
400-INVALID_DOMAIN,INVALID_TYPE502-DNS_ERROR
Use Cases
- Verify DNS changes have propagated globally after a cutover
- Compare resolver behavior during TTL or nameserver migrations
- Debug split-horizon or stale cache issues across providers
Limitations
- Queries three public DoH endpoints only; not exhaustive global propagation
- Single record type per request
- Resolver errors return partial results rather than failing the whole request
Deployment
Configure bindings
See wrangler.json and the experiment README for required bindings.
Test your deployment
See the experiment README for curl examples.
Local Development
cd apps/experiments/dns-propagation-checker
npm install
npm run devConfiguration
No bindings required beyond the Workers runtime.