Upgrade Your Drupal Skills

We trained 1,000+ Drupal Developers over the last decade.

See Advanced Courses NAH, I know Enough
Jun 17 2020
Jun 17
Project: Drupal coreDate: 2020-June-17Security risk: Critical 15∕25 AC:Complex/A:None/CI:Some/II:Some/E:Theoretical/TD:AllVulnerability: Cross Site Request ForgeryCVE IDs: CVE-2020-13663Description: 

The Drupal core Form API does not properly handle certain form input from cross-site requests, which can lead to other vulnerabilities.


Versions of Drupal 8 prior to 8.8.x are end-of-life and do not receive security coverage. Sites on 8.7.x or earlier should update to 8.8.8.

Reported By: Fixed By: 
Jun 17 2020
Jun 17

In the world where cyber attacks become more elaborate, you want to protect your website.

We see that website security is a major priority for many businesses and organizations. They often ask our development & support team to build a secure website or perform a website security audit on an existing one.

Our today’s topic will be building a secure website with the Guardr — a free website starter kit based on the Drupal CMS and equipped with enhanced website security measures.

It can be a good fit if you want to build a secure website for a government, financial institution, corporation, or any other organization with a focus on safety.

First, why choose the Drupal CMS if you need a secure website?

Before we move on to Guard, let’s begin with why you should choose Drupal in the first place to build a secure website. Drupal is an enterprise-level CMS whose security is rated high. There are few reasons that explain this fact:

  • It has dedicated teams always on guard of website safety — the Drupal Security Team and Security Working Group. They resolve security issues, write documentation guides, help developers write secure code, and take care of the security of the Drupal core (main package) and contributed (add-on) modules.
  • Drupal has a security advisory policy. According to it, whenever security updates are released and need to be applied on a site, the security team issues a public advisory for everyone to know this.
  • The CMS has strong coding standards and strict processes of code review by the open-source community in order to keep sites secure.
  • Out-of-the box, Drupal user account passwords are encrypted before being stored in the database. Drupal also supports various password protection policies and authentication practices.
  • Site administrators can control who can create, edit, delete which content, manage settings, and do other actions. This is achieved by granular permissions for specific user roles.
  • To protect your website even better, Drupal uses database encryption on various levels — either for the whole database or for specific site components.
  • There are plenty of add-on modules that are used to check and improve Drupal website security in various ways. Among them are the Security Kit, Paranoia, Security Review, Secure Login, Hacked!, CAPTCHA, Two-factor Authentication (TFA), and many more.
  • The list of things that helps Drupal developers build secure sites could go on. There is one very special item on it — the Guard distribution that we are now moving on to.

Drupal’s Guardr: the secure package within the secure CMS

Guardr is a Drupal distribution to build secure websites with. What does a “distribution” mean? Distributions are website starter packages with specific modules and settings tailored to some industries, types of sites, priorities, etc. This allows us to build websites considerably faster.

When it comes to Guardr, its special focus is very clear — it is oriented for enterprises with an increased need for a secure website. The creators of Guardr have worked with security departments of some national banks and corporations in the US, so they know what is necessary for enterprise website security. They also studied the CSSLP and CISSP certifications focussed on security in software development.

Drupal Guardr distribution to build secure websites with

Guard: following the CIA (information security triad)

The Guard kit is built according to the principles of the CIA Triad — a model that guides the information security policies of an organization. The triad consists of these three indispensable components:

  1. confidentiality
  2. integrity
  3. availability
CIA (information security triad)

Some important website security features of Guardr

Here is what helps Drupal Guardr implement website security best practices.

Gurdr includes these handpicked modules to protect your website. Here is what they provide:

Secure user passwords

Weak passwords are a common security problem with websites. With Guardr, users will only choose secure passwords that are not dictionary words thanks to the Password Policy module.

Protection from password stealth

Guardr forbids user’s browsers to save passwords, which protects you from password stealth. This is achieved thanks to the Clear saved password field module.

Protection from attacks through PHP

There is never too much precaution. Even your site admins will be forbidden to evaluate PHP, which can block potential attacks through PHP code. The Paranoia module will take care of this.

More detailed logs to know what happens

You will be always aware of all steps made on your website. Guardr gives you more detailed logging of all events than by default in Drupal (1,000,000 vs 1,000 logs) due to the Role Watchdog module.

DoS attack prevention

DoS attacks can make your site unavailable to users. The Diskfree module inside Guard gives you a warning when your disk is going to fill up, which is one of the ways to prevent a DoS attack.

List of users protected

Cybercriminals often use valid user names for their attacks. The list of users on your Guard site will not be exposed on the web thanks to the Username Enumeration Prevention module.

Fatal errors hidden

Fatal errors happen, but not everyone should see them on your site. It’s a good practice to hide them, in which the Hide PHP Fatal Error module is very helpful.

Drupal version hidden

It can be a security risk to have your Drupal version visible and public. The Remove Generator META tag module in Guard can help you with this by making the Generator META tag removed.

There are also a few important security settings in worth mentioning:

  • To increase safety, users are not allowed to create their own accounts — only admins can do it for them until they switch the site to public sign-up.
  • Guardr also protects you from email interception. If someone intercepts your email, they will have no profit out of this — the default email notifications have references to user names and IDs removed.
  • Intruders also don’t have to know about your website’s updates. Errors and warnings about available Drupal updates will not be displayed as usual in the site admin by default. Seeing them will require an opt-in.
  • SSL makes web interaction safe. Guardr has extra documentation added to settings.php telling you how to connect to MySQL via SSL.

How to build a secure website with Drupal Guardr

With the use of a distribution, the steps to build a secure website are minimized. Here is what is needed:

  • The Guardr distribution needs to be downloaded and installed and it will already create a standard website.
  • Since every organization is unique, you may need to build additional features and make specific configuration according to your business requirements. All this can be done by a Drupal development team.
  • You will also need website theming and design services so the site reflects your brand’s identity.
  • Finally, you need to purchase a domain name and have your site hosted with a good hosting provider.

Let us help you build a secure website

With all the above steps of how to build a secure website with Guardr, the Drudesk team is ready to help you. We specialize in Drupal development, support, design, and also offer hosting services. Which is more, our prices are very competitive and the performance of our specialists is high. Let’s begin discussing this!

Jun 17 2020
Jun 17

This is not a migration

Previously, a major version update for Drupal implied a time-consuming migration process. It usually involved content migrations, configuration changes and porting modules to enable them to work properly. In some cases, migrating took nearly as much effort as rebuilding a site from scratch. 

