# DNS Propagation Checker (/docs/experiments/dns-propagation-checker)



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 [#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 [#api-reference]

### GET /check [#get-check]

**`domain`** `string` (required) - Hostname to query (no scheme).

**`type`** `string` (required) - Record type: `A`, `AAAA`, `CNAME`, `MX`, `TXT`, or `NS`.

#### Example Request [#example-request]

```bash
curl "https://your-worker.workers.dev/check?domain=example.com&type=A"
```

#### Success Response [#success-response]

```json
{
  "domain": "example.com",
  "type": "A",
  "agreement": true,
  "resolvers": [
    { "name": "Cloudflare", "values": ["93.184.216.34"], "responseTimeMs": 42, "error": null }
  ]
}
```

#### Error Codes [#error-codes]

* `400` - `INVALID_DOMAIN`, `INVALID_TYPE`
* `502` - `DNS_ERROR`

## Use Cases [#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 [#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 [#deployment]

<Steps>
  <Step>
    ### Click the deploy button [#click-the-deploy-button]

    [![Deploy to Cloudflare Workers](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/shrinathsnayak/cloudflare-experiments/tree/main/apps/experiments/dns-propagation-checker)
  </Step>

  <Step>
    ### Configure bindings [#configure-bindings]

    See `wrangler.json` and the experiment README for required bindings.
  </Step>

  <Step>
    ### Test your deployment [#test-your-deployment]

    See the experiment README for curl examples.
  </Step>
</Steps>

## Local Development [#local-development]

```bash
cd apps/experiments/dns-propagation-checker
npm install
npm run dev
```

## Configuration [#configuration]

No bindings required beyond the Workers runtime.

## Cloudflare Features Used [#cloudflare-features-used]

* **[Workers](https://developers.cloudflare.com/workers/)**
* **[DNS over HTTPS](https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/)**
