Drupal: a complete ecosystem
Today we will look at its productive ecosystem, from its technology foundations right up to the addition of features and the community that has made it famous.
A Symfony foundation
Since the release of Drupal 8 at the end of 2015, the CMS has been based on Symfony components that provide the technology foundations for its operation. But why incorporate Symfony elements in Drupal?
It is not through laziness or a desire to follow trends, but to provide a solid basis for the system as a whole. The Symfony components used will form the foundation that the CMS is built on. Whatever project you want to create using Drupal, this foundation will remain identical. The idea is to reuse what has already been produced, tested and maintained, so you don’t have to reinvent the wheel and can rely on tried-and-tested building blocks.
These two tools, which were both designed using PHP technology, are fairly complementary: the Symfony framework serves as the technology foundation, while the aim of Drupal is to provide a content creation and management experience.
Note that this paradigm shift has also affected the frequency of subsequent major version releases. To take a recent example, in early November 2021 support for Drupal 8 came to an end, for the simple reason that the built-in components, based on Symfony 3, were also arriving at their end-of-support date. The same will happen with Drupal 9 and Symfony 4, and so on. Drupal and Symfony version upgrades will now be linked.
This evolution of the Drupal CMS has also opened the door to all Symfony developers and thereby increased the number of potential developers for a Drupal project. While not all Symfony components are built into Drupal, the approach to this CMS will not be too confusing for anyone who is familiar with the Symfony framework.
A plethora of themes and modules
Upon installation, Drupal is fairly sparing with features. What may at first seem like a limitation is actually intentional: Drupal is based on a modular approach where you only activate the features you need for your project. This approach avoids overloading your administration interfaces with unnecessary pages or buttons, and can of course help optimize the performance of your project by using only what is needed.
These functional building blocks are referred to as ‘modules’ in the Drupal ecosystem. The basic modules (available upon installation) can, for example, be used to add comments at the bottom of articles or a basic contact form, but they also offer more advanced settings, such as page rendering with the BigPipe technology or webservice management modules.
The range of possibilities can be widened using modules from the Drupal community. The key factor in Drupal’s success has been that it offers developers centralized management of these modules on the website Drupal.org. If we only take into account the latest major version, Drupal 9, there are no less than 7200 modules available to expand the tool’s features.
When reading through client specifications, a project manager I know had a catchphrase: “there’s a module for that” (in reference to Apple’s famous slogan for its app store). And he is not wrong: this huge shared code base often enables us to cover 80% of the needs of a project!
This is the major strength of OpenSource platforms and their communities. Without the contribution of these modules, Drupal would not be as widespread as it is today and I would not be writing this article.
Distributions offering turnkey solutions
While modules are ways to add functions, distributions can be seen as ready-to-install bundles to serve the needs of a specific theme. Among the most high-profile distributions in the Drupal community, there is Commerce Kickstart, which offers all of the functions of an e-commerce website right from installation, Opigno, for the creation of e-learning platforms, and Open Social, which offers a social network-oriented vision.
The approach they adopt is similar to the themes in Wordpress, but these distributions are more like a functional framework than a graphical presentation.
Distributions are a good way to rapidly set up a platform. However, they need to be looked at right from the outset of a project and I would recommend exploring them as early as the pre-sales stage. Using distributions offers the huge advantage of providing a functional basis very rapidly. On the other hand, the technical and functional framework provided by these distributions is built on the traditional Drupal framework, so development work will have to be done within this framework. While it is easy to add features to your project, changing those that come with a distribution can prove to be fairly difficult. This choice should therefore be weighed up and even analyzed with the client in the early stages, in order to begin on a solid footing. Putting forward a PoC or demo is a good idea, so that everybody has a clear vision of what a given distribution will bring in relation to the initial need.
The community behind the platform’s growth
I mentioned above the Drupal community and its effect on the evolution of the Drupal platform as a whole. Unlike Ibexa and other CMSs or DXPs, Drupal is not attached to any company. Whether it is the DrupalAssociation, which aims to increase adoption of Drupal, the Drupal core’s developers, the translation teams around the world, the local associations that organize DrupalCamps, or the module developers, all of the committed people involved do not work for a single company. They share their work in order to improve the platform, year after year, and we owe Drupal’s long-term future to them.
If we take the modules developed by the community as an example, it is by sharing a module that it can be tested in various situations, following which issues identified can be reported, and improvements can be suggested or added, ultimately leading to modules that are more robust, more secure and easier to use.
Bear this in mind next time your project requires the development of a new feature that could be useful for another project: add your module to Drupal.org!