A single script, one wrongly incremented number, and an entire release candidate effectively ceases to exist. That is exactly what happened to PHP 8.6.0 RC1 on September 24, 2026. Instead of the planned first testing release, developers worldwide suddenly saw PHP 8.6 RC2 in their download lists, without an official RC1 ever having existed to test. What looks like a small numbering mix-up at first glance turns out, on closer inspection, to be a very concrete technical bug in PHP’s release automation process.
Table of Contents
Key Takeaways
- On September 24, 2026, PHP 8.6.0 RC1 was supposed to ship, but a script bug caused it to be immediately replaced by PHP 8.6 RC2.
- The cause was an internal API version number (ZEND_EXTENSION_API_NO, ZEND_MODULE_API_NO, PHP_API_VERSION) bumped too early.
- For users and testers, practically nothing changes: the code content of RC2 is identical to what RC1 was supposed to be.
- PHP 8.6 brings, among other things, a pipe operator, clone-with for readonly classes, and a native URI extension.
- The next release is RC3 on October 8, 2026, with the final release planned for November 19, 2026.
What happened on September 24, 2026?
The PHP schedule called for the first release candidate of PHP 8.6.0 on September 24, 2026 — the moment a new major version is officially opened up for testing for the first time. The release team, consisting of release managers Matteo and Joe, ran into a problem immediately after tagging RC1: the automation script that manages the internal API version numbers when branching a new PHP version had incremented those numbers at the wrong point in time.
Three internal constants have to be synchronized with every new branch:
- ZEND_EXTENSION_API_NO, which determines which PHP version a Zend extension is compatible with.
- ZEND_MODULE_API_NO, which controls which PHP version a compiled extension (module) is allowed to work with.
- PHP_API_VERSION, the base interface version for extensions that access the PHP C API.
These numbers are critical to ensuring compiled extensions don’t accidentally get loaded with an incompatible PHP version. According to the explanation from PHP core developer Scherzer in his blog post from September 23, 2026, the API version number in a new branch must generally be higher than in the previous branch. That is the only way to prevent build systems and extensions from different PHP versions from colliding with each other.
"The API version number in the new branch needs to be higher than in the old one, so builds don’t collide."
That is exactly where the bug occurred: the automation script incremented the version number at branch-creation time — far too early. The correct behavior would have been to perform the increment only at the last release candidate, immediately before the final tag. Because this mechanism is deeply embedded in the build infrastructure, one mistimed script run was enough to effectively invalidate the entire RC1 tag.
What does PHP 8.6 RC2 mean for developers and testers?
For practical purposes, the message is refreshingly unspectacular: nothing changes except the version number. The code developers download and test under PHP 8.6 RC2 is identical in content to what was originally planned as RC1. There are no added features, no removed functions, and no functional differences — only the previously faulty internal API version numbers were corrected.
Anyone who already tried to download or test the short-lived RC1 should switch to RC2. The following points matter for testers:
| Aspect | RC1 status | RC2 status |
|---|---|---|
| Feature scope | As planned | Identical to RC1 |
| API version numbers | Incorrectly set | Corrected |
| Official status | Effectively withdrawn | Current test release |
| Extension compatibility | Potentially broken | As intended |
The fix matters especially for maintainers of PHP extensions and package managers, since these exact API numbers determine whether compiled modules match a given PHP version. Production use of PHP 8.6 isn’t intended at this stage anyway — release candidates exist purely for testing in development and staging environments.
The most important changes in PHP 8.6
For more on the concrete impact on real projects, see our related article Laravel 13.33 and PHP 8.6 RC1: What Developers Need to Know.
Independent of the version-numbering mix-up around the release candidates, PHP 8.6 brings a number of notable content changes that matter for day-to-day development work.
Clone-with for readonly classes: Until now, updating a single property on an immutable object was often cumbersome, especially when only one field needed to change on a copy. With clone-with, developers can clone a readonly object while selectively overriding individual properties, without breaking the immutability of the original.
Built-in URI extension: PHP 8.6 ships a native extension for handling URIs, based on the RFC 3986 and WHATWG URL standards. For many use cases, developers no longer need external libraries to reliably parse, normalize, and assemble URLs.
These two changes count among the most visible additions, but they are not the only improvements in the upcoming release. Overall, PHP 8.6 shows a clear trend: more expressiveness in the language itself and less reliance on external packages for everyday tasks.
Timeline to the final release
The incident around RC1 and RC2 has not changed the overall schedule for PHP 8.6. The release team is sticking to the original roadmap — only the candidate numbering now starts at RC2 instead of RC1.
- September 24, 2026: Planned release of RC1, replaced by RC2 due to the API version bug.
- October 8, 2026: Planned release of RC3.
- November 19, 2026: Planned final release of PHP 8.6.0.
Between RC2 and the final release, further testing phases remain, during which additional bug fixes and final adjustments can still land. For teams planning to run PHP 8.6 in production, that means there’s still plenty of time to run compatibility tests against existing codebases, extensions, and frameworks before the version is considered stable in mid-November.
Conclusion
The jump from RC1 to PHP 8.6 RC2 is, first and foremost, an organizational footnote in the history of PHP 8.6 — technically understandable, clearly documented, and without any impact on the language’s actual feature set. The bug in the automation script, which incremented the API version numbers at the wrong time, was quickly caught by the release team and fixed by immediately publishing RC2. For developers, that mainly means one thing: when testing, consistently use RC2 or later candidates, and treat RC1 as if it never existed.
More important than the version jump itself are the actual changes coming with PHP 8.6, from the pipe operator to clone-with to the built-in URI extension. Anyone working with PHP in production should use the coming weeks to test their own projects against the release candidates, particularly checking existing extensions for compatibility with the corrected API version numbers. With RC3 on October 8, 2026, and the final release on November 19, 2026, there’s enough lead time to be properly prepared.






