Programme

L'IA s'installe dans nos éditeurs et nos pipelines, mais entre la démo bluffante et le code qui tient en production, il y a un monde. Ce thÚme vous emmÚne cÎté technique : brancher un agent sur votre projet et en tirer parti, coder un serveur MCP en PHP pur pour faire dialoguer vos outils avec les modÚles, ou faire tenir un assistant RAG face à de vrais utilisateurs - hallucinations, RGPD et pertinence compris. Vous verrez aussi comment exposer votre métier aux agents via API Platform. Des retours d'expérience concrets et actionnables, pour intégrer l'IA dans une stack PHP.

Sous le capot du protocole MCP : codons un serveur en PHP pur

Le Model Context Protocol (MCP) est devenu en un an le standard pour donner des outils aux agents IA. Au Forum PHP 2025, Edouard Courty nous a montré comment l'intégrer dans une application Symfony via son bundle. Depuis, beaucoup a changé : ce bundle est officiellement déprécié, Symfony a publié son propre symfony/mcp-bundle, et un SDK PHP officiel mcp/sdk est en cours de stabilisation, fruit d'une collaboration entre la PHP Foundation et le projet Symfony.

Dans cet Ă©cosystĂšme en mouvement, maĂźtriser le protocole lui-mĂȘme devient un avantage concret : pour choisir le bon outil, pour intĂ©grer MCP Ă  un projet existant qui n'est pas en Symfony, ou simplement pour ne pas dĂ©pendre d'une abstraction qui peut changer demain.

Durant ce talk, nous construirons un serveur MCP en PHP pur, sans framework, en environ 300 lignes de code. Nous décortiquerons le protocole couche par couche : JSON-RPC 2.0, transport Streamable HTTP, cycle de vie (initialize, discovery, operation), et les trois primitives fondamentales (tools, resources, prompts).

Pour rendre la démonstration concrÚte, le serveur sera branché sur une instance WordPress existante. Nous verrons l'IA explorer les articles publiés, terminer un brouillon en suivant le style de l'auteur, et réécrire un post dans le style d'un personnage de fiction, en direct. Tout cela sans ajouter une seule dépendance lourde au projet WordPress.

À la sortie, vous saurez ce que les SDK et bundles font pour vous, ce que vous pouvez faire vous-mĂȘmes, et comment ajouter une couche MCP Ă  n'importe quelle application PHP existante, quel que soit son framework (ou son absence de framework).

L'expérience agentique, ou comment tirer le maximum des IAs sur votre code

Claude Code, Copilot, Cursor
 les coding agents font partie de notre quotidien. Pourtant, sur le terrain, les retours sont contrastés : certaines équipes décuplent leur productivité, d'autres passent leur temps à corriger l'agent. Pourquoi ?

AprĂšs deux ans Ă  intĂ©grer des agents dans nos projets clients chez Marmelab, nous avons identifiĂ© un facteur dĂ©terminant : l'Agent Experience (AX). À l'image de la Developer Experience, l'AX dĂ©signe la capacitĂ© d'un codebase Ă  permettre Ă  un agent de travailler de maniĂšre autonome et efficace.

Dans ce talk, je prĂ©senterai un framework structurĂ© autour de 10 dimensions concrĂštes et illustrĂ© par des exemples rĂ©els. Vous dĂ©couvrirez pourquoi certaines pratiques classiques du Software Craftsmanship deviennent critiques avec les agents, pourquoi d'autres doivent ĂȘtre repensĂ©es, et comment investir dans l'AX peut transformer votre rapport au code.

Spoiler : la bonne nouvelle, c'est qu'un codebase optimisé pour les agents est aussi plus agréable pour les humains.

Architecturer un assistant IA en PHP : deux ans de décisions, d'erreurs et d'améliorations

Une architecture ne naßt jamais parfaite. Elle évolue à mesure que les contraintes apparaissent.

Pourquoi passer à l'asynchrone ? Pourquoi introduire une abstraction des fournisseurs ? Comment structurer un RAG multi-corpus ? Quand intégrer un MCP ? Comment gérer les limites des modÚles sans réécrire toute l'application ?

À travers deux annĂ©es d'Ă©volution d'un assistant IA mĂ©tier dĂ©veloppĂ© en PHP/Symfony, cette confĂ©rence revient sur les dĂ©cisions qui ont façonnĂ© l'architecture actuelle, en expliquant les motivations, les compromis et les enseignements tirĂ©s de chaque Ă©tape.

Exposer son métier aux agents IA avec API Platform

Vous avez forcément déjà demandé à un assistant IA d'aller faire quelque chose à votre place : réserver, commander, mettre à jour une fiche. Quand ça marche, plus personne ne clique sur une interface, et c'est bluffant. Mais une fois l'effet passé, une question bien plus intéressante demeure : qu'est-ce qui, dans nos applications, permet à un agent d'agir ? AprÚs un rapide détour par le Model Context Protocol (MCP), soit la façon dont un agent découvre et appelle les opérations d'une application, nous étudierons le vrai besoin : exposer son métier sans en écrire une seconde description « pour l'IA ». Nous verrons pourquoi API Platform part déjà avec une longueur d'avance, en réutilisant ce qu'il décrit depuis toujours : vos ressources, leur validation, leur sérialisation et leur sécurité. De la ressource d'API aux outils MCP, il n'y a qu'un pas. En réutilisant la couche CQRS d'API Platform, nous verrons comment transformer nos ressources existantes en outils qu'un agent peut appeler, sans jamais dupliquer la description de notre domaine. Et puisque l'interface, elle, semble se dissoudre, nous terminerons sur la question qui nous attend toutes et tous : à quoi ressembleront nos logiciels quand l'API sera la porte d'entrée, et l'agent, son premier client ?

