Build fast, concurrent applications with PHP
Benefit from concurrency by replacing your blocking I/O with non-blocking I/O,
or designing your system with non-blocking I/O from the ground up.
We shipped fibers in PHP 8.1 to extend its capabilities for concurrent applications.
The PHP standard library has already provided everything else we needed for years now, but it only ships the low-level building blocks. AMPHP provides higher-level libraries using non-blocking I/O under the hood. Fibers allow these libraries to just work, no matter whether they're used in concurrent or traditional contexts.
Latest Releases
-
amphp/http-client-guzzle-adapter 1.1.1
What’s Changed
- Updated requirements to allow guzzlehttp/psr7@^1
Full Changelog: https://github.com/amphp/http-client-guzzle-adapter/compare/v1.1.0…v1.1.1
-
amphp/http-client-psr7 1.1.0
What’s Changed
- Updated requirements to allow
psr/http-message@^2 - Replaced development dependency on
laminas/laminas-diactoroswithguzzlehttp/psr7
Full Changelog: https://github.com/amphp/http-client-psr7/compare/v1.0.0…v1.1.0
- Updated requirements to allow
-
amphp/file 3.1.1
What’s Changed
- Dropped support for ext-uv < 0.3.0.
- Changed the version check for ext-uv to avoid an ext-opcache bug (see https://github.com/amphp/http-client/issues/365).
Full Changelog: https://github.com/amphp/file/compare/v3.1.0…v3.1.1
-
amphp/sync 2.3.0
What’s Changed
- Fixed posix semaphore blocking thread when there is no space left on device by @azjezz in https://github.com/amphp/sync/pull/29
- Added a buffer size parameter to
createChannelPair()to specify a number of items which may be buffered in memory before back pressure is applied.
New Contributors
- @azjezz made their first contribution in https://github.com/amphp/sync/pull/29
Full Changelog: https://github.com/amphp/sync/compare/v2.2.0…v2.3.0
-
amphp/redis 2.0.1
What’s Changed
- Fixed return type for
RedistList::get()by @Bilge in https://github.com/amphp/redis/pull/96
Full Changelog: https://github.com/amphp/redis/compare/v2.0.0…v2.0.1
- Fixed return type for
-
amphp/pipeline 1.2.1
What’s Changed
- Fix a potential race condition when using a
Queueto create aConcurrentIterator. AnErrorwith message “Must call suspend() before calling throw()” was thrown when aCancellationprovided toConcurrentIterator::continue()was cancelled and the underlyingQueueinstance was simultaneously completed. See #22.
Full Changelog: https://github.com/amphp/pipeline/compare/v1.2.0…v1.2.1
- Fix a potential race condition when using a
-
amphp/dns 2.2.0
What’s Changed
- Added
StaticDnsConfigLoader - Fixed support for docker 26+ by @xtrime-ru in https://github.com/amphp/dns/pull/118
New Contributors
- @xtrime-ru made their first contribution in https://github.com/amphp/dns/pull/118
Full Changelog: https://github.com/amphp/dns/compare/v2.1.2…v2.2.0
- Added
-
amphp/amp 3.0.2
What’s Changed
- Changed
Closure(mixed...)annotation toClosure(...)to support PHPStan.
Full Changelog: https://github.com/amphp/amp/compare/v3.0.1…v3.0.2
- Changed
-
amphp/http-client 5.1.0
What’s Changed
- Add
BufferedContent::fromJson()by @trowski in https://github.com/amphp/http-client/pull/355 - Add
Form::addNestedFields()by @trowski in https://github.com/amphp/http-client/pull/356 - Make implicit nullable types explicit to avoid deprecation notice in PHP 8.4
RequestBody->HttpContentby @ShiSHcat in https://github.com/amphp/http-client/pull/358
New Contributors
- @ShiSHcat made their first contribution in https://github.com/amphp/http-client/pull/358
Full Changelog: https://github.com/amphp/http-client/compare/v5.0.1…v5.1.0
- Add
-
amphp/http-server 3.3.1
What’s Changed
- Made implicit nullable types explicit to avoid deprecation notice in PHP 8.4
- Typo in README.md by @tncrazvan in https://github.com/amphp/http-server/pull/361
New Contributors
- @tncrazvan made their first contribution in https://github.com/amphp/http-server/pull/361
Full Changelog: https://github.com/amphp/http-server/compare/v3.3.0…v3.3.1
-
amphp/socket 2.3.1
What’s Changed
- Make implicit nullable types explicit to avoid deprecation notice in PHP 8.4.
Full Changelog: https://github.com/amphp/socket/compare/v2.3.0…v2.3.1
-
amphp/cache 2.0.1
What’s Changed
- Make implicit nullable types explicit to avoid deprecation notice in PHP 8.4.
Full Changelog: https://github.com/amphp/cache/compare/v2.0.0…v2.0.1
-
amphp/process 2.0.3
What’s Changed
- Make implicit nullable types explicit to avoid deprecation notice in PHP 8.4.
Full Changelog: https://github.com/amphp/process/compare/v2.0.2…v2.0.3
-
amphp/php-cs-fixer-config 2.1.0
What’s Changed
- Add
nullable_type_declaration_for_default_null_valueto the default rules by @alexandre-daubois in https://github.com/amphp/php-cs-fixer-config/pull/8
New Contributors
- @alexandre-daubois made their first contribution in https://github.com/amphp/php-cs-fixer-config/pull/8
Full Changelog: https://github.com/amphp/php-cs-fixer-config/compare/v2.0.1…v2.1.0
- Add
-
amphp/http 2.1.1
What’s Changed
- Security: Fix Denial of Service via HTTP/2 CONTINUATION Frames by @kelunik
References
- https://github.com/amphp/http/security/advisories/GHSA-qjfw-cvjf-f4fm
- https://kb.cert.org/vuls/id/421644
Full Changelog: https://github.com/amphp/http/compare/v2.1.0…2.1.1
-
amphp/parallel 2.2.9
What’s Changed
- Fixed a race condition if outstanding accept calls were pending when closing
SocketIpcHub. - Removed use of error-suppression operator to avoid warnings from mis-configured error handlers (#200).
Full Changelog: https://github.com/amphp/parallel/compare/v2.2.8…v2.2.9
- Fixed a race condition if outstanding accept calls were pending when closing
-
amphp/parser 1.1.1
What’s Changed
- Make implicit nullable types explicit by @nicolas-grekas in https://github.com/amphp/parser/pull/6
New Contributors
- @nicolas-grekas made their first contribution in https://github.com/amphp/parser/pull/6
Full Changelog: https://github.com/amphp/parser/compare/v1.1.0…v1.1.1
-
amphp/hpack 3.2.1
What’s Changed
- Make implicit nullable types explicit by @nicolas-grekas in https://github.com/amphp/hpack/pull/16
Full Changelog: https://github.com/amphp/hpack/compare/v3.2.0…v3.2.1
-
amphp/rpc 2.0.0
Stable release compatible with AMPHP v3 and fibers! 🎉
As with other libraries compatible with AMPHP v3, most cases of parameters or returns of
Promise<ResolutionType>have been replaced withResolutionType. -
amphp/mysql 3.0.0
Stable release compatible with AMPHP v3 and fibers! 🎉
As with other libraries compatible with AMPHP v3, most cases of parameters or returns of
Promise<ResolutionType>have been replaced withResolutionType.- Classes and interfaces now are prefixed with
Mysqlto avoid collisions with similar names from other libraries. - Marked most classes as internal, leaving only interfaces and concrete implementations required to use the API or create a custom connector.
MysqlTransactionnow extendsMysqlLinkinstead ofMysqlExecutorto support nested transactions.MysqlDataTypeis now an enum of MySQL data type codes and methods to decode data based on type.- Result set field data is now available from
MysqlResult::getColumnDefinitions()which returns an array ofMysqlColumnDefinitionobjects corresponding to the result set rows. - The second param of
MysqlStatement::bind()now requires a string. Binding only makes sense with long strings anyway. MysqlConnectionis now an interface extendingSqlConnection, withSocketMysqlConnectionbeing the implementation.- Removed
MysqlConnectorsince the interface was replaced by template types onSqlConnector, i.e.SqlConnector<MysqlConfig, MysqlConnection>
- Classes and interfaces now are prefixed with
-
amphp/postgres 2.0.0
Stable release compatible with AMPHP v3 and fibers! 🎉
As with other libraries compatible with AMPHP v3, most cases of parameters or returns of
Promise<ResolutionType>have been replaced withResolutionType.- Non-extension-specific classes and interfaces now are prefixed with
Postgresto avoid collisions with similar names from other libraries. - Result sets now implement
Traversable, allowing them to be used withforeachto iterate over result rows. - Marked most classes as internal, leaving only interfaces and concrete implementations required to use the API or create a custom connector.
PostgresTransactionnow extendsPostgresLinkinstead ofPostgresExecutorto support nested transactions.- Removed
TimeoutConnectorin favor ofDefaultPostgresConnectorwhich has aCancellationparameter onconnect()which may be used with anAmp\TimeoutCancellation. - Removed
PostgresConnectorsince the interface was replaced by template types onSqlConnector, i.e.SqlConnector<PostgresConfig, PostgresConnection> - Added support for
BYTEAfields. (#57) - Added the
PostgresConnectioninterface extendingPostgresLink. - Removed the
Receiverinterface. These methods are now a part ofPostgresConnection. - Removed the
QuoterInterface. These methods are now a part ofPostgresExecutor.
- Non-extension-specific classes and interfaces now are prefixed with
-
amphp/sql-common 2.0.0
Stable release compatible with AMPHP v3 and fibers! 🎉
As with other libraries compatible with AMPHP v3, most cases of parameters or returns of
Promise<ResolutionType>have been replaced withResolutionType.- Added template types to interfaces for better type expression on implementations and extensions.
- All classes now start with
Sqlas a prefix to avoid name collisions with other libraries. - Renamed
ConnectionPooltoSqlCommonConnectionPool. - Added
SqlNestedableTransactionExecutorandSqlNestedTransactionto support nested transactions. - Added
SqlCommandResultandSqlConnectionTransaction. - Renamed
PooledResultSettoSqlPooledResult.
-
amphp/sql 2.0.0
Stable release compatible with AMPHP v3 and fibers! 🎉
As with other libraries compatible with AMPHP v3, most cases of parameters or returns of
Promise<ResolutionType>have been replaced withResolutionType.- Added template types to interfaces for better type expression on implementations and extensions.
- All classes now start with
Sqlas a prefix to avoid name collisions with other libraries. - Combined
ResultSetandCommandResultinto a single interface,SqlResult. SqlTransactionnow extendsSqlLinkinstead ofSqlExecutorto support nested transactions.- Added
onCommit()andonRollback()methods toSqlTransaction. These methods attach callbacks after the transaction is either committed or rolled back, respectively. - Removed the methods
createSavepoint(),rollbackTo(), andreleaseSavepont()fromSqlTransaction. Use nested transactions throughSqlTransaction::beginTransaction()instead. SqlPoolnow extendsSqlConnectioninstead ofSqlLink.SqlPool::extractConnection()returns an instance ofSqlConnectioninstead ofSqlLink.- Added
SqlResult::fetchRow(), which will return a single row (associative array) from the result set on each call until no further rows remain in the result. SqlTransientResourceand now extendsAmp\Closable.- Added
SqlTransactionIsolationand an enum-based implementation,SqlTransactionIsolationLevel. - Renamed
ConnectionConfigtoSqlConfig. - Renamed
FailureExceptiontoSqlException.
-
amphp/byte-stream 2.1.1
What’s Changed
- Fixed cancellation not being forwarded to
split()insplitLines().
Full Changelog: https://github.com/amphp/byte-stream/compare/v2.1.0…v2.1.1
- Fixed cancellation not being forwarded to
-
amphp/windows-registry 1.0.1
What’s Changed
- Removed nullability from return type of
WindowsRegistry::read(), the method throws if the key is not found.
Full Changelog: https://github.com/amphp/windows-registry/compare/v1.0.0…v1.0.1
- Removed nullability from return type of
-
amphp/websocket-server 4.0.0
The
4.0.0release fixes compression support with a couple small compatibility breaks from3.x.Users of
2.xshould upgrade directly to4.0.0.Users of
3.xcan upgrade directly to4.0.0if compression is not being used. If a customWebsocketAcceptorwas created to support compression, this custom implementation may be dropped, instead passing an instance ofWebsocketCompressionContextFactoryto eachWebsocketrequest handler.Backward Compatibility Breaks
- The
WebsocketCompressionContextFactoryconstructor parameter ofRfc6455ClientFactoryhas been removed and is instead a constructor parameter of theWebsocketclass. - A nullable
WebsocketCompressionContextparameter was added toWebsocketClientFactory::createClient().
- The
-
amphp/websocket 2.0.3
What’s Changed
WebsocketExceptionnow extendsAmp\ByteStream\StreamExceptionto avoid violating theReadableStreaminterface by throwing a non-StreamExceptionfrom a stream method.
Full Changelog: https://github.com/amphp/websocket/compare/v2.0.2…v2.0.3
-
amphp/websocket-client 2.0.0
Stable release compatible with AMPHP v3 and fibers! 🎉
As with other libraries compatible with AMPHP v3, most cases of parameters or returns of
Promise<ResolutionType>have been replaced withResolutionType.This release is compatible with
amphp/http-client@^5andamphp/websocket@^2. See the release notes of these libraries for further change notes.Similar to
v1, a Websocket connection is created usingAmp\Websocket\Client\connect()or using an instance ofWebsocketConnector, callingWebsocketConnector::connect(). The returnedWebsocketConnectionthen is used to send and receive WebSocket messages.- Renamed most classes and interfaces to add
Websocketas a prefix to avoid name collisions with similarly named classes in other packages which are frequently used together. For example,Connectionis nowWebsocketConnection. - Advanced handshake and connection parameters may be specified using a
Rfc6455ConnectionFactoryinstance provided when constructing aRfc6455Connector. - A global
WebsocketConnectorinstance may be accessed and set viaAmp\Websocket\Client\websocketConnector().
- Renamed most classes and interfaces to add
-
amphp/parallel-functions 2.0.0
Stable release compatible with AMPHP v3 and fibers! 🎉
As with other libraries compatible with AMPHP v3, most cases of parameters or returns of
Promise<ResolutionType>have been replaced withResolutionType. -
amphp/http-client-cookies 2.0.0
Stable release compatible with AMPHP v3 and fibers! 🎉
As with other libraries compatible with AMPHP v3, most cases of parameters or returns of
Promise<ResolutionType>have been replaced withResolutionType.- Renamed
InMemoryCookieJartoLocalCookieJar
- Renamed
-
amphp/http-server-form-parser 2.0.0
This release is compatible with
amphp/http-server@^3.- Renamed
BufferingParserandStreamingParsertoFormParserandStreamingFormParser, respectively. - Removed the
parseFormfunction in favor of theForm::fromRequest()static method. - Removed
ParsingMiddleware. UseForm::fromRequest()instead. - Removed
ParseException. Form parsing errors will throw anHttpErrorExceptionfromamphp/http-serverinstead, which do not need to be caught (the server will automatically return an error response).
- Renamed
-
amphp/http-server-session 3.0.0
This release is compatible with
amphp/http-server@^3.- Renamed
Storage,InMemoryStorage,RedisStorage,DefaultIdGenerator, andDrivertoSessionStorage,LocalSessionStorage,RedisSessionStorage,Base64UrlSessionIdGenerator, andSessionFactory, respectively - Renamed methods on
Session:open()tolock(),save()tocommit() - Added
Session::rollback()to undo local changes and re-read the session data from storage - Added
SessionTrainerfor examining session changes unit testing
- Renamed
-
amphp/http-server-static-content 2.0.0
This release is compatible with
amphp/http-server@^3.DocumentRootnow requires an instance ofHttpServerandErrorHandlerto construct- Removed
DocumentRoot::onStart()andDocumentRoot::onStop(), as it’s now internally registered - Removed support for
ServerObserver, as it’s been removed fromamphp/http-server - Added
StaticResourceto serve a single static file
-
amphp/http-server-router 2.0.0
This release is compatible with
amphp/http-server@^3.- A PSR-3 logger is now required in the
Routerconstructor - Starting the server with an empty
Routeris now allowed and only logs a notice instead of throwing an exception - Middleware can be added via
addMiddleware()instead ofstack() - Removed support for adding middleware directly via
addRoute(), usestackMiddleware()instead if you need this - Removed
Router::onStart(), as it’s now internally registered - Removed support for
ServerObserver, as it’s been removed fromamphp/http-server
- A PSR-3 logger is now required in the
-
amphp/log 2.0.0
- Increased minimum PHP version to 8.1
- Make use of fibers with Amp v3 and Revolt
- Added support for Monolog v3.x
This release does not contain any changes in comparison to
v2.0.0-beta.2. -
amphp/phpunit-util 3.0.0
This package has been redesigned for compatibility with AMPHP v3 and fibers.
AsyncTestCaseserves a similar purpose as before, providing helper methods for unit testing within an async context. Each test case is run within a unique fiber to allow suspending during the test run.AsyncTestCase::setUpAsync()andtearDownAsync()have been removed. UseAsyncTestCase::setUp()andtearDown()instead, as both of these methods are now able to execute async using fibers.AsyncTestCase::createCallback()now returns aClosure. Additionally, an optional parameter for expected arguments upon invocation have been added (usesInvocationMocker::with(...)to set expected arguments).
-
amphp/cluster 1.0.1
Update to use
amphp/filev2.x. -
amphp/beanstalk 0.3.2
- Added support for Symfony YAML library v4 and v5. (#34)
-
amphp/serialization 1.0.0
Initial release.
-
amphp/http-tunnel 1.0.0
Initial release.
-
amphp/http-client-cache 1.0.0
Initial release.
-
amphp/react-adapter 2.1.0
React\EventLoop\Factoryis now automatically replaced with another implementation that throws on each usage to prevent two loops existing concurrently by accident. SetAMP_REACT_ADAPTER_DISABLE_FACTORY_OVERRIDE=1as environment variable or constant to disable this protection.
-
amphp/react-stream-adapter 0.1.0
Initial release.