diff --git a/README.md b/README.md
index 8b34b80..c47d913 100644
--- a/README.md
+++ b/README.md
@@ -12,6 +12,22 @@ Promises in combination with generators are used to build coroutines, which allo
+## Motivation
+
+Traditionally, PHP has a synchronous execution flow, doing one thing at a time.
+If you query a database, you send the query and wait for the response from the database server in a blocking manner.
+Once you have the response, you can start doing the next thing.
+
+Instead of sitting there and doing nothing while waiting, we could already send the next database query, or do an HTTP call to an API.
+
+Making use of the time we usually spend on waiting for I/O can speed up the total execution time.
+The following diagram shows the execution flow with dependencies between the different tasks, once executed sequentially and once concurrently.
+
+![](docs/images/sequential-vs-concurrent.png)
+
+Amp allows such concurrent I/O operations while keeping the cognitive load low by avoiding callbacks.
+Instead, the results of asynchronous operations can be awaited using `yield` resulting in code which is structured like traditional blocking I/O code while the actual execution flow is handled by Amp.
+
## Installation
This package can be installed as a [Composer](https://getcomposer.org/) dependency.
@@ -20,72 +36,51 @@ This package can be installed as a [Composer](https://getcomposer.org/) dependen
composer require amphp/amp
```
+This installs the basic building blocks for asynchronous applications in PHP.
+We offer a lot of repositories building on top of this repository, e.g.
+
+ - [`amphp/byte-stream`](https://github.com/amphp/byte-stream) providing a stream abstraction
+ - [`amphp/socket`](https://github.com/amphp/socket) providing a socket layer for UDP and TCP including TLS
+ - [`amphp/parallel`](https://github.com/amphp/parallel) providing parallel processing to utilize multiple CPU cores and offload blocking operations
+ - [`amphp/http-client`](https://github.com/amphp/http-client) providing an HTTP/1.1 and HTTP/2 client
+ - [`amphp/http-server`](https://github.com/amphp/http-server) providing an HTTP/1.1 and HTTP/2 application server
+ - [`amphp/mysql`](https://github.com/amphp/mysql) and [`amphp/postgres`](https://github.com/amphp/postgres) for non-blocking database access
+ - and [many more packages](https://github.com/amphp?type=source)
+
## Documentation
Documentation can be found on [amphp.org](https://amphp.org/) as well as in the [`./docs`](./docs) directory.
+Each packages has it's own `./docs` directory.
## Requirements
-- PHP 7.0+
+This package requires PHP 7.0 or later.
+Many of the other packages raised their requirement to PHP 7.1.
+No extensions required!
-##### Optional Extension Backends
+##### Optional Extensions
-Extensions are only needed if your app necessitates a high numbers of concurrent socket connections.
+Extensions are only needed if your app necessitates a high numbers of concurrent socket connections, usually this limit is configured up to 1024 file descriptors.
-- [ev](https://pecl.php.net/package/ev)
-- [event](https://pecl.php.net/package/event)
-- [php-uv](https://github.com/bwoebi/php-uv) (experimental fork)
+- [`ev`](https://pecl.php.net/package/ev)
+- [`event`](https://pecl.php.net/package/event)
+- [`uv`](https://github.com/bwoebi/php-uv)
## Examples
-This simple example uses our [Artax](https://amphp.org/artax/) HTTP client to fetch multiple HTTP resources concurrently.
-
-```php
-setOption(Amp\Artax\Client::OP_DISCARD_BODY, true);
-
- try {
- foreach ($uris as $uri) {
- $promises[$uri] = $client->request($uri);
- }
-
- $responses = yield $promises;
-
- foreach ($responses as $uri => $response) {
- print $uri . " - " . $response->getStatus() . $response->getReason() . PHP_EOL;
- }
- } catch (Amp\Artax\HttpException $error) {
- // If something goes wrong Amp will throw the exception where the promise was yielded.
- // The Client::request() method itself will never throw directly, but returns a promise.
- print $error->getMessage() . PHP_EOL;
- }
-});
-```
-
-Further examples can be found in the [`./examples`](./examples) directory of this repository as well as in the `./examples` directory of [our other libraries](https://github.com/amphp?utf8=%E2%9C%93&q=&type=public&language=php)
+Examples can be found in the [`./examples`](./examples) directory of this repository as well as in the `./examples` directory of [our other libraries](https://github.com/amphp?utf8=%E2%9C%93&q=&type=public&language=php).
## Versioning
`amphp/amp` follows the [semver](http://semver.org/) semantic versioning specification like all other `amphp` packages.
-| Version | Bug Fixes Until | Security Fixes Until |
-| ------- | --------------- | -------------------- |
-| 2.x | TBA | TBA |
-| 1.x | 2017-12-31 | 2018-12-31 |
+##### v2.x
+
+Supported. We don't have plans to release v3, yet.
+
+##### v1.x
+
+No longer supported. We stopped providing bug fixes 2017-12-31 and stopped providing security fixes 2018-12-31.
## Compatible Packages
@@ -93,7 +88,7 @@ Compatible packages should use the [`amphp`](https://github.com/search?utf8=%E2%
## Security
-If you discover any security related issues, please email [`bobwei9@hotmail.com`](mailto:bobwei9@hotmail.com) or [`me@kelunik.com`](mailto:me@kelunik.com) instead of using the issue tracker.
+If you discover any security related issues, please email [`me@kelunik.com`](mailto:me@kelunik.com) instead of using the issue tracker.
## License
diff --git a/docs/images/sequential-vs-concurrent.png b/docs/images/sequential-vs-concurrent.png
new file mode 100644
index 0000000..b9815a4
Binary files /dev/null and b/docs/images/sequential-vs-concurrent.png differ