Zone files
Uploading a zone file for a name scope enables removal detection. This guide explains what a zone file is, why verge-asm wants one, and how to get one out of the place your DNS actually lives. It expands using.md → Upload a zone file, which is where the act sits in the checklist.
What a zone file is
A zone file is a plain-text listing of every DNS record published for a domain — the
A, AAAA, CNAME, MX, TXT and delegation records that make up your zone. It is
the format authoritative name servers load, defined by RFC 1035's master file
syntax and universally called BIND format. One line per record:
The apex is the domain the file is about — the $ORIGIN / SOA name,
example.com above. verge-asm reads the file for the names your zone publishes; it
does not need a complete or signed file, only an honest snapshot of what you serve.
Why supply one — removal detection
Without a zone file, verge-asm learns names only by resolving them and by what other sources admit. That is enough to find what exists, but it cannot tell you a name has gone: a name that stops resolving might be removed, might be a transient DNS failure, or might simply be one your resolver stopped being asked about. Absence of an answer is not evidence of removal.
A zone file closes that gap. It is your declaration of the complete set of names I
publish, dated to the moment you supplied it. When you upload a newer file that no
longer lists a name, that disappearance is a positive fact you asserted, not a
silence — and verge-asm can surface the removal instead of guessing. This is the one
place in v1 where two enumerable sources meet on the same timeline: your zone file
(authority: declared) against your own resolver's measured answers
(authority: measured), which is what lets a disagreement be reported rather than
one source silently overwriting the other.
Because it carries this weight, the zone file is treated as a supply act, not a mount:
- It is uploaded, not mounted. The upload instant is the observation instant, so you stopped telling us is detectable. Re-reading unchanged bytes on a schedule would produce a fresh observation of a stale fact; supplying the file dates it to your act instead.
- A file whose apex sits outside the name scope it was uploaded against is
refused, with the reason. Upload the
example.comzone against theexample.comscope. - The zone is covered by its own
zonescan on a re-supply interval you set (shipped monthly). This interval is your promise about how often you will re-export — not a schedule that re-reads the old file. - Let a zone age past two re-supply intervals and it ages into a
Gap: the system tells you the source went stale rather than trusting old bytes. Re-export and re-upload to close it.
How to export a zone file
The exact menu path shifts as providers redesign their dashboards, but every authoritative DNS host offers one of the routes below. You want BIND / RFC 1035 format — often labelled "Export zone file", "Export DNS records (BIND)", or just "Export".
From a managed DNS provider (dashboard)
Most registrars and DNS hosts have a one-click export in the zone's DNS settings:
| Provider | Where to look |
|---|---|
| Cloudflare | DNS → Records → Export (downloads a BIND file). |
| AWS Route 53 | No native BIND export in the console; use the CLI route below, or the community cli53 export example.com tool. |
| Google Cloud DNS | gcloud dns record-sets export zonefile.txt --zone=<zone>. |
| Namecheap / GoDaddy / Porkbun | Advanced DNS → Export zone file. |
| Azure DNS | az network dns zone export -g <rg> -n example.com -f example.com.zone. |
If your provider only shows records in a web table, the CLI or AXFR routes below give you the same file without hand-transcribing rows.
From the command line
If you run your own authoritative name servers, or your provider permits a zone
transfer from an address you control, dig will pull the whole zone in BIND format:
AXFR returns every record the server is authoritative for. Many providers disable
zone transfer by default — enable it for a trusted source address, or use the
provider's export button instead.
From a self-hosted server
If you already run BIND, Knot, NSD or PowerDNS, the zone file (or its
export) is what those servers load — copy the db.example.com / zone file straight
out of your config, or dump it (named-compilezone, pdnsutil, kzonecheck
alongside your server's export command).
Uploading it
Under Seeds → zone, choose the name scope and upload the file. verge-asm checks the
apex against the scope, records the supply instant, and schedules the zone scan on
your re-supply interval. Set the interval to match how often you actually re-export —
if you re-export monthly, leave it monthly; the two-interval Gap gives you a full
extra cycle of slack before staleness is called.