Skip to main content
graphwiz.aigraphwiz.ai
← Back to DevOps

IPv6 Crosses 50%: The 28-Year Milestone

DevOpsNetworking
ipv6networkinginternetmilestoneinfrastructure

On 28 March 2026, Google's IPv6 statistics crossed a line that seemed perpetually out of reach: 50.1% of traffic to Google services arrived over IPv6. For a protocol first specified in RFC 2460 in December 1998, and for an internet that has been running on an address scheme designed for a few billion devices while connecting tens of billions, this is a structural shift, not just a statistic.

<svg viewBox="0 0 460 240" xmlns="http://www.w3.org/2000/svg" style="width:100%;max-width:460px;margin:1.5rem auto;display:block;font-family:system-ui,sans-serif"> <rect x="0" y="0" width="460" height="240" rx="8" fill="var(--background-secondary)"/> <text x="230" y="20" text-anchor="middle" fill="var(--foreground)" font-size="12" font-weight="600">Global IPv6 Adoption (Google Measurements)</text> <!-- Y axis --> <line x1="50" y1="35" x2="50" y2="200" stroke="var(--foreground-secondary)" stroke-width="0.5"/> <text x="40" y="42" text-anchor="end" fill="var(--foreground-secondary)" font-size="7">50%</text> <text x="40" y="72" text-anchor="end" fill="var(--foreground-secondary)" font-size="7">40%</text> <text x="40" y="102" text-anchor="end" fill="var(--foreground-secondary)" font-size="7">30%</text> <text x="40" y="132" text-anchor="end" fill="var(--foreground-secondary)" font-size="7">20%</text> <text x="40" y="162" text-anchor="end" fill="var(--foreground-secondary)" font-size="7">10%</text> <text x="40" y="200" text-anchor="end" fill="var(--foreground-secondary)" font-size="7">0%</text> <!-- Grid lines --> <line x1="50" y1="40" x2="420" y2="40" stroke="var(--foreground-secondary)" stroke-width="0.3" stroke-dasharray="3 3"/> <line x1="50" y1="70" x2="420" y2="70" stroke="var(--foreground-secondary)" stroke-width="0.3" stroke-dasharray="3 3"/> <line x1="50" y1="100" x2="420" y2="100" stroke="var(--foreground-secondary)" stroke-width="0.3" stroke-dasharray="3 3"/> <line x1="50" y1="130" x2="420" y2="130" stroke="var(--foreground-secondary)" stroke-width="0.3" stroke-dasharray="3 3"/> <line x1="50" y1="160" x2="420" y2="160" stroke="var(--foreground-secondary)" stroke-width="0.3" stroke-dasharray="3 3"/> <!-- X axis --> <line x1="50" y1="200" x2="420" y2="200" stroke="var(--foreground-secondary)" stroke-width="0.5"/> <text x="80" y="215" text-anchor="middle" fill="var(--foreground-secondary)" font-size="7">2012</text> <text x="140" y="215" text-anchor="middle" fill="var(--foreground-secondary)" font-size="7">2015</text> <text x="200" y="215" text-anchor="middle" fill="var(--foreground-secondary)" font-size="7">2018</text> <text x="260" y="215" text-anchor="middle" fill="var(--foreground-secondary)" font-size="7">2021</text> <text x="320" y="215" text-anchor="middle" fill="var(--foreground-secondary)" font-size="7">2024</text> <text x="380" y="215" text-anchor="middle" fill="var(--foreground-secondary)" font-size="7">2026</text> <!-- Data line (approximate real data points) --> <!-- 2012: ~1% → y=197, 2015: ~10% → y=170, 2018: ~25% → y=125, 2021: ~35% → y=95, 2024: ~43% → y=71, 2026: ~50% → y=50 --> <polyline points="80,197 140,170 200,125 260,95 320,71 380,50" fill="none" stroke="var(--accent)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <!-- Data points --> <circle cx="80" cy="197" r="3" fill="var(--accent)"/> <circle cx="140" cy="170" r="3" fill="var(--accent)"/> <circle cx="200" cy="125" r="3" fill="var(--accent)"/> <circle cx="260" cy="95" r="3" fill="var(--accent)"/> <circle cx="320" cy="71" r="3" fill="var(--accent)"/> <circle cx="380" cy="50" r="5" fill="var(--accent)" stroke="var(--accent)" stroke-width="2"/> <!-- 50% annotation --> <line x1="380" y1="50" x2="420" y2="38" stroke="var(--accent)" stroke-width="1" stroke-dasharray="2 2"/> <rect x="360" y="24" width="100" height="16" rx="3" fill="var(--accent)" opacity="0.12"/> <text x="410" y="35" text-anchor="middle" fill="var(--accent)" font-size="8" font-weight="600">50.1% reached</text> <!-- Other metrics --> <text x="230" y="235" text-anchor="middle" fill="var(--foreground-secondary)" font-size="7">Cloudflare: 40.1% HTTP requests · APNIC: 43.13% network capability · HN discussion: 794 points</text> </svg>

