NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #3955 most downloaded on Packagist
Symfony polyfills backporting features to lower PHP versions
Last release today
07 Oct 2026
Release timing varies
gaps range from 2 weeks to 8 months
Nearly every release is documented
notes for 55 of 55 stable releases
Nothing withdrawn
no release was ever pulled
11 years old
55 releases · first in 2015
Changelog ( v1.43.0...v1.43.1 )
Changelog (v1.43.0...v1.43.1)
ArrayObject or ArrayIterator changing their deepclone_to_array() payloadminor #665 Add a security vulnerability reporting policy ( @thomas-chauchefoin-tob , @nicolas-grekas )
One column per quarter.
Changelog (v1.42.0...v1.43.0)
UUID_TYPE_TIME_V6, UUID_TYPE_TIME_V7, UUID_TYPE_VENDOR and UUID_TYPE_SECURITY constants, and create v6 and v7 UUIDs with uuid_create()
selectordinal support to the MessageFormatter polyfillIDNA_CHECK_CONTEXTJ on labels with several join controls, and reject xn-- labels that decode to surrogates or code points above U+10FFFFgrapheme_strrev()grapheme_levenshtein()grapheme_strrev() in standalone installs of symfony/polyfill-php86locale_is_right_to_left() and Locale::isRightToLeft()Collator sorting, English list patterns in IntlListFormatter, and number formatting in MessageFormatterbcceil(), bcfloor() and bcround()str_increment(), str_decrement(), ini_parse_quantity(), json_validate() and PhpTokenodbc_connection_string_is_quoted() and odbc_connection_string_should_quote()mb_convert_case() and mb_encode_numericentity()mb_ord(), mb_chr(), mb_str_split(), mb_convert_encoding() and mb_check_encoding()mb_convert_encoding() converts an arraymb_str_pad()iconv_substr(), iconv_strrpos() and //TRANSLIT without the Normalizer classNormalizer methods $string, and reject invalid forms in Normalizer::isNormalized()uuid_compare(), uuid_create(), uuid_time() and uuid_mac() with the extensionIo\Poll, report EINTR like the native backends, and stop busy-waitingIo\Poll\Context::wait(), watcher updates, and deepclone_to_array() on large object graphsdeepclone_*() payloads, errors and supported classes with serialize() and the extensiondeepclone_to_array()DatePeriod on PHP 8.1, and objects held by Random\Randomizer or HashContextChangelog ( v1.41.0...v1.42.0 )
Changelog (v1.41.0...v1.42.0)
Time\Duration class
Io\Poll\Context::wait() timeout as a Time\Durationidn_to_ascii()/idn_to_utf8()deepclone_from_array()minor #638 [Intl][Icu] Avoid pulling deprecated symfony/intl 5.4 on PHP < 8.1 ( @nicolas-grekas )
Changelog (v1.40.0...v1.41.0)
Io\Poll API and StreamPollHandle
ValueError on PHP 7 for json_validate(), str_increment(), str_decrement(), grapheme_str_split() and grapheme_levenshtein()grapheme_str[ri]?pos() familymb_str_split() polyfill with Mbstring and nativeChangelog ( v1.39.0...v1.40.0 )
Changelog (v1.39.0...v1.40.0)
$allow_named_closures option
Changelog ( v1.38.2...v1.39.0 )
Changelog (v1.38.2...v1.39.0)
Random\Randomizer instances on PHP 8.2deepclone_from_array() payloads that would build an uninitialized objectChangelog ( v1.38.1...v1.38.2 )
Changelog (v1.38.1...v1.38.2)
__serialize() nests another object
BcMath\Numberdeepclone_from_array() input without warningsmb_scrub()mb_str_pad()security # cve-2026-46644 [Intl][Idn] Reject xn-- labels whose Punycode payload decodes to ASCII-only ( @nicolas-grekas )
Changelog (v1.38.0...v1.38.1)
idn_to_ascii()/idn_to_utf8(): reject xn-- labels whose Punycode payload decodes to ASCII-only
grapheme_str_split() on PCRE 8mb_str_split() newline handling in the Php74 polyfillgrapheme_levenshtein() delegation in the Intl/Grapheme polyfillmb_* polyfills match the native string return type on PHP 8+CURLOPT_ISSUERCERT_BLOB and CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 constantsChangelog ( v1.37.0...v1.38.0 )
Changelog (v1.37.0...v1.38.0)
IntlDateFormatter::__construct() parameters (@Seb33300)normalizer_get_raw_decomposition()
IntlMessageFormatter::parseMessage() methodsymfony/intl dataUUID_TYPE_DCE and UUID_TYPE_NAME as deprecated on PHP 8.5+MessageFormatter patterns at configuration timemb_* polyfillsiconv() when //IGNORE is unsupported (e.g. on musl)mb_convert_encoding($s, $y, 'HTML-ENTITIES') match native outputIntlDateFormatter::__construct() parametersgrapheme_strrev() to return false on invalid UTF-8mb_strlen() for invalid UTF-8 inputmb_rtrim() missing unicode-awarenessmb_str_pad() invalid encoding error reportingstr_increment() for numeric strings beyond PHP_INT_MAXldap_exop_sync() polyfill on PHP < 8.3ReflectionConstant stub to declare its $persistent propertyPDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT when PHP is built without itChangelog ( v1.36.0...v1.37.0 )
Changelog (v1.36.0...v1.37.0)
grapheme_levenshtein() registration in polyfill-php85 (@xabbuh)grapheme_strrev()
locale_is_right_to_left() registration in polyfill-php85grapheme_levenshtein() registration in polyfill-php85Changelog ( v1.35.0...v1.36.0 )
Changelog (v1.35.0...v1.36.0)
__sleep()-listed uninitialized declared properties (@nicolas-grekas)Changelog ( v1.34.0...v1.35.0 )
Changelog (v1.34.0...v1.35.0)
ARRAY_FILTER_USE_VALUE constant (@Ayesh)deepclone_hydrate()
ARRAY_FILTER_USE_VALUE constantSortDirection enumDeepClone polyfillbug #504 Ctype: Give the correct deprecations for PHP 8.1+ ( @BackEndTea )
Changelog (v1.33.0...v1.34.0)
locale_is_right_to_left (@alexander-schranz)IntlListFormatter to ICU polyfill (@Ayesh)\Filter\FilterException and Filter\FilterFailedException (@Ayesh)clamp function (@kylekatarnls)symfony/deepclone extension
clamp()bcround(), bcceil() and bcfloor()grapheme_levenshtein()#[DelayedTargetValidation]Filter\FilterException and Filter\FilterFailedExceptionIntlListFormatter to ICU polyfilllocale_is_right_to_left()#[Deprecated] polyfillbcdiv() handling of DivisionByZeroErrorAdd polyfill for ReflectionConstant
ReflectionConstant
bcdivmod()grapheme_str_split()array_first() and array_last()json_validate() with properties containing a NUL bytePolyfill get_error_handler() and get_exception_handler()
#[\NoDiscard]fpowget_error_handler() and get_exception_handler()mb_rtrim for UTF-8 textBump minimum PHP version to 7.2
mb_trim, mb_ltrim and mb_rtrimCURL_HTTP_VERSION_3(ONLY) constantsPolyfill array_find, array_find_key, array_any and array_all
array_find, array_find_key, array_any and array_all
mb_ucfirst and mb_lcfirstmb_convert_encoding to accept an array of stringsFix the ini_parse_quantity() polyfill
ini_parse_quantity() polyfill
str_increment and str_decrement functionsSQLite3Exception classPolyfill stream_context_set_options()
ldap_exop_sync()
ldap_connect_wallet()stream_context_set_options()odbc_connection_string_is_quoted()odbc_connection_string_should_quote()odbc_connection_string_quote()ini_parse_quantity()mb_str_pad()#[\Override] attributeMB_CASE_FOLDCURLStringFile class introduced in PHP 8.1 (but only if PHP >= 7.4 is used)Date*Exception/Error classes introduced in PHP 8.3 for the Date/Time extensionAdd PHP 8.3 polyfill for json_validate()
json_validate()
Random interfaces, exceptions and Secure engineIntlDateFormatter::formatObject() signatureFix passing null to preg_split(), throwing a deprecation on PHP 8.1
preg_split(), throwing a deprecation on PHP 8.1Add PhpToken to the PHP 8.0 polyfill when the tokenizer extension is enabled
PhpToken to the PHP 8.0 polyfill when the tokenizer extension is enabled
str_ends_with() when needle is longer than haystackMimic deprecation from PHP 8.1 in IntlDateFormatter
IntlDateFormatter::RELATIVE_* constantsarray_is_listiconv_mime_decode() while using mbstring extensionPCRE_VERSION comparison when version has a timestampmb_substitute_character on PHP >= 8Allow null in str_*() functions
grapheme_str(r)ipos()added CURLStringFile to the PHP 8.1 polyfill
CURLStringFile to the PHP 8.1 polyfill
enum_exists() to the PHP 8.1 polyfillMYSQLI_REFRESH_REPLICA constant to PHP 8.1 polyfillReturnTypeWillChange to PHP 8.1 polyfillINTL_IDNA_VARIANT_2003 on PHP 8mb_parse_str()IntlDateFormatter::format() on 32b platformsmb_chr() in the PHP 7.2 polyfillmb_strrchr(), mb_detect_order(), iconv_substr(), grapheme_substr() on PHP 8always accept null values on PHP 8, as native functions do
synced values of Normalizer::* consts
Normalizer::* constsBump minimum PHP version to 7.1
Add a polyfill for the Attribute class
Attribute class
array_key_last()mb_strrchr()Stringable on PHP 8$length=null to grapheme_substr()iconv_substr() and grapheme_substr() on PHP 8Don't force labels containing URL delimiters to stay in their Unicode form when using idn_to_ascii()
idn_to_ascii()improve polyfill-idn to make it compliant with latest Unicode specs
UnhandledMatchError to the PHP 8 polyfillfix accuracy of Normalizer::isNormalized()
Normalizer::isNormalized()added get_resource_id() to the PHP 8 polyfill
get_resource_id() to the PHP 8 polyfill
intl is loadedadded str_starts_with() and str_ends_with() to the PHP 8 polyfill
str_starts_with() and str_ends_with() to the PHP 8 polyfill
PHP_FLOAT_* constantsspl_object_id() on 32-bit systemsidn_to_ascii() not failing on leading or trailing hyphen-minusadded interface Stringable to the PHP 8 polyfill
Stringable to the PHP 8 polyfill
get_debug_type() to the PHP 8 polyfillstr_contains() to the PHP 8 polyfillpreg_last_error_msg() to the PHP 8 polyfill* added PHP 8.0 polyfill
use correct block size for SHA1 in hash_pbkdf2() polyfill
hash_pbkdf2() polyfill
mb_str_split() ignoring new-line charactersfixed issues with the uuid polyfill
added polyfills for uuid_* functions
uuid_* functions
mb_str_split()* added PHP 7.4 polyfill
fixed support for IDN with trailing dot
JsonExceptionadded polyfill for idn_to_ascii() and idn_to_utf8()
idn_to_ascii() and idn_to_utf8()
MessageFormatterhash_pbkdf2() polyfillmb_ord(), mb_chr() and mb_scrub() polyfills in the php72 oneadded polyfills for array_key_first() and array_key_last()
hrtime()
array_key_first() and array_key_last()iconv() polyfill when using translit modeadded polyfills for ctype_* functions
ctype_* functionsadded logic to new stream functions on Windows (sapi_windows_vt100_support)
add SessionUpdateTimestampHandlerInterface in PHP 7.0 polyfill
SessionUpdateTimestampHandlerInterface in PHP 7.0 polyfill
added polyfill for spl_object_id()
PHP_OS_FAMILY polyfill* added PHP 7.2 polyfill
added missing validation to mb_convert_case()
added polyfill for is_iterable()
is_iterable()
mb_chr(), mb_ord() and mb_scrub()iconv_strlen() in mb_strlen() polyfillmb_convert_variables() poylfillbug #61 Normalizer::decompose() should reorder "recursive" combining chars (nicolas-grekas)
bug #40 [Apcu] Load APCUIterator only when APCIterator exists (nicolas-grekas)
feature #22 [APCu] A new polyfill for the legacy APC users (nicolas-grekas)
bug #14 ldap_escape does not encode leading/trailing spaces. (ChadSikorra)
* Hello symfony/polyfill
Your coding agent can read these notes before it upgrades. Set up the MCP server →