revolt/event-loop
Rock-solid event loop for concurrent PHP applications.
v1.0.9
61M downloads/mo
#282 most downloaded on Packagist
revoltphp/event-loop
What this package is like to depend on
Last release 3 months ago
16 May 2026
Release timing varies
gaps range from 8 days to 1.2 years
Nearly every release is documented
notes for 18 of 18 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
18 releases · first in 2021
1 release in the last 12 months
see the full history below
Release timeline
18 releases · Dec 2021 to May 2026Releases
latest 18-
v1.0.916 May 2026Release notes
Open source →What's Changed
- Fix #105: Segmentation fault/fiber exceptions dependent on destruction order on 8.4 by @danog and @bwoebi in #121
Full Changelog: v1.0.8...v1.0.9
-
v1.0.827 Aug 2025 -
v1.0.725 Jan 2025Release notes
Open source →What's Changed
- Fix for callbacks queued in destructors by @trowski in #100
- Serialization and deserialization of loop driver is now explicitly forbidden
Full Changelog: v1.0.6...v1.0.7
-
v1.0.630 Nov 2023Release notes
Open source →What's Changed
- Fixed re-entering the event loop from
{main}after the loop ended with an un-resumed suspension.
Full Changelog: v1.0.5...v1.0.6
- Fixed re-entering the event loop from
-
v1.0.519 Nov 2023Release notes
Open source →What's Changed
- Discard
{main}suspension on uncaught exception from loop by @trowski and @danog in #71, fixing resuming the event loop in a shutdown function after an uncaught exception from an event loop callback.
Full Changelog: v1.0.4...v1.0.5
- Discard
-
v1.0.422 Oct 2023Release notes
Open source →What's Changed
- Renamed a private property in
UvDriverto avoid a PHP JIT bug.
Full Changelog: v1.0.3...v1.0.4
- Renamed a private property in
-
v1.0.329 Jul 2023Release notes
Open source →What's Changed
- Add runtime check for serious GC bugs in PHP by @kelunik in #85
- Check if fiber was destroyed before resuming by @trowski in #84
Full Changelog: v1.0.2...v1.0.3
-
v1.0.220 Jul 2023Release notes
Open source →What's Changed
- Clarify event loop terminated error by @danog in #83
- Fix Fiber leaks if Suspension never resumed, v2 by @xjaja in #75 and @trowski in #82
Full Changelog: v1.0.1...v1.0.2
-
v1.0.102 Apr 2023Release notes
Open source →What's Changed
- Improve
pcntlavailability check if functions are disabled by @danog in #77 - Use
@throwsby @simPod in #76
New Contributors
- @xjaja made their first contribution in #74
- @simPod made their first contribution in #76
- @danog made their first contribution in #77
Full Changelog: v1.0.0...v1.0.1
- Improve
-
v1.0.002 Nov 2022Release notes
Open source →We're proud to announce our initial stable release! The event loop is ready for production use, has been tested in various different applications and scenarios, and fully supports fibers.
What's Changed
- Added
EventLoop::getIdentifiers(#62) - Added
EventLoop::getType(#62) - Added
EventLoop::isEnabled(#62) - Added
EventLoop::isReferenced(#62) - Fixed
EventLoop::getErrorHandlermissing thestaticmodifier - Fixed double wrapping in
UncaughtThrowableif a decorating event loop driver throws anUncaughtThrowable(#61) - Removed
EventLoop::getInfo, useEventLoop::getIdentifiers()in combination withEventLoop::isEnabled,EventLoop::isReferenced, andEventLoop::getTypeinstead (#62) - Removed
EventLoop::createSuspension, useEventLoop::getSuspensioninstead
Full Changelog: v0.2.5...v1.0.0
Release notes
Open source →- Added
EventLoop::getIdentifiers(#62) - Added
EventLoop::getType(#62) - Added
EventLoop::isEnabled(#62) - Added
EventLoop::isReferenced(#62) - Fixed
EventLoop::getErrorHandlermissing thestaticmodifier - Fixed double wrapping in
UncaughtThrowableif a decorating event loop driver throws anUncaughtThrowable(#61) - Removed
EventLoop::getInfo, useEventLoop::getIdentifiers()in combination withEventLoop::isEnabled,EventLoop::isReferenced, andEventLoop::getTypeinstead (#62) - Removed
EventLoop::createSuspension, useEventLoop::getSuspensioninstead
0.2.x
- Added
-
v0.2.501 Aug 2022Release notes
Open source →- PHP 8.1 is now required (#55)
- Fixed compatibility with 8.2 by fixing a deprecation notice (#58)
- Fixed an integer overflow on timers if a large (e.g.
PHP_INT_MAX) timeout is requested (#49) - Removed the reference kept to microtask (
EventLoop::queue()) callback arguments so passed objects may be garbage collected if a resulting fiber unsets all references to the argument (#60)
-
v0.2.404 Mar 2022Release notes
Open source →- Fixed the fiber reference in
DriverSuspensionbeing nulled early during shutdown, leading to an assertion error when attempting to resume the suspension
- Fixed the fiber reference in
-
v0.2.324 Feb 2022Release notes
Open source →- Fixed
Undefined property: Revolt\EventLoop\Internal\DriverSuspension::$fiberin an error path
- Fixed
-
v0.2.220 Feb 2022Release notes
Open source →- Fixed memory leak with suspensions keeping a reference to fibers (#42, #52) Similar leaks might still happen if suspensions are never resumed, so ensure your suspensions are eventually resumed.
-
v0.2.103 Feb 2022Release notes
Open source →- Added template type to
Suspension(#44) - Added
FiberLocal::unset()(#45) - Added stacktrace to all current suspensions on early exit of the event loop (#46)
- Added template type to
-
v0.2.014 Jan 2022Release notes
Open source →- Added
FiberLocalto store data specific to each fiber, e.g. logging context (#40) - Added throwing
UnhandledThrowableif event loop stops due to an exception (#32) - Added
EventLoop::getErrorHandler()to get the currently set error handler - Improved performance by reducing fiber switches by queueing callbacks for each tick (#34)
- Improved performance by not creating unnecessary fibers if exceptions are thrown from callbacks
- Removed return value of
EventLoop::setErrorHandler(), useEventLoop::getErrorHandler()instead - Removed default value for first argument of
EventLoop::setErrorHandler()(#30) - Cache suspensions and always return the same value for a specific fiber (#37)
EventLoop::getSuspension()has been added as replacement forEventLoop::createSuspension()EventLoop::createSuspension()has been deprecated and will be removed in the next version
- Fixed multiple interrupts on double resumption leading to an assertion error instead of an exception (#41)
- Fixed suspensions keeping their pending state after the event loop exceptionally stopped
0.1.x
- Added
-
v0.1.110 Dec 2021Release notes
Open source →- Fixed exceptions being hidden if the event loop stopped due to an uncaught exception (#31)
-
v0.1.001 Dec 2021