The TYPO3 Community Budget Ideas initiative selected the project One-Click TYPO3 Playground for Q1/2025. This solution lowers the barrier to entry for new users, simplifies contributor onboarding, and opens new possibilities for training and demos.
Here we include a high-level summary of the work, milestones, and next steps. Following that is the full report, which provides a detailed breakdown of the research, implementation, and challenges along the way.
Summary
What We Built
A browser-based environment where TYPO3 v13.4 runs entirely via WebAssembly, without external servers or installations. It includes backend and frontend functionality, supports extension installation, and saves application state in the browser.
Try it Now: Playground Live Demo
Why it Matters
This solution directly responds to long-standing pain points raised by the TYPO3 community — especially for developers, trainers, and contributors. Unlike demo.typo3.org, which resets after 30 minutes, this new playground allows persistent sessions, real editing, and deeper exploration of TYPO3 features.
It opens up new possibilities for:
- Running TYPO3 demos for clients entirely in the browser
- Editing and testing extensions without a local setup
- Onboarding new users in training sessions with zero configuration
- Reviewing patches or prototyping content safely in a disposable sandbox.
By removing the friction of installation and setup, the project helps make TYPO3 more accessible, discoverable, and developer-friendly.
Key Milestones
- Adapted WordPress Playground’s WASM infrastructure for TYPO3
- Implemented browser-specific fixes for asset loading, backend rendering, and login behavior
- Enabled in-browser extension management via a cross-origin resource sharing (CORS) proxy
- Collaborated with WordPress Playground’s creator to optimize performance and compatibility
What’s Next
Plans include frontend performance optimization, support for multiple TYPO3 versions, integration with Gerrit for patch reviews, and eventually, blueprints for launching custom TYPO3 setups instantly.
Try it now
Full Report
1. Initial Motivation and Research
Initially, we considered solutions like GitPod, which already provides existing applications for in-browser development. However, we wanted to try an alternative approach — one successfully used by WordPress: compiling a PHP-based application to WebAssembly to run entirely in the browser. This offered the potential for high performance, full open source control, and no reliance on third-party hosting and services. All that is needed is a modern web browser, which we viewed as an essential advantage.
We began with general research into existing solutions:
- php-wasm includes demos of popular CMSs, showing it is possible to run large PHP applications in WebAssembly.
- We also tested a Drupal WASM demo, but its performance and stability did not meet our standards.
- We then noticed WordPress Playground, which is stable, can save states, switch environments, and does not crash. Given it was already deployed successfully, we felt it was an innovative, open source option worth exploring in the TYPO3 ecosystem.
- We also checked whether GitPod would be a better fit for this use case. You can look into our findings in the Google Doc WebAssembly vs. GitPod.
2. Early Attempts With Php-wasm
We initially forked php-wasm because it demonstrated multiple CMS frameworks (e.g., CakePHP, CodeIgniter, Drupal, Laravel).
Our approach involved:
- Sending a bundled (non-Composer) version of TYPO3 as a ZIP file to the browser.
- Using the built-in shared storage for the filesystem.
- Incorporating PostgreSQL (in the form of pglite) into WASM.
While we successfully extracted TYPO3 and connected to the database, the frontend displayed a blank screen. The Install Tool only partially loaded, likely because static files were not being fetched correctly. After multiple fixes and discussions (including with Tymoteusz Motylewski), we concluded this approach posed numerous problems. We then decided to switch to WordPress Playground — though it appeared more complex, it promised to solve more issues out of the box.
3. Transition to WordPress Playground
Upon further research, we discovered that WordPress Playground has thorough documentation and a series of blog posts by its author, Adam Zieliński. It is based on a php-wasm fork but adds extra methods and compiled modules and provides solutions for multiple problems.
For instance:
- They solved issues with service-worker and switching application URLs (they built it based on iframes).
- They built a whole layer as a solution for external networking
- There is a Dockerfile to build PHP versions for WASM with Emscripten, leaving room to add custom PHP extensions — which we did.
For more information, please take a look at the documentation.
We decided to adapt this architecture to TYPO3. We noticed that WordPress Playground uses SQLite, so we switched TYPO3 to SQLite accordingly. Once we zipped TYPO3 for the browser, we encountered an error regarding the missing php-intl extension, not included by default in Playground modules. Oskar Dydo compiled php-intl with Emscripten, submitting a pull request (#2173) to the WordPress Playground repository. This was a major step — after that, TYPO3 no longer crashed and instead displayed its 404 page, signifying real progress.
4. Handling Browser Scopes and Static Assets
WordPress Playground applies a unique browser scope appended to each request URI. (Details can be found in the browser scopes documentation.) Because each instance in the browser receives its own scope, we had to modify TYPO3’s site configuration so it would handle these scoped URLs. Without the scope in place, CSS, JavaScript, and other static assets failed to load, causing partial or completely blank pages. After injecting the scope properly, the frontend rendered as expected.