Gonemaster is a Go implementation of the Zonemaster engine and CLI. https://gonemaster.evilbit.de/
  • Go 74.9%
  • Svelte 9.3%
  • JavaScript 8.3%
  • TypeScript 3.8%
  • CSS 1.7%
  • Other 2%
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Patrik Wallström 458bedbcfd
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Prep for v1.7.3
2026-08-31 21:56:15 +02:00
.gitea docs: add architecture document and anti-rot CI check 2026-05-17 17:49:48 +02:00
analysis-ui admin-ui, ui-public, analysis-ui: fold repeated render setups into helpers and table the single-key suites 2026-08-23 11:50:44 +02:00
cmd cmd, scoring, server: table the env-var suite, add apitest.CaptureJSON, and drop plan vocabulary from comments 2026-08-23 22:46:19 +02:00
docs Prep for v1.7.3 2026-08-31 21:56:15 +02:00
engine Prep for v1.7.3 2026-08-31 21:56:15 +02:00
internal cmd, scoring, server: table the env-var suite, add apitest.CaptureJSON, and drop plan vocabulary from comments 2026-08-23 22:46:19 +02:00
packaging packaging: add gonemaster-mcp to release binaries and packages 2026-05-31 23:05:43 +02:00
scoring cmd, scoring, server: table the env-var suite, add apitest.CaptureJSON, and drop plan vocabulary from comments 2026-08-23 22:46:19 +02:00
server server: add proxy-health counters for stripped forwarded headers and limiter keys 2026-08-29 10:46:01 +02:00
share zone08: name the MX exchange in the CNAME verdict messages 2026-08-27 23:44:25 +02:00
site docs: add a "Why gonemaster" page comparing the project with Zonemaster 2026-08-31 17:54:37 +02:00
tools tools: fail spec-check when the log-args inventory is stale 2026-08-27 23:51:54 +02:00
ui admin-ui, ui-public: fold the Results render pairs into a helper and make the poll windows deterministic 2026-08-23 23:27:27 +02:00
ui-public ui-public: link the "Why gonemaster" page from the About footer 2026-08-31 17:54:57 +02:00
.gitattributes Added .gitattributes 2026-01-27 23:27:20 +01:00
.gitignore ci: build all three UIs, group the static checks, and share the Go cache 2026-08-28 00:13:13 +02:00
.gitmodules docs: scaffold Hugo site with Relearn 6.4.1 theme submodule 2026-05-14 01:23:21 +02:00
.woodpecker.yml ci: order the Go steps after the UI builds 2026-08-29 12:07:27 +02:00
Changelog Prep for v1.7.3 2026-08-31 21:56:15 +02:00
docker-compose.test.yml server: run the remaining analysis store tests on every backend and fix the hot cache heap probe 2026-08-23 00:34:21 +02:00
go.mod gonemaster-mcp: bump the MCP SDK to v1.7.0 for the 2026-07-28 protocol revision 2026-08-29 12:33:23 +02:00
go.sum gonemaster-mcp: bump the MCP SDK to v1.7.0 for the 2026-07-28 protocol revision 2026-08-29 12:33:23 +02:00
LICENSE Removed 'All rights reserved.' 2026-05-04 16:07:15 +02:00
Makefile ci: build all three UIs, group the static checks, and share the Go cache 2026-08-28 00:13:13 +02:00
README.md docs: add a "Why gonemaster" page comparing the project with Zonemaster 2026-08-31 17:54:37 +02:00

gonemaster

gonemaster tests the DNS health of a domain. It checks the delegation, the nameservers, zone consistency, DNSSEC, and more, and turns what it finds into plain-language findings with severities, a numeric score, and a letter grade. Use it to verify a zone before and after a change, to keep an eye on the domains you are responsible for, or to measure DNS quality across thousands of domains over time.

It ships as one test engine with a set of small tools around it: a CLI, an HTTP server with embedded web UIs, an automation client, a Nagios plugin, and an MCP bridge for AI agents.

Try it without installing anything: a public instance runs at gonemaster.evilbit.de.

New to the project? Why gonemaster covers what it is, how it compares with Zonemaster, and when to use something else.

What gonemaster Tests

A test run takes a domain through a series of testcases grouped into modules:

  • basic - does the zone exist and have a working authoritative nameserver.
  • address - nameserver IP addresses and their reverse DNS (PTR) mappings.
  • connectivity - UDP/TCP reachability and network (ASN and prefix) diversity.
  • consistency - whether nameservers agree on SOA, serials, NS sets, and more.
  • delegation - parent/child delegation: NS records, glue, and referrals.
  • dnssec - the DNSSEC chain of trust: DS, DNSKEY, signatures, and algorithms.
  • nameserver - nameserver behaviour and capabilities, such as EDNS handling.
  • syntax - hostname and domain name syntax.
  • zone - zone-level records such as SOA timers and MX.

