Le blog

Windows pour FrankenPHP désormais disponible 

Publié le 10 mars 2026

Nous sommes ravis d’annoncer la disponibilité immédiate du support officiel de Windows pour FrankenPHP. Depuis le lancement du projet en 2022, c’était de loin la fonctionnalité la plus demandée. Si beaucoup d'entre vous utilisaient déjà FrankenPHP sur Windows via WSL (Windows Subsystem for Linux), le support natif restait un défi après lequel nous courions depuis longtemps.

Désormais, vous pouvez désormais exécuter FrankenPHP nativement sur Windows avec une compatibilité totale, incluant nos fonctionnalités phares comme le mode worker et le Hot Reloading.

FrankenPHP Windows" class="wp-image-12335"/><figcaption class="wp-element-caption#

Des performances qui décoiffent

Nous ne voulions pas simplement que le support fonctionne ; nous voulions également que ce soit rapide. Et les premiers benchmarks de la communauté sont impressionnants.

Un utilisateur a comparé FrankenPHP à un environnement Nginx/PHP-FPM déjà optimisé sur la même machine Windows Server 2022 : un gain de performance phénoménal de 3,6x (soit plus de 260% d'augmentation) simplement en changeant le runtime du serveur est constaté. De nouveaux benchmarks approfondis réalisés par Marc Henderkes confirment ces gains impressionnants en natif sur Windows, et ce sur divers types de charges.

Un conseil de nos experts : Bien que le support natif soit rapide et pratique pour le développement, pour obtenir le débit brut le plus élevé en production, l'utilisation de FrankenPHP via WSL reste légèrement plus performante en raison de l'architecture I/O et réseau de Linux. Si vous le pouvez, privilégiez Linux pour vos environnements de prod !

#

Le défi : le choc des compilateurs

Pourquoi a-t-il fallu tant de temps pour que le support de Windows soit disponible ? Quelques courageux·ses ont tenté de porter FrankenPHP sur Windows depuis un moment (un grand merci à eux !), mais au-delà du casse-tête du multiplateforme (chemins de fichiers, systèmes de fichiers), nous nous sommes heurtés à un mur structurel.

Le problème technique en résumé :

  1. FrankenPHP est une bibliothèque Go qui appelle la libphp via CGO.
  2. Les builds officiels de PHP sur Windows sont compilés avec Visual Studio (MSVC) pour garantir stabilité et performance.
  3. Historiquement, le CGO de Go ne supportait pas Visual Studio, mais uniquement MinGW (GCC).

Cela créait un fossé d'incompatibilité majeur. Impossible de lier les deux simplement.

#

En quête d'une solution

Nous avons exploré plusieurs pistes, chacune menant à une impasse :

  • Option 1 : Ajouter le support GCC à PHP pour Windows. Nous avons envisagé de patcher PHP, mais les mainteneurs de PHP souhaitaient (fort justement) éviter cette complexité supplémentaire. Pour garantir une stabilité absolue et ne pas fragmenter l'écosystème, il était crucial d'utiliser les binaires officiels MSVC.
  • Option 2 : Le build "Frankenstein" (llvm-mingw). Nous avons tenté de compiler FrankenPHP avec llvm-mingw pour le lier au PHP officiel. Échec cuisant dû à l'incompatibilité des bibliothèques standards. Mélanger du MinGW (qui utilise msvcrt.dll) et du MSVC (qui utilise ucrt / vcruntime) provoque des crashes critiques dès qu'on manipule la mémoire (malloc/free) ou des descripteurs de fichiers. Ils parlent simplement deux "dialectes" de C différents.
#

La percée : Go 1.26 et Clang

La solution est venue d'un constat : il fallait ajouter au CGO le support du frontend Clang/LLVM fourni par Visual Studio. Pour rappel, Visual Studio inclut une version de Clang qui remplace cl.exe. Elle accepte les flags de type GCC (que CGO adore) tout en utilisant la STL et les runtimes de Microsoft sous le capot. Le meilleur des deux mondes.

Alors que nous nous préparions à écrire un patch pour Go, nous sommes tombés sur une contribution non documentée de Google qui faisait exactement cela ! Ce patch a été intégré dans Go 1.26.Grâce à cette nouvelle capacité et au linker lld-link, nous avons enfin pu compiler FrankenPHP avec la même chaîne d'outils que PHP lui-même.

#

Tests 100% au vert

Le résultat est un binaire Windows natif qui se lie directement aux binaires PHP officiels et stables. Conséquence majeure : toutes les extensions PHP natives supportées sur Windows fonctionnent immédiatement avec FrankenPHP.

Nous avons mis à jour le code de FrankenPHP pour gérer les dernières spécificités de Windows, et je suis fier d'annoncer que tous les tests sont au vert.

  • ✅ Binaire Windows natif
  • ✅ Support complet des extensions
  • ✅ Worker Mode
  • ✅ Hot Reloading
#

Crédits & Sponsoring

Ce travail complexe, développé par nos coopérateurs, a notamment été rendu possible grâce au soutien de la société Intelligence X. La pérennité de l'Open Source est un défi quotidien. Si votre entreprise s'appuie sur FrankenPHP, Caddy ou API Platform, ou que vous souhaitez ne serait-ce que du conseil ou support autour de ces technologies, contactez nos expert·es.

#

Testez FrankenPHP pour Windows dès maintenant

Le support a été mergé dans la Pull Request #2119 qui est inclu dans les dernières releases. Vous pouvez télécharger les derniers binaires Windows sur notre page de releases !

Un immense merci à tous ceux qui ont aidé, particulièrement à TenHian pour l'exploration initiale ainsi qu’à Marc Henderkes pour le travail colossal sur l'implémentation finale.

Kevin Dunglas

Kevin Dunglas

CEO & technical director

Mots-clés2119, FrankenPHP, Windows

Le blog

Pour aller plus loin