This time however, upgrading will most probably have none of that. In fact, according to the founder of the Drupal project, a key target when developing Drupal 9 was ease of upgrade (https://dri.es/making-drupal-upgrades-easy-forever). Version 8 was all about dealing with technical debt so that future releases would be like they are in WordPress: painless, fast, and fun. With Drupal 9, this has finally been accomplished.

There’s plenty more shiny new stuff under the hood that propels Drupal into this new era of digital experience frameworks.

What’s great about Drupal 9

Ease of upgrade is not the only new feature in Drupal 9. There’s plenty more shiny new stuff under the hood that propels Drupal into this new era of digital experience frameworks. What we are most excited about is its API-first development. Drupal now includes JSONAPI in core. This means Drupal is no longer the traditional monolithic cms we’ve come to know. Instead, it is now built to support headless applications, third-party data integrations and pretty much any modern innovative use cases for the open web. Furthermore, editorial flexibility and content management experience both took huge leaps forward.

Upgrading from Drupal 8

Drupal site owners who have been keeping their Drupal install up-to-date are in for the smoothest ride. The only differences between Drupal 8.9.0 and Drupal 9 is the removal of some deprecated APIs and the inclusion of updated third-party dependencies, such as Symfony and Twig. As long as the modules you have in use do not rely on deprecated code or libraries, you should be good to go.

This how our Drupal experts prepare for a smooth operation when upgrading a Drupal 8 site to Drupal 9: 

  • Ensure that a site is running the latest stable version of Drupal 8 and any contributed modules installed
  • Install and run the Upgrade Status module. This tool integrates into the site’s status update to check system requirements and contrib module compatibility for Drupal 9.
  • If we run into contrib modules with compatibility issues, scan the respective module’s Drupal.org page and issue queue to find out about their Drupal 9 readiness and possible solutions or workarounds.
  • Check custom modules for use of deprecated libraries or APIs. The Rector module is often very helpful. It automates PHP code upgrades by renaming classes, methods, properties, namespaces and constants.
  • Check the hosting environment and make necessary changes if needed. The Upgrade Status module should point out the system requirements for Drupal 9.

After completing these steps, we are ready to update the Drupal core to version 9.

Upgrading from Drupal 7

For Drupal 7 site owners, there is no clear upgrade path. Upgrading from Drupal 7 usually involves rebuilding the site in the new version and migrating all content and configuration to the new site. This may require more resources, but it is a great opportunity to rethink the site structure and implement some major improvements.

We’re here to help

Whatever your current situation, we are here to help. We combine strategy, design and development on a daily basis to help our clients solve complex business challenges. And we are more than comfortable upgrading or migrating any complex website to Drupal 9. 

Send us an email or give us a call to discuss your project with us! We’re happy to help.

Jun 17 2020
Jun 17

Looking for More Drupal Event Organizers. This must be the place.

It feels like a lifetime ago that the event organizers’ request to become an official working group was approved by the Drupal Association at DrupalCon Amsterdam. Since then, 2020 has been a year that no-one will forget—from a global virus to social justice demonstrations—the world as we know it has been forever changed. 

Lessons We Are Learning in 2020

So far in 2020, we have learned some valuable lessons that we think will help us be a better working group moving forward. 

Organizing Events is Hard. Organizing volunteer-led events is difficult already, let alone during complete uncertainty. Many event organizers have had to make very difficult but swift decisions by either canceling or trying to pivot to a virtual conference format. 

Finding the Right Time is Hard. Organizing a global group of volunteer event organizers is also hard. As someone who has had little time on international teams, I admittedly thought of finding a meeting time a breeze. I was completely wrong. 

Global Representation is Hard. One of our top priorities was to have global representation to help foster growth and collaboration around the world but unfortunately due to either the meeting times or not enough focused marketing on international event organizers the participation was just not where the board felt it should be.

Changes We are Making

After a few emails and some friendly debates, the board looked for opportunities for change that can help solve some of the lessons we have learned. 
Alternating Meeting Times in UTC Format. To help foster more international participation, all scheduled meetings will alternate times all marketed and posted in the Coordinated Universal Time (UTC) format. Public meetings will now be at 12:00 pm UTC and 12:00 am UTC.   

Increase Board Membership to 9. The group decided to expand the board members to 9. We are highly encouraging organizers from around the world to submit their names for interest to increase our global representation. 

Maintain and Recruit Advisory Board Members. Succession planning is critical for any operation, and our advisory board provides more flexible commitment in participation which we hope will be our number one resource for new members down the road. 

Board Members Nominations. In addition to expanding the number of board seats, Suzanne Dergacheva from DrupalNorth (Canada) and Matthew Saunders (DrupalCamp Colorado) have accepted their nominations from advisors to board members. 

Current Board Members

  • Camilo Bravo (cambraca) - DrupalCamp Quito - Ecuador / Hungary
  • Baddý Sonja Breidert (baddysonja) - DrupalCamp Iceland, Germany, Europe, Splash Awards - Europe
  • Kaleem Clarkson (kclarkson) -DrupalCamp Atlanta  - Atlanta, GA, USA
  • Suzanne Dergacheva (pixelite) - DrupalNorth - Montreal, QC CANADA
  • Leslie Glynn (leslieg)  Design 4 Drupal Boston, NEDCamp - Boston MA
  • Matthew Saunders (MatthewS) - Drupalcamp Colorado - Denver, CO, USA
  • Avi Schwab (froboy) - MidCamp, Midwest Open Source Alliance - Chicago, IL, USA

Things We are Working On

There are so many things that all of us organizers would like to get working, but one of our goals has been to identify our top priorities.

Event Organizer Support. We are here to help. When volunteer organizers need guidance navigating event challenges, there are various channels to get help. 

Drupal Community Events Database. In collaboration with the Drupal Association, the EOWG has been working on putting together a new and improved event website database that will help market and collect valuable data for organizers around the world.
Submit your event today: https://www.drupal.org/community/events

Drupal Event Website Starter kit. To help organizers get events up and running quickly, an event website starter kit was identified as a valuable resource. Using the awesome work contributed by the Drupal Europe team, JD Leonard from DrupalNYC has taken the lead in updating the codebase. It is our hope more event organizers will help guide a collaborative effort and continue building an event starter kit that organizers can use. 

Join the Event Organizer Slack here and Join #event-website-starterkit

Seeking Event Organizers Board Members and Advisory Committee Members - Submit Your Nomination Today

The Drupal Event Organizers Working Group is seeking nominations for Board Members and Advisory Committee Members. Anyone involved in organizing an existing or future community event is welcome to nominate. 

EOWG Board Members. We are currently looking for nominations to fill two (2) board seats. For these seats, we are looking for diverse candidates that are event organizers from outside of North America. Interested organizers are encouraged to nominate themselves. 

EOWG Advisory Committee. We are looking for advisory committee members. The advisory committee is designed to allow individuals to participate who may not have a consistent availability to meet or who are interested in joining the board in the future. 

Nomination Selection Process: All remaining seats/positions will be selected by a majority vote of the EOWG board of directors. 

Submit Your Nomination: To submit your nomination please visit the Issue below and submit your name, event name, country, territory/state, and a short reason why you would like to participate.  

Issue: https://www.drupal.org/project/event_organizers/issues/3152319

Nomination Deadline:  Monday, July 6th, 11:59 pm UTC 

File attachments:  tim-mossholder-GOMhuCj-O9w-unsplash.jpg
Jun 17 2020
Jun 17

The future of enterprise digital experience mirrors the needs and demands of the modern digital customer experience. You don't need a website. You need an entire digital ecosystem to even exist in the mind of your potential customers.

In the digital age, the relationship between consumer and brand is increasingly machine-to-human, and by 2030 it will almost certainly be weighted heavily in favor of a machine-tomachine relationship. Forward-looking brands are already investing in smart, AI-powered technologies that offer the ability to automate engagements and processes, capture data and drive actionable insights more intelligently, and deliver more immersive, rewarding, and valued experiences to their consumers.

To matter in today’s digital sphere and landscape, you must fulfill the following: Engage and evolve constantly. That is the undeniable truth that enterprises learned when they aligned their strategic business objectives with the technical requirements they will need.

INSIGHT: More than two-thirds of marketers responsible for CX say their companies compete mostly on the basis of CX, according to the 2017 Gartner Customer Experience in Marketing Survey.

What is an Enterprise Digital Experience (EDX)?

Let us start with what it's not.

It's definitely not your average and standard website. A digital experience speaks to the entire interconnected web of digital assets, channels, and domains that make up your brand; from kiosks, smartwatches, social media, to almost every touchpoint that your clients interact with you.

The beating heart and engine of this digital brand network would be your website; consistently feeding and being fed real-time data through all those various channels and touchpoints.

If you are unfamiliar with the term “digital experience” yet; it’s been coined to differentiate between simple websites that can be built using SaaS builders such as Wix and Squarespace.

These SaaS solutions have provided non-technical team members with unprecedented accessibility to building simple and neat websites quickly - however; enterprises understand that they are facing an altogether different reality when it comes to building their own online presence.


Source: State of Drupal | Dries Buytaert

Enterprises on the other have more complex technical requirements; they may and will need to become:

  • Multi-site platforms
  • Community engagement sites
  • Heavily reliant on critical 3rd party integrations
  • An omnichannel website

Prevalent and popular names in the marketplace such as Wordpress and Wix will simply not do. You can’t build a futuristic tower on a foundation that can’t handle more than a couple of floors.

Enterprises and international organizations with an eye towards protecting their digital future and investment are increasingly opting to transform their brands into an immersive enterprise-grade digital experience on Drupal. They realized that they need better content staging and management, faster performance, best-in-class security, and superior on-site SEO in order to attain what differentiates them from standard websites.

Here's why enterprise digital experiences prefer Drupal over other CMS options:

Content Moderation and Staging

TL;DR - Drupal allows enterprises to constantly engage their website visitors in a highly personalized and effective manner.

Unlike simpler websites; enterprise-level websites need to create shareable multimedia-rich content for all platforms and channels they rely on for marketing and business purposes. 

Enterprise-level content creation for the purpose of marketing needs to be uninterrupted and faster.

Usually, the process of content creation, publishing, distribution, and management for enterprises involves multiple teams from various departments within the organization. For example; creating an ebook on marketing automation will need the combined and coordinated effort from the marketing, technical, DevOps, and sales teams.

An enterprise CMS will have a built-in workflow that streamlines the content publishing process for all technical and non-technical stakeholders and content creators involved - making the experience for website admins, and content creators much easier and faster. Add into the mix Drupal's superiority when it comes to multilingual website content distribution and on-site SEO - you will quickly boost your enterprise's content marketing capabilities.

Landing pages also need to be personalized, updated, or even created from scratch faster than ever before.

Using the built-in Layout Builder module that can be found within Drupal 9 and enterprise CMS’s like Varbase; developers and non-technical team members from marketing can create features and content-rich landing pages within minutes.

Built-in Multi-site functionality

Enterprises are global operation entities. This means they must communicate effectively with a globally diverse audience and market thus building numerous sites dedicated to serve that purpose.

However, instead of building a new website dedicated to each market, audience segment, or product - enterprises can now build as many websites they need under their brand without the hassle and challenges of starting from scratch.

Drupal allows enterprises to build multiple websites and domains that share all the best practices, brand guidelines, security, and even design systems in place.

This means less cost, less time wasted on duplicated efforts when it comes to development and content publishing work. You will not need to hire a dedicated marketing or development team to run each website's requirements because all your brand's websites are run and managed by one centralized CMS.

Add to that the aforementioned benefit of seamless content publishing and management workflows - it becomes evident why Drupal is increasingly being adopted by global enterprises.

Every enterprise will eventually have to build multiple sites under its brand in a bid to enhance their user experiences, the question is do you know which multi-site architecture solution works best for your digital transformation strategy?

Fitness First Case Study

Multiple Sites. Seamless Integrations. One Powerful CMS.


You will be hard-pressed to find an enterprise-level website that doesn't rely on key integration with tools critical for their business. Even local websites integrate some form of email marketing tools to enable easier lead generation.

Enterprise digital experiences are much like the connected web - with various offshoot interconnected microservices.

Drupal was made to ensure that your audience and website visitors can seamlessly navigate through the entire digital ecosystem that supports your critical business objectives such as email marketing, marketing automation, CRMs, payment gateways, and much more.

Drupal can seamlessly integrate with popular tools such as Eloqua, Hubspot, Mailchimp, Mautic, Marketo, Slack, and almost every solution/tool under the sun. 

More importantly, your target audience will expect your brand or businesses to be accessible to them regardless of the medium they use - anytime, and everywhere. Your job is to create the appropriate digital ecosystem that plans and predicts all possible ways your customers and potential customers may interact with your business. 

For example, fans attending the World Cup in 2022 can interact with the official bodies governing the tournament through digital kiosks sprawling across Doha's Qatar Rail stations - or through voice search and chatbots. Drupal can enable you to integrate with almost any innovative interface you can imagine.

INSIGHT: Smart assistants are still emerging but will dominate consumer engagement with enterprises.

Immersive technologies will continue to emerge as the default best practice for brands who want to build customer loyalty as a brand attribute and Drupal is the ideal CMS for enterprise digital experiences that wish to upgrade into a truly immersive CX.

Continued Growth, Delivery, and Implementation

From our own long experience in building custom enterprise solutions; we realized that enterprises do not need all those features from the moment they launch their digital experiences. However, they WILL need them a few months later.

Another truth that many businesses are blind to (or frankly choose to ignore to their own disadvantage and detriment) is the fact that ongoing support is THE most essential differentiator between the best digital experiences and any standard website.

Digital solutions and technology evolve every day heavily influencing the standards and expectations of your customers - many businesses fail to live up to those standards simply because they elect to not invest in their digital future wisely or because they don't have reliable IT support to continuously monitor and implement the essential upgrades required.

Your website visitors expect you to match their constantly evolving expectations. If they prefer searching via voice - your website better be indexable and found easily on search result pages via voice search. Google has shifted its focus towards rewarding complete digital experiences over simple websites with no engagement to ensure that when people search they only get the best results.

Understandably, this can be difficult if not entirely impossible with your current technology. This is why you need to migrate to Drupal 9 now and use a powerful enterprise CMS like Varbase.

Your website must always be up-to-date and upgrade constantly to ensure that your visitors are experiencing best-in-class features regarding accessibility, security, media, sharing, page speed, and etc.

Why Drupal 9 and Varbase?

Drupal 9 is where enterprise-level digital experiences are going. Websites are no longer enough.

Consumers are increasingly looking for experiences that are immersive and allow a deeper level, or richness, of engagements and value. Drupal has proven to be the leading technology and open-source equivalent of CMS’s focused on creating feature-rich digital experiences for enterprises.

Drupal 8 has introduced various desired features that vastly enhanced user experience; and Drupal 9 has taken these enhancements to another level.

International organizations and businesses that need enterprise-level technologies and performance choose Varbase as their CMS because it has proven to be the fastest builder of multi-lingual enterprise-grade digital experiences.

Our recommendation is that you protect your investment. Build your future today, outsmart your competition rather than outspend them. Become the best of the web. If you are still operating on Drupal 7 and Drupal 8; upgrade to Drupal 9. If you aren't on Drupal yet; what are you waiting for?

Ditch your inferior tech for a powerful CMS like Varbase which will enable you to constantly evolve as a cutting edge immersive customer experience.

Questions About Drupal 9

Questions About Drupal 9?

Jun 17 2020
Jun 17

Last month, the Drupal community was abuzz with anticipation of version 9. Our recap of May’s top Drupal posts, then, features a lot of those related to the release of Drupal 9, from the new Drupal brand to recollections of the Drupal 9 Porting Weekend. We hope you enjoy revisiting them!

New Drupal Brand Ready for Drupal 9 Launch

Let’s start with the already introduced new Drupal brand, unveiled early enough for all Drupal 9 related messaging to feature the updated branding. In this first post, the Drupal Association’s CTO Tim Lehnen introduces the new Drupal logo which aims to reflect the flexibility and modularity of the CMS, and the strength of its connected community. 

The new design, created by the Italian company Sixeleven, prioritizes continuity and is planned on being used for Drupal 10 and beyond. The inner drop idea was inspired by a past DrupalCon logo design. While the new logo has become the standard in all messaging, the famous Druplicon still exists, along with its many variations, of which we’ll likely see more again as the new Drop is reimagined. 

Read more

The bliss of contributing to Drupal 9

The second post on this month’s list, written by Hadda Hreiðarsdóttir of 1xINTERNET, functions kind of as a second part to their post about the Drupal 9 Porting Weekend, with the first post announcing the event and this second one providing a recap of it. 

1xINTERNET’s main goal was providing a stable release for every module maintained by someone from their team. They worked on 46 different projects, produced 15 stable Drupal 9 projects, enabled several first-timer contributions, all while working together in the true spirit of Drupal. 

You’ll also find first-hand recollections from specific team members in the post. Big kudos to the entire 1xINTERNET team for their strong commitment to the project and its community!

Read more

Thanks for making a difference at Drupal 9 Porting Weekend!

Next up, we have another post about the Drupal 9 Porting Weekend on May 22 - 23, this one by the Drupal 9 initiative coordinator Gábor Hojtsy. Following the success of the first Drupal 9 Porting Day Gábor organized in April, he decided to do another event lasting the whole weekend. 

This one turned out to be even more successful, with a large number of people and organizations actively participating and working on over 500 issues during the weekend. The weekend and the days following it also produced more daily Drupal 9 ready projects than any day before. As such, the two events were definitely important last steps towards Drupal 9 readiness.

Read more

Multilingual Drupal - Part 1: The Process

Moving on, we also really enjoyed Amazee LabsChristophe Jossart’s guide to creating multilingual websites and web applications with Drupal. In part one, Christophe covers the basics you need to get started, such as the main considerations and concepts.

He starts off with how to define the right approach to the translation strategy, then continues with some of the most important concepts for multilingual Drupal and the expectations of different stakeholders. 

Next, he gives a summary of the translation features in Drupal Core and some contributed solutions, e.g. Translation Management Tool (TMGMT). He finishes the post with some quick tips and a list of additional resources to check out.

Read more

Accelerating Drupal 9 module and theme readiness with automated patches

We continue with a post jointly written by Tim Lehnen and Acquia’s Ted Bowman. While the update to Drupal 9 is already unprecedentedly smooth, there exists a certain tool that facilitates upgrading even further: Drupal Rector, supplied by Palantir.net and Pronovix.

Using Drupal Rector, developers are able to automatically remove deprecations and make code compatible with Drupal 9. To make this process even easier and less time-consuming, the Drupal Association also introduced the Project Update Bot which provides patches generated by the tool. Still, ultimately, it’s left to project maintainers to decide whether to use the patches provided by the bot.

Read more

Content creators going layout – with Drupal Layout Builder

In May 2019, the up-until-then experimental Layout Builder was included in Drupal’s core and is now included as an out-of-the-box feature with new versions of Drupal. This post by Jan Lemmens of Amplexor takes a look at how the job of content creators and site builders is greatly facilitated thanks to Layout Builder.

The tool gives non-technical users a lot more control over a page’s layout, allowing them to manage the layout of fields or structure the placement of blocks, for example. When comparing it to the more established Paragraphs module, Jan points out that it is more suited towards managing page content, whereas the Layout Builder is for page layout. 

Read more

Assessing your Drupal 9 Readiness, Part I: Estimate, plan and action. Without tears.

Almost at the end of this month’s list, we have a blog post by Manifesto’s Gabriele Maira aiming to prepare users as best as possible for the upgrade to Drupal 9. The key question to ask, according to Gabriele, is: How Drupal 9 ready am I? (If you’re keeping up with Drupal 8.x core releases, you’re already well on your way!)

The first thing he suggests doing is reviewing the usage of your modules and themes, then installing the Upgrade Status module to scan them, beginning with custom code. Then, make sure that the hosting platform requirements are still satisfied and, finally, make a plan for upgrading any custom code you’re using, taking special care with those that depend on contributed projects. 

Read more

A Guide to Preparing for Drupal 9

Last but not least, we have another post concerning Drupal 9 preparation. Its author, Sarah LeNguyen of Forum One, first gives some historical background on the upgrades between major versions of Drupal, then explains how Drupal 9 differs from previous major versions.

Namely, it’s exactly the upgrade process that has been smoothed out, with backwards compatibility; Drupal 9.0 thus only removes deprecations and updates third-party dependencies, while new functionality will come in 9.1 and beyond. 

The second half of Sarah’s post is dedicated to helping people get ready for the upgrade, whether it’s the easier upgrade from Drupal 8 or the more demanding one from Drupal 7. She covers both cases, as well as provides some key information on support timelines.

Read more

At the time of writing and publishing this post, Drupal 9 has already been released, and we at Agiledrop have already worked very successfully with the new version. Reach out to us if you need any help with an upgrade, or with custom development for your new Drupal 9 site.

Jun 17 2020
Jun 17

The Sidr module for Drupal 8 allows site builders and themers to add one or more sliding menus to their sites in a very uncomplicated way. It makes use of the open-source Sidr jQuery library. Keep reading if you want to learn this useful module!

Keep reading to learn how!

Step # 1.- Install the Required Modules

  • Open the terminal application of your system.
  • Place the cursor at the root directory of your Drupal installation (the composer.json file is there).
  • Type: composer require drupal/sidr

How to Integrate a Sliding Menu in Your Drupal 8 Site

This will download the module from its project page on Drupal.org and place it inside the /modules/contrib folder. 

We need to download the JS library from its project page as well.

  • Download and uncompress the file. 
  • Create a libraries directory in the root of your Drupal installation, in case that there is no one available. 
  • Create a directory inside libraries called sidr.
  • Copy the whole content of the dist folder (inside the uncompressed file) into the sidr directory. 

How to Integrate a Sliding Menu in Your Drupal 8 Site

How to Integrate a Sliding Menu in Your Drupal 8 Site

  • Click Extend.
  • Enable Sidr.
  • Click Install.

How to Integrate a Sliding Menu in Your Drupal 8 Site

Step #2. - Create a Custom Region

I am assuming that you already know how to create a subtheme. If you do not know about subthemes yet, take a look at this tutorial [Insert the link to the Bartikssen tutorial here] and then come back here.

  • Open mysubtheme.info.yml
  • Create a custom region called sidr_container.
  • Open page.html.twig and include the region you created before in this template.
  • Save all files.

How to Integrate a Sliding Menu in Your Drupal 8 Site

  • Click Configuration > Performance > Clear all caches.

Step #3. - Place the Trigger Button

The module provides a block. This block triggers the hidden “sidr” container, so you can open or close the menu. First, we need to hide the region we declared in Step #2 with CSS.

  • Open the stylesheet of your theme.
  • Copy and Paste this code:
#sidr-container {
display: none;
#sidr-container {
display: none;
  • Click Structure > Block layout.
  • Click Place block in the Header region.
  • Locate the Sidr trigger button block.
  • Click Place block. 

The Sidr options will be displayed in a modal window.

  • Uncheck Display title.
  • Enter a proper label for the trigger text.
  • Add the region you want to display inside the Sidr container. 
  • Change the menu location to Right. 
  • Click Save block.

How to Integrate a Sliding Menu in Your Drupal 8 Site

  • Scroll down and click Save blocks.
  • Locate the Sidr Container region.
  • Click Place block.
  • Search for the Main navigation.
  • Click Display block.
  • Uncheck Display title.
  • Click Save block.
  • Scroll down and Click Save blocks.

How to Integrate a Sliding Menu in Your Drupal 8 Site

Make sure that you use the right CSS selector (‘#’ if you are using the element id or ‘.’ if you are using its class instead). As you can see, you can make use of all Drupal blocks within the Sidr Container. Notice also that you are using 2 instances of the same menu block within 2 different regions of your site.

Let’s add the logo image:

  • Click Appearance and edit the settings of your theme.
  • Upload a logo image. 
  • Click Save configuration. 
  • Click Block layout.
  • Remove the Site Branding block from the Header region. 
  • Add the Site branding block to the Sidr region.
  • Scroll down and click Save blocks.

How to Integrate a Sliding Menu in Your Drupal 8 Site

You can enhance the look and feel of your sliding menu with CSS code. 

I hope you liked this tutorial, thanks for reading.

Check out my other blog on How to Create a Bartik Sub-Theme.

About the author

Jorge lived in Ecuador and Germany. Now he is back to his homeland Colombia. He spends his time translating from English and German to Spanish. He enjoys playing with Drupal and other Open Source Content Management Systems and technologies.
Jun 16 2020
Jun 16

Drupal 8 was one of the biggest releases in the platform’s history. Its release empowered the community to adopt more modern development technologies and tools. If you migrated a site from Drupal 6 or 7 to Drupal 8 you probably can attest that a considerable investment of time and resources was required for a successful migration. Luckily, migrating from Drupal 8 to 9 will likely be a walk in the park, in comparison. 

Sponsoring a site migration is not an easy decision, but there are low-cost steps that you can take as a site owner today in order to prepare for effective migration tomorrow. In this article, we will help ensure that you’re ready for a seamless migration process and verify that your Drupal 7 or Drupal 8 site can smoothly transition into Drupal 9.

The waiting game is over

Since migration planning can be a project on its own, many organizations decided to take an approach of skipping the Drupal 8 version and moving from Drupal 7 right into Drupal 9. The decision to wait may have been the best course of action in previous release cycles for Drupal, but that is no longer the case with modern Drupal.

As the creator of Drupal, Dries Buytaert explained in his keynote speech at DrupalCon, a migration from Drupal 6 to 7 or from Drupal 7 to 8 can be explained as if you were riding a train on one track and then you need to move your train to a different track. 

A blue illustration of a train with two tracks one representing Drupal 7 and Drupal 8.

With the release of Drupal 8, the community worked on a different release model to eliminate the need to keep switching tracks. Instead, Drupal sites will be able to continue on the same track, making a few stops for updates. The key is actively maintaining your "train", rather than completely changing tracks.

If you migrate to Drupal 8 following best practices, your site will transition seamlessly over to Drupal 9, as Drupal 9 is built on top of the Drupal 8 codebase. Moreover, starting your migration earlier will allow for a longer grace period for transition, helping to improve quality and avoid decisions made under pressure. 

How to evaluate if your site is ready

Let’s look at the situation at a different angle. Imagine that you are planning the migration of your Drupal 7 website and want to make sure that your new site will be built with Drupal 9 in mind. Or perhaps you already have a brand new Drupal 8 website and would like to be sure it is Drupal 9 ready. There are a series of steps that you can take to ensure it’s in the best shape possible.

Getting your Drupal 7 site migration-ready

A frustrated Drupal symbol (a rain drop) with website pages and stacked boxes.

1. Evaluate your inventory

Migration is a good time to clean up your site, and retire old content or files that you no longer need. Identify what content types you have and which of them can be retired or merged together. Check your inventory of modules and see if the modules have been ported over to the Drupal 8 space. While checking statuses, it is important to see if the module is well-maintained. With Drupal 8 being newer than Drupal 7, some modules may not have stable releases. Therefore, we recommend prioritizing an active issue queue on drupal.org and module usage statistics over its status as stable. 

2. Evaluate your hosting solution

Make sure your hosting provider fulfills all of the requirements needed for Drupal 9. The fact that your hosting supports Drupal 7 doesn’t guarantee that it will support Drupal 8 or 9. If required, your Drupal vendor can help with the evaluation.

A hosting evaluation may also bring additional benefits and improvements for the web operations on the team. Most Drupal-specific hosting platforms provide automation and integration that reduces manual labor for developers and frees up their time for different business goals.

3. Plan for success

In the spirit of cost reduction, it might be tempting to lean towards the “lift and shift” solution, especially when it comes to design and functionality. Due to the vast difference between Drupal 7 and Drupal 8 codebases, the Drupal 7 theme cannot be reused. So if you have any need or desire for design updates, your migration is the moment to make them a reality.

It can be useful to gain an audience and stakeholder feedback. Conduct some user testing to gain insights about information architecture. Gather focus group feedback internally and externally and incorporate it into the migration process. It doesn’t have to be a big redesign project. Small changes can also make a big impact.

Want to dive in further? Explore our deep-dive guidance on your Drupal 7 to Drupal 8 migration (with dinosaurs!)

Getting your Drupal 8 site migration-ready

Illustration of Drupal 8 logo, checklist, code symbol and stacked boxes.

1. Run Drupal’s Status Report

The best strategy to ensure your site is Drupal 9 ready is to make sure your current Drupal 8 site is well maintained. First, check the status report page of your site by navigating to Admin > Reports > Status (/admin/reports/status) and check status and messages on this page.

Compare your current hardware setup (server, PHP version, etc.) with the system requirements for Drupal 9

Make sure that you don’t see any outstanding database updates or unresolved errors. If needed, your Drupal vendor can help to resolve those. 

Make sure your modules, theme, and Drupal core are up to date, as this will ease the transition of your codebase into Drupal 9. 

2. Check that your code is Drupal 9 ready

Even if your modules are updated to their latest versions, it is not guaranteed that they don’t use deprecated code and are thus not ready for Drupal 9. You can use the contrib module Upgrade Rector to automatically check the code and fix suggestions while upgrading the sites. If you would like to find out more, consider reading the Drupal Rector Documentation.

3. Outline your plan “B”

There could be modules that are currently in use on your website that will not be getting an upgrade path. To see the module status, you can check if the module is actively maintained on the project page on drupal.org.

Check the number of sites that are currently reporting to use the module and also browse through the module’s issues queue to evaluate outstanding issues and the module’s Drupal 9 readiness.

If the module doesn’t have a good maintenance status, you will need to look for alternatives or work with your Drupal vendor to develop a custom solution.

4. Review any custom code

If your site has custom modules in place, this is the time to check them too. Upgrade Rector can help scan the custom code. It may also be a good idea to run code linters to ensure its syntax is compliant with Drupal and PHP coding standards. To learn more about linting and Drupal coding standards read this documentation.

[embedded content]

Don’t panic

Although the transition may seem intimidating, it doesn’t have to be. It is a more incremental process, especially for Drupal 8 websites looking to move to Drupal 9. The first release of Drupal 9 will only sunset deprecated code, and introduce no new features. Essentially, Drupal 9 will be Drupal 8.9, minus deprecated APIs.

Following the steps in this article, you can be prepared ahead of time for the Drupal 9 migration whether it’s a bigger lift from Drupal 7 or more lightweight transition from Drupal 8.

Jun 16 2020
Jun 16

We have been sent the following rather fabulous guest blog post by Yogendra Prasad, Surabhi Gokte, and Karthik Kumar and we wanted to share it with everyone here. We would love to see this inside the upcoming Contributor Guide (more details of which coming soon...)

What is the Drupal Community?

The Drupal Community consists of all the members using Drupal and coming together to form a group and voluntarily give their time to contribute towards bettering the community.

Why should I contribute to the Drupal Community?

Come for the software, stay for the community!

Drupal has been our bread and butter for so many years and so it’s one of our prime duties to give back to the Drupal Community in whichever ways we can.


  • You get to learn as you work with the community worldwide
  • You get to present yourself which in turn brings visibility to both you and your organization
  • You get to know about the Drupal events happening throughout the community.
  • You get to participate in the events by speaking or volunteering.


  • Basic understanding about Drupal
  • Have done local setup earlier
  • Know how to Install Contributed Modules
  • Must have basic knowledge of Git
  • Must know how to Create/Apply Patch

What is the Life Cycle of a Drupal Issue?

Following can be the different states of an issue:

  • Active - When a new issue is created, it is in an Active state.
  • Needs work - When the issue needs to be worked upon, it is in a Needs Work state.

One can pick the issues from either of the two states to start with.

  • Needs review - Once the issue is picked, the patches are successfully submitted and all the test cases are passing, the issue’s state should be changed to Needs Review.
  • Reviewed & tested by the community - Once the issue is reviewed by any contributor, the issue is moved to “Reviewed & tested by the community” (RTBC) state where one of the members from the core community team reviews the issue
  • Fixed - When an issue passes from the RTBC state, it is moved to the Fixed state
  • Closed (fixed) - After the Fixed state, the issue moves to Closed (fixed) automatically within two weeks. This is the last state of an issue.
  • Closed (duplicate) - When any issue gets created which is a duplicate of any earlier one, it directly gets closed as Closed (duplicate)
  • Closed (won't fix) - This state represents that an issue has no solution
  • Closed (works as designed) - This state represents that an issue raised is providing the functionality what it was supposed to and so moved to “works as designed”. In other words, the issue raised is not a bug but a feature.
  • Closed (cannot reproduce) - When an issue is not reproducible is moved to this state.
  • Closed (outdated) - When an issue is either too old to fix or gets fixed within some other module’s issue, the state can be Closed (outdated) for that issue.

Other States:

  • Patch (to be ported): When a Patch is to be ported for other versions of Drupal/Contributed module.
  • Postponed: When the Issues/Feature/bug is postponed by the author/community, and doesn’t need a fix.
  • Postponed (maintainer needs more info): When an issue is raised but according to the maintainer of the Contributed module, more info is needed about the issue to get it fixed.

What ways can I contribute to the Drupal Community?

There are multiple ways to contribute to the Drupal community, and you don't need to have a developer background to give something to the community.

  • Drupal Core issues: You can select issues from Drupal core from : https://www.drupal.org/project/issues/search/drupal to contribute. Here you can commit patches to the issue, review tickets that are in “needs review” and if you have found any issue in Drupal you can log here by providing basic details about the same.
  • Contribute a Module to Drupal: If you have any feature in mind that you think can be used in Drupal as a standalone module , so that a larger audience can start using it , you can add your module to Drupal. For creating and getting it approved you have to follow steps mentions here: https://www.drupal.org/developing/modules
  • Contributed Module Issues: Along with DrupalCore issues , there is a huge list of bugs/issues which you can pick for fixing by providing patches from contributed modules: https://www.drupal.org/project/issues/search.
  • Documentation: if you do not have any Development background or are not interested in contributing by writing code, another interesting way is to help Drupal.org in improving Documentation. Documentation in Drupal is needed in the form of README.txt in every single module/theme , in form of code commenting , class usage etc.
  • Validating Issues: If you are good at reviewing tickets or have QA background you start contributing to the Drupal community by verifying the fixes provided by any community member on the. For this you have to pick up tickets specifically which are in “needs review” status. List of issues you can found here: https://www.drupal.org/project/issues/search/drupal?text=&assigned=&submitted=&project_issue_followers=&status%5B%5D=8&issue_tags_op=%3D&issue_tags= , This list contains both Drupal core and Contributed modules issues , it's up to you which you want to pick and start working.
  • Contribute financially: The Drupal Association is a nonprofit (501c3) organization serving the international Drupal community. One can also contribute to the Drupal Community in monetary terms by opting for the individual membership. Read more here - https://www.drupal.org/association/individual-membership.

Note: https://www.youtube.com/watch?v=INpedSOpdqw&feature=youtu.be

  • Log new Issue: You can also log your own issues to Drupal.org. The issue can be from both Drupal Core and Contributed modules. If you faced any issue while using Drupal in Core or any module you can go and log the issue directly to Drupal.org. Make sure to not log a duplicate issue.

How to start contributing?

How to get registered with Drupal.org?

The very first step is to register yourself on the drupal.org website by creating an account. Go to https://register.drupal.org/user/register. If you already have an account, simply login at https://www.drupal.org/user.

How to get registered to Drupal slack?

There are various communication channels to connect with the community, the famous one is Slack!

If you do not have an account on Drupal slack, go to http://drupalslack.herokuapp.com. Once there, you can join various channels as per your requirements like - #support, #frontend, #d9readiness etc. You can also search for channels by clicking on “+” > “Browse Channels” in the Channels section.

There are other mediums too like Telegram, Rocket Chat, IRC, etc. where people connect.

How to find issues?

Go to Drupal’s issue queue and filter the list based on your area of interest:

You can visit Drupal.org to find the issues you want to work on, for this please login to Drupal.org so that you can use the Advanced filter feature which only appears for logged in users.

For Drupal Core specific tickets : https://www.drupal.org/project/issues

For Combined list of Core and contributed modules issues list: https://www.drupal.org/project/issues

Basic guideline to find issues:

There are few filter criteria we follow before picking up any ticket from the issue queue, so these criteria helps us to get to ticket/issue closer faster. Following are the criteria:

The filters on issue queue will look like this:

  • Use issue tags: Novice, documentation, Drupal 9 compatibility : IF you are new to Drupal contribution arena , and you want to start with easy and straightforward issues that will help you boosting your confidence , then you can filter the issue queue with “ Novice, documentation, Drupal 9 compatibility” issue tags. This will give you the list of issues which are tagged with following tags only.
  • Use the Component filter of your interest : You can make use of this filter to get a list of issues of your interest area. For ex: Bootstrap system, Ajax System ets.
  • Use Status filter : Active/Needs Work/Needs review/Patch to be ported : By Default Issue list contains closed issues associated with irrelevant status, so to reduce the list of the issue use the mentioned status.
  • Sort issues list on ASC order of replies : This Sorting will give you the list of issues which have less number of replies, means no one has picked or less people have worked on the issue.
  • Sort Issues list on DESC order of Last updated: This will give you list of most active issues on which you can start working , Ideally we not prefer to pick issues which have last activity more than a Year ago, as it implies the issue is less active and there are huge chances that the issue will take more time to get closed in comparison with issue will more active.
  • Pick issues with empty “Assigned to” value: Please Keep in mind that it is not advisable to pick any ticket on which someone is already working or the ticket is already assigned to someone.

Note: You can use this URL to get directly to the filtered issue queue.

What to do after finding the issue?

As you identified the issue on which you want to work/contribute you can follow the following steps to help the issue to get more close to its closure state.

Note : Keep in mind about the version of Drupal Core/ contributed Module for which the issue has been raised by the author. You can get the version on the issue detail page as shown in image.

In the Given Image the Issue project is Drupal Core and the version for which the issue is reported is 8.8.x-dev.

How to Setup a Local machine to replicate the issue?

Now you have to be ready with your local setup of the machine. Local setup is necessary in case you want to give a patch to the issue or even if you want to test a patch on a given issue.

As per mentioned above, you have to set up an exact version of Drupal Core/ Module on your machine for which the issue has been reported.

  • If the issue belongs to Drupal core and you need to set up a specific version of Drupal core you have to follow : https://www.drupal.org/project/drupal/git-instructions to setup Drupal.
  • If the Issue belongs to the Contributed module , in this case setup Drupal with the latest stable version available on your machine and then clone the module which is needed to replicate the issue. For ex in the given image below you can see the module version for which the issue has been reported.

Now you have to get this specific version on your machine to replicate the issue and to fix, for this visit the detail page of the module as given in the above image , and on the detail page you will have a link for version control. For example, have a look at the image below:

When you click on version control you will get page as given in the below image:

Now you have to follow the steps and clone from the specific branch for which the issue has been reported.

Note: Make sure you have Drupal Installation already and make sure to place/clone the module at the proper directory so that you can use the module and fix the issue.

  • Get understanding of issue: First step is to get complete understanding about the issue , try to replicate the issue on your local machine for the same version for which the issue has been reported.
    • In case of any query, put appropriate comments to the ticket and ask for more details..
      • Try to replicate the issue in your local environment.
      • Once you have a clear understanding of the issue and have an idea /approach to fix it , Assign issue to yourself so that other community members will not take it up.
      • Add necessary tags to issue: Usually in code sprints and Drupal events when we pick any issue we add a relevant tag to the ticket so that we get to filter the list of tickets from the tag and get a list of issues picked in that particular event.
      • Depending on the state of the ticket, start working on it.

How to Contribute by adding a patch to the issue?

  • Once you have started work on the ticket, you might be able to get the resolution or you might have some more questions.
  • Comment back in ticket, with the questions and follow up ticket.
  • If you are having resolutions, that would be a piece of code change / style fix / Adding Readme / Annotation changes etc.
  • There might be issues, which already have some patch, at that point you have to add changes to the existing patch and get the interdiff.
  • After the issue is fixed, test it locally and create a patch.
  • Try to execute the unit test on your local machine , to make sure that unit tests are working fine.
  • If you have to write any test cases for your changes, do the same.
  • Your patch attaching to ticket will be like either one of the below
    • Patch file + comments
    • Patch file + Interdiff file + comments

How to create a patch?

  • Use GIT command to create patch
  • In case of new patch
    $ git diff
    $ git diff > <ticket-number>-<comment-number>.patch

    • In case of an existing patch, download it.
      $ wget <patch-url-from-ticket-to-download>
      $ git apply -v <download-patch>

      Make the changes needed existing patch

      $ git diff
      $ git diff > <ticket-number>-<comment-number>.patch
      $ interdiff <old-patch> <new-patch> > interdiff_<old>-<new>.txt
      • Naming of patch
        • Patch name
          • Interdiff name
            • Validate patch on your machine
              $ git apply > <new>.patch

How to attach a patch to Issue?

  • Add patch as a file to issue with needed information in comment
  • Update ticket status to Needs Review after Applying patch and unassigned it
  • If patch turns green and passes all test cases issue is ready to be reviewed by community

    • If patch fails then look into the logs and try to rework on the issue by assigning back to yourself.
    • In case need help seek help from community via adding comment to ticket or on Drupal slack

How to Contribute by reviewing an issue?

There is a great opportunity for folks who do not want to contribute to Drupal by giving patches, instead you can start reviewing/ testing patches that are getting applied for corresponding issue


  • Get the issue list filter with “Needs Review”: To Review any patch provided for the issue you have to filter the issue queue using “Needs Review" for both Drupal Core issues and Contributed module issues.
  • Identify the issue on which you can do the testing/reviewing.
  • Make sure to pick the latest patch applied to the issue, As given in the image below:

As you can see there are lists of patches applied for this issue , but you have to work/review the latest patch applied to the issue ,which will be sorted by Comment ID in DESC order.

  • Make Sure the Patch has passed all the Unit test cases and have turned to green color , like in the given image.
  • If possible you can have a look at the patch for the code changes done to fix the issue. You can have a look to analyse the coding standards, indentations , logic or any technical debt.
  • If you have any comment/feedback/suggestions on the patch , just go ahead and add a relevant comment to the issue regarding the patch.

Reviewing Patch Using “Dreditor”:

There is a Browser plugin which you can use to test the patch on virtual/temporary setup using Simplytest.me, Setup this Plugin on your Browser. Make sure to restart your browser before using it.

Now when you visit to Issue detail page which you already shortlisted for reviewing , you will able to see image as below :

Two new action buttons will be displayed.

  • Testing/verifying patch using Simplytest.me: As you want to test the particular patch you have to now click on “Simplytest.me" button to initiate setup process.
  • After clicking you will be redirected to page as given in image:

  • Here you have to select the version for which you want to validate the patch, Version will be as same as mentioned on the issue.
  • After selecting the correct version , click on “Launch SandBox”. There will be a process to setup a environment will initiate, like in image given below:

This will take some time to complete.

  • Once the process is completed you will land on the Drupal site , which already have the patch applied to the code base.
  • Admin Login: If you want to login to the system you can use: admin/admin as username/password for the system.

Reviewing Patch on a Local machine:

It is always better to test/verify the patch locally instead of using simplytest.me. For this you have to follow the following steps.

  • Setup local environment: Once you are ok with the Code changes done in the patch you can start setting up your local machine for the corresponding version mentioned in the issue for Drupal Core/Contributed Module. Follow the steps given above to set up your local machine.
  • Apply Patch on Local Environment: Now you can download patch by clicking on the patch link directly to your local machine and then apply the patch on your machine using :
    git apply > <patch-file-downloaded>
    Note: Make Sure about the path on which you are while applying the patch.

Validating/Testing the Patch (Cloud/Local):

  • Testing: Test the patch locally and verify that the issue has been fixed after applying the patch. Try to test for regression as well.
  • Patch is working fine and the issue got Fixed: If you feel the patch is correct and working fine as per your expectation and as per the criteria mentioned in the issue , then update the status to “RTBC”(Reviewed and tested by community) from Needs Review. Add Needed comments/Images/Videos to support your points.
  • If you feel you need more eyes needed to help you then make a comment to the tickets about the steps you took for testing and ask for more people to look into it.
  • Seek help on Drupal slack in case needed.
  • Issue is not fixed/Bug still exists: If you see the bug/issue is still appearing and not fixed by the patch, then add your relevant comment by tagging the author of the patch in comment and move the ticket status back to “Needs Work”.

Next Steps after Contributing to Issue (Reviewed/Applied Patch):

Once you have done your job on the issue, do the following:

  • Put a proper comment on the ticket about your work. Add screenshots if necessary.
  • Move the ticket to the next relevant state i.e from “Needs Works” => “Needs Review” or from “Needs Review” => “RTBC”
  • Attribute your contribution by adding an organization and customer, if appropriate. Refer screenshot below:

Also, you should keep following points in mind to check for any updates on the issue:

  • An update to the issue can be a new comment , Information updated for the issue or state changes to the issue.
    • Keep monitoring your Dashboard: Drupal.org provides you a personal Dashboard, which contains your latest activities and issues list on which you recently contributed. You should keep a close eye on the Dashboard and see the progress on issues you worked on.

      You can access your dashboard after you logged in to the site and hover on your user image on the header section as displayed in image below:

  • You will be receiving all updates on the issues via mail on your Drupal.org mail ID
  • In case needed i.e if ticket status is moved back to Needs work/Needs Review and you feel you can work/contribute to it , Then you can pick the issue and work on iit accordingly.
  • If the status of the ticket is closed, no need to do anything now on this ticket.

When is a Credit received for the contribution?

NOTE: It's not mandatory that you will always receive credit for a closed issue on which you worked.

Once the issue is marked Fixed, the maintainer chooses which contributors on the issue will receive credit. Usually these are the contributors who...

  • When you submit a successful patch for an Active or Needs Work issue
  • When you review any existing patch of a Needs Review issue
  • When you create a new issue
Jun 16 2020
Jun 16

The following case study was written collaboratively by hestenet and nnewton, explaining how we use rsync.net to manage backups for Drupal.org. The Drupal Association used rsync.net for many years prior to any partner relationship, and is now proud to count rsync.net among our Technology Supporters.

Drupal.org has been the home of the Drupal community for many years. Online since 2001, and fed by a global community of contributors, there is a tremendous amount of open source history recorded here.

It's critical that we safeguard that history for posterity, and of course all of our current activity so that we can maintain the momentum of the Drupal project.

Naturally, we've done a tremendous amount of work to make our infrastructure robust and fault tolerant from the top of the stack to the bottom. Individual servers use RAID storage, our infrastructure is built using highly-available pairs, and the Oregon State University Open Source Lab, our data center, has good data center hygiene and redundant power and cooling.

But disasters can and will happen, and this is why off-site backups are critically important.

Drupal.org uses rsync.net to manage off-site backups, and we highly recommend them as a solution. rsync.net is built on ZFS, a file system we have experience with and trust to be durable and offer cheap, immutable snapshotting. rsync.net gives you an empty filesystem to do anything you want with and works with any SSH or SFTP based tool. This standard approach allows us to easily use the service with existing tooling. We have used rsync.net for various purposes for almost ten years and have not had a single incident.

How exactly do we use rsync.net

rsync.net is actually configured as our primary backup location for all of the Drupal.org infrastructure. In addition to this, because we take advantage of rsync.net's geo-redundancy feature, rsync.net provides those backups in multiple, separate data centers. We also use rsync.net for a secondary backup layer for some select data pools that are already backed up in Amazon S3, or on the Open Source Lab's backup servers.

How do we have it configured?

For the Drupal.org infrastructure we use BorgBackup (https://www.borgbackup.org) to manage compression, encryption, and deduplication of our backup data. We then entrust rsync.net with ZFS snapshotting of the Borg data, providing us with points in time to easily roll back to. This gives us a sliding window of encrypted backups. It also gives us protection from malicious actors or ransomware as the rsync.net snapshots are immutable, or read-only.

The actual execution of borg and tracking of backups is done using a bash script that is placed on each server by our Puppet tree. Puppet also places a private key for encryption and the appropriate ssh private key for rsync.net access. We wrap Borg in a script due to our need to cleanly initialize new vaults when we spin up a new server, as well as our need to monitor Borg execution. One thing we have found is that it is difficult to detect silent failure for Borg specifically, so we have multiple points of feedback in the script. Our script functions as follows:

  1. Check if a vault on rsync.net exists for this host, if not create it.

  2. Backup the paths passed to this script to said vault for today’s date.

  3. Check the return of the last command, if it has failed email our monitoring endpoint to trigger an alert.

  4. Use Borg to pull statistics from the last backup, such as count of files backed up, chunks backed up, size of backup, etc.

  5. Massage those statistics into usable metrics and send them to statsd, where they will end up in our monitoring system.

With this process we both have an alert in the time of failure and also can create alerts based on the graphs we create from statsd. We do this to catch times when a backup may have succeeded but the amount of data backed up dramatically fell. That “success” may have been a failure in that case, just not an obvious one.

Example dashboard built from statsd information:

A major reason we value rsync.net is it presents a simple/standard ssh interface that allows us to use tooling we can customize to exactly what we need, as in the above example.

Why would we recommend this to others?

We share the Drupal community's love of simple, elegant, and technically excellent solutions to problems. Configuration and backup management with rsync.net ticks all of those boxes, and further the business-side is run in a very friendly way, with frequent increases in capacity available at very reasonable rates.

It's proven to be an effective and affordable way to use the funding we receive from the Drupal community to protect the project, and we believe you can trust it to protect your own projects as well.

Jun 16 2020
Jun 16

The Devel module in Drupal 8 is an extremely useful module for developers. The Devel module includes three submodules – the Devel Generate module, Webprofiler module and Kint modules. In this article we will delve into the Devel Generate module and how to work with it.

When building a Drupal website, you want to have a lot of content to check the overall display such as layouts, views, design. Content come in different forms and so it becomes important to test the website out with dummy content before adding live content. Instead of creating dummy content manually, wouldn’t it be nice to add them automatically? That’s where the Devel Generate module for Drupal 8 will come in handy. 

Drupal Devel module

What does the Drupal Devel module do?

Drupal 8 offers tons of helpful modules that can ease the job of a developer. Devel module has several useful features. As discussed previously, there are several modules that are part of Devel; One such is the Devel Generate module. Devel Generate is used for automatically generating sample or dummy content like menu items, taxonomy terms, and nodes. This is helpful if you need to test or showcase your Drupal website with data like dummy users, content, images, and so on. Drupal Devel module can create it all for you in a moment. Devel and its associated submodules are meant to be used on local development environments and should not be enabled on live production sites.

Getting started with the Devel Generate module

Working with the Devel module is as simple as installing it. Let’s get started with the installation and how to use Devel module in Drupal 8. 


Installing the Devel Generate module for Drupal 8 is like installing any other contributed module. I’m using the Composer to install it since it automatically installs all of the necessary dependencies. Open the terminal, within the project enter the following command.

      $ composer require drupal/devel
Next, enable the Devel and Devel Generate module. 
devel module in drupal 8

Generate content using the Devel UI

 1. Go to Configuration. Here you will see a long list of options under Development. Choose Generate Content.

devel module in drupal

 2. The Generate content interface offers a number of options to set before you hit GENERATE:

  • Generate content for all content types or select for specific content type
  • Check the checkbox if want to delete all content of a certain content type before generating new content 
  • Specify how many nodes to generate and how far back the node creation dates should go
  • Specify the maximum number of dummy comments for each node that support comments
  • Set the maximum number of words for the title of each node
  • Hit Generate
     devel module in drupal

3. You can see the list of dummy nodes generated by going to admin -> content

devel module

4.This is what an article looks like with a dummy title, image, and body content

devel module in drupal

Helpful hint: If taxonomy and tags are defined, the generate content module will assign tags at random. If you create vocabularies and terms first and then generate the content, you will end up with more useful test data. Devel can generate vocabularies and terms automatically, but they will be in fake Latin. It’s better to create your own vocabularies and terms because it makes testing easier when you have a meaningful taxonomy to work with.

Jun 16 2020
Jun 16

For several years, I've done all my local development with the help of Acquia's Dev Desktop. It's a specialized *AMP (MAMP, for me!) suite for Drupal that'll let you launch new projects rapidly. It's free to use and doesn't need any specific integration with Acquia. If you're working on your own independent Drupal project, it can still be a great solution. I was recently roped into testing a virtual machine for Drupal via the Drupal VM project.

Acquia Dev Desktop: An Aging Local Environment

The usefulness of Acquia Dev Desktop has started to falter with more of our development work shifting to Drupal 8. Composer integration is non-existent with Dev Desktop. Composer has become the defacto standard package manager in the world of Drupal 8. 

You use Composer for doing things like installing modules in the world of Drupal, a task that used to be handled with Drush. Acquia itself recommends dev environments other than Dev Desktop at the enterprise level. I've seen this when working with their ACSF or BLT products.

An entire Virtual Machine to run Drupal

For that reason, I've started using Drupal VM for more projects. While it doesn't have the local machine app-level interface to use, it does offer up a good browser-based dashboard. It's built on top of Vagrant so there's an existing world of command-line tools, community integrations, and help guides.

Being an entire Virtual Machine, Drupal VM naturally offers more flexibility in how you configure your local development stack. However, it's also more work than simply installing a tool like Acquia Dev Desktop. I could often kick-off a new project in Dev Desktop in ten minutes. I'd say it took me a few hours to get Drupal VM and its base requirements (Vagrant, Ansible) configured with an operating Drupal 8 environment.

Drupal VM is definitely more effort to get started but brings with it full control over an environment. I do enjoy SSH'ing into my local Drupal VM and being able to execute standard command-line tasks on the virtual machine. The integration to your local disk makes it easy to do things like export your Drupal 8 configuration (good old "drush cim"). You can do this from within an SSH session on the VM and find that the config is immediately available on your actual local disk site folder ready to commit with Git and send on its way to the repository. 

Drupal VM's Workflow and Integrations

Drupal VM Dashboard Example

Although you can of course use your own local SQL tools, Drupal VM comes with Adminer. It's a lightweight PHP-based database management tool for RDBMS. Other than MySQL, it also supports SQLite, PostgreSQL, and Oracle. It's similar to PHPMyAdmin, taking some design and functional cues from it.

One of the biggest issues I've had with Acquia Dev Desktop as of late is Composer integrations. Really, it's the lack of Composer compatibility. Drupal 8's recommend setup process and dev/test/prod environment workflow now revolves around leveraging Composer. It's used to manage much of the third-party libraries, modules, etc that a Drupal project has. Historically, I've committed nearly everything to Git. I've handled deployments almost entirely with Git.

Now, in modern Drupal 8 projects, Git is merely given the installation and update lists. With the ingredient file in Git, deployments revolve around migrating the requirements between environments and using Composer to install or update packages.

Leaving Dev Desktop for Drupal VM

Having significant freedom with how to use Composer and designing a workflow has become a vital part of managing live Drupal 8 sites with a multi-environment workflow. I've felt like Acquia Dev Desktop just doesn't jive with the modern Drupal 8 flow as it did with Drupal 7.

Daymuse has migrated more sites to Drupal 8 and has all new development in Drupal 8 (even as our last Drupal 8 getting started post is a little dated). I sadly have less of a reason to use my old standby Dev Desktop icon on my Mac's Dock. While I think Drupal VM is still working through growing pains, I'm happy to see a more modern development environment to work in day-to-day. I recommend checking out the project.

Jun 15 2020
Jun 15

I was researching Drupal 9 content and decided to collect some data. I gathered information related to the authors and the organizations whose content showed up in the top 100 Google results for "Drupal 9" (as of June 12, 2020). Check out the infographic with the data in a pretty format or skip to the plain text.

This is the first infographic I've created. I used Piktochart based on a Twitter recommendation from @akmalfikri. I liked the tool pretty well but was hoping for more mapping options based on region rather than country. If you have a favorite infographic tool, let me know.


Drupal 9 Authors

For the content that had authors listed, I looked at the type of content they contributed, their job titles, and for their drupal.org profiles, if any. If they had a drupal.org profile, I checked if they work on any contributed projects, how long they've been on drupal.org, how many issue credits they have, and how many core issue credits they have. I also grabbed their location, and if they are a Drupal Association member and contributed to the #DrupalCares campaign.

Author Content Types

For content with authors listed, I looked at the type of content they contributed which was lumped into the categories: Blog Post, Video, Code, or Other. The Code category is for Github code that was in the search results. The Other category includes documentation and training material.

  • Blog Post: 90%
  • Video: 5%
  • Code: 2.5%
  • Other: 2.5%

Author Job Role Types

I grouped the job roles into categories: Developer, Executive, Marketer, Writer, and Other. The Executive category includes Founders / Co-Founders, C-Levels, VPs, and Directors. The Writer bucket includes journalists and media outlet content writers as well as in-house writers for larger organizations. The Other bucket includes product managers, project managers, and people without roles listed.

Some people had multiple roles but I picked one. For example, if someone was a CTO & Architect, I used Executive even though they might be doing development.

  • Developer: 31%
  • Executive: 30%
  • Marketer: 23%
  • Writer: 8%
  • Other: 8%

Author Locations

For content with authors listed and drupal.org profiles, I looked their locations which were grouped: USA, Europe, UK, India, Australia, or Other. The Other category includes Canada and profiles that did not have a location listed.

  • USA: 60%
  • Europe: 14%
  • UK: 10%
  • India: 7%
  • Australia: 5%
  • Other: 5%

Author Profile Data

Here's profile information from the 67% of authors who had drupal.org profiles:

  • Have contributed projects listed: 71%
  • Average years on drupal.org: 10.2
    —max was 19.2 for Dries
  • Average issue credits (for past year): 61.3
    —max was 575 for catch
  • Average core issue credits (for past year): 22.1
    —max was 538 which was also for catch
  • Donated to #DrupalCares campaign: 50%
  • Drupal Association member: 60%

Drupal 9 Organizations

For the organizations that published the content (other than drupal.org), I looked at the type of content they contributed, type of organization, and for their organization drupal.org profiles, if any. In some cases, the organization had a personal drupal.org profile rather than a organization profile so those were ignored. If they had an organization drupal.org profile, I checked if they work on any contributed projects, how many people they have on drupal.org, their location, how many issue credits they have, and how many core issue credits they have. I also looked at if they are a Drupal Association member, supporting sponsor or premium/signature sponsor, and if they contributed to the #DrupalCares campaign.

Organization Content Types

I looked at the type of content that was contributed which was lumped into the categories: Blog Post, Video, Landing Page, or Other. The Landing Page category includes topic-specific landing pages as well as registration pages for webinars, training, and guides. The Other category includes documentation and training material.

  • Blog Post: 73%
  • Landing Page: 8%
  • Video: 6%
  • Other: 13%

Organization Types

I grouped the organizations into categories: Consulting, Hosting, Media, Themes, and Other. The Consulting category includes agencies, support companies, and specialty consulting though the bulk was traditional digital agencies. The Themes category is for sites that sell themes (many of these are for WordPress). The Other bucket includes training, specialized software, and technical libraries.

  • Consulting: 73%
  • Media: 6%
  • Hosting: 5%
  • Themes: 5%
  • Other: 11%

Organization Headquarter Locations

For content with organization drupal.org profiles, I looked their locations which were grouped: USA, Europe, UK, India, Canada, or Other. The Other category includes Australia, Ukraine, and profiles that did not have a location listed.

  • USA: 51%
  • Europe: 13%
  • India: 11%
  • UK: 8%
  • Canada: 8%
  • Other: 9%

Organization Profile Data

Here's profile information from the 82% of sites who had organization drupal.org profiles:

  • Have contributed projects listed: 90%
  • Average number of people on drupal.org: 52.7
    —max is 693 for Acquia
  • Average issue credits (for past 3 months): 90.4
    —max is 683 for Specbee
  • Average core issue credits (for past 3 months): 19.5
    —max is 285 which was also for Acquia
  • Donated to #DrupalCares campaign: 44%
  • Drupal Association organization member: 16%
  • Drupal Association supporting partner sponsor: 28%
  • Drupal Association premium or signature partner sponsor: 25%

Organization Anti-Racism Statements

My last blog post discussed Drupal for Justice. While reviewing the top 100 "Drupal 9" search results, I checked all the organizations for any recent blog posts on Black Lives Matter, racism, and social justice. I found a few companies with related statements that are listed below in chronological order. If you know a Drupal organization who has taken a stand on this pressing issue, let me know and I'll add them to my blog post.

Apologies, my old website is still on Drupal 6 and looks particularly bad on mobile. I've only started posting here again after many years and I've been very busy reviewing Drupal 9 patches and surviving a pandemic. Please ignore the cobbler's old shoes for now, thanks!

Attachment Size drupal-9-look-whos-talking-header.png 422.69 KB drupal-9-look-whos-talking-infographic.png 897.11 KB
Jun 15 2020
Jun 15

This post will document how to get Gatsby to talk to Drupal when Drupal is running in Lando.

For whatever reason, trying to get Gatsby to access Drupal in a Lando container doesn't work. I'm not sure if it's localhost or localhost:PORT that Gatsby has trouble with, but we can work around that limitation by using ngrok. ngrok lets us access localhost URLs from a public URL. I installed it on my Mac using Homebrew (cask), but you can visit the downloads page for other methods of installation. You'll also have to register on the ngrok website, but their free account will work just fine.

Once you have ngrok installed, set up Lando as usual. In my particular instance, I used the pantheon recipe, but any recipe should work.

Start up your Lando app (lando start). Once it has successfully started, Lando will provide you with a handful of URLs you can use to access Drupal within Lando. I've found the best results when using the non https localhost:PORT URL. As a side note, this port changes every time your Lando app is restarted.

Open up a terminal, and type in

ngrok http http://localhost:PORT

where PORT equals your Lando app's port as noted above.

Once ngrok has started, you'll get a few more URLs, but the one you want is labeled "Forwarding" and starts with http://.

If using gatsby-source-drupal, put this URL in the baseUrl option in gatsby-config.js (or use a .env.development file):

plugins: [
    resolve: `gatsby-source-drupal`,
    options: {
      baseUrl: `http://xxxxxxxxxxxx.ngrok.io`,
      apiBase: `jsonapi`,

You can now start Gatsby (npm run develop).

One little tip: in your Gatsby package.json, add this to your scripts section:

"scripts": {
  "refresh": "curl -X POST http://localhost:8000/__refresh",

You will need to create a .env.development file at the root of your Gatsby project if you don't already have one, and add the following:


This will allow you to grab new content from Drupal without having to stop and restart Gatsby:

npm run refresh
Jun 15 2020
Jun 15

The recent official launch of Drupal 9.0 represents 4 and a half years of improvements (and more than 4,500 individual contributors) to the open source CMS designed to support the most ambitious digital experiences. The official party line, so to speak, is that "the big deal about Drupal 9 is that it's not a big deal."

If you're currently on Drupal 8, you can expect a simple, painless update that'll allow you to stay up to date with upcoming feature launches (Drupal 9.1.0 is planned for December 2020) and continuous security support. Not only that, but the power of Drupal is more accessible than ever to people without technical backgrounds. Engineering teams continue to benefit from the latest features and improvements made since 8.0. And everyone relies on the security that comes with updating the underlying technology stack.There have been so many improvements to Drupal's overall user experience since 8.0 was first released that there's plenty to celebrate.   

Here are five features that make Drupal 9.0 the most accessible, intuitive, and user-friendly version yet—both for marketers using it to publish content and developers tasked with maintaining the code.  

  1. Visual page design with Layout Builder
  2. Intuitive media handling
  3. Customizable content moderation workflows
  4. Claro, a sleek, accessible core admin theme
  5. API-first architecture, featuring the JSON:API  

1. Visual page design with Layout Builder

Visual page design with Layout Builder The Layout Builder.

Drupal's Layout Builder lets content editors build and modify pages visually using drag-and-drop, eliminating a lot of reliance on developers and speeding up marketing workflows. Using intuitive, block-style layout controls, designers and editors can:  

  • Build default page templates for different content types (e.g. blog posts or feature pages)
  • Autonomously override default settings when a small change to the usual layout is needed
  • Create structured single-use landing pages (e.g. for an offer or an event) that don't necessarily follow a default template  

The Layout Builder is one of many examples of Drupal's renewed focus on accessibility and ease of use. It represents a major step forward for Drupal's user experience, distancing the CMS even farther from its past reputation of being intimidating to first-time or non-technical users.   

Keep in mind that Layout Builder is an optional module in Drupal that needs to be enabled. If you need help setting up a visual page designer for your editors, you can always reach out to our team of Drupal experts.   

Media Library shown in table and grid views. Media Library shown in table and grid views.

Drupal 9's WYSIWYG Media Library management system lets content editors and designers collaborate on images, videos, and other assets in an intuitive interface. Beyond the GUI, of course, the Media Library is fully customizable: you determine which fields to require for each type of media depending on your needs.   

Drupal's superior taxonomy handling extends to the Media Library, making it easy to organize libraries of all sizes according to whatever system works for your teams. With the Media module, files, images, videos, and all other asset types are treated like pieces of content, meaning they support fields and versioning just like a page would.  

Two views are available for the Media Library: table, which offers a more detailed look at each file's metadata, and grid, which displays an uncluttered overview of assets. You can choose which fields to display for both views. Here are full instructions for customizing your Media Library's interface.   

Keeping with the Drupal spirit of power-meets-accessibility, there are two ways to add media from the Media Library into a piece of content: via a reference entity (aka Hard Mode) or via the WYSIWYG text editor (9 out of 10 editors recommend this option). Here's how to set up CKEditor so it supports the media embed button. 

3. Content Moderation Workflows

Content moderation workflows Content moderation workflow.

If you have a website today, you're either putting out content on a regular basis or hoping to start doing so ASAP. Drupal helps content and marketing teams save time and streamline their moderation and publication process by enabling workflows that match their actual on-the-job needs. (Workflows have also undergone UX and accessibility improvements that make them more intuitive, meaning that once they're set up, people will actually use them--and see their value.)  

By default, content in Drupal can be in one of two states: Published or Unpublished. With the core Workflows module, you can add custom states (such as Unassigned, Assigned, or Draft) beyond the default two to match your editorial process.   

Content moderation workflows The Moderated content tab in Drupal 9's administration interface.

The companion Content Moderation module then lets you assign roles and permissions to those new states and transitions. These flexible role-based configurations mean, for example, that an editor just needs to access the Moderated content tab to see if any new drafts are ready for review.   

4. Claro Admin Theme

Claro admin theme The Claro theme.

Claro, a sleek new theme for the admin UI, is available as the default admin theme in Drupal 9.   

What's so great about Claro? It overhauls the current Seven theme with a sleek UI that adheres to the new Drupal Admin Design System. In a nutshell, Claro aims to be more accessible, responsive, user-friendly, and visually appealing.  

Claro vs. Seven Drupal theme The Claro vs. Seven theme.

The efforts behind building Claro were bolstered by the findings of the Drupal Admin UX Survey, an initiative conducted by the Admin UX study group (whose members include Suzanne and Annika from Evolving Web!) back in 2018 to learn more about how content editors were using Drupal. Read Suzanne's overview of the survey's findings for more on the editor pain points that led to Claro's development and implementation in Drupal core. (And stay tuned for Olivero, a brand-new theme that's slated to bring that modern look and feel to Drupal's default front end—it's one of the Drupal core initiatives, and we're hoping to see a release in 9.1 so we can collectively say "goodbye, Bartik" for good.)  

5. API-First = Future-First

Hand holding an iPad showing an augmented reality app An example of an augmented reality app.

A lot of improvements leading up to Drupal 9 have focused on creating more accessible experiences for a wider range of users, but this one's especially for the technical folks—although it has exciting implications for content creators.   

Drupal has always been the platform of choice for web projects with rich content requirements. Being API-first makes it flexible enough to handle more ambitious projects in the future.   

Drupal 9.0 is compatible with the latest technologies and frameworks (such as React, Angular, and Vue). Not only that, but its architecture is suitable for building headless applications that integrate via APIs with emerging channels and interfaces like augmented and virtual reality, wearable devices, and digital assistants.   

Thanks to the ability to package and export structured data via the built-in JSON API, engineering teams can choose to either use Drupal as a traditional coupled CMS, or as a headless CMS with a custom front end.   

What does this look like in practice? The possibilities here are quite literally endless. A quick example might be a city wanting to use existing data to build an augmented reality app that lets tourists interact with different landmarks. Drupal would be able to leverage structured JSON data from the city's existing database and inject it into the app's UI.    


So, while it's technically true that there aren't any new features launching with Drupal 9.0, thanks to its developers' commitment to constant improvement and updates, today's Drupal is still leagues ahead of Drupal 8.0. And there's more to come before year's end. Drupal releases new features twice a year, so you can expect some shiny new (and accessible!) goodies delivered with 9.1.0 in December.  

There's never been a better time to dive into this powerful, open-source CMS. Ready to learn Drupal? Attend our upcoming webinar, What You Need to Know About Drupal 9, or sign up for our Drupal 9 training course for a deeper dive.

Jun 15 2020
Jun 15

Part 1 | Part 2 | Part 3

For several years now, decoupled Drupal has been among the topics that has fixated members of the Drupal community. At present, there is no shortage of blog posts and tutorials about the subject, including my own articles, as well as a comprehensive book covering decoupled Drupal and an annual conference in New York City to boot. Now that JSON:API has been part of Drupal core for quite some time now, some of the former obstacles to implementations of decoupled Drupal architectures have been lowered.

However, though we have seen a large upswing in the number of decoupled Drupal projects now in the wild, some areas of the decoupled Drupal ecosystem have not yet seen the spotlight afforded projects like JSON:API and GraphQL. Nonetheless, many of these contributed projects are critical to adding to the possibilities of decoupled Drupal and can abbreviate the often lengthy period of time it takes to architect a decoupled Drupal build properly.

In April of last year, this author (Preston So, Editor in Chief at Tag1 Consulting and author of Decoupled Drupal in Practice) spoke to a packed auditorium at DrupalCon Amsterdam about some of the lesser-known portions of the decoupled Drupal landscape. In this multi-part blog series, we survey just a few of these intriguing projects that can serve to accelerate your decoupled Drupal implementations with little overhead but with outsized results. In this third and final installment, we cover several projects that encompass some of the most overlooked requirements in decoupled Drupal, namely JSON-RPC, Schemata, OpenAPI, and Contenta.js.

Running Drupal remotely with JSON-RPC

Just before we continue, it's important that you have exposure to the other information provided in this series for the most complete possible perspective on these projects that make decoupled Drupal even more compelling. This third and final installment in the blog series presumes knowledge already presented in the first and second installments, in particular the summary of motivations behind JSON-RPC provided in the installment immediately preceding this post.

Maintained by Mateu Aguiló Bosch (e0ipso) and Gabe Sullice (gabesullice), the mission of JSON-RPC is to serve as a canonical foundation for Drupal administrative actions that go well beyond the limitations and possibilities of RESTful API modules like core REST, Hypertext Application Language (HAL), and JSON:API. The JSON-RPC module also exposes certain internals of Drupal, including permissions and the list of enabled modules on a site.

To install JSON-RPC, use the following commands, which also enable JSON-RPC submodules.

    $ composer require drupal/jsonrpc
    $ drush en -y jsonrpc jsonrpc_core jsonrpc_discovery

Executing Drupal actions

To rebuild the cache registry, you can issue a POST request to the /jsonrpc endpoint with the following request body, and JSON-RPC will respond with the following response body and a 204 No Content response code.

      "jsonrpc": "2.0",
      "method": "cache.rebuild",

To retrieve a user's permissions, you can similarly issue a POST request to the same /jsonrpc endpoint, which will respond to your request with a 200 OK response code and a list of the user's permissions.

  "jsonrpc": "2.0",
      "method": "user_permissions.list",
      "params": {
    "page": {
      "limit": 5,
          "offset": 0
      "id": 2

All JSON-RPC methods

The table below shows some of the other common methods that you can execute by issuing requests to JSON-RPC. For a deeper explanation of JSON-RPC as well as a full account of what features JSON-RPC makes available to decoupled Drupal architectures, consult Chapter 23 of my book Decoupled Drupal in Practice.


Derived schemas and documentation with Schemata and OpenAPI

In API-first approaches, schemas are declarative descriptions that outline the shape of a JSON document, such as a typical entity response from a Drupal web service. In Drupal 8, the Schemata module, maintained by Adam Ross (grayside), is responsible for providing schemas that facilitate features that were previously impossible in Drupal such as generated API documentation and generated code, both of which we will examine shortly. To install the Schemata module, execute the following commands:

    $ composer require drupal/schemata
    $ drush en -y schemata schemata_json_schema

Navigating schemas

With Schemata, you can navigate a schema to learn more about how the API issues and handles data either by using the browser or by issuing GETrequests against endpoints that are prefixed with /schemata. Consider, for instance, the following format for Schemata requests:


Here are two examples of schema navigation with regard to the possible URLs against which you can issue requests. Note that in the first example, we are requesting a description of the resource according to the JSON:API module, whereas in the second we are requesting it in the HAL format found in Drupal 8's core REST module.



In the image below, you can see the result of a sample response from Schemata for the schema describing article data.

Schemata sample response


OpenAPI is a separate project, formerly known as the Swagger specification, which describes RESTful web services based on a schema. The OpenAPI module, maintained by Rich Gerdes (richgerdes) and Ted Bowman (tedbow), integrates with both core REST and JSON:API to document available entity routes in both web services modules.

The unique value proposition for OpenAPI for decoupled Drupal practitioners is that it offers a full explorer to traverse an API schema to understand what requests are possible and what responses are output when the API issues a response. To install OpenAPI, execute the following commands, depending on whether you prefer to use ReDoc or Swagger UI, both of which are libraries that integrate with OpenAPI to provide styles for API documentation.

    # Use ReDoc.
    $ composer require drupal/openapi
    $ composer require drupal/openapi_ui_redoc
    $ drush en -y openapi openapi_ui_redoc

    # Use Swagger UI.
    $ composer require drupal/openapi
    $ composer require drupal/openapi_ui_swagger
    $ drush en -y openapi openapi_ui_swagger

One of the more exciting use cases that OpenAPI makes possible is the idea of generated code, which is dependent on the notion that generated API documentation based on derived schemas means that APIs are predictable. This opens the door to possibilities such as generated CMS forms with built-in validation based on what these schemas provide. For more information about generated code based on the advantages of derived schemas and generated API documentation, consult Chapter 24 of my book Decoupled Drupal in Practice.

Revving up with proxies:

One final project that we would be remiss not to cover as part of this survey of hidden treasures of decoupled Drupal is Contenta.js, authored by Mateu Aguiló Bosch (e0ipso), which addresses the pressing need for a Node.js proxy that acts as middleware between a Drupal content API layer with web services and a JavaScript application. As many decoupled Drupal practitioners have seen in the wild, a Node.js proxy is often useful for decoupling Drupal due to its value in offloading responsibilities normally assigned to Drupal.

Contenta.js integrates seamlessly with any Contenta CMS installation that exposes APIs, as long as the URI of the site is provided in that site's configuration. Many developers working with decoupled Drupal are knowledgeable about Contenta CMS, an API-first distribution for Drupal that provides a content repository optimized for decoupled Drupal while still retaining many of the elements that make Drupal great such as the many contributed modules that add to Drupal's base functionality. (Another similar project, Reservoir, has since been deprecated.)

One of the compelling selling points of Contenta.js is that for Contenta installations that already have modules like JSON:API, JSON-RPC, Subrequests (covered in Chapter 23 of Decoupled Drupal in Practice), and OpenAPI need no further configuration in order for Contenta.js to work with little customization out of the box. Contenta.js contains a multithreaded Node.js server, a Subrequests server facilitating request aggregation, a Redis integration, and a more user-friendly approach to cross-origin resource sharing (CORS). For more information about Contenta.js, consult Chapter 16 of my book Decoupled Drupal in Practice.


Decoupled Drupal is no longer theoretical or experimental. For many developers the world over, it is now not only a reality but also a bare minimum requirement for many client projects. But fortunately for decoupled Drupal practitioners who may be skittish about the fast-changing world of API-first Drupal approaches, there is a rapidly expanding and maturing ecosystem for decoupled Drupal that furnishes solutions for a variety of use cases. Most of these are described at length in my book Decoupled Drupal in Practice.

In this final installment, we covered some of the major modules—and one Node.js project—that you should take into consideration when architecting and building your next decoupled Drupal project, including JSON-RPC, Schemata, OpenAPI, and Contenta.js. And in this multi-part blog series, we summarized some of the most important projects in the contributed Drupal landscape that can help elevate your decoupled Drupal implementations to a new level of success, thanks to the accelerating innovation occurring in the Drupal community.

Special thanks to Michael Meyers for his feedback during the writing process.

Part 1 | Part 2 | Part 3

Photo by ASA Arts & Photography on Unsplash

Jun 15 2020
Jun 15

Today I want to introduce a new contrib module called Composite Reference. Why is it called like this? Because it’s meant to be used for strengthening the “bond” between entities that are meant to live and die together.

In many cases we use entity references to entities that are not reusable (or are not meant to be). They are just more complex storage vehicles for data that belongs to another entity (for the sake of explanation, we can call this the parent). So when the parent is deleted, it stands to reason the referenced entity (the child) is also deleted because it is not supposed to exist outside of the context of its parent. And this is a type of composite relation: the two belong together as a unit. Granted, not all parent-child relations are or have to be composite. But some can and I simply used them as an example.

So what does the module do? Apart from the fancy name, it does nothing more than make an entity reference (or entity reference revisions) field configurable to become composite. And when the relation is composite, the referenced entity gets deleted when the referencing one is deleted. And to prevent all sorts of chaos and misuse, the deletion is prevented if the referenced entity is referenced by yet another entity (making it by definition NOT composite). This should not happen though as you would mark relations as composite only in the cases in which the referenced entities are not reusable.

And that is pretty much it. You can read the project README for more info on how to use the module.

This project was written and is maintained as part of the OpenEuropa Initiative of the European Commission.

Jun 14 2020
Jun 14

When creating a Drupal 8 or 9 project using the drupal/recommended-project Composer template, you may notice during certain Composer commands that the scaffolding files are copied from an "assets" directory inside of Drupal's core directory to their proper place in the codebase. 

But, did you know that the plugin that manages this process, drupal/core-composer-scaffold, can be easily customized in your project's composer.json file to not copy some of the scaffolding files?

For example, if you don't want the core README.txt scaffolding file created, then all you need to do is add the following to the "drupal-scaffold" data of the "extras" section of your project's composer.json:

"file-mapping": {
    "[web-root]/README.txt": false

The syntax of the file-mapping is simply: "to: from". Meaning, copy the [web-root]/README.txt from "false" (nowhere). 

The power of the scaffolding plugin doesn't stop there - you can also add additional scaffolding files and modify existing ones, all automatically.

Want to learn more about Composer? Check out our Composer Basics for Drupal Developers workshop.

Jun 14 2020
Jun 14

Jitsi video conference

Best video conferences are built on Jitsi. Jitsi is a set of open-source projects that allows you to easily build and deploy secure video conferencing solutions. At the heart of Jitsi are Jitsi Videobridge and Jitsi Meet, which let you have conferences on the internet, while other projects in the community enable other features such as audio, dial-in, recording, and simulcasting.

We have integrated Jitsi service with Drupal to access video conference directly from a Drupal site. You can create random or custom conference rooms or join existing conference. By default, the Jitsi meet server is used to establish connections, but you can specify your own server in settings.

Please check and try the module project which is in development version.

Jun 14 2020
Jun 14

In previous article we have seen how we create a very simple theme with 1 main content region as page layout.

theme admin

Lets look now at the custom module to handle theme switch and content display.

Part 2: the custom module

The module called "land_page" structure is as follow:


Lets look at the most important parts specific to the land page.

land_page.info.yml : this is the standard module info settings.

land_page.rounting.yml : in this file we will define our land page routes. Those route will be the reference to switch theme. I.e.

path: '/land-page _controller: '\Drupal\land_page\Controller\Controller::defaultLandPage'
_access: 'TRUE'

The next important part is the class that manage the theme switching in ThemeNegotiator.php (see Drupal):

 * @file
 * Contains \Drupal\land_page\Theme\ThemeNegotiator
namespace Drupal\land_page\Theme;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Theme\ThemeNegotiatorInterface;
class ThemeNegotiator implements ThemeNegotiatorInterface {
     * @param RouteMatchInterface $route_match
     * @return bool
    public function applies(RouteMatchInterface $route_match)
        return $this->negotiateRoute($route_match) ? true : false;
     * @param RouteMatchInterface $route_match
     * @return null|string
    public function determineActiveTheme(RouteMatchInterface $route_match)
        return $this->negotiateRoute($route_match) ?: null;
     * Function that does all of the work in selecting a theme
     * @param RouteMatchInterface $route_match
     * @return bool|string
    private function negotiateRoute(RouteMatchInterface $route_match)
        if ($route_match->getRouteName() == 'default_land_page')
            return 'ek';
        return false;

When the visitor navigate on the website, the theme negotiator will check if the route = land page route and sitch to the appropriate theme.

In order to achieve the above you need to declare a service.

land_page.services.yml :

        class: Drupal\land_page\Theme\ThemeNegotiator
          - { name: theme_negotiator, priority: 1000 }

In the Controller.php we will create the function that is called in the land_page.routing.yml (defaultLandPage()):

 * Default land page
 * @return array
 public function defaultLandPage() {   
    $items = [];
    $items['asset'] = drupal_get_path('module', 'land_page') . "/assets/";   
    return array(
        '#theme' => 'land_page',
        '#items' => $items,
        '#title' => '',
        '#attached' => array(
            'library' => array('land_page/land_page'),

In this function we define which template to use, we pass some $items for content and attach our library.

The them template is defined in land_page.module :

 * Implementation hook_theme().
function land_page_theme() {
  return array(
    // default
    'land_page' => array
      'template' => 'land_page',
      'variables' => array('items' => array(), 'data' => array()),

The library is defined in land_page.libraries.yml . Library will be very important as it will define all the custom css, js or external resources needed to render the page. A simple example of library  that include custom css, js and fonts will be:

  version: 1
      //fonts.googleapis.com/css?family=Barlow:400,500,600&display=swap: { type: external }
      css/land_page.css: {}
    js/js.min.js: {}
    js/land_page.js: {}

In the hook_theme(), the template called is "land_page" which is a twig template under template folder: land_page,html.twig. In this template you will build your html content to render the actual land page. This is where your creativity will start.

On big advantage of twig templates is that you can insert content from other Drupal source like webform or existing blocks directly into the land page.

Now you can install your module, navigate to your /land-page url and access to your land page content.

Jun 14 2020
Jun 14

Landing pages are great for product presentation and customer engagement.

There are a must for today marketing campaigns, mobile advertising and sales development.

landing pages

There is no easy way to build a simple landing page in Drupal.

You can use custom themes or modules to manage layout like parade but it is not that simple. Layout options are limited. For instance. The module does the job; you can build a simple landing page without custom development, but requires a lot of dependencies for a simple page and you may still have to do some css editing.

In this article we will explain how our landing page has been constructed within Drupal 8 website using separate dedicated theme and a custom module with twig templates.

The original page which is a stand alone 1 page theme is now fully integrated in the website.

It may not be the best method, but it can be easily replicated and give more room for creativity and extra flexibility compared to a layout module or a full land page theming construction.

Part 1: the custom theme

To achieve that, we created a custom theme with only 1 region for content. When building a 1 page theme, you usually do not want side columns or extra headers and footers.

To create your theme, you only need 1 file to be saved under your custom theme folder in the Drupal 8 "themes" folder: myTheme.info.yml.

type: theme
base theme: false name: 'EK'
description: 'Built to use land page'
version: VERSION
core: '8.x' regions:
  content: Content
  footer: Footer

This is what is needed to create the basic theme that will be used in our landing page. We keep a region "footer" to insert hidden blocks or content.

This theme will be called on specific routes names and will replace the default theme of the site.

You can add a screenshot image also in the theme folder if you want to enhance your admin view.

theme admin

In the next step we will explain how our custom module switch theme for dedicated url and build the landing page with twig template. For that step you will need some knowledge on creating a simple module, insert libraries and make a twig template.

Jun 13 2020
Jun 13

Ted Bowman, Drupal core contributor and member of Acquia's Drupal Acceleration Team (DAT) talks about the Drupal.org Project Update Bot. Also, Michael Schmid, the CTO of amazee.io joins us to talk about their Drupal hosting solution, Lagoon, and how it fits in to a best-practice focused Drupal development workflow.

URLs mentioned

DrupalEasy News


Subscribe to our podcast on iTunes, Google Play or Miro. Listen to our podcast on Stitcher.

If you'd like to leave us a voicemail, call 321-396-2340. Please keep in mind that we might play your voicemail during one of our future podcasts. Feel free to call in with suggestions, rants, questions, or corrections. If you'd rather just send us an email, please use our contact page.

Jun 12 2020
Jun 12

Recently, Heather Rocker and Tim Lehnen of the Drupal Association, with other open source experts, shared with Builtin tips on the best way to contribute to—and start building relationships in—open source.
Involvement with open source can be a rewarding way to learn, teach, and build experience in just about any career/skill you can imagine.

“We want you here. All the leaders within the community want that,” says Tim Lehnen. “There are a lot of people, especially in Drupal, who built their whole careers out of showing up on IRC 14 years ago and saying, ‘Hey, is there something I can help out with?’”

There are plenty of ways to get started with open source. But there are also many questions to answer to find your place: What does it mean to contribute? Breaking into new communities as a new contributor can be hard, and project leaders know that. How do you find the right project? How do you orient yourself to a new project? What if you don’t know how to code? What if something goes wrong?

Professional growth and building relationships in open-source spaces is, in some ways, easier than in traditional work environments. Lots of open-source projects are also taking steps to make their communities more inclusive and diverse. Building a community that encourages people to use, contribute to, and evangelize your project is very important.

Open source is made by people like you: one issue, pull request, comment, or high-five at a time. Read the full article to get inspired in getting involved with open source.

Jun 12 2020
Jun 12
Jun 12, 2020 Drupal

While building this Drupal 9 site a few months ago we needed to handle the contact form. Normally we would use the Drupal Webform module, but that wasn't Drupal 9 ready enough at the time. So we decided to build the form ourself, AJAX based to make it as user friendly as possible and learn a few things. We published the complete code in a working, installable Drupal module. A small explanation:

So the Drupal example module contains:

  • The AJAX form;
  • A Block, so you can place it in some site region;
  • A Twig html file for block markup;
  • An implementation of hook_mail() to get the email sent.

Example end result

Te code is cloned from our support form, see the leading image above.

Copy and run off

We published it on Github so you can copy it and run off with it to do whatever you need, so at the moment it's not a published Drupal.org project with all kinds of configurable stuff.

Bootstrap based

The classes in the form are bootstrap's. So if you implement Bootstrap libs it will automatically look good / better.

Most important code to get AJAX working

drupal ajax form

  1. Add the AJAX callback and use '#type' = 'button', not '#type' = 'submit'.
  2. Add the libraries needed to get AJAX working.

drupal ajax form response

  1. Initiate AJAX response.
  2. Add AJAX commands, a full list of Drupal core AJAX callback commands.
  3. Return response.

Flood protection, honeypot and code optimisation

There is no flood protection added yet, and if you like to implement Honeypot then uncomment line 103 in AjaxContactForm.php

Of course code can be optimised, there is a too big procedural if/else and a Drupal Service might come in handy, also mail bodybuilding is not quite. But I think you'll git the pic by now.

Drupal 'quick-start'

PS, to test this module fast in a fresh Drupal install, Drupal's quick-start comes in very handy.

Find the code on Github

Download or view the code here on Github.

Like to see this as a contrib Drupal module?

Please let me know, if there is enough positive feedback on this we might make it configurable and contrib it!

Jun 12 2020
Jun 12
An arrow moving upwards with SEO and 2020 written on it's side

Your website is the centre of the marketing world. No doubt SEO is very important for any business that operates online. Ensuring that a search engine is easily able to understand your content is the first step towards ensuring your visibility in search engine results.

Drupal is perfect for SEO. A Drupal website will help you launch your website and drive customers in as soon as you launch. Drupal provides many built-in SEO friendly features. One of the greatest features of Drupal is that it is super easy to customize.

The SEO essentials

module word cloud

Following are the most important pointers to tick-off when considering to boost search engine rankings of your Drupal website:

Checklist essentials

SEO Checklist

The SEO checklist module does not add any sort of functionality to your website but it helps as a reminder to all your SEO related tasks. This module will make sure that you are maximizing SEO for your site. It is updated frequently with the latest SEO techniques. If you work on a lot of websites, this module is for you!

Real-Time SEO For Drupal

This module does your work of optimizing content for your website by including keywords in a fast and non-spamming way. Also, this module works best with the Metatag module. Real time SEO for Drupal modules will check if your posts are long enough, if you have written the meta description and whether or not it contains keywords or if you have used any sub-heading for your post.

Require On Publish

This module is required only when your content has to be published or is already published. Require on Publish can be used when there are options like tags or SEO information on your content that don’t generally need to be filled until the content is published.

URL Essentials


If you want to handle duplicate content, the Redirect module will do it for you. It helps in integration with Drupal’s page cache to optimize redirects and performance. 


This module makes sure that the URLs are search engine friendly. Search engines like Google and Bing encourage the use of cleaner and URL friendly websites. Pathauto converts complicated URLs to cleaner and clear URLs.

Easy Breadcrumb

Easy Breadcrumb is a plug and play module that uses the current URL and the current page title to automatically extract the breadcrumbs segments and its respective link. 

Menu Breadcrumbs

This module provides substantial benefits for both users and the search engine. Menu breadcrumbs will let you know where you are in the navigation hierarchy and also there is an anchor text in the breadcrumb which links it to the appropriate URL. 


The Footnote module will automatically create tallied footnote references into an article or post. It provides an optional feature that identical footnotes are collapsed into one as if they had the same value.

Link Checker

A broken link will put a bad impression on the search engines. The Link checker module keeps checking for broken links periodically by checking the remote sites and evaluating the HTTP response code. It will also extract links from your content when saved.

Menu Attributes

This module is helpful in your SEO strategy if you want to non follow any menu item to mould the flow of page rank. Menu attributes module is also helpful when you want to give your menu item an ID so that you can easily select it using jQuery. 

Tag Essentials


This module provides a global setting which controls the meta tags on all pages. Metatags module is also multilingual which is great for your website!


Hreflang is a simple module that adds tags that are used by search engines to serve the correct regional URLs in the search results.

Schema.org Metatag

This module is an extension of Drupal’s Metatag module to display structured data in the form of JSON LD in the head of web pages. Schema.org Metatag module helps you define default structured data value for all content types. 

Power Tagging

This module helps you customize your content from Drupal nodes easily and provides multilingual tagging. It helps you tag your content in bulk at once with the help of Bulk-tagging. Power tagging module suggests tags which the users can curate or index collections of Drupal content.

Similar By Terms

If you want to enable the keyword tags on content then Similar by terms module is the right one! It also allows you to create your own views and it will also interpret content automatically through thesaurus even if synonyms are used.

OG Tags

OG tags are designed to make sure there is good communication between your site and Social media platforms like Facebook, LinkedIn and Twitter. Once, you are able to connect your site correctly, it will become easier for you to control the tag lines and images that will appear on social media platforms. These tags make content more catchy on social media feed and will also tell you what your content is about in seconds.

Validate The Information

Make sure all the information that is displayed on Facebook and Twitter is correct and displayed in a nice manner before people start sharing it. 

OpenSense Lab's facebook page

Communicating With The Search Engines


The Sitemap module gives you an overview of your site and displays the RSS feeds for all the categories on your website.

XML Sitemap

This module is a directory of your website which your website definitely needs! XML Sitemap module makes it easy for Google to crawl and index the website. This module provides you the flexibility to include or exclude some pages from the sitemap of your website.

Simple XML Sitemap

This module is a replacement of XML sitemap for Drupal 8 but it has a different function from XML Sitemap. Simple XML Sitemap is a simple module with almost no bugs. You can use this for a newer sitemap standard and more powerful standard.


This is a task scheduler that helps in automatically executing tasks and does not use any manual involvement. Cron always keeps running in the background unless all the jobs are set to off.  

If you want your XML Sitemap to stay updated and clean, Cron will do it for you by checking for updates and rebuilding XML sitemap.

Google Analytics

The Google analytics module tracks what type of links are tracked and what files are downloaded from your pages. It provides Site search and Adsense support. Changing the URL fragments can be tracked as page views. 

Editing Essentials


This module provides an easy interface of internal and external linking by using an autocomplete field. The Linkit module is your solution to internal linking and has a user friendly UI.

Editor Advance Links

This module checks that all the webpages have a unique title, class, ID, logo and primary image.

Speed And Security

Speed and security are the two main factors that affect the SEO ranking of your webpage. Sites that are quick and secure get rewarded by Google. A faster site will always rank higher than the others! 

Headline, Logo and Primary Image

The first thing that a visitor notices on your website is the home page. So, it is important to keep the home page clean with three essential elements. First up is the logo. It is important to have the logo on the homepage to make sure that the user identifies your brand the next time he notices your logo somewhere. The second one would be the Headline. A creative headline that defines your brand. And the third would be the Primary image along with the headline. 

OpenSense Lab's website homepage

Enable Search 404 module

This module helps in improving your website's overall experience. When you search for something on the web, this Drupal module gives you search results related to your query instead of showing ‘page not found’. 

SEO Trends 2020

Domain Authority

Domain authority is a website ranking score that predicts how well a website will rank on website results. This score is used when you want to track the strength of your website. 

Google estimates expertise, authoritativeness and trustworthiness which is also called E-A-T. E-A-T is a predominant ranking factor. Google wants to feature content that is written by experts in their field.

Google focuses on the off site signal to figure out your site’s E-A-T. After creating an amazing website, you need to make sure that it is cited and mentioned by other trusted websites and reliable sources. The mentions don’t just mean link mentions, they can be anything like a simple tweet talking about your blog. Expert mentions matter a lot and help you gain a better reputation in Google’s eyes.

Voice Search

OK Google, how do you think voice search will affect my website’s SEO?

As per the OC&C Strategy Consultants, 13% of all the houses in 2018 had a smart speaker and this number is expected to rise to 55% in 2022. 

Voice search statistics on a white backgroundSource: Wordstream

Google tends to give you the voice search answer from the top 3 results. After searching, Google chooses the page that usually has both the question and the answer. This is one of the reasons that make FAQ pages important for your websites’ search engine rankings. Google tends to use the featured snippets. 

Featured Snippets

Featured snippets are the results that are featured on the top of Google’s search results. These snippets aim to answer the query of the user right away. If your content is featured as a snippet in search results by Google, it means that you are getting additional brand exposure. 

There are three types of featured snippets: Paragraph, List and Table. According to GetStat the most featured snippet out of the three is the ‘paragraph’ type’.

A table showing types and number of total snippets

According to Ahrefs reports on 2 million featured snippets, 12.29% of their search results had featured snippets.

A pie chart showing amount of search queries with featured snippets Source: Ahref

Visual Search

Visual search aims to impact the future of SEO, let’s have a look how. 

Like voice search, visual search begins with taking a picture. Google Lens has been used 1 billion times till now. Apps like pinterest get almost 6000 million visual searches per month.

A pintrest search result page with flowers

Visual search has been useful for shopping, translation, recipes, identification of plants, product and a lot more.

With so many apps using this feature, it would not be very surprising to see it rise as an essential part of search. So if you want your product to show up as a visual search result, Image SEO is the right answer! 

Video SEO

According to Cisco, around 80% of online traffic will be made by online video. Even though there are uncountable videos on the internet, Hubspot says that 43% of people want more video content.

6 Blue semi circles on a white background Source: Techcrunch

Search Intent

If you want to rank your website, you need to understand to create content with search intent in mind. Search intent is why a search was made, what was the intent behind the search. Were they looking for a purchase? Or any information?

So your first intent should be choosing the right keyword. If you want to rank the highest in the search results, you need to be the most apropos result for the query. 

Click-Through Rate

It is an important concept in Search engine marketing. Getting more people to see your ad or snippet and getting them to click your ad will improve the success rate for your website.

It is important that your meta tag descriptions are 100% original and will make users click on your website. 


Building backlinks is still the most effective way to enhance SEO rankings and traffic. Which will require amazing content. If you want other websites to mention your link on their websites, you must have some quality content to deliver! 

According to a study by Ahref, top ranking pages tend to get followed backlinks.

A gra[hical representation of top ranking pages by backlinksSource: Ahref

Research Content

Bloggers, journalists and writers love data. It is important to show some stats, survey or industry study so that the users stick to your website for future references.

This is a lot of work and requires a lot of time but it’s always worth it! 

Comments And Community

Google wants to make sure that you have an active website with an active community and that’s what makes comments important for you. Comment can play a great role in the overall quality and ranking of the webpage. Although Google doesn’t have any kind of negative effect on your websites if you don’t have community involvement. 

Zombie Pages

Zombie pages, as the name suggests are the pages that are more or less like the zombies that we see in the movies. These pages are neither live nor dead. They don’t give any purpose to the website.

A few Zombie pages are never a problem until they turn into hundreds of them and pull down your entire site’s SEO. These pages can demean all your efforts on taking your page rank higher.

The first step to get rid of these pages is to identify. You need to delete the HTML files and get rid of them from XML Sitemap. 


The foundation of any SEO is quality content and links. You just need to have the right modules and the right guidance. Drupal is the best choice when it comes to content management systems.

Every year new trends keep coming and change the way information appears on the internet ensuring that the users get the required information in a matter of minutes! And if you follow these ongoing trends, your site will definitely see a boost in its search engine rankings.

OpenSense Labs has always been keen to provide the best solutions for its clients and prospects. To improve your presence online reach us out at [email protected]

Jun 11 2020
Jun 11

George Floyd’s murder has deservedly sparked the flame of social unrest. Rodney King, Oscar Grant, Ahmaud Arbery, Breonna Taylor,  and countless more cases known and unknown continue to highlight the systemic and institutional racism that American capitalism depends upon.

Our very participation in the systems that breed oppression make us complicit. Society must change. Lives are at stake.

Change Comes from Within

We’ve looked inwards before issuing a statement, and made concrete commitments to improve our hiring process, and build more accountability towards achieving diversity goals.

While our inclusivity policy touts equality and non-discrimination, representation on our team by Black members remains woefully inadequate. I was convinced our Oakland roots would result in a different make-up for our team, but something is wrong. Results matter.

We will begin a practice of reporting on the diversity of our membership quarterly to increase accountability towards our goals (e.g. equality data.herokuapp.com). Our job postings are being reviewed externally to help eliminate any bias or ableist language. We are reviewing our application processes and identifying job boards with the most diverse communities.

We have created a slack channel where we actively continue to share resources, converse, and educate ourselves. Following our all-hands town hall, our Culture Committee is working to hold space for continued conversation, and we will enlist help to workshop our understanding.

Supporting the Movement

Kalamuna stands in solidarity with the Black community, protestors, activists, and citizens everywhere taking a stand right now. We know action will change hearts and minds and hope this change will urgently reform some institutions, and dismantle others. We hope for huge, permanent change. 

Our digital agency works every day to support mission-driven organizations. We will continue to use our social platforms to amplify in solidarity the messages of individuals and organizations fighting for racial equality.

In addition to matching individual donations to the organizations team members feel are best supporting the movement, we support any member who needs to step back/step  up to protest. 

I am pledging Kalamuna staff time, and our team is matching that in volunteer time to assist with the technical uplift of a project that will help further empower this movement. We’re looking for front-line organizations to tell us what they need, and will be reaching out to ask. We’ve carved out about 400 hours of pro-bono time. Interested organizations can email [email protected].

On behalf of Team Kalamuna,

Andrew Mallis

Jun 11 2020
Jun 11

On a project I just discovered I had to make a change to both how some blocks were configured, but also remove access to some other blocks (with the module Layout builder restrictions). This is a somewhat disruptive change. Even though the editors are not supposed to need or want to use any of the blocks I was going to do disruptive changes to, I had to make sure I was not sabotaging their work somehow. So I wanted to find out what blocks and layouts were actually used on the different pages build with Layout builder.

So I wrote a simple query to find them all, and print them to my console. I then realized this might be handy to have for later. Or heck, maybe it is even handy for other people. Let's just throw it on the blog. It looks like this:


use Drupal\node\Entity\Node;

$rows = \Drupal::database()
  ->select('node__layout_builder__layout', 'ns')
  ->fields('ns', ['entity_id'])
$types = [];
$layouts = [];
foreach ($rows as $row) {
  /** @var \Drupal\node\Entity\Node $node */
  $node = Node::load($row->entity_id);
  if (!$node) {
  if (!$node->hasField('layout_builder__layout') || $node->get('layout_builder__layout')->isEmpty()) {
  $layout = $node->get('layout_builder__layout')->getValue();
  foreach ($layout as $item) {
    /** @var \Drupal\layout_builder\Section $section */
    $section = $item['section'];
    $layouts[$section->getLayoutId()] = TRUE;
    $section_array = $section->toArray();
    foreach ($section_array["components"] as $delta => $component) {
      $id = $component["configuration"]["id"];
      if (in_array($id, $types)) {
      $types[] = $id;

This will now give me the plugin IDs of all of the blocks used on a layout builder page, along with all the layout IDs of a layout being used on a layout builder page.

Now I can do disruptive changes without worrying about actually disrupting the work for editors.

Disclaimer: This does not take into account any unsaved work any editors have in their layout. If you have a very active site with very active editors, you might want to add that into the mix. But that is left as an exercise to the reader.

Hope that is useful to someone else, but if not, here is a useful GIF about it being summer soon (for me anyway).

Jun 10 2020
Jun 10

Wherever you are in the world, and whatever your Drupal knowledge level, BADCamp is offering opportunities to level up your Drupal and Drupal adjacent skills!

BADCamp has a full day dedicated to training. Here is a sneak peek of some of the fabulous training that we are offering this year. From Getting Started with Drupal to Composer to Project Management, there are learning opportunities for all!

Be sure to follow us on Twitter and subscribe to the newsletter to keep up to date as to when registration will open.

Jun 10 2020
Jun 10

Today Sooperthemes announces we have open-sourced our best-selling premium theme, formerly known as Glazed Theme. As part of our total rebranding, it is released as DXPR Theme.


At the same time, we are excited to announce that our layout builder module has a release candidate available for testing. Across our product line, we are publishing “1.0.0-RC1” release candidates.


Why are we releasing our 2nd most important product for free?


Even though our business depends on selling services to support our commercial Drupal products, we are still part of the open-source community. When we feel we can open source a product for free without harming our bottom line, we will! 


The Drupal ecosystem has evolved a lot over the past few years. Today most “premium Drupal themes” shops have gone out of business. This is because the lower end of the market for Drupal websites has gone practically extinct. Our theme is still popular because it takes a “Framework” approach and it is customizable enough for large Drupal projects to make use of its no-code theming capabilities, without compromising the branding and uniqueness of the end-product.


In the past 4-5 years 90% of our R&D budget has gone to developing Glazed Builder, our commercial layout builder product. Glazed Builder is now our most important product, and by pioneering a visual, easy-to-use page builder for Drupal we have contributed to making the Drupal experience better for thousands of authors and marketers. 


We feel that designing and refining tools for marketers is our mission and therefore, our low-code framework theme is not our bottom line anymore and will be open-sourced and released on drupal.org. This does not mean we will abandon the theme. To the contrary, it remains an important product we will maintain it just as actively.


DXPR Builder: Now ready for testing. Go-live: next week


First and foremost, apologies for the delays. We initially planned to launch our big product and website update in March. The delays will be worth it because we have taken our time to develop and refine one of the most requested features: Composer compatibility.


We are releasing just in time to be able to fully support semantic versioning, which is now a stable feature on Drupal.org projects. Additionally, we have built our own version of “packagist” on packages.dxpr.com, which allows us to provision DXPR Builder updates via composer. As of today, the composer workflow is also ready for testing.


We feel confident that our RC1 is stable enough that we can publish a stable package for Drupal 7, 8, and 9 next week. In the RC1 we also include a migration tool to make sure your old “Glazed Builder” content will work with DXPR Builder. Our support desk is ready to assist you with migration and we have release migration documentation today.

At present our RC1 DXPR Builder works with Drupal 7 and 8. Not yet with Drupal 9, we will fix that in our 1.0.0 release.


Test drive our new products


Glazed > DXPR Migration documentation

Jun 10 2020
Jun 10

A few weeks ago I hosted a webinar about integrating React with Drupal as a part of the Aten at Home Webinar Series. Here’s a quick recap of what we covered, and a recording of the session. Thanks to everyone who participated!

Jump to the video.

Background Concepts

React vs Other Javascript Frameworks
While the webinar focuses on React, the concepts apply to other Javascript Libraries or Frameworks as well.

Progressive Decoupled vs Fully Decoupled
This webinar focuses on embedding apps within specific regions of a webpage, rather than building entire websites as stand-alone React apps.
Related reading: When to Consider Decoupled Drupal

JS Component vs Other Methods
There are a number of ways to integrate Javascript with Drupal. This webinar focuses on JS Component, a new developer-focused module for easily embedding Javascript applications within Drupal-rendered pages.

What We Covered

  • For Progressively Decoupled Drupal 8 sites, I recommend using the JS Component module. You can find documentation and examples on the module page.
  • Once the module is installed there is no user interface. You use JS Component by adding a .js_component.yml file to your custom module or theme. You can also use JS Component in a custom module by including a boilerplate .info.yml file and .js_component.yml file to define your individual JS components.
  • The .js_component.yml file leverages the libraries directive and works very similarly to attaching libraries in Drupal. However, JS Component allows you to define/create a single or multiple Javascript components and with those components you define the JS and CSS dependencies.
  • Once you create a JS component you’ll be able to add your React app as a block and manage it the same way you would other Drupal blocks: with Layout Builder, from the Manage blocks page, as a paragraph using the Block Field module, or with code in a twig template file.
  • In the .js_component.yml file you can define the root_id and mount your React/JS app to a unique ID on the page. This means you can add multiple React/JS apps to the same page without worrying how they all will mount to the same ID.
  • Also within the .js_component.yml file you can add custom settings that will be available to the React/JS app via the window settings object. These custom setting values are fields available when adding the block to the page. For example you could add a select field that changes the theme for a React app.

Watch the Recording Online

[embedded content]


How can I configure JS Component to load externally hosted JS files?
Since the JS Component module is using the Libraries directive it works the same where you can use external libraries/files. Here’s a link in the Drupal docs that covers this.

How is JS Component different from the Drupal Libraries API?
JS Component uses the libraries directive and adds additional functionality. For example, creating a JS Component exposes your app as a block, making it easier to place your app anywhere on your site using existing Drupal layout tools (Layout Builder, Manage Blocks screen, etc.). Also it gives you the ability to to add custom settings that can be passed down to your app. Finally it also creates a consistent and organized way to add React/JS apps.

Does each component have its own namespace in drupalSettings? that is - if you had 2 blocks they could each have their own react_title for example
Yes, each component is name spaced using their component id.

Is there a postbuild for windows?
I don’t develop using Windows, but I would assume you could use the Linux subsystem and it should work.

What’s the future of the JS Component?
The primary goal for JS Component is to make it incredibly easy to embed Javascript applications within the context of Drupal-rendered pages. As Drupal becomes even more flexible with tools like Layout Builder and support for RESTful applications, look for even more powerful data providers in JS Component to integrate Drupal with your embedded Javascript applications.

Have you experienced any challenges using the JS Component module?
Since the data in the window object is not immediately available to the React/JS app, you need to create a function that waits for the data to be ready before you can rely on using it.


Here’s a link to an example code repo: https://github.com/AtenDesignGroup/js_component_examples

More Questions?

We’d love to address your questions in the comments section below.

Jun 10 2020
Jun 10

Welcome friends, once again, to our long-running blog feature covering the best modules available for Drupal 8. Many of our past module favorites have made their way into the award-winning Rain distribution which we debuted last year at Drupalcon, Seattle.

This edition will cover every project included with the Rain distribution with notes on how we use the module. The first heading groups all the modules we label as “Essentials'” for most Drupal site builders. The second list covers other modules we package with Rain that also highly recommend.

As usual, if you have any questions or feedback hit me on Twitter at @drupalninja.


Paragraphs Browser module used in Rain

  1. Admin Toolbar (Beginner) - The admin toolbar is a simple module that adds rollover menus to the Drupal admin experience.
  2. Component Libraries (Intermediate) - This module is a must-have if you are doing custom theming development. We leverage this module in our Rain theme to map Drupal templates to their corresponding Pattern Lab component.
  3. Field Group (Beginner) - This module lets you organize fields into tabs, accordions, etc. to give your content editors a better experience. All of the content types provided by Rain Features use the same groupings under the following headings: “Basic”, “Summary”, “Content”, and “Taxonomy.”
  4. Googalytics - Google Analytics (Beginner) - This module replaces the former Google Analytics module. Its purpose is to give administrators the ability to easily add basic visitor tracking.
  5. Linkit (Beginner) - The LinkIt module gives you an autocomplete popup inside of Wysiwyg for adding links.
  6. Metatag (Beginner) - Maintained by Mediacurrent’s very own Damien McKenna, this module lets you configure all of your meta tags for SEO purposes. We have the meta tags field enabled on our content type features by default, which skips a step when you need to customize them on individual pages.
  7. Node Revision Delete (Beginner) - By default Drupal core does not do anything to pare back old revisions. This can be a problem on larger sites as well as sites that use Paragraphs which act as a multiplier for revisions. This module provides a simple solution in that it allows admins to discard older revisions automatically.
  8. Paragraphs / Entity Reference Revisions (Beginner) - Our team uses Paragraphs extensively which we tie to Pattern Lab components in the Rain theme project. Paragraphs enable editors to create robust pages that rely on structured content. The advantage of this approach is that content can be more easily deployed across multiple channels such as a decoupled Frontend.
  9. Paragraphs Browser (Beginner) - One of the significant features is a better UX with custom thumbnails for each Paragraph feature we offer in Rain Features. We believe this gives editors a much better experience when using Paragraphs.
  10. Pathauto / CTools / Token (Beginner) - The Pathauto module lets you set up clean alias patterns for all of your content. If you want all of your blogs to have the path /blog/[title of the blog with hyphens instead of spaces] - this will be the module that you use.
  11. Redirect (Beginner) - Most new sites need to incorporate 301 redirects for old page URLs. The redirect module gives site admins an easy interface for creating those redirects in Drupal.
  12. Search API (Intermediate) - The Search API suite of modules is a fantastic way to configure your site searches. Our Rain distribution pre configures a simple site search out of the box.
  13. Simple Sitemap (Intermediate) - A pretty easy to configure module for creating XML sitemaps for search engines.
  14. Webform (Beginner) - This module makes it easy to create forms on your Drupal website. Rain ships with 2 integrations out of the box: 1 feature that adds Webform as a Paragraph, another feature that supplies a Webform content type.

Top Picks From Rain

These modules make all the difference to improve your content, media, and theming experience. They come pre-configured with the Rain distribution.

“List View” paragraph using Viewsreference module

  1. Address (Beginner) - In our Rain distribution we use the Address field with the Geolocation module to create a Map Paragraph. This allows authors to easily place a Map anywhere on a page.
  2. Allowed Formats (Beginner) - This module lets you define allowed formats at the field level. We use this module to configure an “Embed” paragraph strictly for 3rd party embeds.
  3. Block Field (Beginner) - One of our newer paragraphs features uses this module to render a Block within a paragraph. This allows editors to have a consistent experience for how they construct a page.
  4. Geolocation (Beginner) - The Geolocation module makes it simple to add a point on a map and have that map render in a field. As mentioned previously, we leverage this module in our Map paragraph feature.
  5. Moderation Sidebar (Beginner) - The moderation sidebar adds improved UX for modifying content states by integrating moderation into the admin toolbar area.
  6. Multiline Config (Intermediate) - This is a small utility module we use with Rain to allow config to wrap multiple lines, which is a huge help when managing Webforms.
  7. Scheduler (Beginner) - The scheduler module lets you schedule the publishing and unpublishing of your content. We have this feature integrated with our Rain content types by default.
  8. SVG image (Beginner) - The SVG image module allows SVG files to be used with image formatters. Our team often uses SVGs as the main image within a card component.
  9. Taxonomy Access Fix (Beginner) - This project addresses the fact that core Taxonomy doesn’t have granular enough permissions. The Taxonomy Access Fix module provides additional permissions to fill in the gaps.
  10. Twig Tweak / Twig Field Value (Intermediate) - These theming utility modules add functions to Twig to make it quicker and easier to theme in Drupal.
  11. Video Embed Field (Beginner) - This module is used in the Rain distribution to provide a Video media type that can support popular 3rd party services like YouTube.
  12. Viewsreference (Beginner) - The Viewsreference module gives editors the ability to select a View from a field. The Rain profiles adds this field to the “List View” paragraph type to give editors the ability to embed a View anywhere on the page.
  13. Yaml Content (Advanced) - This module is used by developers to stage sample content. Mediacurrent’s team uses Yaml Content during development to construct a consistent “state” that makes collaborative development faster and easier.

Be sure to visit the Rain distribution page on Mediacurrent.com for more information on how to get your Drupal project up and running in under 30 days with our team of talented designers, strategists, and developers. The Rain open source platform adds security, editorial enhancements, SEO and content features that save weeks of development time. 

Jun 10 2020
Jun 10

To quote Dries Buytaert, Drupal founder and project lead "The big deal about Drupal 9 is... that it should not be a big deal".

Previously with every new major release of Drupal, the upgrade process was, let's say, challenging to say the least.

In the past, Drupal adopted the policy of "the drop is always moving" and never supported backwards compatibility. This had a number of benefits as it meant that the Drupal project could continue to innovate unhampered by legacy code. However, in practice it resulted in major rewrites and major changes, and longer and longer release cycles. It also inevitably led to a delay in the adoption of the newly released version while module maintainers worked on upgrading their code. 

All of this meant that upgrading to new major releases was not a simple or straightforward process, and often a full rebuild of sites were required.

With the release of Drupal 8, all of this changed. Gone are the days of major rewrites and complicated upgrades. Instead the project moved to:

  • New minor releases containing new features every 6 months
  • Planned deprecations of APIs - here outdated code was marked as deprecated but not removed
  • Provision of automated testing and tools to make updating existing code easier

Through this new release management process and a more agile approach to the rollout of new features, Drupal is now a really strong open source alternative in the enterprise content management system space.

What's new in Drupal 9?

With the release of Drupal 9, there are no major changes, no system overhauls, not even any new features! The only differences between Drupal 8.9.0 and Drupal 9 is that those deprecated APIs have now been removed, and a number of third-party dependencies (Symfony, Twig, etc) have been updated to newer versions which will be supported for longer.

This means that as long as you are already on Drupal 8, and have been keeping your site up-to-date, upgrading your site from Drupal 8.9.0 to Drupal 9 should be a relatively pain free process.

Are Drupal 7 and 8 still supported?

Yes, Drupal 7 and 8 will both be supported until November 2021, at which point both versions will reach their end-of-life (EOL). It is highly recommended that you upgrade to Drupal 9 before then. After this date, these versions will no longer be supported by the Drupal Security Team which means no future security patches or bug fixes will be released for these versions.

This is the first time that two major versions of Drupal will become unsupported at the same time. The timing of Drupal 8's EOL has been planned to coincide with the EOL of one of its third-party dependencies, Symfony 3. As the upgrade path from Drupal 8 to Drupal 9 is so simple, it is unlikely that any extended support will be available for Drupal 8 beyond this date.

Drupal 7 is a different story though. There will most likely be a small group of approved third-party agencies who will provide long-term security support for Drupal 7, for a fee of course, for those organisations which are not ready to undertake an upgrade just yet.

However, there is still a year and a half before they reach their end-of-life, so there is plenty of time to upgrade your site - you just need to start planning for it now.

Upgrading from Drupal 8

If you are using Drupal 8 already, then the process of upgrading to Drupal 9 is relatively seamless and pain-free.

  • The first step you should undertake is to ensure that you are running the latest version of Drupal 8 and any contributed modules you may be using.
  • Use the Upgrade Status module to check whether your custom code and contributed modules are Drupal 9 ready.
  • If any contributed modules are not Drupal 9 ready, then check their issue queue and work with their maintainers to remove deprecated code.
  • Remove deprecated APIs used in your own custom code too. The Rector module can assist in resolving these automatically.
  • Lastly, make sure your hosting environment is compatible with the updated requirements of Drupal 9.

At this point you should be ready to upgrade to Drupal 9! Of course, as with any upgrade, we recommend taking a backup and testing it in a non-production environment first.

Upgrading from Drupal 7

There is no upgrade path from Drupal 7 to Drupal 8, or indeed Drupal 9. Essentially your site will need to be rebuilt from scratch and any content you want to retain migrated into the new structures. While this is a large undertaking and may seem a bit daunting, it's also a huge opportunity.

Drupal 7 was first released in January 2011. By the time it reaches its end-of-life in November next year, it will be over 10 years old! That's 10 years of no new features, other than what can be provided by contributed extensions. Ten years is a long time in the life span of any software, but particularly so in the online digital space, where technology advances rapidly.

Upgrading to Drupal 9 is the perfect time for you to re-evaluate your online digital strategy, to re-assess your messaging and positioning. It's a time to enhance and improve your customers' experience online. It's a time to take advantage of the new innovations and features released on the platform every six months.

At Annertech, we deliver ambitious digital experiences for our clients, and with Drupal 9 we know we have the ideal digital experience platform to deliver on that aim.

Isn't it time you started planning your upgrade now?

Jun 09 2020
Jun 09

This blog has been re-posted and edited with permission from Dries Buytaert's blog.

Lat week, we released Drupal 9.0.0! This is a big milestone because we have been working on Drupal 9 for almost five years.

I updated my site to Drupal 9 earlier today. It was so easy, it's hard to believe.

As I write this, I'm overwhelmed by feelings of excitement and pride. There is something very special about building and releasing software with thousands of people around the world.

However, I find myself conflicted between today's successful launch and the tragic events in the United States. I can't go about business as usual. Discrimination is the greatest threat to any community, Drupal included.

I have always believed that Drupal is a force for good in the world. People point to our community as one of the largest, most diverse and most supportive Open Source projects in the world. While we make mistakes and can always be better, it's important that we lead by example. That starts with me. I am committing to the community that I will continue to learn more, and fight for equality and justice. I can and will do more. Above all else, it's important to stand in solidarity with Black members of the Drupal community — and the Black community at large.

During this somber time, I remain incredibly proud of our community for delivering Drupal 9. We did this together, as a global community made up of people from different races, ethnicities, genders, and national origins. It gives me some needed positivity.

If you haven't looked at Drupal in a while, I recommend you look again. Compared to Drupal 8.0.0, Drupal 9 is more usable, accessible, inclusive, flexible, and scalable than previous versions. We made so much progress on such important things:

  • Drupal 9 is dramatically easier to use for marketers
  • Drupal 9 is easier to maintain and upgrade for developers
  • Drupal is innovating with its headless or decoupled capabilities

It's hard to describe the amount of innovation and care that went into Drupal since the first release of Drupal 8 almost five years ago. To try and grasp the scale, consider this: more than 4,500 individuals contributed to Drupal core during the past 4.5 years. During that time, the number of active contributors increased by almost 50%. Together, we created the most author-friendly and powerful version of Drupal to date.

Thank you to everyone who made Drupal 9 happen.

Jun 09 2020
Jun 09

Drupal 9 is here at last.

The big question within the Drupal sphere as we enter this new phase in the evolution of my favorite CMS: 

What now?

In an environment of Covid-19 quarantines and stay-at-home orders, websites are being relied upon to do more heavy lifting than ever before.  I’m passionate about helping organizations to ensure optimal benefit from their Drupal sites, and as I consult with clients every day on how to most effectively move forward, here are the kinds of questions that I hear most often:

Q. What are the most exciting or game-changing features of Drupal 9?

Key benefits of Drupal 9 include: 

  • a built-in visual layout builder, 
  • enhanced testing and tracking to ensure accessibility compliance, 
  • full multi-lingual support, 
  • assurance of accessibility compliance,  
  • simplified content editor capabilities, and 
  • integrated configuration management capabilities.

But the most exciting feature of Drupal 9 is what it isn’t. It isn’t game-changing. The migration from Drupal 8 can be a straightforward process and this represents an important evolutionary development for Drupal. If a site is currently working on Drupal 8.9, then the upgrade to Drupal 9 will be more like a point release -- not that different from going from Drupal 8.8 to Drupal 8.9.

The migration to Drupal 9 will, however, require the removal of any deprecated code or APIs that are still used in the site.

Q. How do I know whether my site relies on deprecated code or APIs, and if so, what do I do about it? 

There are a few options and some great tools to guide you through that process. My Promet colleague, Aaron Couch, addressed that very topic last week in a blog entitled, Drupal 9 Has Dropped! What to Do Now. The process that he outlines is more succinct and straightforward than anything else I’ve read on the topic. 

Q. To what extent does Drupal 9 reflect the evolution of the Drupal community?

Many of us know about the pain of migrating from Drupal 7 to 8, and many appear to be actively avoiding it. In fact, there are more than 700,000 Drupal 7 websites that still have not migrated to Drupal 8, even though Drupal 8 is so much better in so many ways. 

Moving forward, migration challenges will never again be such a bottleneck to having access to the benefits of a new release. Drupal 9 represents the cumulation of the vision implemented with the complete overhaul that resulted in Drupal 8.

For all practical purposes, Drupal 8 is a different CMS than Drupal 7. 

Drupal 8 was built as an enterprise-ready CMS, with the idea that future major version upgrades would be incremental, not evolutionary changes, and that’s the case with Drupal 9.

Q. Do you anticipate that Drupal 9 will draw in new types of users?

I don’t expect Drupal 9 to be a major event at all, and that is a good thing. It’s simply what comes after Drupal 8.9. Some changes in Drupal 8 over its lifespan, particularly the Layout Builder features that enable very powerful drag-and-drop page-building capabilities, should make Drupal more appealing to organizations that want to distribute content creation and management throughout the organization.

Q. So is there a compelling reason to migrate to Drupal 9 from Drupal 8?

Drupal 7 and 8 will both hit end-of-life status at the same time, in November 2021. So staying on Drupal 7 or Drupal 8 won’t really be an option after November 2021.

While the Drupal community won’t be maintaining Drupal 7 or 8 after Nov. 2021,  a  commercial vendor will likely seize the opportunity to provide a commercial support option.

Drupal 9 is just the update that comes after Drupal 8.9. For all practical purposes, you are staying on Drupal 8. It's just that Drupal 8 is constantly evolving, and because we are out of single-digit numbers to the right of the decimal point at 8.9, the next update gets called Drupal 9.0.

Also, the change in digits is a convenient place to clean out the deprecated code in the code base that you should have stopped using by now anyway.

Email me if you want to set up a call to discuss the differences further, or for help with any Drupal-related questions that you might have.

Q. How would you compare a D7 to D8 migration to a D8 to D9 migration?

Imagine you drive a Toyota Camry and fortune smiles on you and are gifted a 2020 Ferrari 488 Pista. It’s still a car, but you will basically need to relearn how to drive. That is D7 to D8 from the developer perspective. The content editor/writer perspective is more like going from the Camry to a BMW. It’s just a nicer version of what you already had.

D8 to D9 will be like taking the Ferrari in for a tune-up.

We at Promet Source are here to help with all any Drupal-related questions and website migration issues. Contact us anytime.


Jun 09 2020
Jun 09

Drupal 9.0 logo On June 3, 2020, Drupal 9.0.0 was released! This is a major version update for Drupal, but the most straightforward update in Drupal's history.

As major version updates in the past have been quite disruptive in bringing new features and APIs, you might be wondering how this update impacts your site and your Drupal learning journey. Will Drupalize.Me Drupal 8 tutorials apply to Drupal 9 sites? Will you have to learn a totally new system with Drupal 9?

Thankfully, there is good news about both those questions. The short answer to the first question is "Yes!" -- the vast majority of our Drupal 8 tutorials will apply to Drupal 9 sites. For the second question, the answer is "No!", you won't have to learn a new system. The exceptions to the question of tutorial compatibility are tutorials which feature APIs that have been removed in Drupal 9, like in SimpleTest for Automated Testing (which we have noted). Also, some contributed modules have updates that we are currently reviewing. They appear in our Search API and Solr tutorial series.

We've put together some resources to get you up to speed with Drupal 9, starting with our Guide to Drupal 9.

What's the deal with Drupal 9?

In this short video, we explain how our Drupal 8 tutorials are compatible with Drupal 9 sites because of the way that Drupal 9 was built inside of Drupal 8.

[embedded content]

Upgrade to Drupal 9

While there's no one-size-fits-all process for upgrading to Drupal 9, by the end of this tutorial you should be able to explain the major differences between Drupal 8 and 9, audit your existing Drupal 8 projects for Drupal 9 readiness, estimate the level of effort involved, and start the process of upgrading.

There's no one-size-fits-all path to upgrade from Drupal 8 to Drupal 9, but there is a set of common tasks that everyone will need to complete.

In this tutorial we'll:

Learn about a key concept in understanding the difference between Drupal 8 and Drupal 9: deprecated code:

Deprecated code is any code flagged for future removal, but which has not yet been removed to ensure that existing code which relies on the to-be-removed code will continue to work. When an API, or feature, becomes deprecated it's a warning to all developers that at some point in the future this thing they are relying on will not exist, and they'll need to update their custom code to a new approach. Preferably before the existing one gets removed.

In this tutorial well:

Tools for checking Drupal 9 readiness

On the blog, we've posted a couple of tutorials to help you check your site for Drupal 9 readiness.

May 4, 2020 - 12:47pm

Upgrade status generates a report that serves as a sort of checklist to help you determine whether or not your site is ready to be upgraded to Drupal 9. It packs a lot of useful information into a single report. It's worth taking the time to install it on a copy of your Drupal 8 site and seeing what it has to say.

April 20, 2020 - 1:36pm

Drupal check, and Drupal rector, are two useful command line tools you can use to help jump start the process of updating your Drupal 8 code to ensure it's compatible with Drupal 9. This post includes some notes about the process I went through while testing them out on some of the Drupalize.Me code base.

Community resources

There are a number of great Drupal 9 resources from the Drupal community at large. Here are a few you might want to check out.

How Drupal 9 is made and what is included (Drupal.org) -- This guide includes documentation about the code deprecation process, 3rd-party library changes, module removals, environment requirements, and other important information about Drupal 9 and its future development.

Drupal 9.0.0 released (dri.es) -- From the blog of Drupal project lead and founder, Dries Buytaert

A new Drupal 9 landing page on drupal.org (Drupal.org) -- Drupal.org has launched a shiny new landing page introducing Drupal 9.

Thank you

A heartfelt thank you to all the contributors who made Drupal 9 happen! And a thank you to the Drupal Association for supporting community infrastructure and events that keep Drupal moving forward.

Jun 09 2020
Jun 09
Jun 09, 2020 Product

Based on user feedback and own experience, we built new features and tuned existing ones. Here are the updates:

1. Choose your own section names

You can now choose a custom name for each section, you can even provide different names in different groups. Go to the group settings and choose your custom section names:


See your own section names:


2. Upload header image per group

You can now upload a header image in the group settings:

upload header

group header

3. Block and unblock users

User managers were already able to block users, but there wasn't a 'blocked users' list yet. That is now available including 'reactivate' function:

block user

reactive user

4. Archive groups

It's now possible to archive groups and of course also de-archive them:

archive group

You can find the archived groups via the drop down behind 'Groups' in the left sidebar:

groups archive

Unarchive a group If you click on the title of an archived group, you can access it just like an active group and uncheck 'Archive this group' in Group settings.

5. Linked stream items

All items in the activity stream are now linked to the corresponding content details page In example underneath, a message, files and icebreakers:

Stream linked items

Misc tuning

  • Homepage can't be set to a disabled section anymore.
  • Facilitated a default user image.
  • You can't block yourself anymore.
  • You can't remove a role from yourself anymore.
  • Fix for calculating height in stream / chat holder.
  • Stream wrapper auto-sizing fix for optional header.
  • Prevent 'notice' when mailing 0 users.

Try it instantly 

Would you like to try Lucius right now? Click here to get started.

Install, host and customise it yourself, 100% open source

Please check this project page for detailed information.

Feedback, feature request

Please let us know your feedback or/and feature requests in the comments below, via our support form or via the open source issue queue.

Jun 09 2020
Jun 09

The future of the web is here. Drupal 9 has arrived, and we are more than just thrilled! All that elbow greasing that went into building Drupal 8 has finally paid off. A much more modern, reliable, compact, and revolutionary open-source CMS has emerged.

Drupal 9 promises much more than continuous innovation. Incorporating the best of open source technologies, the latest version of the CMS opens doors to many more open source communities while offering a secure and sustainable ecosystem.

It goes without saying that none of this would be nearly possible without the incredible Drupal community. I have been fortunate enough to talk about Drupal 9 to some significant Drupal contributors and community members recently. Read on for some honest and passionate comments on what are they most excited about Drupal 9.

What"s the big deal about drupal9?


Alex Moreno

Technical Architect at Acquia

quotes The thing I'm more excited is that it is an uneventful event. We all know how painful it has been migrating between previous releases. We've been talking for years about migrations Drupal 8 and wrote hundreds of pages. The least exciting the better in this case. And Drupal 9 on that aspect is not exciting at all. It just works changing a switch, a label… which makes it super exciting!!


Jacob Rockowitz

Drupal developer. Built and maintains the Webform module for Drupal 8

quotesAs a developer, I am excited about Drupal 9's removal of deprecated code. Removing old code allows us to move forward with improving and extending Drupal core. For the Webform module, I have been working toward tagging a new major release that removes deprecated code, fixes some significant bugs, and improves to some key APIs. Professionally, I am most excited about using Drupal to build a headless content authoring platform. Drupal 8's API first and media initiatives were so successful, the Drupal community can now focus on improving Drupal’s content authoring experience.


Jaideep Singh Kandari

Senior Engineer at QED42

quotes The fact that Drupal 9 is the simplest and easiest major release in Drupal's History is exciting. The community made some great decisions in developing Drupal 8 and that laid the foundation for extending and maintaining Drupal. It is because of those decisions and community support that Drupal can be modified iteratively and can include industry's best practices into Drupal. Modifying Drupal core has never been easier. There are lots of new features which are in progress and might land soon in Drupal 9. One particular feature I'm very interested in is the Automatic Updates. With this in place, Drupal sites will receive automatic updates which greatly reduces the maintenance effort. This initiative is in the development phase and you can see lots of communication happening for this initiative. While there are many other reasons to be excited for the new Drupal 9 release, I think it’s time to thank the community who supported Drupal in difficult times and allowed a planned and timely release of Drupal 9. This shows how the Drupal community is not just engaged in consuming, but also nurturing it and growing it every day. That's why it makes me proud to be a part of the Drupal Community.


Joel Pittet

Web Coder. Drupal 8 Theme System Co-maintainer

quotesI'm excited about Olivero (the new front-end theme), the upgrade transition and ease/experience.



Open-source evangelist. Drupal Practice Head at Specbee

quotesI am excited about Drupal 9 because it's basically Drupal 8 minus the deprecations and plus upgraded dependencies which removes the dichotomy between the two version. This will help developers to stay relevant as alike modules. If you know Drupal 8 then you will know Drupal 9.


Markus Kalkbrenner

CTO at Bio Logis

quotesI’m just excited about the newer Symfony version and semantic versioning. To be honest there's not too much I'm really excited about. I'm more and more concerned about the fact that "fancy" features are accepted for core. On the other hand essential backend components, for example the Form API to just mention one, aren't state of the art anymore. So while Drupal becomes more "complete" as out-of-the-box CMS it becomes less attractive as development framework.


Nick Dickinson Wilde

Drupal Tech Lead at Taoti Creative

quotesWell, there is very minimal new feature wise, but all that deprecated code being gone and less excess ways to do things is nice. I guess beyond all the internal cleanup, I'm very eager on updating of all the Symfony dependencies - lets me update them for a bunch of personal projects too. Also, really keen on the new complete node migration for D7 projects to D9. That's gonna make complex site migrations quite a bit cleaner and simpler.


Rachel Norfolk

Community Liaison at Drupal Association

quotesI’d say that the most exciting thing about Drupal 9 is how we now have a far, far better way to handle the relentless pace of change in technology. For me, it is actually exciting that Drupal 9.0 brings “nothing new” over Drupal 8.9; it is simply an exercise in dropping old code that is no longer needed. It means that we can then bring great new features in 9.1, 9.2 and so on, whilst having a smaller, more modern, codebase we have to check against.

I remember thinking back to the Drupal 8 release and being a little scared at the huge change to everything. I wasn’t the only one who felt that way and we learned from that lesson. Drupal 9.0 is “no big deal” and that IS a big deal!


Renato Goncalves

Software Engineer at CI&T's Drupal Competence Office

quotesI'm very excited about Drupal 9 because it will be very important to use the new version of Symfony and Twig. Another important point is that the deprecated code will be removed, and this will make the code cleaner and more organized. Last but not least: I'm very happy because the contrib projects will work on both versions D8 and D9. This is excellent for me as I help the community and I maintain 40+ contrib projects and it helps the maintainers' job.

And Lastly....

Much gratitude to all the community members on this list for taking the time out of their busy schedules to share their thoughts with me. We at Specbee are especially thrilled about Drupal 9 because we can offer more modern digital experiences and easy migrations. We’re ready to shine with Drupal 9!

Jun 08 2020
Jun 08

Though the biggest news this month is the release of Drupal 9, that doesn't mean big releases aren't happening on other versions of Drupal too. The milestone represented by Drupal 9 also welcomes new versions of both Drupal 7 and Drupal 8 to the Drupal ecosystem. It's been four-and-a-half years since Drupal 8 was released, and 54 months of development from scores of contributors around the world went into Drupal 9. And thanks to the indefatigable efforts of open-source contributors in the module ecosystem, there are already over 2,000 contributed modules ready to go, compatible with Drupal 9 out of the box.

Drupal 9 is a massive step for innovation in the Drupal community, thanks to the careful thought that went into how Drupal can continue to stay ahead of the curve. During the Drupal 9 development cycle, which was largely about deprecating and removing old code, the Drupal core committers laid the groundwork for the future and facilitated a more pleasant upgrade experience from Drupal 8 to Drupal 9 that should smooth over many of the hindrances that characterized the transition from Drupal 7 to Drupal 8. And there's already exciting new plans ahead for Drupal 9, with coming releases consisting of even more refactoring and deprecations. With Drupal 9.1 in December, the focus will shift to new features and improvements, including user experience, accessibility, performance, security, privacy, and integrations.

In the second episode of our new monthly show Core Confidential, Fabian Franz (VP Software Engineering at Tag1) sat down with Michael Meyers (Managing Director at Tag1) and your host Preston So (Editor in Chief at Tag1 and author of Decoupled Drupal in Practice) for a quick but comprehensive survey of how Drupal 9 will change Drupal for the better. Beyond discussing the technical improvements and ecosystem advancements, this Core Confidential episode also dives into the anxieties, challenges, and concerns that core committers have about Drupal 9 moving forward.

[embedded content]


Two moderately critical advisoriess that you need to be aware of and address:

Photo by Jingda Chen on Unsplash

Jun 08 2020
Jun 08

This blog has been re-posted and edited with permission from Acquia's blog.

We’re so close to the release of Drupal 9 and the excitement is alive all throughout the Drupal community. It has been 5 years since Drupal 8.0 was released and in that time, thousands of contributors and organizations have worked together to create a more powerful, accessible and innovative Drupal experience based on the input of people all around the world. As we await the reveal, we know that you are eager to know what Drupal 9 will mean for your sites and the next generation of web experiences. 

We recently joined Drupal founder Dries Buytaert in a webinar hosted by The Drupal Association and Acquia to answer your top Drupal 9 questions. Since we weren’t able to cover everyone’s questions, we wanted to cover some of the most popular ones here. Keep reading to find out what’s in store for Drupal going forward.  

Making the Migration

What are the migration options for users currently on Drupal 7? 

Gabor: Prior to the release of Drupal 9, we’ve been recommending people move to Drupal 8 first because the upgrade from 8 to 9 is much simpler. However, once Drupal 9 is released, people can use the Drupal 7 to Drupal 9 migration path directly built into Drupal 9.

The question comes down to whether the extensions that you are using are already available for Drupal 9 or not. Drupal has 9,000 extensions and more than 2,200 of them are already Drupal 9 compatible. We’re seeing hundreds of extensions added each week. The majority of people find that most/all of their extensions are already Drupal 9 compatible, in which case it is easiest to go directly from Drupal 7 to Drupal 9.

To track all of the great progress we’re making toward getting all of the Drupal extensions compatible, you can check out the Drupal 9 Deprecation Status Tracker.

Angie: Acquia also has a new tool in development for Drupal 7 to 9 migrations called Acquia Migration Accelerator, which we'll talk about more in a later section!

Do you expect support for Drupal 7 will be extended beyond November 2021?

Gabor: Currently, community support for both Drupal 7 and Drupal 8 will end in November 2021. However, Acquia is a member of the Drupal 7 Vendor Extended Support Program and will be providing commercial support for Drupal 7 until 2024

What migration tools are recommended to support the upgrade to Drupal 9?

Gabor: Drupal 9 has the same migration capabilities as 8.9, meaning that the standard migration tools can be applied when migrating to Drupal 9. The three main tools we recommend are:

  1. The Core Migrate Module suite - Migrates your content and site configuration  
  2. The Upgrade Status Module - Provides information about contributed project availability
  3. For Drupal 8 sites, the Upgrade Rector module automates updates of many common deprecated code to the latest Drupal 9 compatible code
  4. For Drupal 7 sites, the Drupal Module Upgrader - Scans and converts outdated code on your site. (This was recently upgraded by Acquia to generate code that is compatible with Drupal 8 and 9 at the same time where it can do transformations.) 

Angie: We’re also excited that Acquia will soon be offering the Acquia Migration Accelerator. This tool, which is currently in development, will help automate parts of the Drupal 7 to 9 migration process by giving companies access to a dashboard to view their data migration, provide module replacement recommendations, and offer insights into things like validation and migration errors.

Accessibility and Security 

What accessibility features will Drupal 9 have built-in? 

Angie: Drupal 9 is going to continue the strong commitment to accessibility that began in Drupal 7. Drupal's Core Accessibility Gate, required for all core changes, is a major show of dedication to accessibility efforts, and it makes sure that any new feature added will be accessible right out of the box. We’ve made a lot of positive strides when building Drupal 8 with full keyboard support, voice-to-text support for visually impaired users and media and layout enhancements. There was a lot of care put into the issue of accessibility and it’s something that will continue to be refined and worked on as part of the future of Drupal 9. 

Gabor: We’re also excited that the new Claro Administration theme, which was specifically optimized to feature an accessible design, will become the eventual default backend theme in future versions of Drupal 9. 

What security enhancements should we expect in Drupal 9?

Gabor:  A large part of the reason for the Drupal 9 upgrade itself is to ensure Drupal is more secure and compatible with modern system requirements. Also, Drupal 9 removes deprecated code so you’re working with a smaller codebase. This means there is less chance for potential security risks or errors. 

In general, Drupal has always shown itself as a secure choice. Drupal’s trusted by some of the biggest names from NASA to Tesla to NBCSports, so we’re confident it will continue to meet these high standards. The open source model creates shared responsibility throughout the community, meaning that security is a constant focus.  

Headless/Decoupled Drupal 

Is there going to be any movement toward more robust headless support and non-web content?

Gabor: We know there’s a huge interest in headless and non-web content with things like chatbots and IoT devices right now. While there aren’t currently any set plans to expand into more decoupled features, the push for change and innovation will be driven by the community. Anyone interested in advancing the current decoupled Drupal capabilities should submit their thoughts in Dries’ 2020 Drupal Product Survey, which is used to inform the strategic roadmap of Drupal’s future. 

Angie: Drupal 9 will still have all of the diverse options around traditional, partially decoupled and fully decoupled Drupal. For anyone looking for more support for their decoupled modules and content, there are tons of great contributed modules dedicated to decoupled and headless support. 

The Future of Drupal   

Will Drupal 9 include more “no/low code” features and features for non-developers?

Gabor: Definitely. Making Drupal more intuitive for all users is a big priority. There’s the Automated Updates Initiative in the works that began during Drupal 8. Funding for the second phase is being collected right now. That would help a lot of organizations with their site upkeep and maintenance without requiring a lot of dev resources.

Angie:  We’ve also got the new front-end theme, Olivero under development, that’s optimized for accessibility and tailored to front-end experiences. It’s made for people like marketers, site designers and content editors with a huge focus on responsiveness. 

Beyond core, users who want an easier experience on the front end should check out Acquia Cohesion, a low-code site building tool that lets people create new sites really quickly and easily. 

What sets Drupal 9 apart from other enterprise CMS platforms? 

Gabor: It’s the best and most modern version of Drupal, which has long been a CMS that offers the most variety, flexibility and freedom. Drupal's foundation was always in structured data which naturally caters itself to today's needs of multichannel interactions. Also Drupal has one of the biggest open source communities on the planet. There are thousands of people and over a thousand companies working on it to add more features, to improve security and to create new extensions.

Plus, those open source roots mean that companies that choose Drupal aren’t limited or trapped if one proprietary software company suddenly decides to switch vendors. They always have the option to move to another provider.  

Angie: Drupal is amazing because it’s always on the cutting edge. There’s no waiting around for one company to catch up with the digital roadmap. For example, a few years back when Pinterest had just come out and was becoming popular, Drupal had a plug-in for it in just two days! We have a community of thousands of developers that can embrace change right away as these big developments happen and I think that’s a big advantage when it comes to web experience. 


Drupal 9 marks another huge milestone in the world of web content management and digital experience. As you prepare for Drupal 9’s release, we’ve got the Ultimate Guide to Drupal 9 to help guide you on this exciting journey.  

Jun 08 2020
Jun 08

While working on making a module compatible with Drupal 9 I found that the module was using an obsolete function that became a new service. It was something like this:

 * My plugin.
 * @SearchPlugin(
 *   id = "my_plugin",
 *   title = @Translation("My plugin")
 * )
class MyPluginSearch extends SearchPluginBase implements AccessibleInterface, SearchIndexingInterface {

   * {@inheritdoc}
  public static function create(
    ContainerInterface $container,
    array $configuration,
  ) {
    return new static(

  /** ... **/
  public function indexClear() {

The function search_index_clear is now part of the new search.index service that was added on Drupal 8.8. In order to keep this working on Drupal 8.8+ and Drupal 9 we need to inject the service in the create function. But if we do this unconditionally, we will get an error in Drupal 8.7 because that service was added on 8.8. What to do then?

Fortunately years ago I read an article that addressed a similar need. It talked about how to safely extends Drupal 8 plugin classes without fear of constructor changes. In my case I didn't want to change the constructor to keep it compatible with Drupal 8.7 and below. At the same time, I wanted to inject the new service to use it in Drupal 8.8+ and Drupal 9. I just modified a bit my code to something like this:

 * My plugin.
 * @SearchPlugin(
 *   id = "my_plugin",
 *   title = @Translation("My plugin")
 * )
class MyPluginSearch extends SearchPluginBase implements AccessibleInterface, SearchIndexingInterface {

  /** ... */
  protected $searchIndex;

   * {@inheritdoc}
  public static function create(
    ContainerInterface $container,
    array $configuration,
  ) {
    $instance =  new static(

    // Only inject the service in Drupal 8.8 or newer.
    if (floatval(\Drupal::VERSION) >= 8.8) {
      $instance->searchIndex = $container->get('search.index');

    return $instance;

  /** ... **/
  public function indexClear() {
    if (floatval(\Drupal::VERSION) >= 8.8) {
    else {

And that's it, Drupal 8.8 and newer will take advantage of the new service while we keep this compatible with Drupal 8.7. This will give users more time to upgrade to Drupal 8.8+ or Drupal 9.


About Drupal Sun

Drupal Sun is an Evolving Web project. It allows you to:

  • Do full-text search on all the articles in Drupal Planet (thanks to Apache Solr)
  • Facet based on tags, author, or feed
  • Flip through articles quickly (with j/k or arrow keys) to find what you're interested in
  • View the entire article text inline, or in the context of the site where it was created

See the blog post at Evolving Web

Evolving Web