With ExtJS, the TYPO3 Core received some kind of modularization, but that came with a high price: It's very complicated to extend the functionality of ExtJS for beginners, plus at some point the support of the used ExtJS version ended. Since parts of the TYPO3 backend highly depended on ExtJS components (Page tree, workspaces, extension manager, recycler and some more), this was the worst case, since the used ExtJS version had some critical bugs in regard of Internet Explorer and an upgrade was not possible without rewriting everything.
In the same run, most of the ExtJS components were rewritten to RequireJS and jQuery, as we decided to get rid of ExtJS as well, for obvious reasons. But getting rid of ExtJS should take some more time.
In TYPO3 v8, most of ExtJS got removed. The so-called "viewport" (the "frameset" of the backend with the top bar, module menu and content box) was rewritten to plain HTML and jQuery, which drastically reduced the processing time and the memory footprint of the backend. Only the page tree was left.
The main feature of TypeScript is static types (d'uh!) which allows us to write more stable code, as the behaviour is predictable and type juggling is avoided. But: if required, it's still possible to keep the behaviour by using the type
any explicitly. TypeScript also brings real classes, interfaces and method visibility, and also more features. With TYPO3 v8, new modules were mostly written in TypeScript.
The TypeScript code is linted against our defined ruleset. Bonus: The TypeScript compiler (technically, it's a transpiler) automatically adds the RequireJS "header" as it's configured to do so. With changing the configuration it's possible to drop the usage of RequireJS or to create ES6 compliant code.
In TYPO3 v9 is was possible to remove ExtJS once and for all thanks to the awesome work and tremendous time that was put into the new page tree. The page tree responds super fast now and is also lightweight, its rendering is completely based on SVG.
The t3editor was completely rewritten to use the newest version of CodeMirror. With this overhaul, a lot of bugs were fixed and most of the code was removed since most of the custom implementations that were done back then are now included in CodeMirror (for example the fullscreen feature). It's now also possible to extend CodeMirror by custom plugins.
#typescript-migration channel on Slack.
module feature, which might replace RequireJS. On the other hand, we might use a module bundler instead.
With dropping IE 11 support, we may use service workers which allows new features and improvements of the current code.
Header photo by Pankaj Patel on Unsplash.