NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #499 most downloaded on Packagist
Web Push library for PHP
Last release 2 months ago
23 Jul 2026
Release timing varies
gaps range from 3 weeks to 1.1 years
Rarely documented
notes for 10 of 54 stable releases
Nothing withdrawn
no release was ever pulled
11 years old
56 releases · first in 2015
Cast TTL option to string in headers to avoid Guzzle deprecation warnings by @maciek-szn in #456
WebPush now depends on standard interfaces instead of Guzzle directly. Any PSR-18 client now works.
If you already have guzzlehttp/guzzle installed and call new WebPush(...) with no client-related arguments: no code changes needed. php-http/discovery auto-detects Guzzle and uses it. If you use flushPooled(), you now need one extra package, see below.
If you pass the old $timeout / $clientOptions constructor arguments, you must update that call.
Before:
public function __construct(
array $auth = [],
array $defaultOptions = [],
?int $timeout = 30,
array $clientOptions = [],
?LoggerInterface $logger = null
)After:
public function __construct(
array $auth = [],
array $defaultOptions = [],
?ClientInterface $client = null, // PSR-18
?RequestFactoryInterface $requestFactory = null, // PSR-17
?StreamFactoryInterface $streamFactory = null, // PSR-17
?HttpAsyncClient $asyncClient = null, // HTTPlug, optional, only needed for flushPooled()
?LoggerInterface $logger = null
)$timeout and $clientOptions are replaced by configuring your client instance directly:
Before:
$timeout = 20;
$clientOptions = [\GuzzleHttp\RequestOptions::ALLOW_REDIRECTS => false];
$webPush = new WebPush([], [], $timeout, $clientOptions);After:
$client = new \GuzzleHttp\Client([
'timeout' => 20,
\GuzzleHttp\RequestOptions::ALLOW_REDIRECTS => false,
]);
$webPush = new WebPush([], [], $client);If you were relying on the default (new WebPush()), nothing changes.
flushPooled() used Guzzle's Pool for real concurrent requests. PSR-18 has no concept of concurrency, so this now requires an HTTPlug async client: composer require php-http/guzzle7-adapter (if you use guzzle)
The requestConcurrency option is no longer used, HTTPlug async clients manage their own concurrency (e.g. php-http/guzzle7-adapter delegates to Guzzle's MultiCurl handler).
composer remove guzzlehttp/guzzle
composer require symfony/http-client nyholm/psr7$psr18Client = new \Symfony\Component\HttpClient\Psr18Client();
$webPush = new WebPush([], [], $psr18Client, $psr18Client, $psr18Client);For concurrent sending with a non-Guzzle stack (flushPooled), check the php-http adapter list for an HTTPlug adapter matching your client; otherwise use flush().
Full Changelog: v10.1.0...v11.0.0
One column per quarter.
feat: return static on Subscription::create() by @bitwise-operators in #453
Full Changelog: v10.0.3...v10.1.0
fix: base 64 errors introduced in v10.0.2. See #449
Full Changelog: v10.0.2...v10.0.3
fix: EC key generation for OpenSSL 3.6+ by @eyupcanakman in #448
json_encode by @Rotzbua in #437web-token/jwt-library by @Rotzbua in #438Full Changelog: v10.0.1...v10.0.2
feat: convert contentEncoding to typesafe enum by @Rotzbua in #423
Full Changelog: v10.0.0...v10.0.1
chore: drop php8.1; add php8.5 by @Rotzbua in #435
fix: option for concurrency not working by @Rotzbua in #426
Full Changelog: v9.0.3...v9.0.4
feat: add contentType option by @wapacro in #433
Fix typing and syntax tests by @Minishlink in #415
Full Changelog: v9.0.1...v9.0.2
Fix exception in rejected callback for HTTP connection errors when using flushPooled by @sleptor in #410
flushPooled by @sleptor in #410Full Changelog: v9.0.0...v9.0.1
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →