commit 63acce1b93ea99aab046b51212578e8c58e0f23b Author: Blake Ridgway Date: Sat Mar 21 17:59:57 2026 -0500 Initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..f615588 --- /dev/null +++ b/README.md @@ -0,0 +1,33 @@ +# arcline-dns + +DNS propagation checker. Queries a domain across multiple global resolvers in parallel and diffs the results — shows exactly where propagation stands during a DNS migration. + +## Status + +Planned. Not yet started. + +## Stack + +- Go — single static binary, no runtime dependencies +- Embedded resolver list (Cloudflare, Google, OpenDNS, Quad9, authoritative NS) + +## Usage + +```sh +arcline-dns example.com +arcline-dns example.com --type MX +arcline-dns example.com --type A --watch 30 +arcline-dns example.com --resolvers 8.8.8.8,1.1.1.1 +arcline-dns example.com --json +``` + +## Features + +- Parallel queries across all resolvers +- Supports A, AAAA, CNAME, MX, TXT, NS, SOA +- Diff mode: highlights resolvers that disagree with the majority +- TTL per resolver +- `--watch` mode: re-queries on an interval, shows changes live +- Color-coded output: green = agrees, red = differs, yellow = no response + +See [todo.md](todo.md) for the full task list and output format spec. diff --git a/todo.md b/todo.md new file mode 100644 index 0000000..92a11e9 --- /dev/null +++ b/todo.md @@ -0,0 +1,66 @@ +# arcline-dns — DNS Propagation Checker + +Query a domain across global resolvers and diff the results. +Indispensable during DNS migrations — customers see exactly where propagation stands. + +## Stack +- Language: Go +- Distribution: single static binary +- No runtime dependencies + +## Resolver list (embedded, configurable) +- Cloudflare: 1.1.1.1, 1.0.0.1 +- Google: 8.8.8.8, 8.8.4.4 +- OpenDNS: 208.67.222.222 +- Quad9: 9.9.9.9 +- Authoritative nameservers for the queried domain (auto-detected) +- Configurable: --resolvers flag or .arcline-dns.yaml + +## Features +- [ ] Query A, AAAA, CNAME, MX, TXT, NS, SOA record types +- [ ] Parallel queries across all resolvers +- [ ] Diff mode: highlight resolvers that disagree with the majority +- [ ] TTL display per resolver +- [ ] --watch N: re-query every N seconds, show changes live +- [ ] Color-coded: green = matches majority, red = differs, yellow = no response + +## CLI interface +``` +arcline-dns example.com +arcline-dns example.com --type MX +arcline-dns example.com --type A --watch 30 +arcline-dns example.com --resolvers 8.8.8.8,1.1.1.1 +arcline-dns example.com --json +``` + +## Output format +``` +$ arcline-dns example.com --type A + + domain example.com + type A + queried 6 resolvers + + resolver answer ttl status + ─────────────────── ─────────────── ────── ─────── + 1.1.1.1 (CF) 203.0.113.42 300s [OK] + 1.0.0.1 (CF) 203.0.113.42 300s [OK] + 8.8.8.8 (Google) 203.0.113.42 300s [OK] + 8.8.4.4 (Google) 203.0.113.42 300s [OK] + 208.67.222.222 203.0.113.10 300s [DIFF] + 9.9.9.9 (Quad9) 203.0.113.42 300s [OK] + + propagation 5/6 resolvers agree +``` + +## Tasks +- [ ] Project scaffold +- [ ] Embedded resolver list +- [ ] Parallel DNS query engine (net package, raw UDP) +- [ ] Record type parser (A, AAAA, CNAME, MX, TXT, NS, SOA) +- [ ] Diff/majority logic +- [ ] Table renderer (terminal + JSON) +- [ ] --watch mode with delta display +- [ ] Authoritative NS auto-detection +- [ ] Cross-compile Makefile +- [ ] README