Edge

Advanced

Zone Editor

Edit your entire DNS zone as JSON for maximum flexibility. Perfect for complex geo-routing configurations, bulk changes, and advanced record management.

Accessing the Zone Editor

There are two ways to use advanced JSON editing:

Per-Record Advanced Mode

Switch to the "Advanced" tab when adding or editing a single record to see and edit its full JSON representation, including geo routing.

Click the "Advanced" tab in any record modal

Full Zone Editor

Toggle between Table and JSON view to edit all records at once. Ideal for bulk operations and complex configurations.

Use the Table/JSON toggle in the Records page header

Zone File Format

The zone file is a JSON object where keys are record types and values are arrays of records:

{
  "SOA": [{
    "name": "@",
    "ttl": 3600,
    "mname": "ns1-abc123.edge.network.",
    "rname": "hostmaster.example.com.",
    "refresh": 3600,
    "retry": 900,
    "expire": 604800,
    "minimum": 300
  }],
  "NS": [
    { "name": "@", "data": "ns1-abc123.edge.network.", "ttl": 3600 },
    { "name": "@", "data": "ns2-abc123.edge.network.", "ttl": 3600 }
  ],
  "A": [
    { "name": "@", "data": "185.1.1.1", "ttl": 300 },
    { "name": "www", "data": "185.1.1.1", "ttl": 300 },
    { "name": "api", "data": "185.1.1.2", "ttl": 60 }
  ],
  "AAAA": [
    { "name": "@", "data": "2001:db8::1", "ttl": 300 }
  ],
  "CNAME": [
    { "name": "blog", "data": "www.example.com.", "ttl": 3600 }
  ],
  "MX": [
    { "name": "@", "data": "mail.example.com.", "ttl": 3600, "priority": 10 }
  ],
  "TXT": [
    { "name": "@", "data": "v=spf1 include:_spf.google.com ~all", "ttl": 3600 }
  ]
}

SOA and NS records are managed automatically

The SOA record and apex NS records are shown for reference but are automatically generated when syncing to DNS servers. The SOA serial number is updated automatically whenever you make changes. Edits to these records in the JSON editor will be ignored.

Record Types Reference

SOA Record (Auto-managed)

Start of Authority - defines zone parameters

{
  "name": "@",
  "ttl": 3600,
  "mname": "ns1-abc123.edge.network.",
  "rname": "hostmaster.example.com.",
  "refresh": 3600,
  "retry": 900,
  "expire": 604800,
  "minimum": 300
}

Note: SOA records are auto-generated by Edge DNS. The serial number (in YYYYMMDDNN format) is automatically updated whenever zone changes are synced.

A Record

Maps a domain to an IPv4 address

{
  "name": "@",
  "data": "185.1.1.1",
  "ttl": 300,
  "geo": {
    "EU": "185.2.2.2",
    "US": "185.3.3.3",
    "AS": "185.4.4.4"
  }
}

geo is optional. See Geographic Routing.

AAAA Record

Maps a domain to an IPv6 address

{
  "name": "@",
  "data": "2001:db8::1",
  "ttl": 300,
  "geo": {
    "EU": "2001:db8::2"
  }
}

CNAME Record

Creates an alias pointing to another domain

{
  "name": "www",
  "data": "example.com.",
  "ttl": 3600,
  "geo": {
    "US": "us.example.com.",
    "EU": "eu.example.com."
  }
}

Note: CNAME cannot be at the zone apex (@). Use ALIAS instead.

ALIAS Record

CNAME-like functionality at the zone apex

{
  "name": "@",
  "data": "loadbalancer.edge.network.",
  "ttl": 300
}

ALIAS records resolve the target hostname and return A/AAAA records.

MX Record

Specifies mail servers for the domain

{
  "name": "@",
  "data": "aspmx.l.google.com.",
  "ttl": 3600,
  "priority": 1
}

priority is required. Lower values = higher priority.

Multiple MX records for redundancy:

"MX": [
  { "name": "@", "data": "aspmx.l.google.com.", "ttl": 3600, "priority": 1 },
  { "name": "@", "data": "alt1.aspmx.l.google.com.", "ttl": 3600, "priority": 5 },
  { "name": "@", "data": "alt2.aspmx.l.google.com.", "ttl": 3600, "priority": 5 },
  { "name": "@", "data": "alt3.aspmx.l.google.com.", "ttl": 3600, "priority": 10 },
  { "name": "@", "data": "alt4.aspmx.l.google.com.", "ttl": 3600, "priority": 10 }
]

TXT Record

Stores text data for various purposes (SPF, DKIM, verification)

{
  "name": "@",
  "data": "v=spf1 include:_spf.google.com ~all",
  "ttl": 3600
}

For long TXT records (like DKIM), use an array:

{
  "name": "google._domainkey",
  "data": [
    "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...",
    "...continuation of long key..."
  ],
  "ttl": 3600
}

Array values are automatically joined for DNS responses.

NS Record

Delegates a subdomain to other nameservers

Apex NS records (at @) are auto-managed by Edge DNS based on your account's assigned nameservers.

Subdomain delegation: Use NS records to delegate subdomains to other providers:

{
  "name": "subdomain",
  "data": "ns1.otherprovider.com.",
  "ttl": 3600
}

Add multiple NS records for the same subdomain for redundancy.

CAA Record

Specifies which Certificate Authorities can issue certificates

{
  "name": "@",
  "data": "0 issue letsencrypt.org",
  "ttl": 3600
}

Format: <flags> <tag> <value>. Tags: issue, issuewild, iodef.

Common CAA configurations:

"CAA": [
  { "name": "@", "data": "0 issue letsencrypt.org", "ttl": 3600 },
  { "name": "@", "data": "0 issuewild letsencrypt.org", "ttl": 3600 },
  { "name": "@", "data": "0 iodef mailto:ssl@example.com", "ttl": 3600 }
]

SRV Record

Specifies service locations (used for SIP, XMPP, etc.)

{
  "name": "_sip._tcp",
  "data": "10 5 5060 sipserver.example.com.",
  "ttl": 3600
}

Format: <priority> <weight> <port> <target>

PTR Record

Reverse DNS lookup (IP to hostname)

{
  "name": "1",
  "data": "server1.example.com.",
  "ttl": 3600
}

Used in reverse DNS zones like 1.168.192.in-addr.arpa.

Complex Geographic Routing

The Zone Editor makes it easy to configure complex geo routing scenarios:

Global CDN with Regional Endpoints

{
  "A": [
    {
      "name": "cdn",
      "data": "185.1.1.1",
      "ttl": 60,
      "geo": {
        "NA": "185.2.2.2",
        "US-WEST": "185.2.2.10",
        "US-EAST": "185.2.2.11",
        "CA": "185.2.2.12",
        "EU": "185.3.3.3",
        "GB": "185.3.3.10",
        "DE": "185.3.3.11",
        "NL": "185.3.3.12",
        "AS": "185.4.4.4",
        "JP": "185.4.4.10",
        "SG": "185.4.4.11",
        "IN": "185.4.4.12",
        "OC": "185.5.5.5",
        "AU": "185.5.5.10"
      }
    }
  ]
}

API with Failover by Region

{
  "A": [
    {
      "name": "api",
      "data": "10.0.0.1",
      "ttl": 300,
      "geo": {
        "US": "10.0.1.1",
        "EU": "10.0.2.1",
        "AS": "10.0.3.1"
      }
    },
    {
      "name": "api",
      "data": "10.0.0.2",
      "ttl": 300,
      "geo": {
        "US": "10.0.1.2",
        "EU": "10.0.2.2",
        "AS": "10.0.3.2"
      }
    }
  ]
}

Multiple A records with the same name provide round-robin load balancing per region.

Regional CNAME Aliases

{
  "CNAME": [
    {
      "name": "www",
      "data": "global.example.com.",
      "ttl": 300,
      "geo": {
        "US": "us.example.com.",
        "EU": "eu.example.com.",
        "AS": "asia.example.com."
      }
    }
  ]
}

Complete Zone Example