The measurement landscape

Different organisations measure IPv6 adoption differently, and the numbers don't always agree:

  • Google: 50.1% of traffic to Google services (the milestone marker)
  • Cloudflare: 40.1% of HTTP requests across its CDN
  • APNIC: 43.13% of networks have IPv6 capability

The discrepancy reflects measurement methodology. Google measures traffic from end users who have successfully connected over IPv6. Cloudflare measures HTTP requests, which includes traffic from IPv6-capable networks that may still prefer IPv4. APNIC measures network-level capability, which is a superset of actual usage. All three show the same trend: accelerating adoption.

Why it took 28 years

IPv4 addresses 4.3 billion devices. The internet connected its 4.3 billionth device roughly a decade ago, and has since relied on Network Address Translation (NAT) to stretch the address space. NAT works, but it breaks end-to-end connectivity, complicates peer-to-peer protocols, and adds latency.

IPv6 provides 340 undecillion addresses. The protocol itself has been ready since 1998. The delay came from three compounding factors:

Carrier inertia. ISPs had invested billions in IPv4 infrastructure and saw no revenue upside in deploying IPv6. The turning point came when IPv4 address exhaustion made NAT unavoidable, and maintaining increasingly complex NAT stacks became more expensive than deploying IPv6.

Application compatibility. Early IPv6 deployments exposed bugs in operating systems, routers, and applications that assumed IPv4. These have been largely resolved, but legacy systems in enterprise environments still pose problems.

No killer application. For most users, IPv4 with NAT works fine. Web browsing, email, and streaming all function behind NAT. The benefits of IPv6 (simpler networking, better peer-to-peer, no NAT overhead) are invisible to end users. The transition happened not because users demanded it, but because operators were forced into it.

Regional disparities

Adoption is not uniform. Asia-Pacific crossed the 50% threshold in 2025, driven by aggressive IPv6 deployment in India, Japan, and South Korea. North American adoption has been steady but slower, hampered by large cable operators with deep IPv4 investments. European adoption sits between the two, with Germany and France leading.

The GitHub gap

The Hacker News discussion (794 points, 583 comments) quickly identified a notable holdout: GitHub still does not support IPv6. For a platform that serves as critical infrastructure for much of the software development world, this is a conspicuous gap. Git operations, API calls, and package downloads all route over IPv4. The discussion produced no official response from GitHub, but the community pressure is mounting.

What changes after 50%

The practical implications of majority IPv6 adoption are significant for infrastructure teams:

  • Dual-stack complexity remains the operational reality. IPv4 will not disappear. Organisations must maintain both stacks for the foreseeable future, which means continued complexity in firewall rules, monitoring, and debugging.
  • NAT traversal becomes simpler for IPv6-connected peers. Applications that use WebRTC, peer-to-peer file transfer, or IoT device communication benefit from native end-to-end connectivity.
  • IoT scalability improves. The address space pressure that forced NAT on IPv4 networks disappears for IPv6-only device fleets.
  • The "last mile" problem persists. Home routers, small business networks, and legacy IoT devices still run IPv4. The transition will be complete when the last IPv4-only device is decommissioned, which could be decades away.

The 50% mark is psychological as much as technical. It signals that IPv6 is no longer the future of the internet. It is the present.