A global DNS propagation checker that gives pretty output. Written in .NET https://dug.unfrl.com
Find a file
MattInternet 0277813d9e
All checks were successful
Build Test Publish / test (push) Successful in 15s
Build Test Publish / build (push) Successful in 1m9s
Build Test Publish / docker-build-conditionally-publish (push) Successful in 53s
ci-docker-stuff (#5)
Now we always build the docker image, but only publish it (and the forgejo release) when its tagged.

Co-authored-by: MattInternet <matt@kaijucode.com>
Co-committed-by: MattInternet <matt@kaijucode.com>
2026-01-11 03:16:45 +00:00
.config dotnet-10 (#1) 2025-12-27 21:51:42 +00:00
.forgejo ci-docker-stuff (#5) 2026-01-11 03:16:45 +00:00
.vscode dotnet-10 (#1) 2025-12-27 21:51:42 +00:00
cli dotnet-10 (#1) 2025-12-27 21:51:42 +00:00
cli.tests dotnet-10 (#1) 2025-12-27 21:51:42 +00:00
dug Updated build status URL in README and updated default server list 2022-12-25 17:04:59 -07:00
dug-docs ci: remove caddy config from dug-docs 2025-12-28 15:57:29 -07:00
.dockerignore Initial Dockerfiles added, also put in a fix to ensure that during templated output no other output is printed, even if its the first run. 2021-01-11 18:54:26 -07:00
.gitignore Testing using bats 2021-01-12 12:48:51 -07:00
.gitmodules 2 remove rogue commas (#18) 2021-01-16 17:07:51 -07:00
Dockerfile dotnet-10 (#1) 2025-12-27 21:51:42 +00:00
Dockerfile-alpine Dotnet6 (#46) 2023-09-20 16:58:50 -06:00
LICENSE Add MIT license (#48) 2024-10-05 13:25:07 -06:00
README.md Update README.md 2025-12-27 23:37:43 +00:00

dug

Warning

If you are reading this on GitHub note that this a mirrored repository. The primary repo is at: https://git.unfrl.com/Unfrl/dug

Build Status Release

unfrl-dug (Unmaintained)

A powerful global DNS propagation checker that can output in a variety of formats.

The goal of dug is to make it easy to check the propagation of DNS records. It is also capable of providing templated output that can be used in scripts for things like monitoring.

For detailed documentation check out dug.unfrl.com

Usage

The easiest way to explore dug is through the help.

  • dug help -> Get top level help explaining the different verbs
  • dug help run or dug run --help -> Get details about a specific verb (run, which is the default)
  • dug help update or dug update --help -> Get details about the update verb

The simplest way to get started is to just run a query against the domain whose DNS records you're updating. For example: dug git.kaijucode.com:

You can also do complicated things like ask for specific record types, use the most reliable server per continent, get the output as json, and pipe it into other applications: dug git.kaijucode.com -q A --output-format JSON --server-count 1 --output-template Ipaddress,city,value,responsetime | jq:

Localization

dug automatically uses the current system's culture for localization. (You can override LANG on linux to test it).

Currently supports the following languages:

  • (en) English
  • (es) Spanish
  • (de) German

Installation

Linux x86 and ARM

The linux builds are distributed as executables at the latest release. There used to be package distributions (deb, rpm, etc) and they will be back, this work is being tracked here.

Arch

A friend put dug in the AUR! here

Docker

Not sure if this counts as an "Installation" but there is a docker image available here

Homebrew (Mac & Linux)

Install from homebrew with brew install dug

OSX

Homebrew is the easiest method for OSX but there is also a binary available

  1. Go to the latest release and download the osx binary.
    • It should look like dug-osx-x64
  2. You should be able to download that, make is executable, and run it from the terminal. Then you can put it somewhere and update your path so you can execute it from anywhere.

Windows

Executable

  1. Go to the latest release and download the .exe binary.
    • It should look like dug.exe
  2. You should be able to download that and run it from the terminal. Then you can put it somewhere and update your path so you can execute it from anywhere.

Development

This is a .net 6 project, so as long as you have the dotnet cli, available here you should be able to do the following: dotnet build ./cli

The project was developed in VSCode so the debugger profiles that I have used are available if you're also using VSCode.

The commands to build an optimized executable vary depending on the platform but are all available in the workflows directory. Here is the one to build the linux-x64 executable as an example:

dotnet publish -r linux-x64 -c Release -p:PublishSingleFile=true -p:PublishReadyToRun=true --self-contained true -o publish ./cli

Testing

There is currently fairly limited testing, what does exist uses the BATS tool.

To run the BATS tests you will need to have cloned dug recursively, like: git clone --recursive <dug_repo_url>

If you didnt do that you can run this to restore the BATS submodules into ./cli.tests/bats/libs: git submodule update --init --recursive

Once you have BATS you should be able to simply run the BATS tests with: ./cli.tests/bats/run.sh

Made with ❤️ by Unfrl