Here's a complete zone configuration as shown in the Zone Editor. SOA and apex NS records are displayed for reference but managed automatically:

{
  "SOA": [{
    "name": "@",
    "ttl": 3600,
    "mname": "ns1-abc123.edge.network.",
    "rname": "hostmaster.example.com.",
    "refresh": 3600,
    "retry": 900,
    "expire": 604800,
    "minimum": 300
  }],
  "NS": [
    { "name": "@", "data": "ns1-abc123.edge.network.", "ttl": 3600 },
    { "name": "@", "data": "ns2-abc123.edge.network.", "ttl": 3600 },
    { "name": "subdomain", "data": "ns1.otherprovider.com.", "ttl": 86400 },
    { "name": "subdomain", "data": "ns2.otherprovider.com.", "ttl": 86400 }
  ],
  "A": [
    {
      "name": "@",
      "data": "185.1.1.1",
      "ttl": 300,
      "geo": {
        "EU": "185.2.2.2",
        "US": "185.3.3.3"
      }
    },
    { "name": "www", "data": "185.1.1.1", "ttl": 300 },
    { "name": "mail", "data": "185.1.1.10", "ttl": 3600 },
    { "name": "api", "data": "185.1.1.20", "ttl": 60 }
  ],
  "AAAA": [
    { "name": "@", "data": "2001:db8::1", "ttl": 300 },
    { "name": "www", "data": "2001:db8::1", "ttl": 300 }
  ],
  "CNAME": [
    { "name": "blog", "data": "www.example.com.", "ttl": 3600 },
    { "name": "docs", "data": "docs.gitbook.io.", "ttl": 3600 },
    { "name": "status", "data": "status.example.com.", "ttl": 3600 }
  ],
  "ALIAS": [
    { "name": "cdn", "data": "gateway.edge.network.", "ttl": 300 }
  ],
  "MX": [
    { "name": "@", "data": "aspmx.l.google.com.", "ttl": 3600, "priority": 1 },
    { "name": "@", "data": "alt1.aspmx.l.google.com.", "ttl": 3600, "priority": 5 },
    { "name": "@", "data": "alt2.aspmx.l.google.com.", "ttl": 3600, "priority": 5 }
  ],
  "TXT": [
    { "name": "@", "data": "v=spf1 include:_spf.google.com ~all", "ttl": 3600 },
    { "name": "_dmarc", "data": "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com", "ttl": 3600 },
    {
      "name": "google._domainkey",
      "data": [
        "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...",
        "...rest of DKIM key..."
      ],
      "ttl": 3600
    }
  ],
  "CAA": [
    { "name": "@", "data": "0 issue letsencrypt.org", "ttl": 3600 },
    { "name": "@", "data": "0 issuewild letsencrypt.org", "ttl": 3600 }
  ]
}

Geographic Region Codes

Use these codes in the geo object:

Category Codes
Continents NA (North America), SA (South America), EU (Europe), AS (Asia), OC (Oceania), AF (Africa)
US Regions US, US-WEST, US-CENTRAL, US-EAST
Countries ISO 3166-1 alpha-2 codes: GB, DE, FR, JP, AU, IN, SG, NL, CA, etc.
Directional WEST, EAST, CENTRAL, SOUTHEAST

Resolution priority: Country codes take precedence over region codes. A user in Germany with both DE and EU defined will receive the DE value.

Tips & Best Practices

Validate JSON before saving

The editor shows validation errors in real-time. Fix all errors before saving.

End hostnames with a dot

CNAME, MX, and NS targets should end with . (e.g., mail.google.com.) to indicate they are fully qualified.

Use @ for the zone apex

The special name @ represents the root of your domain.

Lower TTLs for dynamic content

Use 60-300 seconds for records that may change. Use 3600+ for stable records.

SOA serial updates automatically

The SOA serial number is automatically incremented when you save changes, ensuring secondary DNS servers receive updates correctly.

Use Sync to push changes

After editing, use "Sync to DNS" to push changes to all DNS servers immediately. Changes are also synced automatically in the background.

Related Topics