Show HN: Doggo – A powerful, human-friendly DNS client for the command line

A new command-line DNS client called Doggo, written in Go and inspired by the Rust-based tool dog, aims to provide a fast, human-friendly alternative to traditional utilities like dig. Commenters highlight its features such as DNSCrypt support, concurrent lookups, an “ANY-like” multi-record query mode, web UI, and containerized deployment, while also comparing ecosystem traits like Go’s backward compatibility and static binaries to Rust’s dependency churn. The exchange surfaces broader themes around tooling maintainability, installation friction, and the value of simple, well-documented network utilities for debugging real-world DNS issues.

Project purpose & design

  • Built originally as a hobby/learning project while working with Kubernetes DNS quirks (e.g., ndots), aiming for a clearer, environment-agnostic DNS client.
  • Implemented in Go without external CLI frameworks to minimize dependencies; includes a small custom help/formatting utility.
  • v1.0 release was delayed for over a year due to life and procrastination; recent push to finalize and tag releases properly.

Relation to other DNS tools

  • Explicitly inspired by dog (Rust); author wanted similar functionality but in Go, hence “dog + go”.
  • Some users report dog is now hard to build due to outdated dependencies, which feeds into ecosystem stability concerns.
  • Other tools mentioned: dig, q, Hickory DNS utilities, bore, geodns, various “what’s my IP” endpoints and IP info CLIs.

Features, DNS behavior & UX

  • Primarily a query client (like dig), not for configuring system DNS.
  • Supports DNSCrypt and has a web UI that can be run locally.
  • Initially lacked “ANY/all records”-style functionality; community pushed for it.
    • Implemented “common record types” querying and an ANY-like feature (noting that true ANY is often no longer useful).
    • Early implementation did serial lookups; later optimized with concurrent queries per resolver for ~70–80% speedup.
  • Querying multiple nameservers shows duplicate answers when resolvers are configured redundantly; this is intentional to surface differences.

Performance, installation & distribution

  • Some users observed slow multi-record queries compared to dig; the concurrency change targets this.
  • Installation hiccups via go install (wrong package path, binary name) were quickly patched.
  • Binaries are provided via GitHub releases; also Docker image exists, with suggestions to document --rm -it usage.

Language, ecosystem & packaging debates

  • Discussion on Go’s “gets it done” reputation, static binaries, and suitability for DevOps tooling.
  • Contrast drawn with Rust, JS, and Python ecosystems where dependency churn can break builds after a few years.
  • Some prefer OS packages over “go install” or curl | sh for trust and supply-chain reasons; others argue containers or static binaries are convenient enough.
  • Mixed reactions: many enthusiastic users and adopters, alongside skepticism about yet another DNS CLI and the overhead of installing language toolchains.