SpipCP
DNS

DNS in SpipCP: the two layers

The one model that prevents most DNS confusion โ€” delegation (the nameservers, set at the registrar) versus the records (A/CNAME/TXT, inside whoever is authoritative) โ€” then a posture to pick.

Everything network-facing lives in one place: the Networking section. It gathers how domains resolve (DNS), the certificates that secure them (SSL/TLS), and the operator's own nameserver boxes โ€” a single home, a bit like Cloudflare, except the posture is chosen explicitly and nothing is proxied or terminated upstream unless configured to be.

Networking โ–ธ  Domains ยท Providers ยท Nameservers ยท Edge proxy ยท SSL
  • Domains โ€” the fleet-wide inventory: one row per hostname, each tagged with its detected authority tier (Hosted / Connected / External). Before anything is attached, this page is the posture chooser + the demarcation matrix.
  • Providers โ€” managed provider accounts (the cascade), each showing the zones it holds, plus the switchboard for which providers are offered.
  • Nameservers โ€” the operator's own PowerDNS boxes and the self-hosted zone + record editor; each row links across to its Node, and a nameserver node links back here.
  • Edge proxy โ€” front an IPv6-only origin with dedicated public-IPv4 edge boxes.
  • SSL โ€” the certificate authorities (issuers) that are trusted, custom certificate upload, and the fleet cert-scenario coverage. (Per-domain cert state lives on Domains.)

Who controls the DNS? The three tiers

Every hostname is one of three detected tiers โ€” Hosted (nameservers run here), Connected (a provider account held on the panel's behalf), or External (someone else's DNS). The tier is detected, never picked. See Domains: the three tiers.

The one model below makes the choices make sense, and prevents most DNS confusion.

The two layers

Every domain's DNS is really two separate things stacked on top of each other. Mixing them up is the top cause of "I changed a record and nothing happened."

Layer 1 โ€” delegation: who is authoritative

Set at the registrar, on the domain. It answers "who is authoritative for example.com?" โ€” the nameservers. Commonly something like *.ns.cloudflare.com; with self-hosted DNS it becomes ns1.spipdns.com / ns2.spipdns.com. Changing the nameservers moves the whole zone's authority to a different system. It's not a record swap โ€” it's "move house."

Layer 2 โ€” the records: what the answers are

A / AAAA / CNAME / MX / TXT, and the wildcard. These live inside whoever is currently authoritative (the nameservers from Layer 1). With a managed provider, the panel writes them through that provider's API. Self-hosted, the panel writes them onto each dedicated box. Editing a record never changes who's authoritative โ€” it changes the answers that authority gives.

The rule that follows: a record only takes effect inside the nameservers a domain is currently delegated to. If example.com is delegated to Cloudflare but the record is added at Bunny, nothing happens โ€” Bunny isn't authoritative for that domain. Get Layer 1 right first, then Layer 2.

Where each path sits

Layer 1 (delegation)Layer 2 (records)
Managed providerAlready done โ€” delegation to the provider's nameservers happened when the domain was set up there. SpipCP doesn't touch it.SpipCP writes them via the provider's API (the DNS account cascade).
Self-hostedSpipCP owns this too โ€” delegation points to ns1/ns2.spipdns.com, which is why it needs the glue wizard and the nameserver boxes.SpipCP writes them onto each dedicated box.

A managed provider only touches Layer 2 โ€” delegation was already handled when the domain was pointed at that provider. Self-hosted owns both layers, the extra responsibility (and ownership) of running dedicated nameservers.

Choosing a posture

Every branded subdomain (roadmap.app1.com, *.roadmap.mydomain.com) needs DNS to resolve and a TLS certificate to serve. Before anything is attached, the Domains page presents three postures side by side for a knowing choice; once the first hostname is attached it becomes the fleet inventory. (The TLS half is always Caddy on the serving node โ€” see the passthrough guarantee.)

In one line:

  • Managed provider: least work, but a third party โ€” possibly US-hosted โ€” holds the records. EU options (Bunny, Hetzner, deSEC, Gcore) keep it managed but off US soil.
  • Self-hosted: both layers owned end to end โ€” true data ownership โ€” at the cost of running two nameserver boxes.
  • Manual (BYO DNS): keep DNS wherever it is today and add the attach record by hand.

The demarcation matrix

The Domains empty state renders this as a live capability matrix per posture โ€” what each one automates. The values are read from each provider's capability contract, never hard-coded:

Managed providerSelf-hosted nameserversManual (BYO DNS)
Self-service recordsโœ… panel writes them via the provider APIโœ… full editor in the panelโŒ added by hand
Wildcard cert (*.x)โœ… DNS-01 automaticโœ… DNS-01 automaticโŒ no credential to write the TXT
Per-host certโœ… HTTP-01 or DNS-01โœ… HTTP-01 or DNS-01โœ… HTTP-01 only
Hands-off onboardingโœ… fully scriptableโœ… fully scriptableโŒ a manual record step
Data ownershipprovider holds the recordsfully self-heldwherever the DNS lives

Self-hosted is now wildcard-capable too

Self-hosted nameservers used to be limited to per-host (HTTP-01) certificates. They now self-solve the DNS-01 challenge against a dedicated PowerDNS box, so the self-hosted posture earns the same โœ… for wildcards (and full scriptability) as a managed provider โ€” with none of the third-party trust. Both fully-automated columns can drive scripted onboarding end to end.

Where to go next

On this page