DNS TTL migration planner
Open DNS TTL migration planner on Happytails.ai. This view has the same page content and links, with explicit tool capabilities. Read the processing notes before using a tool.
Tool capabilities
{
"id": "dns-ttl-migration-planner",
"category": "developer-tools",
"built": true,
"requirements": "Wait for the old positive and negative cache retention after the last authority publishes the new TTL. Negative TTL is the lesser of SOA TTL and SOA MINIMUM. The supplied resolver floor, stale-answer allowance and safety margin are explicit assumptions. Authority lag applies to each publication. A manually selected earlier change retains the old high-TTL expiry in the retirement calculation. Outages, application caches, delegation changes and unbounded stale answers can exceed the model. This timeline does not guarantee global DNS propagation. Runs locally without uploads. Limit: 500000 combined input characters, 1000 services and 5000 conflicting pairs. Complete JSON and JSON Pointer CSV exports are each capped at 2000000 characters; CSV contains at most 200000 typed values. Preview shows at most 200 rows. Calculations stop after 10 seconds. Downloads retain your source inputs, units, assumptions and complete results.",
"implementation": {
"fields": [
{
"key": "lowerTtlAt",
"label": "Publish the new TTL at (UTC)",
"value": "2026-10-15T00:00:00Z",
"type": "text",
"maxLength": 24,
"help": "Enter an exact UTC timestamp with seconds, such as 2026-10-15T00:00:00Z. No local-time conversion is inferred."
},
{
"key": "oldTtlSeconds",
"label": "Old positive TTL (s)",
"value": "86400",
"type": "text",
"inputMode": "decimal",
"maxLength": 24,
"help": "Use a whole number of seconds from 0 to 2147483647."
},
{
"key": "newTtlSeconds",
"label": "New positive TTL (s)",
"value": "300",
"type": "text",
"inputMode": "decimal",
"maxLength": 24,
"help": "Use a whole number of seconds from 0 to 2147483647."
},
{
"key": "oldSoaTtlSeconds",
"label": "Old SOA TTL (s)",
"value": "3600",
"type": "text",
"inputMode": "decimal",
"maxLength": 24,
"help": "Use a whole number of seconds from 0 to 2147483647."
},
{
"key": "oldSoaMinimumSeconds",
"label": "Old SOA MINIMUM (s)",
"value": "900",
"type": "text",
"inputMode": "decimal",
"maxLength": 24,
"help": "Use a whole number from 0 to 4294967295. Negative-cache TTL is the lesser of SOA TTL and SOA MINIMUM."
},
{
"key": "newSoaTtlSeconds",
"label": "New SOA TTL (s)",
"value": "300",
"type": "text",
"inputMode": "decimal",
"maxLength": 24,
"help": "Use a whole number of seconds from 0 to 2147483647."
},
{
"key": "newSoaMinimumSeconds",
"label": "New SOA MINIMUM (s)",
"value": "60",
"type": "text",
"inputMode": "decimal",
"maxLength": 24,
"help": "Use a whole number from 0 to 4294967295. Negative-cache TTL is the lesser of SOA TTL and SOA MINIMUM."
},
{
"key": "authorityLagSeconds",
"label": "Authority publication lag (s)",
"value": "120",
"type": "text",
"inputMode": "decimal",
"maxLength": 24,
"help": "Use a whole number of seconds from 0 to 315360000. This is a supplied assumption, not a measured value."
},
{
"key": "resolverFloorSeconds",
"label": "Assumed resolver minimum retention (s)",
"value": "0",
"type": "text",
"inputMode": "decimal",
"maxLength": 24,
"help": "Use a whole number of seconds from 0 to 315360000. This is a supplied assumption, not a measured value."
},
{
"key": "serveStaleSeconds",
"label": "Assumed extra stale-answer retention (s)",
"value": "0",
"type": "text",
"inputMode": "decimal",
"maxLength": 24,
"help": "Use a whole number of seconds from 0 to 315360000. This is a supplied assumption, not a measured value."
},
{
"key": "safetySeconds",
"label": "Additional safety margin (s)",
"value": "60",
"type": "text",
"inputMode": "decimal",
"maxLength": 24,
"help": "Use a whole number of seconds from 0 to 315360000. This is a supplied assumption, not a measured value."
},
{
"key": "changeAt",
"label": "Publish the changed record at (UTC), optional",
"value": "",
"type": "text",
"maxLength": 24,
"help": "Optional. Leave empty to use the earliest modeled time; otherwise enter an exact UTC timestamp such as 2026-10-16T00:00:00Z."
}
],
"registrationFamily": "network-planning",
"input": false,
"presentation": "metrics",
"note": "Wait for the old positive and negative cache retention after the last authority publishes the new TTL. Negative TTL is the lesser of SOA TTL and SOA MINIMUM. The supplied resolver floor, stale-answer allowance and safety margin are explicit assumptions. Authority lag applies to each publication. A manually selected earlier change retains the old high-TTL expiry in the retirement calculation. Outages, application caches, delegation changes and unbounded stale answers can exceed the model. This timeline does not guarantee global DNS propagation. Runs locally without uploads. Limit: 500000 combined input characters, 1000 services and 5000 conflicting pairs. Complete JSON and JSON Pointer CSV exports are each capped at 2000000 characters; CSV contains at most 200000 typed values. Preview shows at most 200 rows. Calculations stop after 10 seconds. Downloads retain your source inputs, units, assumptions and complete results.",
"inputMaxLength": 500000,
"inputErrorCode": "NETWORK_PLANNING_INPUT",
"example": {
"input": "",
"options": {
"lowerTtlAt": "2026-10-15T00:00:00Z",
"oldTtlSeconds": "86400",
"newTtlSeconds": "300",
"oldSoaTtlSeconds": "3600",
"oldSoaMinimumSeconds": "900",
"newSoaTtlSeconds": "300",
"newSoaMinimumSeconds": "60",
"authorityLagSeconds": "120",
"resolverFloorSeconds": "0",
"serveStaleSeconds": "0",
"safetySeconds": "60",
"changeAt": ""
}
},
"experience": {
"automatic": false,
"single": false,
"inputMaxLength": 500000,
"inputMode": "text",
"label": "Your text",
"placeholder": "Type or paste your input…",
"help": "Up to 500,000 characters. Review the settings before running.",
"helpParts": [
"Up to 500,000 characters.",
"Review the settings before running."
],
"action": null
},
"mode": "explicit",
"interactive": false
},
"execution": "Browser interface",
"api": null,
"browser_agent": {
"supported": true,
"name": "run_current_tool",
"discovery": "WebMCP on the human page in a supporting browser",
"verification": "See audit/API-AUDIT.md; availability is not verification"
}
}Page guide
Build a DNS change timeline from positive and negative TTLs, authority lag and your cache assumptions.
How to use DNS TTL migration planner
- Set the UTC time for publishing the new TTL and enter old and new positive TTLs and SOA values.
- Enter authority lag, any resolver minimum retention, extra stale-answer retention and a safety margin.
- Review the suggested change and retirement times, or supply an earlier change time to inspect remaining cache exposure.
Useful next steps
Wait out records cached under the old TTL
The waiting period begins after the last authority is assumed to publish the new TTL. Old records could have been fetched just before that point. Negative-cache TTL uses the lesser of the SOA TTL and SOA MINIMUM. If you choose an earlier record change, the report retains the old high-TTL expiry in its retirement calculation.
Treat the schedule as a bounded scenario
Authority lag, resolver retention and extra stale-answer time are assumptions you provide. Outages, application caches, delegation changes, DNSSEC and unbounded stale-answer behavior may exceed them. The output is a UTC timeline, not a measurement of global propagation or a guarantee that every client has updated.