# zonemaster/zonemaster-engine architecture

> Architecture diagram of the GitHub repository zonemaster/zonemaster-engine, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/zonemaster/zonemaster-engine
- Repository: https://github.com/zonemaster/zonemaster-engine
- Video tour (about a minute): https://gitdiagram.com/zonemaster/zonemaster-engine/video

## Overview

Zonemaster Engine is a Perl framework for running DNS-zone tests. The principal workflow is a user-supplied zone being tested by the engine, with results represented through its logging components. The tree identifies distinct test areas—syntax, delegation, nameserver, connectivity, consistency, DNSSEC, zone, address, and basic checks—alongside profiles, DNS query support, and translation. The README confirms the full test suite is performed here; source excerpts were unavailable, so internal call wiring beyond that documented workflow is not asserted.

Main entry points: [`lib/Zonemaster/Engine.pm`](https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine.pm) (Engine), [`lib/Zonemaster/Engine/Test.pm`](https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test.pm) (Test framework)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_orchestration["Test orchestration"]
  node_engine["Engine<br/>[Engine.pm]"]
  node_test_framework["Test framework<br/>[Test.pm]"]
end

subgraph group_checks["DNS test areas"]
  node_syntax["Syntax checks<br/>[Syntax.pm]"]
  node_delegation["Delegation checks<br/>[Delegation.pm]"]
  node_nameserver_checks["Nameserver checks<br/>[Nameserver.pm]"]
  node_connectivity["Connectivity checks<br/>[Connectivity.pm]"]
  node_consistency["Consistency checks<br/>[Consistency.pm]"]
  node_dnssec["DNSSEC checks<br/>[DNSSEC.pm]"]
  node_zone_checks["Zone checks<br/>[Zone.pm]"]
  node_address["Address checks<br/>[Address.pm]"]
  node_basic["Basic checks<br/>[Basic.pm]"]
end

subgraph group_runtime["DNS runtime"]
  node_nameserver_runtime["Nameserver runtime<br/>[Nameserver.pm]"]
  node_recursor["DNS recursor<br/>[Recursor.pm]"]
  node_packet["DNS packets<br/>[Packet.pm]"]
end

subgraph group_results["Results and configuration"]
  node_profile["Test profiles<br/>[Profile.pm]"]
  node_logger["Result logger<br/>[Logger.pm]"]
  node_translator["Translation<br/>[Translator.pm]"]
end

node_user(("Zone tester"))

node_user -->|"submits zone"| node_engine
node_engine -->|"runs suite"| node_test_framework

click node_engine "https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine.pm"
click node_test_framework "https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test.pm"
click node_syntax "https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test/Syntax.pm"
click node_delegation "https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test/Delegation.pm"
click node_nameserver_checks "https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test/Nameserver.pm"
click node_connectivity "https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test/Connectivity.pm"
click node_consistency "https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test/Consistency.pm"
click node_dnssec "https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test/DNSSEC.pm"
click node_zone_checks "https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test/Zone.pm"
click node_address "https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test/Address.pm"
click node_basic "https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test/Basic.pm"
click node_nameserver_runtime "https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Nameserver.pm"
click node_recursor "https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Recursor.pm"
click node_packet "https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Packet.pm"
click node_profile "https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Profile.pm"
click node_logger "https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Logger.pm"
click node_translator "https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Translator.pm"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_engine,node_test_framework toneBlue
class node_syntax,node_delegation,node_nameserver_checks,node_connectivity,node_consistency,node_dnssec,node_zone_checks,node_address,node_basic toneAmber
class node_nameserver_runtime,node_recursor,node_packet toneMint
class node_profile,node_logger,node_translator toneRose
class node_user toneIndigo
```

## Components

### Test orchestration

- [Engine](https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine.pm): `lib/Zonemaster/Engine.pm`
- [Test framework](https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test.pm): `lib/Zonemaster/Engine/Test.pm`

### DNS test areas

- [Syntax checks](https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test/Syntax.pm): `lib/Zonemaster/Engine/Test/Syntax.pm`
- [Delegation checks](https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test/Delegation.pm): `lib/Zonemaster/Engine/Test/Delegation.pm`
- [Nameserver checks](https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test/Nameserver.pm): `lib/Zonemaster/Engine/Test/Nameserver.pm`
- [Connectivity checks](https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test/Connectivity.pm): `lib/Zonemaster/Engine/Test/Connectivity.pm`
- [Consistency checks](https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test/Consistency.pm): `lib/Zonemaster/Engine/Test/Consistency.pm`
- [DNSSEC checks](https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test/DNSSEC.pm): `lib/Zonemaster/Engine/Test/DNSSEC.pm`
- [Zone checks](https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test/Zone.pm): `lib/Zonemaster/Engine/Test/Zone.pm`
- [Address checks](https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test/Address.pm): `lib/Zonemaster/Engine/Test/Address.pm`
- [Basic checks](https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Test/Basic.pm): `lib/Zonemaster/Engine/Test/Basic.pm`

### DNS runtime

- [Nameserver runtime](https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Nameserver.pm): `lib/Zonemaster/Engine/Nameserver.pm`
- [DNS recursor](https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Recursor.pm): `lib/Zonemaster/Engine/Recursor.pm`
- [DNS packets](https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Packet.pm): `lib/Zonemaster/Engine/Packet.pm`

### Results and configuration

- [Test profiles](https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Profile.pm): `lib/Zonemaster/Engine/Profile.pm`
- [Result logger](https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Logger.pm): `lib/Zonemaster/Engine/Logger.pm`
- [Translation](https://github.com/zonemaster/zonemaster-engine/blob/master/lib/Zonemaster/Engine/Translator.pm): `lib/Zonemaster/Engine/Translator.pm`

### Other components

- **Zone tester**

## Connections

- Zone tester → Engine: submits zone
- Engine → Test framework: runs suite
