🐶 Command-line DNS Client for Humans. Written in Golang
See the code
🐶 Command-line DNS client for humans
doggo is a modern command-line DNS client (like dig) written in Golang. It outputs information in a neat concise manner and supports protocols like DoH, DoT, DoQ, and DNSCrypt as well.
It's totally inspired by dog which is written in Rust. I wanted to add some features to it but since I don't know Rust, I found it as a nice opportunity to experiment with writing a DNS Client from scratch in Go myself. Hence the name dog + go => doggo.
curl -fsSL https://raw.githubusercontent.com/mr-karan/doggo/main/install.sh | sh
pacman -S doggoeget mr-karan/doggoemerge net-dns/doggobrew install doggoport install doggomise use -g doggo@latestnix profile install nixpkgs#doggoscoop install doggowinget install doggoYou can download pre-compiled binaries for various operating systems and architectures from the Releases page.
Linux 32-bit ARM releases are available as doggo-linux-armv6.tar.gz (ARMv6) and doggo-linux-armv7.tar.gz (ARMv7 and 32-bit ARMv8). The doggo-linux-arm.tar.gz compatibility asset is the ARMv7 build.
FreeBSD, OpenBSD, and NetBSD ARMv7 releases use the explicit doggo-<os>-armv7.tar.gz name and retain their historical doggo-<os>-arm.tar.gz aliases.
If you have Go installed on your system, you can use the go install command:
go install github.com/mr-karan/doggo/cmd/doggo@latest
The binary will be available at $GOPATH/bin/doggo.
docker pull ghcr.io/mr-karan/doggo:latest
docker run --rm ghcr.io/mr-karan/doggo:latest example.com
For more installation options, including binary downloads and Docker images, please refer to the full installation guide.
Here are some quick examples to get you started with doggo:
# Simple DNS lookup
doggo example.com
# Query MX records using a specific nameserver
doggo MX github.com @9.9.9.9
# Use DNS over HTTPS
doggo example.com @https://cloudflare-dns.com/dns-query
# JSON output for scripting
doggo example.com --json | jq '.responses[0].answers[].address'
# Reverse DNS lookup
doggo --reverse 8.8.8.8 --short
# Follow the delegation chain iteratively
doggo example.com --trace
# Using Globalping
doggo example.com --gp-from Germany,Japan --gp-limit 2
Defaults for any flag can be set via a TOML config file or DOGGO_* environment variables, so you don't have to repeat flags on every invocation:
# ~/.config/doggo/config.toml (or $XDG_CONFIG_HOME/doggo/config.toml, ~/.doggo.toml)
strategy = "first"
color = false
timeout = "10s"
# HTTP/3 must be paired with a persistent HTTPS (DoH) nameserver.
nameserver = ["https://cloudflare-dns.com/dns-query"]
http3 = true
# Equivalent environment variables
export DOGGO_STRATEGY=first
export DOGGO_COLOR=false
export DOGGO_NAMESERVER=https://cloudflare-dns.com/dns-query
export DOGGO_HTTP3=true
Precedence (lowest to highest): flag defaults < config file < environment variables < command line flags. Use --config=PATH or DOGGO_CONFIG to load a file from a custom location.
config-cli-sample.toml documents every supported key with its default. See the CLI reference for details.
--trace--http3ndots and search configurations-b/--source, like dig -bzsh and fishFor comprehensive documentation, including detailed usage instructions, configuration options, and advanced features, please visit our official documentation site.
If you find doggo useful and would like to support its development, please consider becoming a sponsor. Your support helps maintain and improve this open-source project.
Every contribution, no matter how small, is greatly appreciated and helps keep this project alive and growing. Thank you for your support! 🐶❤️
Overall
Maintained
Code review
Go module
Latest release
Releases this year
(top 24 of 88)
534 followers · starred Dec 2020
1,672 followers · starred Jun 2025
1,088 followers · starred Jul 2024
122 followers · starred Jul 2024
🐶 Command-line DNS Client for Humans. Written in Golang
See the code
🐶 Command-line DNS client for humans
doggo is a modern command-line DNS client (like dig) written in Golang. It outputs information in a neat concise manner and supports protocols like DoH, DoT, DoQ, and DNSCrypt as well.
It's totally inspired by dog which is written in Rust. I wanted to add some features to it but since I don't know Rust, I found it as a nice opportunity to experiment with writing a DNS Client from scratch in Go myself. Hence the name dog + go => doggo.
curl -fsSL https://raw.githubusercontent.com/mr-karan/doggo/main/install.sh | sh
pacman -S doggoeget mr-karan/doggoemerge net-dns/doggobrew install doggoport install doggomise use -g doggo@latestnix profile install nixpkgs#doggoscoop install doggowinget install doggoYou can download pre-compiled binaries for various operating systems and architectures from the Releases page.
Linux 32-bit ARM releases are available as doggo-linux-armv6.tar.gz (ARMv6) and doggo-linux-armv7.tar.gz (ARMv7 and 32-bit ARMv8). The doggo-linux-arm.tar.gz compatibility asset is the ARMv7 build.
FreeBSD, OpenBSD, and NetBSD ARMv7 releases use the explicit doggo-<os>-armv7.tar.gz name and retain their historical doggo-<os>-arm.tar.gz aliases.
If you have Go installed on your system, you can use the go install command:
go install github.com/mr-karan/doggo/cmd/doggo@latest
The binary will be available at $GOPATH/bin/doggo.
docker pull ghcr.io/mr-karan/doggo:latest
docker run --rm ghcr.io/mr-karan/doggo:latest example.com
For more installation options, including binary downloads and Docker images, please refer to the full installation guide.
Here are some quick examples to get you started with doggo:
# Simple DNS lookup
doggo example.com
# Query MX records using a specific nameserver
doggo MX github.com @9.9.9.9
# Use DNS over HTTPS
doggo example.com @https://cloudflare-dns.com/dns-query
# JSON output for scripting
doggo example.com --json | jq '.responses[0].answers[].address'
# Reverse DNS lookup
doggo --reverse 8.8.8.8 --short
# Follow the delegation chain iteratively
doggo example.com --trace
# Using Globalping
doggo example.com --gp-from Germany,Japan --gp-limit 2
Defaults for any flag can be set via a TOML config file or DOGGO_* environment variables, so you don't have to repeat flags on every invocation:
# ~/.config/doggo/config.toml (or $XDG_CONFIG_HOME/doggo/config.toml, ~/.doggo.toml)
strategy = "first"
color = false
timeout = "10s"
# HTTP/3 must be paired with a persistent HTTPS (DoH) nameserver.
nameserver = ["https://cloudflare-dns.com/dns-query"]
http3 = true
# Equivalent environment variables
export DOGGO_STRATEGY=first
export DOGGO_COLOR=false
export DOGGO_NAMESERVER=https://cloudflare-dns.com/dns-query
export DOGGO_HTTP3=true
Precedence (lowest to highest): flag defaults < config file < environment variables < command line flags. Use --config=PATH or DOGGO_CONFIG to load a file from a custom location.
config-cli-sample.toml documents every supported key with its default. See the CLI reference for details.
--trace--http3ndots and search configurations-b/--source, like dig -bzsh and fishFor comprehensive documentation, including detailed usage instructions, configuration options, and advanced features, please visit our official documentation site.
If you find doggo useful and would like to support its development, please consider becoming a sponsor. Your support helps maintain and improve this open-source project.
Every contribution, no matter how small, is greatly appreciated and helps keep this project alive and growing. Thank you for your support! 🐶❤️
Overall
Maintained
Code review
Go module
Latest release
Releases this year
(top 24 of 88)
534 followers · starred Dec 2020
1,672 followers · starred Jun 2025
1,088 followers · starred Jul 2024
122 followers · starred Jul 2024