One bin/poweradmin command. The metadata is static so the registry can print usage and validate options before the service graph is booted.

The module-facing service surface: the collaborators a module controller may obtain from the core through BaseController::moduleServices().

Where a controller's pages go: the themed chrome and body in production (PageRenderer), a recorder in tests. A controller hands over the template and the parameters exactly as it built them.

Read access to settings by group and key.

A feature module: its routes, navigation items, capabilities and templates, enabled through configuration.

Who is acting in the current request: the session user on the web, the key owner on the API. Domain rules ask this instead of reading the session.

Exposes the most recent PowerDNS API error so domain checks can tell an outage from an empty backend.

Records or clears the most recent PowerDNS API error; the API client and backend provider write through this.

The audit events domain services record; the Application layer owns the line format and the actor context.

Capability probe telling callers which kind of DNS backend they hold.

Catalog zone membership reads and writes against the DNS backend.

Told about change request events so people can be notified. Implementations must not throw; a failed notification never undoes the event.

PowerDNS data access (domains, records, supermasters) over direct SQL or the PowerDNS API; Poweradmin-native tables stay on SQL.

DNSSEC operations for one zone.

Renders the account emails a preview tool can show; the Application layer owns the templates and their custom overrides.

Records login attempts and reports lockouts; the Application layer owns the storage and thresholds.

Delivers MFA email verification codes; the Application layer owns the template and transport.

Hashes and verifies user passwords; the Application layer owns the algorithm and cost settings.

Checks a password against the configured policy rules; the Application layer owns the configuration.

Merges the outbound HTTP proxy, when one applies to the URL, into a set of PHP stream context options.

Splits a hostname on the public suffix boundary, so that names under a multi-label suffix such as co.uk or com.pl are divided where registration actually happens rather than on the last dot.

Renders a string as a QR code for display in a page.

Records before/after snapshots of record and zone changes for the change log.

The per-record comment reads and writes the zone editor needs; the Application layer owns the storage.

Carries an edited record's comment over to its A/AAAA or PTR counterpart.

Record lookups by id, name or zone read from the DNS backend.

The search page's record half: matching records with their zone owner, paged and sorted, and the unpaged match count. Rows carry disabled as a bool.

Record add, edit and delete writes against the DNS backend.

A record write backend that sits behind a separate service which can refuse a write and say why (the PowerDNS API). Backends without one do not implement it.

Orders reverse zone names in PHP by the configured sort type.

Wildcard search over zones and records in the DNS backend.

SOA serial handling: whether PowerDNS bumps the serial itself and the zone serial policy metadata.

The request's session store. One implementation wraps PHP's own session, the other keeps the values in memory for tests and for request-scoped caches.

Supermaster (autoprimary) reads and writes against the DNS backend.

Time-based one-time passwords, as used by authenticator apps.

The request's unit of work: one transaction shared with every repository that writes through the same connection.

Tells PowerDNS that a zone written straight to its database changed, so a new zone is served at once and cached answers for the zone are dropped.

DNSSEC key lifecycle for a zone, plus the DS and DNSKEY records derived from its keys.

Zone lookups, listings, record counts and SOA health read from the DNS backend.

Rectifies a zone after its records change so the DNSSEC ordering data stays valid.

The search page's zone half: matching zones with their owners, paged and sorted, and the unpaged match count. Each backend keeps its own row shape.

Signing state of a zone: securing, unsecuring and reading whether it is signed.

Zone create, delete, kind, primary, account and AXFR-retrieve writes against the DNS backend.

Persistence for API keys.

The account rows the authenticators read while deciding a login.

Lookups on the domains table; implemented for SQL and for the API backend mode.

Persistence for the dynamic DNS update endpoint.

Persistence for the OIDC and SAML identity links that tie a provider subject to a local user.

Persistence for the login_attempts counters the authentication throttle reads and writes.

Persistence for password reset tokens and their rate-limit counters.

Persistence for permission templates and the permission items they bundle.

Persistence for RRset-level record comments; both backends implement it.

Comments linked to individual records through record_comment_links.

Zone-wide record listing, filtering, counting and RRset reads.

Single-record reads and existence checks within a zone.

Reads on the records table; implemented for SQL and for the API backend mode.

Persistence for admin-configured default TTLs per record type.

Builds the repositories a domain service needs on demand; the Application layer picks the SQL or API implementation for the configured backend.

Tracks which zone records a template application wrote, so a later application of the same template can remove exactly those records.

Account administration: listing, creating, updating and deleting users and moving their zones.

Persistence for the user agreement versions each user has accepted.

Write access to a user's stored password.

Read access to user groups and their membership by user.

Persistence for user group membership.

Persistence for user groups.

Creating, updating and deleting groups, plus the counts that guard a delete.

Read access to individual user accounts by id, name or email.

Persistence for per-user MFA settings.

The account rows the notification mailers address their messages to.

Read access to what a user may do: permissions, uberuser status, template grants and zone ownership.

Persistence for per-user interface preferences.

Persistence for user accounts and the zones they own.

Persistence for username recovery attempts and their rate-limit counters.

Resolves the owner whose username the PowerDNS account field mirrors.

Persistence for zone change requests. Lists come back newest first.

Persistence for group-based zone ownership.

Where a zone's metadata rows live: the domainmetadata table on the SQL backend, or the PowerDNS API (metadata plus zone-object properties) on the API backend. Rows are [['kind' => string, 'content' => string], ...].

Zone ownership reads and writes; one of the three roles ZoneRepositoryInterface combines.

Zone lookups, lists and counts; one of the three roles ZoneRepositoryInterface combines.

Zone reads and ownership writes; implemented for SQL and for the API backend mode.

Read access to zone SOA serials.

Persistence for zone templates (zone_templ), their records (zone_templ_records) and the zone -> template links kept in zones.zone_templ_id.

Tracks which zones are out of date against their template after the template changes.

Zone row, comment and metadata writes (plus the metadata read the editor pairs with them); one of the three roles ZoneRepositoryInterface combines.

Finds and repairs ownerless zones, masterless slave zones, orphaned records and missing or duplicate SOAs. One implementation per DNS backend.

Validator for one record type; DnsValidatorRegistry picks the implementation.

Validates a record before it is written.

Zone creation, update and deletion.

Record creation, update and deletion.

SOA record and serial handling.

User details returned by an external login provider (LDAP, OIDC or SAML).

Output sink for the PSR-3 Logger.