Dialog configuration
Locale, branding, setup policy, DKIM guidance, and safe copy controls.
All configuration is validated by Domain0ConnectConfigurationSchema before
the dialog is mounted.
| Option | Purpose |
|---|---|
applicationName | Customer-visible product name |
locale | Connect interface locale |
whiteLabel | Logo, theme, copy, and bounded behavior controls |
setupPolicy | Automatic setup, conflict behavior, SPF behavior, or forced guided setup |
domainConnectTemplate | Provider-onboarded record template for Domain Connect DNS providers |
manualSetupDocumentation | Application-owned HTTPS setup guide |
enableDkim | Show post-connection DKIM guidance |
dkimSelectors | Up to ten selectors to check during DKIM guidance |
presentation | Modal dialog or inline rendering |
| lifecycle callbacks | Success, close, step, connection, and documentation events |
Locale
await domain0.connectDomain({
client,
connectionId,
locale: 'de',
})Supported locale identifiers are exported by Domain0LocaleSchema. Incomplete
native catalogs fall back to English explicitly instead of guessing a locale.
Domain Connect template
Cloudflare, GoDaddy, IONOS, NameSilo, Vercel, and WordPress.com use only Domain Connect for automatic setup. Pass the service template that your application has onboarded with those DNS providers:
await domain0.connectDomain({
client,
connectionId,
domainConnectTemplate: {
serviceProviderId: 'service.example',
serviceId: 'website',
properties: { target: 'edge.service.example' },
},
})If the exact template is missing or rejected, the SDK uses guided manual setup. It never asks for broader provider account or zone credentials instead.
White label
await domain0.connectDomain({
client,
connectionId,
applicationName: 'Acme Cloud',
whiteLabel: {
logo: 'https://app.acme.com/brand/logo.svg',
theme: {
colorMode: 'system',
light: { primary: '#172554', onPrimary: '#ffffff' },
widthPx: 680,
dialogRadiusPx: 16,
},
copy: {
successTitle: { en: '{DOMAIN} is connected' },
successButton: { en: 'Return to Acme' },
},
},
})Theme values are semantic, bounded tokens—not arbitrary CSS. Copy is plain text, has an English fallback, and supports only documented placeholders. See the complete white-label reference.
Force guided manual setup
Automatic mode is the default. Safe plans advance through read, confirmation, apply, and propagation without additional customer actions. A plan that would replace or remove an existing record always pauses for explicit consent.
await domain0.connectDomain({
client,
connectionId,
setupPolicy: {
mode: 'automatic',
conflictPolicy: 'replace_same_name_and_type',
spfPolicy: 'merge',
},
})conflictPolicy accepts preserve, replace_same_name_and_type, or
replace_all_at_name. spfPolicy accepts merge or replace. Replacement
remains destructive and cannot bypass the confirmation screen.
Force guided setup only when your integration requires it:
await domain0.connectDomain({
client,
connectionId,
setupPolicy: { mode: 'manual' },
})Manual mode never asks for provider credentials. It renders the exact effective records and still waits for authoritative DNS verification.
DKIM guidance
await domain0.connectDomain({
client,
connectionId,
enableDkim: true,
dkimSelectors: ['mail-2026'],
})DKIM guidance reports bounded DNS evidence and links to fixed official provider material. It does not claim that signing is enabled in the provider account.