NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #287 most downloaded on Packagist
A non-blocking concurrency framework for PHP applications.
Last release 2 months ago
19 Jul 2026
Release timing varies
gaps range from 1 weeks to 1.3 years
Rarely documented
notes for 10 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
102 releases · first in 2013
Fixed garbage collection of the iterable returned from Future::iterate() when the source iterable is a Traversable . Previously, iteration would conti
Future::iterate() when the source iterable is a Traversable. Previously, iteration would continue even if the returned iterable was destroyed.Full Changelog: v3.1.2...v3.1.3
Fixed detection of AMP_DEBUG when set as a PHP constant when a falsey environment AMP_DEBUG value is present
AMP_DEBUG when set as a PHP constant when a falsey environment AMP_DEBUG value is presentInterval to prevent cancellation of event-loop callbacks from the original object for cloning or arbitrary callbacks on deserializationFull Changelog: v3.1.1...v3.1.2
One column per quarter.
Use str_increment() to fix PHP 8.5 deprecation by @nicolas-grekas in #456
weakClosure() signature by @vudaltsov in #452str_increment() to fix PHP 8.5 deprecation by @nicolas-grekas in #456Full Changelog: v3.1.0...v3.1.1
Add Interval by @trowski in #441
Interval by @trowski in #441__unserialize method to ForbidSerialization to guard against malicious payloads unserializing to forbidden class instances.Full Changelog: v3.0.2...v3.1.0
Changed Closure(mixed...) annotation to Closure(...) to support PHPStan.
Closure(mixed...) annotation to Closure(...) to support PHPStan.Full Changelog: v3.0.1...v3.0.2
Fixed compatibility of Amp\weakClosure() with changes made to closure names in PHP 8.4.
Amp\weakClosure() with changes made to closure names in PHP 8.4.Full Changelog: v3.0.0...v3.0.1
Amp no longer ships its own event loop. It's now based on Revolt . Revolt\EventLoop is quite similar to Amp's previous Amp\Loop . A very important dif
Amp no longer ships its own event loop. It's now based on Revolt. Revolt\EventLoop is quite similar to Amp's previous Amp\Loop. A very important difference is using float $seconds instead of int $milliseconds for timers though!
Future is a replacement for the previous Promise.
There's no need for callbacks or yield anymore!
Its await() method is based on fibers and replaces generator based coroutines / Amp\Promise\wait().
Amp\Deferred to Amp\DeferredFuture.Amp\Promise\wait(): Use Amp\Future::await() instead, which can be called in any (nested) context unlike before.Amp\call(): Remove the passed closure boilerplate and all yield keywords, interruption is handled via fibers now instead of generator coroutines.Amp\asyncCall(): Replace invocations with Amp\async(), which starts a new fiber instead of using generators.Amp\coroutine(): There's no direct replacement.Amp\asyncCoroutine(): There's no direct replacement.Amp\Promise\timeout(): Future::await() accepts an optional Cancellation, which can be used as a replacement.Amp\Promise\rethrow(): Unhandled errors are now automatically thrown into the event loop, so there's no need for that function anymore.Future::ignore() if needed, but should usually be handled in some way.Amp\Promise\wrap(): Use Future::finally() instead.Amp\getCurrentTime() to Amp\now() returning the time in seconds instead of milliseconds.Amp\delay() to accept the delay in seconds now instead of milliseconds.Amp\weakClosure() to allow a class to hold a self-referencing Closure without creating a circular reference that prevents automatic garbage collection.Amp\trapSignal() to await one or multiple signals.Promise combinators have been renamed:
Amp\Promise\race() has been renamed to Amp\Future\awaitFirst()Amp\Promise\first() has been renamed to Amp\Future\awaitAny()Amp\Promise\some() has been renamed to Amp\Future\awaitAnyN()Amp\Promise\any() has been renamed to Amp\Future\awaitAll()Amp\Promise\all() has been renamed to Amp\Future\await()CancellationToken has been renamed to Cancellation.CancellationTokenSource has been renamed to DeferredCancellation.NullCancellationToken has been renamed to NullCancellation.TimeoutCancellationToken has been renamed to TimeoutCancellation.CombinedCancellationToken has been renamed to CompositeCancellation.SignalCancellation has been added.Iterators have been removed from amphp/amp as normal PHP iterators can be used with fibers now and there's no need for a separate API.
However, there's still some need for concurrent iterators, which is covered by the new amphp/pipeline library now.
Amp\Closable has been added as a new basic interface for closable resources such as streams or sockets.
Strict types now declared in all library files.
This will affect callbacks invoked within this library's code which use scalar types as parameters.
Functions used with Amp\async() are the most likely to be affected by this change — these functions will now be invoked within a strict-types context.
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
Use str_increment() to fix PHP 8.5 deprecation by @nicolas-grekas in #457
str_increment() to fix PHP 8.5 deprecation by @nicolas-grekas in #457Full Changelog: v2.6.4...v2.6.5
Fix optional before required parameter deprecation
Make implicit nullable types explicit by @nicolas-grekas in #431
Full Changelog: v2.6.2...v2.6.3
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 →