Auteurs : Łukasz Uznański
Traduit par : Léo - W-Seils
Łukasz Uznański partage le voyage derrière la réalisation technique pour mettre en œuvre une preuve de concept fonctionnelle pour TYPO3 fonctionnant entièrement dans le navigateur - pas d'installation, pas de Docker, pas de configuration d'hébergement nécessaire.
L'initiative TYPO3 Community Budget Ideas a sélectionné le projet One-Click TYPO3 Playground pour T1/2025. Cette solution abaisse la barrière à l'entrée pour les nouveaux utilisateurs, simplifie l'intégration des contributeurs et ouvre de nouvelles possibilités pour la formation et les démonstrations.
Nous incluons ici un résumé de haut niveau du travail, des jalons et des prochaines étapes. Vous trouverez ensuite le rapport complet, qui détaille la recherche, la mise en œuvre et les difficultés rencontrées en cours de route.
Un environnement basé sur un navigateur où TYPO3 v13.4 fonctionne entièrement via WebAssembly, sans serveurs ou installations externes. Il inclut des fonctionnalités frontales et dorsales, supporte l'installation d'extensions et sauvegarde l'état de l'application dans le navigateur.
Cette solution répond directement aux problèmes soulevés depuis longtemps par la communauté TYPO3 - en particulier pour les développeurs, les formateurs et les contributeurs. Contrairement à demo.typo3.org, qui se réinitialise après 30 minutes, ce nouvel environnement permet des sessions persistantes, une édition réelle et une exploration plus approfondie des fonctionnalités de TYPO3.
Il ouvre de nouvelles possibilités pour :
En éliminant la friction de l'installation et de la configuration, le projet contribue à rendre TYPO3 plus accessible, plus facile à découvrir et plus convivial pour les développeurs.
Les plans incluent l'optimisation des performances du frontend, le support de multiples versions de TYPO3, l'intégration avec Gerrit pour les révisions de correctifs, et éventuellement, des plans pour lancer instantanément des configurations TYPO3 personnalisées.
Initialement, nous avons envisagé des solutions comme GitPod, qui fournit déjà des applications existantes pour le développement dans le navigateur. Cependant, nous voulions essayer une approche alternative - une approche utilisée avec succès par WordPress : compiler une application basée sur PHP en WebAssembly pour l'exécuter entièrement dans le navigateur. Cette approche offre des performances élevées, un contrôle total de la source ouverte et une absence de dépendance à l'égard d'un hébergement et de services tiers. Il suffit de disposer d'un navigateur web moderne, ce que nous considérons comme un avantage essentiel.
Nous avons commencé par une recherche générale sur les solutions existantes :
Nous avons initialement forké php-wasm parce qu'il démontrait de multiples frameworks CMS (par exemple, CakePHP, CodeIgniter, Drupal, Laravel).
Notre approche consistait à
Bien que nous ayons réussi à extraire TYPO3 et à nous connecter à la base de données, l'interface affichait un écran vide. L'outil d'installation ne se chargeait que partiellement, probablement parce que les fichiers statiques n'étaient pas récupérés correctement. Après de multiples corrections et discussions (notamment avec Tymoteusz Motylewski), nous avons conclu que cette approche posait de nombreux problèmes. Nous avons alors décidé de passer à WordPress Playground - bien qu'il semble plus complexe, il promettait de résoudre plus de problèmes dès le départ.
En faisant des recherches plus approfondies, nous avons découvert que WordPress Playground disposait d'une documentation complète et d'une série d'articles de blog de son auteur, Adam Zieliński. Il est basé sur un fork de php-wasm mais ajoute des méthodes supplémentaires et des modules compilés et fournit des solutions à de nombreux problèmes.
Par exemple, ils ont résolu les problèmes liés au service-worker et au changement d'URL de l'application :
Pour plus d'informations, veuillez consulter la documentation.
Nous avons décidé d'adapter cette architecture à TYPO3. Nous avons remarqué que WordPress Playground utilise SQLite, nous avons donc basculé TYPO3 vers SQLite. Une fois TYPO3 zippé pour le navigateur, nous avons rencontré une erreur concernant l'absence de l'extension php-intl, qui n'est pas incluse par défaut dans les modules de l'environnement. Oskar Dydo a compilé php-intl avec Emscripten, en soumettant une pull request (#2173) au dépôt WordPress Playground. C'était une étape majeure - après cela, TYPO3 ne s'est plus planté et a affiché sa page 404, ce qui signifie un réel progrès.
WordPress Playground applique une portée de navigateur unique ajoutée à chaque URI de requête. (Les détails peuvent être trouvés dans la documentation sur les champs d'application du navigateur). Comme chaque instance du navigateur reçoit sa propre portée, nous avons dû modifier la configuration du site TYPO3 pour qu'il puisse gérer ces URLs. Sans la portée en place, CSS, JavaScript et d'autres actifs statiques ne parvenaient pas à se charger, ce qui entraînait des pages partielles ou complètement vides. Après avoir injecté correctement le champ d'application, le frontend s'est affiché comme prévu.
Pour confirmer que le backend était fonctionnel, nous avons d'abord contourné l'authentification TYPO3. Une fois à l'intérieur, nous avons découvert que les références directes à top à l'intérieur des iframes causaient des conflits parce que notre configuration utilise plusieurs iframes. Pour résoudre ce problème, nous avons corrigé ces références dans le JavaScript de TYPO3. Plutôt que de faire référence directement à top, nous avons créé un objet dédié au niveau du rendu du backend (par exemple, dans le BackendController ou un composant similaire) et modifié le code pour faire référence à cet objet. Cela permet d'utiliser le bon contexte et d'éviter les conflits avec les limites des iframes.
De même, certains modules, tels que la liste de fichiers et l'outil d'installation, supposent un accès direct à la fenêtre du navigateur de niveau supérieur. Nous avons appliqué des dérogations similaires à ces modules. Après ces corrections, le backend s'est suffisamment stabilisé pour permettre la création de pages et rendre le backend de TYPO3 généralement utilisable.
Nous cherchions un moyen de visualiser les logs dans l'application, nous avons donc introduit une visionneuse de logs basée sur le stockage et accessible via Filelist. Il permet de visualiser les erreurs et les messages de débogage à partir du système de fichiers du navigateur. Cela s'est avéré particulièrement utile pour diagnostiquer les références d'actifs manquantes ou les problèmes d'injection de portée, en confirmant que les correctifs pertinents fonctionnaient comme prévu.
L'une des exigences principales était de faciliter l'installation des extensions TYPO3 sans environnement local. Initialement, nous avons rencontré des problèmes pour télécharger des paquets directement depuis le web. Nous avons réalisé que, comme pour WordPress Playground, un proxy CORS était nécessaire pour permettre l'accès au réseau depuis le navigateur. Nous en avons déployé un (inspiré par le problème #85 de WordPress Playground), ce qui nous a permis de récupérer les extensions du TYPO3 Extension Repository (TER) de manière transparente dans le navigateur.
Au cours de notre processus de développement, nous avons eu un appel avec Adam Zieliński, le créateur de WordPress Playground, pour examiner les défis et explorer les améliorations pour notre projet TYPO3 WebAssembly. Nous avons discuté de plusieurs points clés :
Les idées d'Adam sur la réduction de la taille de la compilation, l'activation de la mise en réseau pour les extensions et la préservation de la portée actuelle ont été précieuses pour nous aider à obtenir une preuve de concept fonctionnelle. Ses conseils ont contribué à façonner nos plans d'optimisation et d'amélioration de la stabilité.
Le paquetage actuel inclut le noyau complet de TYPO3, le paquetage d'introduction, les extensions, et une base de données SQLite. Nous sommes en train d'explorer :
Alors que le backend est rapide (proche de la vitesse native), le frontend peut sembler lent dans les grandes configurations. Les améliorations possibles sont les suivantes :
La fonction PHP exec(« convert ») pour ImageMagick n'est actuellement pas fonctionnelle dans WASM. Des solutions sont en cours :
Il y a des changements mineurs dans le code de TYPO3 qui nécessitent un travail supplémentaire. Par exemple, l'adaptation de PHP pour TYPO3 a nécessité la modification de certaines fonctions comme mktime pour surmonter les limitations de temps en 32 bits, et la suppression ou l'ajustement de certaines vérifications d'environnement qui provoquaient le plantage de l'instance. De plus, lors de nos tests de génération d'images, nous avons rencontré des erreurs PHP qui suggèrent que le module GD ne fonctionne pas correctement. Ces modifications sont nécessaires pour assurer la compatibilité avec toutes les versions de TYPO3.
A ce stade, nous avons une instance TYPO3 WASM stable fonctionnant dans le navigateur. Nous avons réussi à fournir une preuve de concept pour faire fonctionner TYPO3 v13.4 entièrement dans le navigateur - sans aucune infrastructure supplémentaire - en étendant et en adaptant les fondations posées par WordPress Playground. Nos recherches ont montré qu'il est possible de développer une solution opérationnelle, comme l'a fait WordPress Playground.
Cet environnement basé sur un navigateur fournit un backend et un frontend TYPO3 entièrement fonctionnels qui fonctionnent dans un contexte WebAssembly en bac à sable. Les fonctionnalités clés du backend, telles que la création de pages, la gestion de contenu et l'installation d'extensions, sont toutes prises en charge. L'environnement est isolé, sécurisé, et ne nécessite aucune installation ou configuration, ce qui le rend idéal pour les démonstrations, les tests d'extension et l'onboarding.
Le projet a deux dépôts clés :
Vous pouvez les trouver ici :