Speed is a byproduct of trust

AI-assisted development tools promise unprecedented speed. But without proper foundations, velocity becomes recklessness: technical debt accumulates faster, architectural boundaries erode quicker, and defects ship sooner. The opposite failure mode is just as real: teams that insist on control without speed cannot meet modern market demands.

This session distills the essential lessons of a full-day workshop into 40 minutes: how to establish automated safety nets that let teams move faster precisely because they can trust their quality controls. Using PHP and industry-standard tooling as the running example, we trace how traditional quality practices such as automated testing, static analysis, and architectural boundary enforcement evolve in AI-assisted workflows, culminating in a test-driven pattern where humans write specifications as tests and AI agents generate implementations.

You will leave with clear criteria for evaluating your own quality infrastructure and a prioritized list of practices to adopt first. The central insight: the practices that make AI collaboration safe are the same practices that make human development fast. That convergence is the path to sustainable speed.

Vos coding agents en mode YOLO
 mais en toute sécurité

Il existe ce que l’on appelle la permission fatigue : Ă  force de valider des demandes, on finit par accepter sans vraiment regarder ce que notre coding agent s’apprĂȘte Ă  exĂ©cuter. Pour contourner cela, les outils proposent aujourd’hui des modes YOLO (trust-all-tools, bypass permissions
), donnant aux agents une autonomie totale. Mais cette autonomie a un coĂ»t : ces modes permettent aux agents d’effectuer n’importe quelle opĂ©ration sur la machine du dĂ©veloppeur·euse. Les retours de devs ayant perdu du travail ou vu leur environnement local altĂ©rĂ© se multiplient . La question devient : comment offrir un maximum d’autonomie aux agents sans mettre en danger la machine hĂŽte ?

En combinant VMs et conteneurs, Docker Sandboxes permet d’exĂ©cuter des agents IA dans des environnements rĂ©ellement isolĂ©s. Les agents peuvent installer des outils, modifier leur environnement et lancer des workloads complexes en s’appuyant sur un engine Docker isolĂ©, sans accĂšs direct au host. Le trafic rĂ©seau sortant est contrĂŽlĂ© via les rĂšgles d’entreprise, et les agents n’ont accĂšs ni aux clĂ©s d’API ni aux credentials, offrant une solution pour exĂ©cuter des coding agents en mode YOLO, mais en toute sĂ©curitĂ©.

Leveraging Production Data for AI Assisted Software Development

Left without guardrails, AI assisted software development can quickly spiral out of control: buggy, hard to maintain, inconsistent and slow code is the result. Only when you introduce quality assurance tools on all levels will you get reliable results. In this talk I show how you can use static analysis, testing tools and production runtime data to ship code with AI assistance.

Adopter l'IA, c'est facile ; rester aux commandes, beaucoup moins. Ce thÚme prend de la hauteur sur la façon dont on gouverne nos outils. Comment organiser le travail d'une équipe quand chacun laisse l'IA écrire du code ? Comment reprendre sa place de relecteur humain à l'Úre des agents, plutÎt que de valider en pilote automatique ? Et quand faut-il choisir de ne pas utiliser l'IA, par sobriété ? Garder la maßtrise, c'est aussi comprendre ce que le Cyber Resilience Act va exiger de nous et poser la question de notre souveraineté numérique. Un thÚme pour qui veut décider de ses outils.

La review qu'on aurait dĂ» faire depuis toujours : reprendre sa place de reviewer humain Ă  l'Ăšre des agents IA

On le sait tous : une bonne code review, ce n'est pas traquer une indentation ou un nom de variable. C'est challenger l'intention, le design, les invariants métier, ce qui n'apparaßt pas dans le diff. Sauf qu'en pratique, on review surtout la surface parce qu'on est fatigué, pressé, ou que la PR fait 600 lignes.

Depuis quelques mois, je me fais assister par des agents IA pour faire une premiÚre passe de review sur mes projets. L'agent ne décide pas, il défriche : il signale, il questionne, il prépare le terrain. Et il s'est passé un truc inattendu : en m'appuyant sur cette premiÚre passe pour la surface, j'ai été obligé de redéfinir ce que je fais, moi, en tant que reviewer humain. Spoiler : c'est ce que j'aurais dû faire depuis le début.

Je m'en sers aussi autrement : quand je tombe sur une classe ou une méthode dont le but n'est pas évident, je demande à l'agent de m'expliquer ce qu'il en comprend. Si sa lecture diverge de la mienne, ou si elle a du mal à émerger, c'est qu'il manque un commentaire, un nom plus clair, ou que le design est à revoir. L'agent devient un révélateur de zones floues.

Autre découverte : bien paramétrés, ces agents peuvent rendre les PRs et les commentaires de review nettement plus lisibles : structure claire, contexte explicite, intention résumée. Un confort pour tout le monde, et un vrai levier d'inclusion pour les profils neuro-atypiques (dont je fais partie). Mais ça ne tombe pas du ciel : c'est à nous, humains, de paramétrer nos agents pour qu'ils délivrent ce niveau de clarté.

Dans ce talk : les bonnes pratiques de review qu'on connaĂźt et qu'on nĂ©glige, ce que l'assistance d'un agent apporte vraiment (et ses angles morts), comment s'en servir comme rĂ©vĂ©lateur de zones floues, comment se positionner avec la dĂ©cision finale, et comment configurer ses agents pour livrer des PRs vraiment lisibles. Échecs rĂ©els inclus.

Vous repartez avec une vision claire de votre rÎle de reviewer quand un agent vous a assisté, et avec l'envie de mieux reviewer, agent ou pas.

Cyber Resilience Act : guide de survie pour devs PHP

Le Cyber Resilience Act arrive, et avec lui une avalanche de nouvelles notions : fabricant, steward, gestion des vulnĂ©rabilitĂ©s, obligations de sĂ©curitĂ©... Faut-il arrĂȘter de publier sur GitHub ? Les mainteneurs open source vont-ils finir en prison ? Une agence PHP peut-elle devenir « fabricant » sans le savoir ? Et pourquoi des devs se retrouvent-ils soudain Ă  lire des rĂšglements europĂ©ens ?

À travers des exemples concrets issus du monde PHP et de l'open source, cette confĂ©rence propose un dĂ©cryptage accessible, pragmatique et sans jargon juridique du CRA. L'objectif : comprendre qui est rĂ©ellement concernĂ©, ce qui change vraiment, et comment se prĂ©parer sans cĂ©der Ă  la panique.

Une session pensée pour celles et ceux qui, à la base, n'avaient rien demandé !

De l'anarchie au repo : organiser l'IA en équipe

L'IA a dĂ©boulĂ© dans nos Ă©quipes sans mode d'emploi. On dĂ©couvre les skills, les hooks, les claude.md, on bidouille nos configs — et trĂšs vite, chacun avance dans son coin : on ne sait plus ce qui existe, ni oĂč ranger quoi.

Comment passer de cette effervescence à quelque chose de partagé, réutilisable, sans étouffer l'initiative individuelle ?

Je vous partage notre dĂ©marche, encore en chantier. Tout est parti d'un atelier oĂč chacun a prĂ©sentĂ© ses tips. Ensuite, on s'est posĂ© les vraies questions :

  • Ce qu'on partage, ce qu'on garde : trier ensemble avec des niveaux clairs (🌍 global, đŸ€ Ă©quipe, đŸ’» perso) — sachant qu'un tip perso peut tout Ă  fait finir partagĂ©.
  • Le catalogue partagĂ© : un repo commun pour ranger nos agents, nos skills, nos hooks du quotidien.
  • L'orga humaine : on s'organise en squad autour d'un mĂȘme besoin, par exemple un skill git. On pose la premiĂšre pierre, pas la maison. Je vous partage nos arbitrages, nos doutes, nos petits rĂ©flexes d'atelier (« je le mets en global, ok ? ») et les premiers piĂšges qu'on repĂšre : de quoi lancer la mĂȘme dynamique chez vous.

IA frugale : la meilleure IA est celle qu'on n'utilise pas

Cette conférence part d'une question qu'on se pose trop rarement avant d'ajouter de l'IA (générative) dans un projet : est-ce qu'on résout un vrai problÚme ou est-ce qu'on prend l'option la plus à la mode parce qu'elle fait moderne ? Pensée pour des devs qui appellent un LLM presque par réflexe, elle propose de repartir du besoin plutÎt que de l'outil, le tout dans une perspective de résilence et de frugalité.

Les chiffres, sans dramatiser : de vrais ordres de grandeur sur l'empreinte de l'IA (énergie, eau, métaux), avec des comparaisons concrÚtes pour situer ce qui pÚse vraiment. Un jeu de démystification : distinguer ce qui compte de ce qui ne change rien (fermer le robinet en se brossant les dents, contre prendre l'avion pour un week-end). L'idée centrale, l'IA n'est pas que le génératif : tout un spectre, du code déterministe et des expressions réguliÚres (qui ne sont pas de l'IA), à l'IA symbolique, au machine learning classique, aux petits modÚles, puis aux gros LLM. L'option la plus sobre qui fait le travail se situe presque toujours en dessous du LLM. Un cadre pour décider, inspiré de l'AFNOR Spec sur l'IA frugale et du Frugal AI Hub de Cambridge : l'IA a-t-elle sa place dans ce projet, et à quelle intensité ? Un cas d'étude en direct, trier une boßte mail : des rÚgles déterministes d'abord, un petit modÚle seulement pour le reste difficile, et compar:IA pour le choisir. Résultat, environ 100 fois moins d'émissions que la version tout-LLM, avec une meilleure précision. Quand le génératif est le bon choix, le faire plus léger : dimensionner le modÚle au besoin, structurer les entrées pour ne pas gaspiller de tokens, le green prompting (32 à 48 % d'énergie en moins), les modÚles locaux, l'hébergement bas carbone. Au passage, ce qui est plus frugal coûte aussi moins cher, ce qui compte quand les forfaits laissent place au paiement à l'usage.

Chacun·e repart avec une checklist de décision pour son prochain projet, et une réponse claire à la question de départ : est-ce que j'ai vraiment besoin d'IA ici ?

Souveraineté numérique à l'Úre de l'IA

Abstract détaillé à venir

PHP n'a jamais été aussi vivant, et son écosystÚme bouge sur tous les fronts. Ce thÚme en dresse le panorama : que révÚle l'analyse de centaines de gigaoctets de code sur l'état réel de nos projets ? Que change FrankenPHP et son Worker Mode pour la performance de vos applications Symfony ? Vous y croiserez l'outillage qualité porté par Rust, l'histoire et l'avenir d'un pilier comme PHPUnit, les applications mobiles en PHP, la mise en conteneur, et l'idée que le progrÚs passe par des ruptures de compatibilité assumées. Frameworks, runtimes, tests : de quoi prendre le pouls du langage.

PHP dans votre poche : créer des applications mobiles avec NativePHP

Depuis des années, le développement mobile impose souvent aux devs PHP de sortir complÚtement de leur écosystÚme : Flutter, React Native, Kotlin, Swift
 Et si PHP pouvait désormais trouver sa place jusque dans nos smartphones ?

Avec NativePHP Mobile, l’écosystĂšme Laravel s’ouvre au dĂ©veloppement d’applications mobiles iOS et Android en capitalisant sur les compĂ©tences, outils et habitudes dĂ©jĂ  maĂźtrisĂ©s par de nombreux devs PHP.

Dans cette confĂ©rence, nous dĂ©couvrirons ce qu’est NativePHP Mobile, comment il fonctionne, quels problĂšmes il cherche Ă  rĂ©soudre, mais aussi ses limites actuelles. Nous verrons Ă  quels types de projets cette approche convient rĂ©ellement, comment elle se compare aux solutions mobiles plus traditionnelles, et pourquoi elle peut reprĂ©senter une opportunitĂ© intĂ©ressante pour les Ă©quipes PHP souhaitant produire rapidement des applications mĂ©tier mobiles.

Au travers de dĂ©monstrations concrĂštes et d’un retour pragmatique, nous explorerons les possibilitĂ©s offertes aujourd’hui par NativePHP Mobile : accĂšs natif, stockage local, architecture applicative, partage de logique mĂ©tier et expĂ©rience dĂ©veloppeur.

FrankenPHP & Worker Mode : Mon application Symfony est-elle vraiment prĂȘte ?

Passer au Worker Mode avec FrankenPHP ou Swoole propulse les performances de nos applications Symfony. Mais attention, dans ce nouveau paradigme, PHP n'est plus 'stateless' ! Un simple état muté dans un service partagé, et c'est la fuite de données assurée pour vos utilisateurs.

Découvrez à travers ce retour d'expérience l'anatomie des 'State Leaks', comment fonctionne l'analyse statique pour les détecter, et comment j'ai fini par créer Igor-PHP pour auditer vos projects.

J'ai analysé 236 Go de code PHP : état des lieux d'un écosystÚme

À quoi ressemble le PHP qu'on Ă©crit vraiment en 2026 ? Pour rĂ©pondre, j'ai tĂ©lĂ©chargĂ© l'intĂ©gralitĂ© de l'Ă©cosystĂšme open source (236 Go de dĂ©pĂŽts Git) et je l'ai passĂ© Ă  la moulinette de mes outils d'analyse.

Les rĂ©sultats sont parfois rassurants, parfois inquiĂ©tants. Adoption des features rĂ©centes, longueur moyenne des mĂ©thodes, dette typique, Ă©carts entre frameworks, traces des vieux patterns qui ne meurent pas : autant de signaux pour comprendre oĂč va, et oĂč traĂźne, l'Ă©cosystĂšme.

Je partagerai la méthode (collecte, normalisation, métriques retenues), les chiffres qui surprennent, et les limites de l'exercice (biais de l'open source, distorsion par les gros projets, paquets fantÎmes). Vous repartirez avec une vision chiffrée du PHP d'aujourd'hui, des repÚres pour situer votre propre code, et probablement quelques convictions à réviser.

Mago, ou comment Rust et l'IA réinventent l'outillage qualité PHP

10 minutes pour faire tourner l'analyse statique sur 300 000 lignes de code. Vous connaissez le rituel : on lance, on va prendre un cafĂ©, on revient, c'est encore en cours. Et en local, soyons honnĂȘtes, on ne la lance plus du tout. Maintenant, imaginez la mĂȘme analyse en 15 secondes. C'est ce qu'on a obtenu en passant Ă  Mago, et ce n'est pas un prototype : un seul binaire, Ă©crit en Rust, qui formate, lint, type et fait respecter votre architecture. La vague Rust qui a dĂ©jĂ  transformĂ© les Ă©cosystĂšmes JS et Python dĂ©ferle enfin sur PHP, et elle est prĂȘte pour la production ! Cette vitesse n'est pas qu'un confort : quand un outil devient instantanĂ©, on l'utilise vraiment, Ă  chaque sauvegarde, et le rapport Ă  la qualitĂ© change complĂštement. J'en profiterai pour parler d'un effet de bord fascinant de ces projets nĂ©s Ă  l'Ăšre des agents IA : la façon dont une communautĂ© construit aujourd'hui son outillage, Ă  un rythme qu'on n'avait jamais vu. Venez voir Ă  quoi ressemble une chaĂźne qualitĂ© PHP en 2026. Vous risquez de vouloir mettre Ă  jour votre stack en rentrant.

Le progrÚs réside dans les BC Breaks

La rétrocompatibilité, ou Backwards Compatibility (BC) en anglais, est le principe selon lequel les pratiques et les conceptions élaborées dans un contexte antérieur restent valables dans le contexte actuel. Rompre la rétrocompatibilité (BC break) correspond à faire des changements qui altÚrent la conception sous-jacente, entraßnant souvent des perturbations qui cascadent pour les utilisateurs.

Les avantages de maintenir la compatibilité sont évidentes, alors quelles sont les raisons que divers secteurs la rompent réguliÚrement ? Dans cette conférence, nous examinerons des exemples issus de divers domaines afin de montrer pourquoi la rupture de la rétrocompatibilité est généralement le prix nécessaire et inévitable du progrÚs.

Laravel : la magie, puis la maĂźtrise

Laravel a une solution prĂȘte pour presque tout, et ça marche tout de suite : c'est la magie. Sans mĂȘme vous en rendre compte, le framework vous tient la main, et vous apprend les bonnes pratiques en chemin.

Puis vient le jour oĂč le dĂ©faut ne suffit plus, oĂč votre mĂ©tier sort du cadre. Et lĂ , Laravel ne vous enferme pas : derriĂšre chaque raccourci, une porte de sortie. C'est ce qui rend l'approche aussi confortable pour un·e junior·e qui dĂ©bute que pour un·e senior·e qui a besoin de tout contrĂŽler. Deux temps, des cas concrets : ce que Laravel fait pour vous, et comment reprendre le contrĂŽle quand il le faut.

Past, Present, Future: The PHPUnit Story

I have learnt more from the failures of PHPUnit than its successes. Over the last 25 years, I have witnessed the evolution of testing philosophy from a marginal practice to the bedrock of modern software development. But has the PHP community learned the right lessons?

In this presentation, I will share what I have learned from PHPUnit, how my approach has evolved (sometimes unexpectedly), and my thoughts on the future of software development in the age of AI.

Mercure 1.0 : bĂątir des applications temps rĂ©el n’a jamais Ă©tĂ© aussi simple, rapide et sĂ©curisĂ©

Il y a huit ans naissait Mercure : un protocole et un serveur open source écrits en Go, conçus pour apporter la puissance du temps réel à n'importe quelle architecture web, et tout particuliÚrement aux écosystÚmes comme PHP qui ne gÚrent pas nativement les connexions persistantes.

Aujourd'hui, Mercure est devenu un standard incontournable, propulsant des centaines de projets en production, de la startup au grand compte. Parfaitement intĂ©grĂ© Ă  Symfony (via Symfony UX) ainsi qu'Ă  API Platform, et embarquĂ© par dĂ©faut dans FrankenPHP, il simplifie radicalement l'expĂ©rience de dĂ©veloppement. Que ce soit pour concevoir des Ă©diteurs collaboratifs (Ă  la Google Docs), synchroniser des tableaux de bord instantanĂ©s, notifier vos utilisateurs lorsqu’une tĂąche en arriĂšre-plan se termine ou, plus rĂ©cemment, streamer les tokens de vos LLM et suivre l'avancement d'agents IA, Mercure s'impose comme la solution idĂ©ale.

Rejoignez-moi lors de cette conférence pour découvrir toutes les nombreuses nouveautés de Mercure 1.0, qui va sortir prochainement !

Une faille ne prĂ©vient pas, et la sĂ©curitĂ© n'est jamais un sujet « pour plus tard ». Ce thĂšme descend dans le concret : comment gĂ©rer l'authentification et l'autorisation, quitte Ă  faire un dĂ©tour par Rust pour un simple besoin d'authz ? Comment chiffrer vos donnĂ©es avant mĂȘme de les confier Ă  votre base, dans une logique Zero Trust ? Comment dompter des stratĂ©gies de permissions complexes sous Symfony, ou faire tourner des agents de code isolĂ©s du systĂšme hĂŽte ? Vous dĂ©couvrirez l'envers du dĂ©cor de la Security Team de la PHP Foundation. Un thĂšme pour cesser de faire confiance par dĂ©faut.

Biscuit en PHP : un petit besoin d'authz, un long détour par Rust

Biscuit, c'est un format de token d'autorisation pensé pour la délégation et la vérification offline. Atténuation sans clé privée, politiques exprimées en Datalog, cryptographie moderne. Une alternative sérieuse à JWT quand l'authz devient complexe.

En 2021, je le dĂ©couvre et je veux l'utiliser en PHP. Il existe dĂ©jĂ  des implĂ©mentations en Rust, Go, Java, Haskell, WebAssembly, et mĂȘme Python via PyO3. Mais rien cĂŽtĂ© PHP. Réécrire la spec Ă  la main aurait pris des mois, alors que biscuit-rust est l'implĂ©mentation de rĂ©fĂ©rence. Je cherche l'Ă©quivalent du pont Python cĂŽtĂ© PHP et je tombe sur ext-php-rs. Le projet me plaĂźt, je commence Ă  contribuer, je finis comainteneur. J'en parle au Forum PHP 2022, persuadĂ© que la suite ira vite.

Octobre 2025. biscuit-php sort enfin. Cette conférence parle de Biscuit, de ce qu'il apporte à l'authz PHP, et du chemin qu'il a fallu pour l'y amener.

L’Ecosystem Security Team de la PHP Foundation de l’intĂ©rieur

PHP fait tourner une part Ă©norme du web : Symfony, Laravel, WordPress, Magento
 et les dizaines de milliers de paquets que vous rĂ©cupĂ©rez de Packagist sans mĂȘme y penser. Pourtant, la sĂ©curitĂ© de cet Ă©cosystĂšme n’a jamais vraiment Ă©tĂ© le travail de personne. Et depuis que les LLMs savent dĂ©nicher des failles en sĂ©rie, l’enjeu change d’échelle : le mĂȘme outil qui aide les dĂ©fenseurs arme aussi les attaquants.

C’est pour rĂ©pondre Ă  cette problĂ©matique que la PHP Foundation a créé une Ă©quipe dĂ©diĂ©e : l’Ecosystem Security Team. Notre mission tient en trois mots : identifier, prioriser, informer. Tout ça avant que ça ne deviennent votre problĂšme en production.

Direction les coulisses : les outils qu’on utilise Ă  la fondation, comment sont choisit les projets sur lesquels intervenir, ce qu’on y trouve vraiment, ce qu’on corrige, et lĂ  oĂč l’humain reste irremplaçable derriĂšre la machine
 Pour l’instant.

Zero Trust : Pourquoi (et comment) chiffrer vos données avant de les envoyer au SGBD

Une semaine ne se passe pas sans qu’une nouvelle fuite de donnĂ©es massive ne fasse la une des mĂ©dias. Face Ă  des attaquants de plus en plus ingĂ©nieux et des infrastructures cloud mouvantes, une certitude s'impose : la question n'est plus de savoir si votre base de donnĂ©es sera compromise, mais quand.

Et si la solution consistait tout simplement Ă  ne plus faire confiance Ă  votre propre SGBD ?

C’est tout le paradigme du Client-Side Encryption (CSE). En chiffrant les donnĂ©es sensibles avant leur transfert, votre base de donnĂ©es ne stocke plus que des suites d'octets parfaitement inutilisables pour un intrus. MĂȘme avec un accĂšs administrateur complet au SGBD ou une faille zero-day, vos donnĂ©es restent Ă  l'abri.

DerriÚre la promesse théorique, la réalité du terrain soulÚve de vrais défis d'implémentation. Durant ce talk, nous décortiquerons concrÚtement comment sauter le pas :

  • Focus rapide sur les solutions intĂ©grĂ©es des SGBD modernes (comme le Client-Side Field Level Encryption).
  • Le dilemme de la recherche : Comment indexer, requĂȘter ou trier des donnĂ©es dont le serveur ne comprend pas la substance ?
  • Comment l'implĂ©menter avec Postgres & Doctrine

Que vous soyez dev ou architecte, vous repartirez de cette session avec les clés pour mettre en place une stratégie Zero Trust.

Au-delà d'AbstractVoter : Domptez vos permissions et stratégies d'accÚs Symfony !

N'avez-vous jamais eu de difficulté à tester vos rÚgles de sécurité dans Symfony ? Saviez-vous que la classe AbstractVoter cache certaines limites ? Et si la stratégie de décision "Affirmative" (définie par défaut) n'était pas toujours la plus performante ?

Lors de cette prĂ©sentation, nous plongerons dans les rouages mĂ©connus du composant Security de Symfony. À travers des cas d'usage concrets nous dĂ©couvrirons comment hiĂ©rarchiser vos rĂšgles de sĂ©curitĂ© de maniĂšre Ă©lĂ©gante et performante. Limites de l'AbstractVoter, StratĂ©gies d'accĂšs et Performance, DĂ©bogage et Bonnes Pratiques, vous aurez toutes les clĂ©s pour transformer vos voteurs en un systĂšme d'autorisation robuste, dĂ©couplĂ© et optimisĂ© !

Un logiciel qui dure ne tient pas au hasard : il repose sur des choix de conception assumés. Ce thÚme explore l'art de bùtir du code robuste et lisible, et de savoir ce qu'il coûte. Comment maßtriser sa couche de données sans se faire piéger par son ORM ? Que se passe-t-il, à la milliseconde prÚs, entre un return new Response() et l'octet qui part sur le réseau ? Comment coder défensif et cesser de faire aveuglément confiance aux entrées et aux dépendances ? Et si la vraie architecture commençait par la lucidité sur ce que l'on construit ? Un thÚme pour qui aime regarder sous le capot.

La lucidité comme architecture

En 2014, nous développons une billetterie en ligne sous Symfony 2. Le besoin paraßt simple : connecter des flux de billetterie, afficher des événements, et vendre des billets. Quelques années plus tard, le projet équipe plus de 150 sites, gÚre un gros volume de transactions, traverse plusieurs versions majeures de Symfony, plusieurs architectures, plusieurs outils, et l'équipe grandit avec lui.

Nous avons alors voulu bien faire : microservices, DDD, couches spécialisées, interfaces, abstractions. Mais à force de chercher "la bonne architecture", nous avons parfois oublié les fondations : qualité automatisée, observabilité, déploiements fiables, environnement reproductible, ... et surtout simplicité.

Ce qui ressemblait d’abord Ă  un problĂšme de performance a rĂ©vĂ©lĂ© une dette plus large : technique, organisationnelle, et cognitive. Dans ce retour d’expĂ©rience Ă  deux voix, nous raconterons comment nous avons repris le contrĂŽle sans tout réécrire : audit de performance, cache HTTP, monitoring, monorepo, trunk-based development, feature flags, dĂ©ploiement automatisĂ©, simplification progressive de l’architecture.

