Les applications PHP ayant besoin de concurrence — appeler plusieurs API en parallèle, interroger une base de données tout en lisant un fichier — dépendaient jusqu'ici de bibliothèques greffées comme AMPHP, ReactPHP ou Swoole. Le projet True Async choisit une autre voie : implémenter un modèle de concurrence au cœur même du moteur PHP. Sa RFC est répertoriée sur php.watch avec PHP 8.6 comme version cible.

L'API repose sur quelques concepts. spawn() crée une coroutine, une unité d'exécution pouvant être suspendue puis reprise ; await() attend le résultat d'une coroutine ; Scope gère la durée de vie d'un groupe de coroutines, avec possibilité de toutes les annuler si l'une échoue ; l'annulation est conçue pour être sûre et ne jamais laisser de données à moitié traitées. En enveloppant trois opérations séquentielles d'une seconde dans spawn() et en les collectant via await_all_or_fail() avec un timeout, elles s'exécutent concurremment : l'attente totale se rapproche de l'opération la plus lente plutôt que de la somme des trois.

Contrairement à async/await en JavaScript ou Python, True Async évite les « fonctions colorées » : aucun mot-clé async, et le code synchrone ordinaire s'exécute tel quel dans une coroutine. L'implémentation y parvient en modifiant le cœur Zend ainsi que les couches d'E/S, de base de données et de sockets. Il s'agit de multitâche coopératif — un processus PHP, un thread — où le CPU bascule vers une autre coroutine dès que la courante bloque sur des E/S. Une visualisation interactive sur le site du projet illustre ce partage du temps CPU entre deux coroutines (l'une traitant des données utilisateurs, l'autre journalisant et envoyant des notifications).

Le projet dépasse le stade de la proposition sur papier. La version actuelle, v0.8.4, estampillée « Experimental Core », comprend des coroutines fonctionnelles, des E/S non bloquantes pour des fonctions comme fread, file_get_contents et cURL, un pooling de connexions PDO intégré, la prise en charge de threads natifs via spawn_thread() pour le parallélisme CPU, et même un serveur HTTP/1.1, HTTP/2 et HTTP/3 écrit en C tournant dans le processus PHP sans reverse proxy. L'extension s'installe sur PHP 8.5+ via un installateur officiel ou une image Docker préconstruite ; elle reste expérimentale et déconseillée en production.

Plus de 70 fonctions PHP standard ont été adaptées pour devenir automatiquement non bloquantes dans une coroutine, tout en se comportant exactement comme avant en dehors — aucune rupture de compatibilité pour le code existant. Les domaines couverts incluent le DNS (gethostbyname() et apparentés), PDO MySQL et PgSQL, MySQLi, PostgreSQL natif, cURL, les sockets, les E/S fichiers et flux (fopen(), fread(), file_put_contents(), flock()), les sockets de flux, l'exécution de processus (proc_open(), exec(), shell_exec()), les temporisateurs (sleep(), usleep()) et la mise en tampon de sortie avec tampons isolés par coroutine. flock(), appel système bloquant par nature, est déporté vers un pool de threads pour laisser les autres coroutines tourner. Restent non prises en charge les opérations sur les répertoires comme opendir() et mkdir() ainsi que certains pilotes PDO comme Oracle et SQLite, jugés moins prioritaires car les opérations de métadonnées locales sont généralement assez rapides.

La feuille de route vise une v1.0 stable en novembre 2026, en phase avec le calendrier de PHP 8.6 : PHP 8.6 Alpha 1 est sortie le 2 juillet 2026, la Beta 1 est attendue vers la mi-août 2026 et la version finale est prévue pour le 19 novembre 2026. L'arrivée effective de la fonctionnalité dans la 8.6 reste incertaine — pour les changements majeurs du cœur, la certitude n'arrive en général qu'à l'approche de la sortie.

Pour les développeurs qui expérimentent avec l'extension, le paquet Composer réservé au développement true-async/ide-helper fournit autocomplétion, documentation en ligne et stubs pour PhpStorm, PHPStan et Psalm — du cœur asynchrone au serveur HTTP en passant par un client ClickHouse. Utile, car l'API évolue encore d'une version à l'autre.