minishlink/web-push
Web Push library for PHP
v11.0.0
17M downloads/mo
#525 most downloaded on Packagist
web-push-libs/web-push-php
What this package is like to depend on
Last release 1 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
8 releases in the last 12 months
see the full history below
Release timeline
56 releases · Nov 2015 to Jul 2026Releases
latest 56-
v11.0.023 Jul 2026Release notes
Open source →Migration
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/discoveryauto-detects Guzzle and uses it. If you useflushPooled(), you now need one extra package, see below.If you pass the old $timeout / $clientOptions constructor arguments, you must update that call.
Constructor signature change
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.
Keeping flushPooled() concurrency
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).
Using a different PSR-18 client entirely
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().
What's Changed
- (breaking) feat: use PSR-18 http interface (or http async) by @Minishlink in #458
- Cast TTL option to string in headers to avoid Guzzle deprecation warnings by @maciek-szn in #456
New Contributors
- @maciek-szn made their first contribution in #456
Full Changelog: v10.1.0...v11.0.0
-
v10.1.028 May 2026Release notes
Open source →What's Changed
- feat: return static on Subscription::create() by @bitwise-operators in #453
- feat: support PSR-3 logger in requirement checks (#451) by @la-refactory in #452
New Contributors
- @bitwise-operators made their first contribution in #453
- @la-refactory made their first contribution in #452
Full Changelog: v10.0.3...v10.1.0
-
v10.0.309 Mar 2026Release notes
Open source →What's Changed
- fix: base 64 errors introduced in v10.0.2. See #449
Full Changelog: v10.0.2...v10.0.3
-
v10.0.205 Mar 2026Release notes
Open source →What's Changed
- fix: EC key generation for OpenSSL 3.6+ by @eyupcanakman in #448
- chore: use code style PER Coding Style 3.0 by @Rotzbua in #436
- chore: use more explicit error handling with
json_encodeby @Rotzbua in #437 - chore: improve VAPID config doc and type hints by @Rotzbua in #443
- chore: add override by @Rotzbua in #439
- chore: add PHPStan extensions by @Rotzbua in #440
- chore: use base64 fn from
web-token/jwt-libraryby @Rotzbua in #438 - chore: bump actions/cache from 4 to 5 in the github-actions group by @dependabot[bot] in #444
- chore: show OpenSSL version in CI by @Rotzbua in #446
New Contributors
- @eyupcanakman made their first contribution in #448
Full Changelog: v10.0.1...v10.0.2
-
v10.0.115 Dec 2025 -
v10.0.012 Dec 2025Release notes
Open source → -
v9.0.410 Dec 2025Release notes
Open source →What's Changed
- fix: option for concurrency not working by @Rotzbua in #426
- feat: hide sensitive parameters in stack traces by @Rotzbua in #425
- chore: add php8.4 tests in CI by @Rotzbua in #421
- chore: remove ignored error in phpstan by @Rotzbua in #424
- chore: update php-cs-fixer by @Minishlink in #434
Full Changelog: v9.0.3...v9.0.4
-
v9.0.313 Nov 2025Release notes
Open source →What's Changed
- feat: add contentType option by @wapacro in #433
- chore: upgrade dev dependencies by @Rotzbua in #418
- chore: migrate from phpdocs to attributes by @Rotzbua in #419
- chore: use strict assert by @Rotzbua in #420
New Contributors
Full Changelog: v9.0.2...v9.0.3
-
v9.0.229 Jan 2025Release notes
Open source →What's Changed
- Fix typing and syntax tests by @Minishlink in #415
- Fix private VAPID key padding when importing from PEM by @GribouilleVert in #414
New Contributors
- @GribouilleVert made their first contribution in #414
Full Changelog: v9.0.1...v9.0.2
-
v9.0.130 Jul 2024Release notes
Open source →What's Changed
- Fix exception in rejected callback for HTTP connection errors when using
flushPooledby @sleptor in #410
Full Changelog: v9.0.0...v9.0.1
- Fix exception in rejected callback for HTTP connection errors when using
-
v9.0.008 Jul 2024Nothing published for this version
-
v9.0.0-rc218 Jun 2024 pre-releaseNothing published for this version
-
v9.0.0-rc104 Mar 2024 pre-releaseNothing published for this version
-
v8.0.010 Jan 2023Nothing published for this version
-
v7.0.029 Mar 2022Nothing published for this version
-
v6.0.722 Nov 2021Nothing published for this version
-
v6.0.622 Nov 2021Nothing published for this version
-
v6.0.508 Apr 2021Nothing published for this version
-
v6.0.408 Apr 2021Nothing published for this version
-
v6.0.306 Nov 2020Nothing published for this version
-
v6.0.229 Sep 2020Nothing published for this version
-
v6.0.113 Sep 2020Nothing published for this version
-
v6.0.002 Aug 2020Nothing published for this version
-
v5.2.502 Aug 2020Nothing published for this version
-
v5.2.423 Mar 2019Nothing published for this version
-
v5.2.325 Feb 2019Nothing published for this version
-
v5.2.223 Feb 2019Nothing published for this version
-
v5.2.123 Feb 2019Nothing published for this version
-
v5.2.023 Feb 2019Nothing published for this version
-
v5.1.029 Nov 2018Nothing published for this version
-
v5.0.027 Nov 2018Nothing published for this version
-
v4.0.213 May 2018Nothing published for this version
-
v4.0.112 Apr 2018Nothing published for this version
-
v4.0.017 Mar 2018Nothing published for this version
-
v3.0.217 Mar 2018Nothing published for this version
-
v3.0.116 Mar 2018Nothing published for this version
-
v3.0.016 Mar 2018Nothing published for this version
-
v2.0.122 Nov 2017Nothing published for this version
-
v2.0.012 Oct 2017Nothing published for this version
-
v1.4.328 Jun 2017Nothing published for this version
-
v1.4.211 May 2017Nothing published for this version
-
v1.4.113 Mar 2017Nothing published for this version
-
v1.4.011 Feb 2017Nothing published for this version
-
v1.3.430 Nov 2016Nothing published for this version
-
v1.3.323 Nov 2016Nothing published for this version
-
v1.3.215 Nov 2016Nothing published for this version
-
v1.3.111 Nov 2016Nothing published for this version
-
v1.0.113 May 2016Nothing published for this version
-
0.2.220 Feb 2016Nothing published for this version
-
0.2.104 Dec 2015Nothing published for this version
-
0.2.003 Dec 2015Nothing published for this version
-
0.1.027 Nov 2015Nothing published for this version
-
v1.308 Nov 2016Nothing published for this version
-
v1.227 Oct 2016Nothing published for this version
-
v1.128 Jul 2016Nothing published for this version
-
v1.028 Apr 2016Nothing published for this version