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
dogis 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 trueANYis often no longer useful). - Early implementation did serial lookups; later optimized with concurrent queries per resolver for ~70–80% speedup.
- Implemented “common record types” querying and an
- 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 -itusage.
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 | shfor 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.