Mais cette confĂ©rence parle aussi de ce qu’on aborde rarement dans les talks techniques : l'expĂ©rience intime de la dette. Les ressorts psychologiques qu’il faut reconnaĂźtre pour l'affronter, demander de l’aide, et retrouver assez de luciditĂ© pour agir. Une confĂ©rence technique, mĂ©thodologique et humaine sur un projet PHP devenu trop complexe, et sur ce qu’il faut parfois traverser pour revenir Ă  la simplicitĂ©.

Avant que PHP n'exécute ton premier echo : ce que la couche réseau coûte vraiment

FrankenPHP est arrivé en prod chez beaucoup d'entre nous. Mode worker, performances inégalées, déploiement plus simple. Et accessoirement : HTTP/3 sur QUIC activé par défaut, 0-RTT disponible, Early Hints supportés, certificats automatiques. La plupart de ces fonctionnalités, on ne les a pas demandées; et la plupart, on ne sait pas ce qu'elles font vraiment...

Je te propose de plonger dans ce que fait ton serveur PHP quand un client se connecte. On regarde, dans l'ordre oĂč ça se passe : la rĂ©solution DNS, le handshake TCP (avec ou sans Fast Open), la nĂ©gociation TLS 1.3, arbitrage entre HTTP/1.1, HTTP/2 et HTTP/3, l'Ă©ventuel 0-RTT. À chaque Ă©tape, deux questions : qu'est-ce que ça t'apporte mesurablement, et qu'est-ce que ça peut casser silencieusement ?

Captures Wireshark, mesures sur Symfony Demo, et trois piÚges concrets : le 0-RTT et les replay attacks sur tes routes non-idempotentes, HTTP/3 derriÚre un load balancer qui ne le supporte pas, l'OCSP stapling oublié qui ajoute 300 ms à chaque cold connection.

Si tu te dis qu'on n'optimise pas ce qu'on ne mesure pas, ce talk est pour toi.