Every finding is a tagged log message with a severity from DEBUG to CRITICAL, and the findings are scored into a numeric result and a letter grade from A+ to F. The full inventory of testcases is in the specifications, and scores and grades are described in the scoring documentation.

Highlights

  • Test a domain in one command. The gonemaster CLI needs no server or database, prints human-readable text or JSON for scripts, and translates findings into twelve languages.
  • Check a delegation before it goes live. Undelegated tests take explicit nameserver and DS input, so a zone can be tested at a new operator before the parent delegation is switched.
  • Monitor zones continuously. gonemaster-nagios maps finding severities to Nagios/Icinga service states, turning delegation health into a standard operational check.
  • Run it as a service. gonemaster-server adds a persistent queue, batches, stored run history, test profiles, Prometheus metrics, and embedded web UIs. SQLite works out of the box; PostgreSQL and MariaDB are supported.
  • Compare before and after. Two runs, or two whole batches, can be diffed at the finding level to confirm that a change fixed what it was meant to fix.
  • Analyze domains at scale. Tag collections of domains, test them in batches, and publish read-only cohort dashboards backed by immutable snapshots.
  • Automate and embed. A command-line automation client, an HTTP API, an MCP bridge for AI agents, and a Go engine library for direct embedding.

Install

Prebuilt binaries for Linux, macOS, and Windows are published on the releases page.

Install the CLI with Go (1.27 or later):

go install codeberg.org/pawal/gonemaster/cmd/gonemaster@latest

Build from source:

git clone https://codeberg.org/pawal/gonemaster.git
cd gonemaster
go test ./...
go build -o gonemaster ./cmd/gonemaster
sudo install -m 0755 gonemaster /usr/local/bin/gonemaster

make packages builds Debian and RPM packages (building the embedded web UIs requires Node.js), and make help lists the other targets: builds, tests, UI builds, packaging, and documentation checks.

Quick Start

Test a Domain

gonemaster example.com
gonemaster --score example.com
gonemaster --json --domain example.com | jq
gonemaster --module dnssec --testcase dnssec01 example.com

Test a zone that is not delegated yet, for example before a change of DNS operator, by passing the nameservers (and optionally DS records) directly:

gonemaster --domain example.com \
  --ns ns1.example.com/192.0.2.10 \
  --ns ns2.example.net/2001:db8::10

CLI documentation: pawal.codeberg.page/gonemaster/cli

Monitor a Zone

gonemaster-nagios -H example.com -w WARNING -c ERROR

Works with Nagios, Icinga, Naemon, and other Nagios-compatible systems. Plugin documentation: docs/nagios.md

Start the Server

The server embeds the admin, public, and analysis web UIs; building them requires Node.js:

make ui-build
go build -o ./gonemaster-server ./cmd/gonemaster-server
./gonemaster-server

For an API-only server without the embedded UIs (no Node.js required), build with make build-gonemaster-server-noui.

Server documentation: pawal.codeberg.page/gonemaster/server

Automate and Analyze

gonemaster-client drives a running server from the shell or from scripts:

gonemaster-client jobs create --domain example.com --wait --view summary
gonemaster-client jobs batch --file domains.txt --tag tld --wait
gonemaster-client batches diff batch_before batch_after

Client documentation: pawal.codeberg.page/gonemaster/client. Cohort analysis and public dashboards: pawal.codeberg.page/gonemaster/analysis.

Documentation

Full documentation: pawal.codeberg.page/gonemaster

Start with the architecture overview for a one-sitting tour of the system: binaries, request lifecycles, data model, concurrency, security posture, and known limitations.

  • Why gonemaster - what it is, how it compares with Zonemaster
  • CLI - local test runner
  • Server - HTTP server and queue
  • Client - automation client
  • Nagios - Nagios and Icinga plugin
  • MCP - Model Context Protocol bridge for AI agents
  • Analysis - cohort analysis and snapshots
  • Specifications - testcase and tag reference
  • OpenAPI - machine-readable API spec
  • Changelog - release history
  • pkg.go.dev - Go package docs; engine is the main entry point for embedding gonemaster programmatically

Screenshots

CLI output:

ascii animation

Admin UI:

UI screenshot

Metrics view:

Metrics screenshot

License

gonemaster is released under a BSD-style license. See LICENSE.