Mon objectif : que tu sortes de la salle en sachant ce que FrankenPHP fait pour toi (et c'est valable aussi pour Nginx ou Apache), ce qu'il ne fait pas, et ce que tu dois encore configurer Ă  la main pour ne pas avoir de surprise.

Ce que coûte vraiment `return new Response()`

La plupart des applications Symfony bufferisent tout : rĂ©sultats Doctrine, objets sĂ©rialisĂ©s, JSON, exports... Puis elles construisent une rĂ©ponse complĂšte avant de l'envoyer au client. Ça fonctionne. Jusqu'au jour oĂč ça ne fonctionne plus : mĂ©moire qui explose, time-to-first-byte qui grimpe, exports qui tombent en production.

De plus, avec l'arrivée des LLM dans nos produits, cette approche montre encore plus ses limites. Quand un modÚle met plusieurs secondes à générer sa réponse, attendre le return signifie afficher un spinner pendant tout ce temps. Le streaming n'est plus une optimisation back-end. C'est devenu le socle d'une expérience utilisateur moderne.

Dans ce talk, nous allons dĂ©monter une idĂ©e profondĂ©ment ancrĂ©e dans nos applications : celle qu'une rĂ©ponse doit ĂȘtre entiĂšrement construite avant d'ĂȘtre envoyĂ©e. Nous repenserons le flux de donnĂ©es d'une application Symfony de bout en bout : StreamedResponse, encodage JSON incrĂ©mental avec le composant JsonStreamer, sources de donnĂ©es itĂ©rables avec Doctrine, Server-Sent Events et EventStreamResponse pour le temps rĂ©el.

Vous apprendrez à produire les données au fil de l'eau, alimenter des interfaces en direct, générer des exports de plusieurs millions de lignes et maintenir une consommation mémoire stable grùce aux outils déjà présents dans Symfony.

PHP DĂ©fensif : ArrĂȘtez de faire confiance, dĂ©fendez votre code !

« L'expérience prouve que celui qui n'a jamais confiance en personne ne sera jamais déçu. » (Léonard de Vinci)

Partant du postulat lucide que nous codons tous et toutes mal, ce talk explore les principes de la programmation défensive appliqués au PHP moderne. L'idée centrale ? Anticiper que tout ce qui peut mal tourner finira par exploser, et s'appuyer sur le compilateur plutÎt que sur la vigilance humaine pour l'éviter. Fini le code silencieux qui masque les erreurs et coûte une fortune à débugger en production à 1h du matin : il est temps de refuser les états invalides par construction et d'échouer vite, fort, et au bon endroit (Fail fast, fail loud).

À travers une approche trĂšs concrĂšte (attention : il y aura beaucoup de code !), nous verrons comment utiliser votre meilleur alliĂ© - le langage lui-mĂȘme - pour blinder vos applications :

Le systÚme de types comme contrat absolu : strict_types, Union/Intersection/DNF types, et l'usage radical du type never. Le verrouillage des états : Immutabilité (classes readonly), Value Objects, Enums, et encapsulation maßtrisée. La fiabilité par conception : Nullabilité stricte, collections typées hétérogÚnes, et gestion des exceptions qui ne laissent rien passer.

Un talk avec quelques opinions tranchées pour apprendre à dire "non" poliment (mais fermement) aux appelants de vos fonctions, et faire de l'analyse statique votre filet de sécurité ultime.

[ATELIER] PHP DĂ©fensif : ArrĂȘtez de faire confiance, dĂ©fendez votre code !

Allez encore plus loin sur le sujet, présenté lors d'une conférence de 40 minutes, pendant cet atelier de 2h en compagnie de Thomas Dutrion. En petit groupe, le temps de 2h, travaillez sur le sujet sur votre propre machine.

Les inscriptions aux ateliers ouvriront début septembre. Il faut avoir sa place pour le Forum PHP 2026 pour pouvoir s'inscrire à l'atelier.

DerriÚre chaque ligne de code, il y a des personnes - et notre métier ne se résume pas à la technique. Ce thÚme remet l'humain au centre. Que vit, concrÚtement, un·e collÚgue confronté·e à un handicap invisible dans des situations de travail banales, et comment rendre le quotidien plus juste ? Comment donner du sens à ses compétences en les mettant au service de causes, par le mécénat ? Et si, dans un monde qui accélÚre sans cesse, le vrai courage était de choisir de ralentir ? Inclusion, engagement, équilibre : un thÚme pour prendre soin des équipes autant que du code.

10 situations de travail banales qui peuvent devenir un enfer avec un handicap invisible

Réunions, open space, notifications, pauses café, revue de code, incident de production à gérer en urgence, une librairie PHP critique à mettre à jour avant la MEP...

Autant de situations considérées comme normales dans le quotidien des équipes tech. Pourtant, pour certaines personnes, elles représentent une charge physique, cognitive ou émotionnelle considérable. Le problÚme, c'est que ces difficultés ne se voient pas. Et lorsqu'une difficulté est invisible, elle est facilement minimisée.

Pourtant, prĂšs de 80 % des handicaps sont invisibles, mais le monde du travail continue souvent Ă  considĂ©rer que chacun vit les mĂȘmes contraintes, avec les mĂȘmes ressources et les mĂȘmes capacitĂ©s d'adaptation. À travers 10 situations concrĂštes du quotidien professionnel, dĂ©couvrons ce que vivent les personnes concernĂ©es, et pourquoi ce qui paraĂźt banal pour les un·e·s peut parfois reprĂ©senter un vĂ©ritable dĂ©fi pour les autres.

Alors que tout accélÚre, nous avons choisi de ralentir

« Tout est au vert, et pourtant nous n'avons jamais été aussi épuisé·e·s. »

Depuis plus d'un an, notre code sort surtout d'agents IA. Les projets avancent, mais nos journées sont devenues une suite ininterrompue d'allers-retours à haute charge cognitive, sans les pauses que donnait le code, et sur fond de nouveautés qui tombent chaque semaine avant qu'on ait stabilisé les précédentes.

Nous avons fini par faire un choix Ă  contre-courant : ralentir pour tenir, et arrĂȘter de courir aprĂšs chaque nouveautĂ©. Ce talk raconte ce qu'on a traversĂ© et ce qu'on a mis en place, de la dĂ©cision individuelle (dire la fatigue, protĂ©ger ses plages) Ă  l'organisation collective (un workflow qui nous arrĂȘte volontairement aux bons moments).

On partage des pistes concrÚtes, testées chez nous, pour vivre cette bascule sans y brûler l'équipe.

Toutes les grandes idées ne naissent pas dans un terminal. Ce thÚme, c'est le pas de cÎté du programme : des regards venus d'ailleurs qui bousculent nos certitudes de développeur·euses. Quand l'IA générative s'empare de l'image, que reste-t-il du réel ? Un photojournaliste de terrain raconte ce que trois ans d'IA ont changé à son métier et à notre rapport à la vérité. Et quand la science lÚve les yeux vers le cosmos, elle élargit notre horizon bien au-delà du code. Des conférences pour respirer, s'étonner et repartir avec des questions qu'on ne s'était pas posées.

L’IA dans l’image : La mort du rĂ©el ou le moment qu’on attendait toutes et tous ?

Trois ans aprĂšs le boom des IA gĂ©nĂ©ratives dans le grand public, le photojournaliste suisse Niels Ackermann analyse l’impact rĂ©el de ces outils sur sa profession et sur notre rapport au “rĂ©el”. Est-ce que tout est perdu, ou ces Ă©volutions sont-elles aussi l’occasion de rĂ©inventer son mĂ©tier? Il prĂ©sentera quelques rĂ©sultats de ses recherches et expĂ©rimentations, et notamment Dalia, une Ă©chelle opensource permettant Ă  n’importe qui de quantifier le rĂŽle de l’IA dans son travail.

Retrouvez les temps forts de l'AFUP dans cette catégorie

Keynote d'ouverture

Bienvenue au Forum PHP 2026 !

Keynote de cloture

C'est déjà la fin du Forum PHP 2026 : maintenant, en route vers l'AFUP Day 2027 !

[Atelier] Mercure 1.0 : bĂątir des applications temps rĂ©el n’a jamais Ă©tĂ© aussi simple, rapide et sĂ©curisĂ©

AprĂšs la confĂ©rence, passez de la thĂ©orie Ă  la pratique lors du workshop dĂ©diĂ©. Nous explorerons les intĂ©grations clĂ©s de Mercure 1.0 : de l’écosystĂšme Symfony (usage direct et via UX) Ă  Laravel (Broadcaster et Echo), en passant par API Platform !