Upgrade Your Drupal Skills

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

See Advanced Courses NAH, I know Enough
Aug 04 2021
Aug 04

Drupal 8 will reach its end-of-life on November 2, 2021, before the release of Drupal 9.3.0, due to Symfony 3's end-of-life. If you are Using Drupal 8, you must upgrade to Drupal 9.2 to keep your site secure. 

What this means: that all of your contributed modules and custom code need to be Drupal 9 compatible in order for you to make the update. While most of your code from Drupal 8 will still work, functions, classes, and methods that have been deprecated must be updated. For more information, here's the Drupal deprecation policy

Fortunately, the most common deprecations can be updated automatically via Drupal.org's "project update bot" or by using Drupal Rector, a tool that's designed to help automate Drupal code updates. 

Status of the most common code deprecations, as compiled by AcquiaImage: Status of the most common code deprecations, as compiled by Acquia

These automated tools can correct a majority of PHP code issues associated with the upgrade to Drupal 9. 

While most of the information to date about using Drupal Rector has been written from a developer perspective, in this post, we'll put on our project (or product) manager hats and see what it means for your project. 

First, let's set a common scenario:

  • As a project manager, you are responsible for scheduling maintenance and upgrades to your portfolio of Drupal sites and applications
  • Drupal 8 end-of-life is set for 2 November 2021
  • Moving to Drupal 9 compatibility as soon as possible guarantees the best return on your investment in the platform

With these factors in mind, what does Rector mean for your project? Let's take a look:

  • Rector is a set of tools for automatically updating the PHP code that runs your Drupal site, and is specifically targeted at Drupal 9 compatibility
  • Your development or support team can use Drupal Rector to help prepare your site for Drupal 9 (and, as of this writing, Drupal 10!)
  • Your team can contribute to the health and stability of the Drupal project by contributing to Drupal Rector

What might a project plan look like? First, look at the resources you have. If you have developers, they can take one or more of the following steps:

  • Create new Rector rules for use by all Drupal developers
  • Use Drupal Check or Upgrade Status to get a list of deprecations in your current code
  • Use Drupal Rector to apply updates to your custom code
    • Drupal Rector can generate code updates for your custom project code, saving developer time. While not all issues can be fixed automatically, more than half of modules tested can be fixed simply with Rector

At Palantir, we have focused on Step 1 in order to enable our Managed Support team to perform Steps 2 and 3. We work in Kanban sprints with a small team, and we have seen measurable progress in as little as a week.

Taking such a proactive approach as a project manager is a great way to ensure continued project success. As Drupal 8 will likely no longer receive community support after Q4 2021, taking proactive steps to support Drupal 9 now will save your organization time and money in the future. It is also a great opportunity to contribute to the Drupal project and get organizational credit for doing so.

Photo credit: Carl Heyerdahl on Unsplash

Aug 04 2021
Aug 04

This month, we spoke with:

  • Discover Drupal Initiative, by Angie Sabin
  • Drupal Community Working Group, by Mike Anello
  • Drupal Swag Shop Working Group, by Will Huggins
  • Contribution Mentoring, by Rachel Lawson
  • Automated Updates Initiative, by Tim Lehnen
  • Local Drupal Associations, by Leslie Glynn

Each of these groups represents ways to contribute to the Drupal project. How can you help?

Discover Drupal Initiative, by Angie Sabin

What have been your priorities in the last three months?

The Discover Drupal classes just started in July. The past three months included getting students onboarded making sure they received the proper equipment and Drupalize.me account. We also set up the Slack channel for students and mentors and onboarded all of the mentors.

And what has been your greatest success in the last three months?

We are thrilled that we have 23 mentors from around the globe! This ensures that no matter the time of day, someone is always available to help our students with any questions they may have.

What has been your greatest challenge in the last three months?

Making sure that all of the equipment was functional and shipped to the right places in time for class. A HUGE thank you to our volunteer, Megh Plunkett at Lullabot for configuring all of the laptops and getting them shipped to the students on time.

Do you have a "call to action" you want to make to the Drupal Community?

We still have room for sponsors for this year! Sponsorship helps cover costs such as paying to bring our students to DrupalCon 2022 and the cost of student training. Our sponsors will have direct access to the students for recruitment toward the end of the program year.

Drupal Community Working Group, by Mike Anello

What have been your priorities in the last three months?

We participated in an episode of Talking Drupal (https://talkingdrupal.com/302), we have started an "Open Source Community Health Discussions" group with other open source communities (having monthly calls), we have been on-boarding a new member of the Conflict Resolution Team.

And what has been your greatest success in the last three months?

(Hoping this is published after August 3) We have been working with the Community Health Team, the Drupal Association, and the Event Organizers Working Group on best practices (including a playbook) for accessibility at Drupal events.

What has been your greatest challenge in the last three months?

The mediation tasks of the conflict resolution team.

Do you have a "call to action" you want to make to the Drupal Community?

Nudges! https://www.drupal.org/node/3193832

Drupal Swag Shop Working Group, by Will Huggins

What have been your priorities in the last three months?

Following a successful DrupalCon North America in April we have been working on reviewing the products that sold best (stickers, T-shirts and Hoodies) so we can prepare for DrupalCon Europe in October.

And what has been your greatest success in the last three months?

Generating over $300 for Drupal Association. It may not be huge but it is totally incremental revenue and also helps to promote Drupal (I often get asked 'so what is Drupal?' when I am wearing my swag).

What has been your greatest challenge in the last three months?

As with all community-run initiatives, finding the time to focus on growing the swag shop is a challenge and we are always on the lookout for more volunteers. With more help, we want to focus on our next biggest challenge, which is the marketing and promotion of the swag shop.

Do you have a "call to action" you want to make to the Drupal Community?

The Drupal Swag Shop is a great way of contributing to Drupal for 'non developers' - the skills we need in the working group are marketing, project management, and design, so if you want to contribute to our brilliant community, but are not sure how... get in touch!

Contribution Mentoring, by Rachel Lawson

What have been your priorities in the last three months?

Preparing for DrupalCon Europe, by creating and organizing the first-ever Drupal Contributor Mentor Summit (https://www.drupal.org/community/events/contribution-mentor-summit-2021-...).
The Mentor Summit will allow us to invite those already contributing to Drupal to learn about how they can pass on their skills to an even wider group of people so we can grow our contribution community and make a better Drupal.

And what has been your greatest success in the last three months?

Getting the Mentor Summit organized and in the calendar before DrupalCon Europe.

What has been your greatest challenge in the last three months?

Lots of people with large workloads because lots of clients want Drupal projects means little time to work on things like the Mentor Summit! While it is good that Drupal skills are in high demand, it’s important to also advocate for and emphasize the need to continue to grow Drupal as the premier CMS and supportive open source community.

Do you have a "call to action" you want to make to the Drupal Community?

If you are a contributor to the Drupal Project, as a developer, designer, documenter, project manager or marketer, please put the 17th September aside in your diary so you can join us virtually at the Contributor Mentor Summit!
Please register/login and "join the group" at https://drupalcontributions.opensocial.site/group/contribution-mentor-summit-2021/about and we will keep you up to date via email as the schedule is announced at the end of August.

Automatic Updates Initiative, Tim Lehnen

What have been your priorities in the last three months?

The PHP implementation of the TUF client - PHPTUF - is essentially complete, or near enough to it. This means that the team is shifting work to the automatic updates contrib module to actual integrate this library into Drupal's Automatic Update system prototype.

Major progress has been made on actually executing the composer-based updates in an automated way as well, with work from @effulgentsia @traviscarden @tedbow and others. More recently we've been trying to complete the test coverage of this critical component of the system.

Finally, the Drupal Association has been reviewing responses to our request for proposals to help implement the server side of the TUF specification, so that Drupal.org can sign and maintain the packages we deliver.

And what has been your greatest success in the last three months?

Effective completion of the PHPTUF library is a huge milestone, and the ability to focus fire on the problem of ensuring that automated composer updating works well and has good test coverage is a crucial next step.

What has been your greatest challenge in the last three months?

We've really had two major challenges:

  1. Though we are attempting to expand our resources via the Drupal Association RFP for an external vendor to help us build out the TUF server-side signing component - it has been difficult to find a partner - as the whole Drupal ecosystem is extremely busy in this period. (A good thing, in the end!)
  2. We have to make a decision about whether we are willing to release an Alpha version, even in contrib, without the signing in place, in order to validate the user experience, workflows and do real user testing of the system - rather than block that on the signing being complete.

Do you have a "call to action" you want to make to the Drupal Community?

You can chime in on the issue about releasing an alpha version without package signing here: #3220205: Proposal: As pathway to Drupal core use new 2.x.x branch for Composer Based Updates

Local Drupal Associations, by Leslie Glynn

What have been your priorities in the last three months?

The local associations have been working with the DrupalCon Europe 2021 team over the past few months to identify camps that would be willing to host their camp online in conjunction with DrupalCon Europe 4-7 OCTOBER 2021.

And what has been your greatest success in the last three months?

DrupalCon Europe 2021 announced that it is collaborating with several Drupal Camps to create a unique "Drupal Eurovision" experience. The goal is to create an experience to continue Drupal’s 20th birthday celebration.

The following camps and communities have agreed to have their event at DrupalCon Europe:

  • Drupaljam, The Netherlands
  • Drupal Mountain Camp Switzerland
  • Drupal Germany
  • DrupalCamp Kyiv
  • DrupalCamp Finland
  • Drupalcamp Belgium - Ghent 2021

Camps have an opportunity to have their own virtual space to run their own virtual event as part of DrupalCon Europe 2021.

A Drupal Slack channel was created for discussion at #dceur2021-camps or direct link: https://drupal.slack.com/archives/C02067Z7ESH

What has been your greatest challenge in the last three months?

In general Drupal Camps around the world are being impacted by dwindling participation at virtual events.

The global coronavirus situation continues to make it difficult for Local Associations around the world to plan events for the coming year. While things were looking better for a bit, countries around the globe are once again seeing increasing rates of infection. Global travel also continues to be restricted.

Do you have a "call to action" you want to make to the Drupal Community?

The DrupalCon Europe team and the Local Associations that will be holding their camps during the event have been working hard to create an engaging virtual event. Help them out by purchasing a ticket to the combined event. One ticket gives you access to DrupalCon plus all the local camps being held online during DrupalCon Europe 2021 on 4-7 OCTOBER 2021. Register at https://events.drupal.org/europe2021/registration-information

Aug 04 2021
Aug 04

It isn’t enough for the architecture of our web page to be well-designed – the appearance is also important! Drupal comes to our aid when it comes to building websites quickly. Can we count on similar help when creating a modern look? We'll tell you a bit about the extensive library called Bootstrap, which offers a wide range of ready-made components.


The year was 2011, when a group of Twitter programmers, headed by Mark Otto and Jacob Thornton, introduced the world to an extraordinary tool that was to revolutionize in the future the process of creating a graphical interface – not only for websites but also for applications. They named it Bootstrap and decided to release it under one of the most liberal open source licenses – MIT. Currently, the latest version of Bootstrap is 5.1.

Bootstrap is an open-source tool that provides developers with a wide range of ready-made components

Source: Bootstrap

Bootstrap is a library of cascading style sheets (CSS), which uses ready-made HTML and JavaScript solutions. It provides predefined styles for the commonly used elements on web pages, such as text, headings, buttons, navigations, tables, links, and more. It also ensures that the elements look good in the mobile version. Everything is based on a grid structure made of up to 12 columns. The thing that makes Bootstrap so popular – in addition to the obvious benefit of having hundreds of predefined classes, so we don't have to worry about spacing and struggle with the composition of our divs – is its documentation. It's impossible to get lost in it. In terms of topics, it covers styling support and its variants for all elements.

Drupal and Bootstrap - best friends

The Drupal community didn't pass by indifferently such a widely used tool and created two themes that allow integrating the Bootstrap library with Drupal.

Bootstrap theme

The basic theme that allows you to use the power of Bootstrap in Drupal can be downloaded from the Drupal.org page. It's worth mentioning, however, that it currently supports the library version 3, but is compatible with all Drupal versions from 7 and up.

Installing the theme can be done using the command line in composer:

require 'drupal/bootstrap:^3.23'

or the admin panel under the path /admin/theme/install.

Installation of the Bootstrap theme in the admin panel in Drupal


The next step is enabling the theme in the Appearance section of the admin panel or using the drush command.

theme:enable bootstrap

 (if we just want to enable the theme)

config-set system.theme default bootstrap

(if we want to enable the theme and set it as default)

Enabling Bootstrap skin in the Appearance section


This ready-made theme has many options for global configuration of individual components that make up our page – both static (forms, tables, containers) and dynamic (modal windows and pop-ups). You just need to go deeper into the settings under /admin/appearance/settings/bootstrap. We can already notice a significant difference in the appearance of our page.

Below you'll find the comparison of my test homepage. If you use the Bartik theme, you'll get the impression that suddenly the page components are mixed up and the whole thing looks "broken", but don't worry. In most cases you just need to slightly adjust the styling of the existing elements. Go to Structure -> Block layout and assign the correct regions to the blocks. Here I present the look of the Bartik theme after it's been adjusted accordingly.

The default Bartik skin in Drupal before and after enabling the Bootstrap skin


Barrio theme

The process of installing and enabling the Barrio theme is the same as before. The main difference between Barrio and Bootstrap is the version of the library they use. For Barrio it's Bootstrap 4 or even 5 (for those who'd like to test version 5.0.2 of Bootstrap). The command to download Barrio via Composer looks like this:

require drupal/bootstrap_barrio

What we get in both cases are more ready-made templates that require further configuration and styling according to our needs, rather than a full, styled solution. They should be treated as the base themes which we'll inherit from in our sub-theme. This is also important in terms of future updates.

Creating own theme

Creating our own theme, which'll be based on the Bootstrap library version 3, 4 or 5, can be carried out in two ways:

  1. by using the starter kit available for both themes – under themes/Bootstrap/starterkits and themes/bootstrap_barrio/subtheme (the fastest and easiest option) respectively.
  2. using the starter kit available with both themes, but without using CDN (Content Delivery Network) (advanced option, requires a CSS preprocessor, e.g. SASS, to compile styles, and the Bootstrap library must be downloaded locally).

The first option only requires us to copy a ready set of files to a new folder in the themes path and rename the files from THEMENAME or bootstrap_barrio_subtheme to the machine name of our theme. You should also check the .theme, info.yml, schema.yml, color/color.inc and js/global.js files and make similar changes within them as well. Thanks to CDN, the Bootstrap library doesn't have to be downloaded locally.

From now on, we can start working on the appearance of our page, define the typography or colour scheme. In the theme settings, you'll find many options to modify the original configuration without having to modify the css or sass files. However, in most cases it turns out to be not enough and it's necessary to overwrite files and create templates in the .twig format.

Droopler – a high-end Bootstrap template

As a free Drupal distribution, Droopler was created with the idea of fast and comprehensive website creation in mind. Therefore, it contains a set of ready-made components and functionalities that most pages use and – thanks to its modular structure – has a highly configurable SCSS preprocessor. To perform the rest of our activities, you can install Droopler in the way described on the linked page.

Ready style files for all components and page structure elements in the SCSS folder

Bootstrap is an integral part of Droopler. The Droopler theme uses Barrio – but unlike Barrio it provides a ready-made theme with styles, not just a template. In the scss folder, we can find ready-made style files for all components (mainly the available paragraph types, forms, etc.) and page structure elements (headers, footer, etc.).

Droopler subtheme – how to use it?

The Droopler theme also has a starter kit for creating your own sub-theme named STARTERKIT_CSS and STARTERKIT_SCSS, where we can easily modify the predefined variables. Let's check what it looks like when you want to use SCSS:

Droopler's sub-theme file structure with _base_theme_overrides.scss and _bootstrap_overrides.scss files


The style.css file combines the entire SCSS code from the main droopler_theme and our theme (files located in scss/config). Print.scss also combines the entire SCSS code for printing both themes. In the libraries subfolder, we can put our additional SCSS files, which we then have to add via @import in the style.scss file. When adding them, it's worth keeping the division into components and layout – as in the base theme.

You can make any changes to the settings of the Bootstrap library itself or the droopler_bootstrap base theme in the configuration files:

  • _base_theme_overrides.scss
  • _bootstrap_overrides.scss.

In the case of both files, we have at our disposal a quick guide covering the available variable modification options in the form of an extensive comment. All we need to do is uncomment the selected variable and substitute it with our value. The complete list of variables used in Bootstrap that we can overwrite can be found in the library's _variables.scss file. As it's downloaded automatically by defining the repository in the droopler_theme theme's package.json file, it can be found in the node_modules/bootstrap folder.

Suppose we want to change the colour of the submenu border that appears under the $dropdown-border-color variable in Bootstrap. In the base_theme_overrides file, we define a new colour, for example $color-example-1. Then, in the bootstrap_overrides file, we uncomment line 34, where the value for the border colour is defined. We substitute it with our newly created variable there.

Changing the color of the sub-menu border


You must run the compiler for the changes to become visible. In the case of Droopler, the developers also took care of it. There is a ready-made gulpfile.js file in the theme package. We just need to run the gulp watch command in the theme's directory (both droopler_theme and droopler_subtheme), so that any changes we make to scss, js or other source files are included and compiled automatically. The effect? Let's find out!

New color of the sub-menu border in Droopler


Our border is now pink. We can do the same for all variables.


Bootstrap is a powerful tool connecting graphic designers and developers. On the one hand, it allows designers to familiarize themselves with the website's architecture and the specialized terminology (e.g. a 2 column-wide sidebar instead of a narrow window that is glued to the edge of the page), on the other – it saves time of the developers who only need to use the correct class to transform a regular link into a button.

Integrating Drupal with Bootstrap may seem relatively complicated, but remember that the available Bootstrap and Barrio themes are only templates, and in the end we'll still have to assign appropriate classes for all types of links we use. In Droopler, this part is already taken care of – we only need to change the block layout or modify the existing Twig templates. We can create and implement a new colour scheme in a few moments by editing a single file – the effect is guaranteed.

Aug 03 2021
Aug 03


Credits & Thanks

Thank you to:

About the Search 404 Module

When a website visitor goes to a URL that doesn’t exist, the Search 404 module shows them alternative pages that might contain the content they are seeking. The module performs a search using the keywords in the missing URL to select appropriate content to show to the lost visitor.

For example, if a visitor goes to https://yourDrupal8site.dev/animals/cute-cats (which I assume doesn’t exist on your website) and finds nothing, then this module will search for “animals cute cats” and display those search results below the “404 Page Not Found” error.

This tweak to the 404 page helps your SEO by making sure that old or misspelled links to your site will still resolve to relevant content. It helps visitors find your content, and you want visitors to find the great content on your site. You especially want Google to be able to find related content if the indexed page has been removed.

Install and Enable the Search 404 Module

  1. Install the Search 404 module on your server. (Go here for more instructions on installing modules.)
  2. Go to the Extend page: Click Manage > Extend (Coffee: “extend”) or visit https://yourDrupal8site.dev/admin/modules in your browser.

    drupal 404 search module installation

  3. Select the checkbox next to “Search 404” and click the Install button at the bottom of the page.

There are no separate permissions required for the Search 404 module.

Configure the Search 404 module

  1. Go to the Search 404 module admin page by clicking Manage > Configuration > Search and metadata > Search 404 Settings (Coffee: “search404”) or visit https://yourDrupal8site.dev/admin/config/search/search404 in your browser.

    drupal 404 search module configuration screen

  2. Make sure the following check-boxes are selected:
    • “Jump directly to the search result when there is only one result”.
    • “Use a 301 Redirect instead of 302 Redirect”.
    • “Use auto-detection of keywords from search engine referrer”.
  3. Although there are many options on this page, you can leave most of them as you find them.
  4. Click the Save configuration button.

Now, try visiting a page on your site that you know does not exist, such as https://yourDrupal8site.dev/animals/cute-cats. You should see "Page not found" with the results of a search underneath it.

drupal 404 search module results page


Did you like this walkthrough? Please tell your friends about it!

twiter social icon linkedin social icon pinterest social icon

Aug 03 2021
Aug 03

Lynette has been part of the Drupal community since Drupalcon Brussels in 2006. She comes from a technical support background, from front-line to developer liaison, giving her a strong understanding of the user experience. She took the next step by writing the majority of Drupal's Building Blocks, focused on some of the most popular Drupal modules at the time. From there, she moved on to working as a professional technical writer, spending seven years at Acquia, working with nearly every product offering. As a writer, her mantra is "Make your documentation so good your users never need to call you."

Lynette lives in San Jose, California where she is a knitter, occasionally a brewer, a newly-minted 3D printing enthusiast, and has too many other hobbies. She also homeschools her two children, and has three house cats, two porch cats, and two rabbits.

Aug 03 2021
Aug 03

In today’s modern times, the best way to connect with each other is through technology. Talking about connection, the very first thing which comes to our mind is connecting to our family and friends. The necessity of technology can be well understood if you stay away from family or friends and want to connect them instantly. So, by talking about the basic ideology of technology, what I wanted to portray is the effect of digital transformation in our lives. Now when it comes to communicating with the government, what is the most convenient way to do so? Yes, you got it right. It’s through technology again. As we know that the government’s main objective is to meet the needs of its citizens. Therefore, the best way to reach out to the citizens and provide them the necessary help is through digital services. In this article, I will tell you about the reasons why Drupal is the first choice of government when it comes to providing world class digital services. 

Significance of digital transformation for a government

Illustration with a circle and various cylindrical shaped objects describing the importance of digital transformation in government

When we talk about digital transformation, it's not only about new technologies but it comprises a vast subject matter like mindset, culture, work process and organizational structure. These are the areas which need to be given emphasis along with the digital technology adaptation. 

This section will provide you with information about what exact digital technologies the government adopts to deliver services more efficiently and effectively to its citizens. You will also get an overview of how digital transformation has brought a positive impact in the overall digital services leading to better outcomes for its people. 

Facilitating good customer experience

Today every citizen looks for public services to be customized and approachable as the services like that of the private sector. So, the government has to plan for some ways to deal with this expectation of the people. There is a need to create a customer centric mindset where they look for improving service quality, strengthen the level of public trust in the government and promote transparent interaction leading to better customer experience. 

Social media and mobile services like applications and SMS that are replacing the traditional channels, enable users to get access to the government services they require in the most suitable way. Such platforms can be a good medium of communication between people and the government, where everyone can report their concerns and also provide the necessary feedback to the government. 

When it comes to providing quality digital service, we can’t afford to forget about artificial intelligence (AI) that provides excellent services to its customers using chatbots within the government websites to complete necessary transactions. It helps in improving policy development, enhancing administrative efficiency, examining complex datasets and delivering new and improved services to its users. 

One more benefit which the government derives from technology is the facility of detecting geographical location that helps the users to choose their government services according to their preferred location. With this special feature in the government websites, citizens can save a lot of time and get access to the nearby government services without any concern. 

Enhancing the return on public investment

Observing an uncertain growth and rising demand in the environment, it is important for the government to find sustainable solutions to finance public services and infrastructure. This is when the government needs to adopt digital technologies which can help in exploring new models for providing services and improving the management of resources in a smart and efficient way. Predictive analytics and text mining are some of the smart managing resources procedures that help in predicting problems and facilitating preventive action like for example recognising taxpayers at the risk of non-payment.   

Maintaining citizen security

Everything comes with both pros and cons. Technology can be both a hindrance and a solution too. What I meant by this is to take your attention towards the cyber security issues. There are a lot of cyber attacks taking place all over the world. So, it is the government’s responsibility to safeguard the citizens from such threats, helping them live fearlessly without any doubt related to digital security. There are information security management systems that are introduced by the government to safeguard all the important data. Cloud computing is also a good process of increasing the computing capacity and facilitating safe payment platforms for citizen transactions. 

Improving future workforce

A country’s workforce plays an important role in the economic growth and development. As a result the government should focus on building capacities and skills in their employees to achieve better outcomes. A responsive environment is beneficial for attracting enthusiastic workers who can actively take up lead roles, contributing to the evolution of the society. The employees can be encouraged to concentrate on stimulating and value adding tasks. This is made possible by deploying intelligent automation tools to reduce the manual and repetitive work that can complement human workers. Therefore, it helps in enhancing productivity and satisfaction, further helping in improving the citizens' experience with government services. 

Upgrading infrastructure

Government has observed an increasing need of building and upgrading infrastructure, especially in the urban areas due to huge population growth. In situations like this, a new infrastructure can be beneficial to support the growing population and increased economic activity. A smart infrastructure can be built by adopting digital technology that can provide digital literacy among citizens. Some of the examples are software, smart devices and sensors that can enable secure access to government services. 

Provides better communication in emergency situations

The government websites can be a great help at the time of emergency since it is the first line of defence in such hard times that can provide the necessary support to the citizens. By building such functional websites with easy navigation, government officials can connect to the people in need and make sure that everyone is well informed about the important updates and announcements.   

Reports and surveys tell the same story

The fact that the technology revolution is offering new opportunities to the government is also agreed by some of the well known company’s reports and surveys. Let us take a look at their opinion.


Microsoft, in a study, shares four key focus areas that act as the main drivers for a digital transformation roadmap. With these pillars, Microsoft is trying to help the government in accomplishing the much needed digital transformation that can provide the best services to its citizens. 

Illustration with a circle and four squares describing the four key areas to focus on to achieve digital transformation in government

Citizen engagement

Government is able to better engage with the citizens through connected mobile services which helps in understanding citizens' needs and necessities leading to good customer satisfaction. This helps the government in enacting mobile citizen services which leads to better communication with the citizens on a very secured and reliable platform.

The Microsoft cloud platform helps in enhancing productivity, reducing management costs and protecting government data from any cyber attacks. 

Government workers empowerment

The government workers are facilitated with the necessary digital technologies, for example, Microsoft cloud platform that helps in proper communication with the employees and work in a much efficient way. The employee tasks get easier like gaining access to real-time case information, file reports and developing effective strategies together as a team maintaining the required security and compliance.

Government operations optimization

The cloud services and solutions help in optimizing the government operations, promoting the cost and operating efficiencies. Microsoft aims at delivering an integrated, flexible and a cloud and productivity solution for government which is trustworthy, also that helps in addressing all the main transformation challenges faced by the agencies in providing quality services to citizens.   

Service transformation

With the help of digital transformation, an agency gains access to huge quantities of data from processes and also the Internet of Things to provide better analysis, insights and better decision making that can enhance operations and provide new service opportunities. Now the data can grow in value since the government takes proper advantage of self-service data analysis tools, enabling everyone to work virtually with any type of data in new and convenient ways. 


Illustration with two regular pentagons describing the digital survey conducted by Deloitte to analyze the digital maturity and the COVID 19 impact of government's digital transformation

A Deloitte Digital Global Survey, The Journey to Government’s Digital Transformation explores the digital technology’s capacity to crucially transform the manner in which the public sector operates and delivers services to customers and present strategies for government leaders to measure the rate of their progress. It includes responses by more than 1,200 government officials from over 70 countries. This global survey also includes interviews with more130 government leaders and digital experts to get insight to the practices and policies influencing organizations’ “digital maturity.”

While surveying the 1,200 government officials from over 70 countries, they revealed that digital technologies are having a significant impact on the government. Among the respondents, three-fourths expressed that digital technologies are disrupting the public sector. It was also found that governments are at different stages in their journey towards digital transformation. A very small percentage can be considered as ‘maturing’ but the majority is still under the developing stage. 30 percent of the organizations surveyed confirmed that they are ahead of the public sector peers regarding digital capabilities; 70 percent said that they are behind the private sector. The two primary drivers of digital transformation i.e. cost-budget pressures and citizen demands are far away, accounting for 75 percent responses, although only 14 percent are moved by government directives.  

Deloitte surveyed 800 government officials over eight countries to analyze COVID-19’s impact on government’s digital transformation around the world. About three-fourths of respondents expressed that COVID-19 has accelerated their government’s digital transformation, although 80 percent said that there wasn’t much advancement in their organization’s digital transformation. 

The government agencies before the pandemic were majorly “doing digital” i.e. utilizing digital technologies to improve their capacities, yet majorly depending on legacy operating models. Governments were encouraged to enter into the next level of digital transformation due to COVID 19. Therefore, 77 percent of the government agencies confirmed that taking such initiatives due to this pandemic has brought a positive impact upon their organizations. Although they are “doing digital”, it's time to “be digital”. On reaching that stage of completely “being digital”, companies will be able to use some impactful technologies like cyber, AI and cloud to upgrade the human experience and entirely transform back-office operations and service delivery. Below are the stages of an organization’s digital transformation. 

Graphical representation with a curve depicting digital transformation of governmentSource: Deloitte

The ultimate goal of an organization’s digital transformation is to reach the stage of “being digital” as described in the above diagram. This stage consists of reinventing the strategies of meeting citizens demands and expectations leading to improved customer satisfaction by the government. By following the necessary measures, every government should opt to reach its final goal and utilize the optimum benefits of digital transformation. To know more on transformational strategies brought forth by Covid-19, read about digital readiness, how the pandemic enabled businesses to reimagine their operations, and the pandemic-driven digital transformation strategies.

CFI Group

Illustration with a circle and four squares describing the report on government websites conducted by CFI Group's 2020 Government websites report

According to CFI Group's 2020 Government Websites report, the government websites have played a major role in providing high quality, reliable information to the citizens during the hard times of COVID 19. According to the current data, the federal government websites are on the way to obtaining traffic volume of about 18 billion visits, representing nearly about a 80% increase over last year. The customer satisfaction index(CSI) of federal government websites is 73 as counted on a 0-100 scale for the fourth year in a row. The federal government websites are a reliable and cost-effective way to communicate with the citizens. The 2020 survey provides the latest update on citizen satisfaction i.e there is an increase in citizen satisfaction due to the availability of mobile access trends and easy chat facility. 

Using Drupal for digital transformation of government

Illustration with multiple hexagons describing the features of Drupal

Why choose Drupal for government websites? Drupal CMS tends to transform the web development scenario of the government websites dramatically. It provides excellent web services that help its users experience a dynamic digital transformation. Many prominent Drupal government websites are built with the help of the following significant Drupal features.

Open source

The Drupal project is completely open-source software. Everyone is free to download, use, work on and also share it with others.  It is based on principles like innovation, collaboration and globalism. It can be distributed under the terms of the GNU General Public License (GPL). There are no licensing fees for Drupal.

The Drupal community is ever ready to support its users by answering their questions and concerns. So, if you have any question, somebody will certainly answer it, since it’s a worldwide platform.

Learn more about open source here:

Content Workflow

The in-built tools in Drupal helps in content creation, workflow and publishing, making it easy for the content creators to efficiently do their work. Permission and authentication help in managing editorial workflows effectively. The facility of previews help in showing how the content will look on a device before the user approves and publishes the content. Drupal helps you in creating content with a WYSIWYG editor. It allows you to quickly track all revisions and changes, if you need to maintain a history of content changes. You can view the complete stages of your content, from creating, reviewing and publishing, enabling you to manage your roles and actions, automatically. The unique feature that Drupal provides is the ability to create a structured content i.e. describe content elements, tag content based on any attributes, form convenient taxonomy for content so that it can be looked, found, used and reused if necessary in ways that increases the customers satisfaction. 

Drupal helps in creating the convenient content architecture using the Admin Interface or even do it programatically. There is an availability of unique mode tools and views, customizable menus that can create a comfortable user experience, also creating ways to content across numerous devices.  

Read about how layout builder and paragraphs module enhance content workflow in Drupal.


Drupal CMS is fully secure and it safeguards the websites from any types of serious internet vulnerabilities. It is designed keeping robust security in mind. There is a dedicated staff team of security specialists, along with a huge professional service provider ecosystem as security remains one of the top priorities of this free and open platform. Most of the security issues are handled by Drupal’s well built coding standards and strict code review procedure.

According to the 2020 edition of the Acunetix, Web Application Vulnerability Report, Drupal was found to be the most secure CMS in the open source CMS market.

Illustration with a circle describing the security analysis conducted by 2020 edition of the Acunetix, Web Accessibility and Vulnerability reportSource: Acunetix

Performance and scalability

When it comes to performance, Drupal’s built-in performance features, combined with a modern CDN provider, perform well under the pressure of supercharged databases, load-balancing and advanced caching. Drupal’s scalability refers to the fact that it can manage the largest high traffic sites in the world. To know more, read about Drupal’s performance optimisation offerings and how it scales with your needs to govern high web traffic.


Drupal's automated language translation helps in reaching different audiences with localized content. It builds customized sites in any language to complex multilingual web applications. Core modules in Drupal facilitate complete translation of every part of a site, content types and their specific fields, users, menus, taxonomy, blocks, comments and contact forms. It also permits the identification of preferred language in accordance with the user's IP address, URL, browser settings, session and more. Read more about Drupal’s multilingual capabilities here.


Drupal has a special feature of building websites accessible by people with disabilities. It ensures that all its features conform with the World Wide Web Consortium guidelines (W3C) guidelines: WCAG 2.0 and ATAG 2.0. This feature proves to be very prominent for the government sites as it successfully achieves one of the objectives to serve all its citizens regardless of any discrimination. 

Learn more about accessibility here:


Drupal builds an exclusive, personalized profile for each visitor, starting from using geolocation, browser history, behavior taxonomies and device type. It helps in gaining an overall customized experience, enabling you to track and report with A/B and multivariate testing, increasing ROI through target marketing and also provide segmentation of visitors over devices with an aim on the significant user identity for your business goals. 
Learn more about personalisation here:


Drupal has unique SEO tools that can improve your site’s visibility. The tools or modules are discussed below:

To know more, read this definitive guide to Drupal SEO in 2021.

Multi-site support

Drupal helps in managing multiple sites across your organization, geographies, brands and campaigns on a single platform that allows easy, fast website creation and deployment. Read this complete guide on Drupal multisite to know more.

Marketing automation

By using tools and modules, in recent versions, Drupal helps in easy integration with the automation platforms that can collect customer demographics, helping in converting potential leads within the most suitable time. Learn more about how marketing automation can be leveraged with Drupal here.

Mobile first approach and mobile apps

With Drupal you can build responsive websites and create web applications that can provide optimum visitor experiences. It helps in providing responsive design best practices and guarantee your users get a perfect content experience each time, on every device. To know more, read about mobile-first design approach and mobile apps like that of Flutter-powered delivered by Drupal.

Integration with third party tools

Drupal helps in smooth integration with a vast ecosystem of digital marketing technology and other business applications, so that you can use the finest set of tools today, and also flex with new tools tomorrow. Drupal’s API-first focus refers to connecting content to other websites and applications, building content more powerful. 

You can specify Drupal exactly what you want and create limitless solutions which support your business needs. 

Strong stack foundation

Drupal lives on the latest LAMP technology stack: Linux, Apache, MySQL and PHP that meet the needs of flexible, fast-moving agile enterprises and brands creating next generation digital platforms.

Decoupled architectures

Drupal provides content flexibility that will allow an easy flow of content over websites, native apps, connected devices and are displayed on third party sites and also social networks. Since, many CMSes try to manage content in a back-end repository and move it to “front-end” templates that can serve up an experience (mostly static). Drupal allows you to decouple the back and front ends, wherever it's useful. Therefore, Drupal content exists as reusable chunks, free from presentation, ready for easy delivery to websites and apps. Content also becomes future-proof. Drupal’s presentation i.e. RESTful API and neutral content help front-end developers to come out of the restrictions, enabling them to build interactive websites and applications, according to their preferences. They are allowed to use tools like Angular, Node, Ember, Backbone, and others. With this active platform, you can attain third-party content(eg. syndicators and aggregators) and make it available to any website, app or channel. With Drupal’s content-as-a-service capability, drupal’s content can be easily consumed by other applications and websites you choose. The Drupal front-end developers can easily design content, for example, separating back-end content from front-end presentation according to their preferences.

Learn more about decoupled Drupal here:

Web Hosting

With Drupal you can choose the best hosting vendor that suits your needs, you can change hosting vendors whenever you want, and also select to host the website internally. 

Upgrades and migrations

The Drupal upgrades are considered to be very easy and convenient. The upgrade from Drupal 8 to 9, Drupal 9 being the most recent and much improved version, is very effortless, according to its makers. The developers are allowed to make the upgrade themselves with the help of Upgrade Status and Drupal Module Upgrader. This further helps you to know whether your modules and themes are competent enough for Drupal 8/9 and converting your custom code accordingly. 

Learn more about Drupal 9 upgrade here:


Drupal has plenty of modules, themes and distributions to extend the functionalities.

For example, these are some of the Drupal distributions for government:

Opigno LMS

Opigno Learning Management System (LMS) is completely open-source, 100% customizable and 100% Drupal-based. It is a fully-fledged secure LMS for any organization or industry. It is used by Governments and Government agencies, higher education and large enterprises. This is available for Drupal 8 and Drupal 9 version is said to be available towards the end of August 2021.

Dimpact WIM

WIM is a complete free reusable website model designed for local government and municipalities. With WIM every municipality can experience a great online presence; smoothly and at minimal cost. The WIM sites are considered as a cooperative initiative of the Cooperative Association Dimpact from The Netherlands. Their goal is to achieve a modern integrated public service. Please note that this distribution is only available for Drupal 7.


Using Drupal 7 core, the govCMS distribution is built along with additional software such as modules, themes, libraries, and installation profiles specific to Australian government websites. This distribution is currently available for Drupal 7, 8 and 9 versions. For Drupal 7 version, you can check Drupal.org release and the repository for download can be found on GitHub here. For Drupal 8 and 9 versions, check out the Github repository here.


deGov is the first Drupal distribution that focuses on the needs of (German) governmental organizations. It is seen using lightning media as a basis and extends it with valuable functions to meet the use cases for various scenarios:

  • Sites for governmental organizations from all levels (federal, regional, local) to publish information
  • Service-oriented E-Government portals to end the gap between citizens and your administration
  • Citizen Engagement portals to discuss and decide online
  • Open311 portals for civic issue tracking
  • Open data portals to publish and form communities around data
  • Intranet/Extranet for government employees

The Drupal 9 version of this distribution is available for download.

Drupal voor Gemeenten

DvG is the "Drupal voor Gemeenten" distribution developed particularly for Dutch municipalities. It is built around the top tasks model, putting smooth and efficient online services front and center. This is available for Drupal 7.

There are also various Drupal themes for government that come handy:


The United States Web Design System (USWDS) is a design system particularly built for the use of the Federal Government. This theme is the process to integrate the styles with Drupal. 

Government Website Template

Based on zen theme, the Government Website Template theme was efficiently modified and customized for the AO39 (administrative order no.39) Compliance. By using this foundation css theme framework (version 5.4.5), this theme provides a responsive design for the template. Additionally, it has a module helper that enhances the functionality of the template and it also adds additional blocks such as transparency seal and Philippine Standard Time(PST). 

GOV.UK Theme

The GOV.UK Design System Frontend node module is being used by this specific theme which also has Twig template files for the majority of the GOV.UK styles, components and patterns. It is completely responsive and multi-column with a mobile navigation menu. This theme shows full support to Drupal Webforms, along with client-side validation of necessary fields and identifying any error message when there is GOV.UK validation error. Also, it is compatible with Drupal 9. 

Bootstrap Rijkshuisstijl (Dutch Government Branding)

Netherland’s central government owns a standard Visual Identity which is used on every website. The central government visual branding i.e. "Rijkshuisstijl" has been further translated to the Rijkshuisstijl theme. The main features of this theme include:

  • Capable of being configured with every government agency.
  • Capable of being configured with 17 preset colour schemes.
  • Availability of responsive design and mobile first facility.
  • Digitoegankelijk compliant.
  • Bootstrap v4 is used as a design framework.
  • A living style guide is provided with a KSS node.
  • The theme is completely translated into Dutch.

The theme is compatible with Dupal 9 as well.

Bootstrap 4 GovBR SASS

The Bootstrap 4 GovBR SASS is a Barrio subtheme which simplifies integrating Bootstrap 4 SASS, GovBR visual standards, and "Barra do Governo" with Drupal. This particular subtheme overrides nearly every CSS from Drupal and replaces Bootstrap variables wherever necessary to build from the roots a new set of CSS files. It is compatible with Drupal 9.

GovBR theme

It is a responsive Bootstrap based theme along with the default identity of the Federal Government of Brazil. This theme has two requirements i.e., Bootstrap base theme and jQuery 1.9.x (jQuery Update recommended).

And, you also get really useful Drupal modules for the government. For example:

USWDS Ckeditor Integration

The USWDS library has become an essential requirement for government websites. This module majorly focuses on making a user to smoothly utilize and inject USWDS classes and components into the ckeditor without even opening the source event for a single time. The USWDS Ckeditor Integration module is compatible with Drupal 9.

GovCMS Dissemination Limiting Marker (DLM)

With regards to the paper–based information, all electronic–based information requires to be marked with a suitable protecting marketing. This particular theme provides the option to a user for setting a default Email Protective Marking, like SEC=UNOFFICIAL], appended to the end of the subject line for all outgoing emails sent using drupal_mail() on your site. 

So, these are some of the Drupal government themes, modules and distributions that help extend the features and functionalities of Drupal as you like.

Support, maintenance, hiring and partnering with digital agencies

There are a lot of Drupal agencies you can opt for. They tend to provide you with the best services possible, according to your convenience. The top 4 Drupal agencies in the global Drupal marketplace are listed below. 

Describing the top 4 Drupal agencies in the global Drupal marketplace with the help of a diagramSource: Drupal.org

Support for Emerging technologies

Drupal never steps back from utilizing the latest technologies to deliver a better user experience. Some of the examples can be the use of artificial intelligence in the form of chatbots, virtual reality, IoT and Blockchain, cognitive search and digital voice assistants like Alexa on Drupal sites. 

Therefore, the following question, “Why drupal for government” is well answered by the above features that allow the government to build very functional and secure websites for its citizens. 

Case studies 

Here are some of the case studies that tend to prove why Drupal’s the best choice when it comes to selecting the right CMS. 

Ministry of Finance, Somalia

MoF Somalia is responsible for government revenue raising, expenditure, preparing annual budgets and economic policies among other responsibilities. They were looking for a technology partner that would help them in presenting their website with a clean architecture and design to their global audience. The main goal was to restructure the website, to integrate all the new content types, along with a user-friendly navigation, also adding a custom type of publication to publish annual reports. OpenSense Labs leveraged Drupal to complete the project within 6 weeks using the agile project methodology. We successfully built a website which was a lot more user-friendly along with faceted search application features and loads in less time than before. The site became SEO friendly, with a much better architecture.  

Here is the detailed case study of the Ministry of Finance, Somalia. 

City of Boston

The City of Boston is well-known around the globe for its winning sports team, prestigious universities, New England food and rich history. It serves 4.8 million people in the Greater Boston area, supporting 23 neighborhoods. Boston, a pioneering city is famed for having the first public school, public park and subway system. The City of Boston’s website was 10 years old and was running on an outdated Content Management System which could no longer support its needs. The main aim was to build a responsive website that could meet all AA WCAG accessibility guidelines. Drupal finally built a website that dramatically enhanced the accessibility of information and services the city offers, and also marked a shift in residents’ expectations of government.  

  • The website has responsive mobile design
  • The new Boston.gov could meet all AA WCAG guidelines for accessibility and establish a 9-10th grade reading level (down from a postgraduate level)
  • Could Migrate more than 20,000 web pages and one million words to the new boston.gov
  • The website redesign could be delivered under budget
  • The new website launched 11 months after the kick-off meeting


The challenge was to opt for an open source CMS in the Amazon cloud to migrate the existing site off of a proprietary, on-premise CMS system as fast as possible without causing any service interruptions for both public visitors and content managers. NASA wanted its new website to develop a solution that could offer both a modernized display as well as provide the same user experience on both desktop browsers and mobile devices. It was important to account for live coverage events drawing even larger crowds of online visitors, as well as to scale down when the events concluded. NASA wanted it’s CMS solution to accommodate continuous integration with new services and technologies - both commercially available and custom built.

Drupal helped in reducing the complete development timeline – designing, executing and deploying the solution from development to production, also saving NASA millions of dollars in annual savings at the same time. Building with Drupal on the Amazon cloud ensures that NASA’s content was stored securely, also providing NASA the advantages of very flexible development capabilities when designing, executing and integrating new features and services. With its user-driven API’s, infinite compute scalability and storage, dynamic host provisioning, constantly developed robust new features, Drupal and AWS proved to be the perfect match to meet the content requirement of both NASA and the public.

Talk London

Talk London is an online community where Londoners can share their opinion on the city's big issues. Since it is operated and managed on behalf of the Mayor of London by City Hall, the views shared through Talk London help to control the policy decisions of the future. It is a hub for crowd-sourcing ideas, raising awareness of initiatives, connecting Londoners to each other and City Hall so they can participate in designing and delivering improvements in their neighborhoods and communities. Talk London’s website (London.gov.uk) is built on Drupal 7. There was a requirement of an upgrade to Drupal 8 that would provide the chance to make Talk London 3.0 easy for the Londoners to get involved in policy and programme design, also refreshing the design with an updated brand identity. 

The goals for Talk London 3.0 were:

  • Developing a diverse membership
  • Growing participation
  • Focus on transparency

The Talk London website was rebuilt by using an agile project management approach (Scrum) on Drupal 8, incorporating a refreshed brand execution, and also using a Storybook pattern. The basic functional requirements included:

  • Advanced user generated content functionality
  • Email notifications for end users
  • Flexible content layouts for Talk London website editors

There was also a requirement of a large-scale migration of historical content from the old Drupal 7 platform to the new Drupal 8 implementation.

Talk London 3.0 was launched in early March 2021 at the time for the Covid 19 recovery campaign. 


Digital transformation in the government has become essentially important to meet its citizens' growing expectations and needs. Such a transformation can be challenging but eventually it proves to be rewarding for both the citizens and the government. So, a government that is ready to transform themselves and adopt the necessary digital technologies can improve the citizens’ quality of life and also enhance the citizen-government relationship. And Drupal proves to be the best support in building the bridge between people and their government.

Aug 03 2021
Aug 03

The 6th annual Drupal Business Survey 2021 is here! We are eager to hear about your vision and experiences on the business side of Drupal. Along with One Shoe and Exove, we are calling upon Drupal agency leaders worldwide to let their voice be heard in this sixth edition of the annual Drupal Business Survey.

Take part here

The pandemic as a catalyst for investments in digital?

Last years’ edition of the Drupal Business Survey indicated that the pandemic might accelerate the demand for digital projects (and Drupal). Therefore we included questions in this year's survey about business trends, challenges and we ask people about their business outlook for Drupal companies. With your input, we can gather new insights into important issues that Drupal business leaders are facing today. Read the 2020, 2019, 2018, 2017 and2016 reports for previous analyses.

Take the survey

Participation is completely anonymous and will take you less than 10 minutes. The responses will be used to generate anonymised, aggregate report about the state of the Drupal business ecosystem. The results and insights of this survey will be officially published on Drupal.org and presented at the Drupal CEO Virtual Drinks in October.

Aug 03 2021
Aug 03

If you don’t want to miss the latest Drupal posts even during the summer holidays, we got you covered. Here’s our recap for July.

A Guide to Preparing for Drupal 9

The first post that we’re including is a guide to preparing for the Drupal 9 upgrade, shared by Sarah LeNguyen of Forum One. She starts off by giving a short history of major Drupal releases and showing how version 9 is different, as it has built in backward compatibility, with the only changes in the new version being the removal of deprecated code.

The second part of Sarah’s post focuses on the actual migration and information needed to adequately prepare for it, including an overview of support timelines as well as specific steps for both Drupal 7 and Drupal 8 site owners.

Read more about preparing for Drupal 9

Open Referral UK and LocalGov Drupal

The next blog post on this month’s recap comes from ekes and breaks down the process of implementing the OpenReferral standard with the LocalGov Drupal distribution. The complexity challenges can be overcome by using normalizers, but this presents challenges of its own, e.g. the inability for site builders to properly manage configuration.

Ekes considers two contrib modules which could be potential solutions, Views Rest and Rest Export Nested, but none of them address the exact problem, so he sets out to build a custom solution using normalizers. He proceeds to present the technical details of his custom LocalGov Open Referral module.

Read more about LocalGov Open Referral

Contribution Recognition and the Drupal Project

Another great post from last month was written by Matthew Tift and Tim Lehnen and discusses Drupal’s contribution recognition system and its potential use in other open-source projects.

The authors describe how the credit system works and what the data is used for, as well as why it would be beneficial to share the contribution recognition system on platforms like GitLab and GitHub.

They also address some of the limitations, e.g. people trying to game the system by focusing on low-hanging fruit, or people feeling demoralized by leaderboard changes. In closing, they make an important suggestion on how to approach this: the key, as they say, is to start with a goal, not a metric.

Read more about contribution recognition in Drupal 

Recognizing people who hold key contributor roles in the Drupal community

Let’s continue with another post about Drupal contributions, again written by Tim Lehnen. As the credit system which we just discussed under the previous article is only intended for tasks, this means a lack of contribution recognition for people who hold key contributor roles but cannot attribute them to specific tasks.

This is why an update to the system was introduced at the beginning of July: namely, the ability for individual contributors to identify their community roles in their profile and even attribute this to sponsoring organizations. Before finishing, Tim also announces some upcoming changes to the marketplace algorithm, such as how case studies will be treated.

Read more about Contributor Roles in Drupal

Drupal 7 End of Life - what you need to know

Moving on, we have a post by Annertech’s Anthony Lindsay who provides the key pieces of information regarding the end of life date of Drupal 7 scheduled for next fall. The post first explains what “end of life” even means for software: the project will stop receiving community support and all security updates will be left to individual site owners.

Since the move between Drupal 7 and 8 was quite a significant one, transitioning from 7 will not be a straightforward process and there are 5 different options: you can either rebuild from scratch, minimize and build an MVP, go with a decoupled approach, reassess your digital presence, or redistribute your website to separate platforms.

Read more about Drupal 7’s end of life

Thunder Release: GraphQL API

We continue with a short but sweet post by the Thunder CMS distribution announcing the implementation of a GraphQL API which enables a headless / decoupled architecture. Although GraphQL 4 is currently still in beta, they decided to use this version due to its user friendliness.

This new API allows them to provide three new main interfaces for all of Thunder’s main data types. The goal of this is to minimize the use of references and avoid overcomplicating data structures, while taking extra care to avoid references that are too Drupal-specific. You can get more detailed information on the headless API in their documentation.

Read more about the Thunder headless API

Mastering Drupal for Content Editors

Next up, we have a guide to mastering Drupal for content editors, provided by the Evolving Web team. The first and main part intends to familiarize the reader with Drupal and how it compares to other CMS / DXP, while the second part then focuses on accessibility.

The next part is about content as an integral part of user experience, after which follows a more technical section on organizing information which is especially relevant here. The fifth and final part covers search engine optimization and other key marketing elements. Each section also includes helpful links to additional articles and other resources.

Read more about Drupal for content editors

A Comprehensive Guide to Drupal Migration Resources

We’re concluding our recap for July with an in-depth guide and list of Drupal migration resources by Aaron Couch of Promet Source. Considering both the changes to Drupal 7’s EOL date as well as the simplified upgrades with version 9, this is no doubt an invaluable post for many site owners.

Aaron begins with a section with expert perspectives, which includes a combination of articles and videos. The next section opens with a graphic of the Drupal version release date and dependencies, followed by a short list of planning tools such as project planners and checklists. In the second half of his post, Aaron focuses on the actual migration tools, i.e. modules and plugins.

Read more about Drupal migration resources

Whale diving

We hope you enjoyed our selection of posts for this month. Tune in next month for a recap of our favorite content from August.

Aug 02 2021
Aug 02

Our contribution and the integration into Rocketship

Dropsolid contributed to the new Drupal Layout Builder, and we’ve included it in our open Rocketship Install Profile. Why? We’re strong believers in the revolutionary layout builder. It matches perfectly with our open DXP vision for creating compelling and personalized digital experiences. It allows developers and marketers to co-create, the time to market is significantly faster and you have all the freedom and flexibility you need.

Your turn to test the Layout Builder

Give your content editors the power to easily create incredible, personalized digital experiences and let them try out Drupal Layout Builder.

Aug 02 2021
Aug 02

What the what?!

A crying Druplicon
Sad Drupal is Sad. :'(

Well, might as well get right down to it... I've made the incredibly difficult decision to leave Acquia, and my employment there officially ended last week. :'(

Some important notes about this:

  • This is in no way a negative reflection on Acquia. I have worked with SO many amazing people there in the past 10 years(!), and have endless gratitude for all of the challenges, opportunities, learning, and laughs. The leadership team has a solid strategy, and the effort everyone there puts into achieving it every day is inspiring.
  • This is in no way a negative reflection on Drupal. In my time here, I've seen Drupal through its youthful toddler years, to its surly teenage years, and now Drupal's all grown up, with a nice, stable apartment downtown. :) Drupal is and remains an amazingly powerful, flexible solution for building every single type of application one can dream of, with an incredibly strong and vibrant community behind it.
  • What this is about is about an opportunity that came up to take lessons learned from Drupal and apply them more broadly to (hopefully) make an even bigger impact (more on that below).
  • Also, I'm not leaving the Drupal community (more on that below too), and will stay on as Core Committer/Product Manager, albeit with less time than I used to have to dedicate to it, for rather obvious reasons. (This is ultimately a good thing, as it'll direct that time towards more strategic/impactful endeavours.)

10 years sure is a long time…

It sure is! Here are some fun Drupal facts that help illustrate key achievements of Acquia's Drupal Acceleration Team [DAT] (née Office of the CTO [OCTO]) over the years, and hopefully provide some insight into the areas of investment Acquia has made and continues to make in Drupal.

IMPORTANT NOTE: The folks explicitly called out below are former co-workers who work / have worked at Acquia, since this post is in some ways a "farewell" to them, and an opportunity to celebrate their often unsung efforts. This is unfortunately NOT able to be a comprehensive list of ALL of the amazing people working on various initiatives, because that list would be far, far too long and I'd invariably miss someone. :( Suffice it to say, however, that none of the items listed below would be possible without hard work, input, funding, and help from literally thousands of other people across the wider Drupal community!

Did you know? Back in 2011:

Authoring Experience and Strategic Initiatives

A blog post with hand-typed HTML
Eat your heart out, WordPress! :D

Eas[y|ier] Upgrades

A screenshot of the Drupal 7 contrib tracker website
Tale as old as tiiiiiiime...
  • Drupal 7 had just come out, and the first initiative of the day was to help the community get all of the modules ported to the new version. (Sound familiar? ;)) Drupal Gardens (R.I.P.) was key to this effort, with a world-class team focusing on the biggest, gnarliest modules first. We then repeated that initiative for Drupal 8, for Drupal 9, and, because @Gábor Hojtsy is such an *amazing* overachiever, have already started it for Drupal 10 as well! Ted Bowman (@tedbow) and Katherine Druckman (@katherined) deserve shout-outs for doing a huge ton of Drupal 7 > 8 and Drupal 8 > 9 (respectively) porting in their initial Acquia assignments!
    • To assist with these efforts, OCTO/DAT has also developed numerous pieces of tooling over the years to help make upgrades easier, including:
      • Drupal Module Upgrader (originally an Acquia Hackathon project!), an automated code analysis/porting tool for Drupal 7 -> D8/9 code which @phenaproxima rocked the crap out of as an intern back in the day!
      • Upgrade Status, a dashboard of your contributed modules' porting status that gives you a dynamic "todo" list for major upgrades, which the team has shepherded over the years from Daniel Kudwien (@sun)'s original efforts back in the day!


    A troll face that says 'when it's ready'
    Three words to strike fear into any Drupal site admin.
    • In 2011, Drupal releases took the philosophy of "it's ready when it's ready," which made them basically impossible to plan around. Even security releases came out on an unpredictable, as-needed basis, so running a Drupal site required CONSTANT VIGILANCE. :P OCTO/DAT worked with the Drupal Security Team to develop the Wednesday security release windows system we all know today, and also with core contributors to develop the predictable semantic versioning release approach that Drupal 8+ uses. Major kudos go to Jess (@xjm) for making sure those trains run on time, and that they start any fires when they reach the station! :D
    • Another Drupal release philosophy from 2011 was "we'll break your code, not your data". OCTO/DAT has done extensive work, alongside other major community contributors, to enact various policies that ensure Drupal upgrades are easy from Drupal 8 onward.


      If you want to go quickly, go alone. If you want to go far, go together.
      I don't have a pithy caption here; this is actually sound advice.
      • Back in 2011, Drupal was very much a "do-ocracy" which meant that it pretended it didn't have a governance structure, which mostly meant that if you weren't already neck-deep in the community to know who everyone was, you were completely in the dark as to which people held key decision making powers. :P We held a Governance Sprint alongside OSCON with mindful community members, as well as various luminaries from other open source projects, and developed an explicit, scalable governance framework for the Drupal Association, for Drupal Core, and for the Drupal Community. Much of that framework exists to this day, and others have evolved as project needs have changed. Alex Bronstein (@effulgentsia) deserves some props here as he's always incredibly thoughtful of structural changes within Drupal and their longer term ramifications.


      A scale showing one red block balancing three grey blocks.
      The delicate balance...
      • Back in 2011, if you needed a Drupal 7 committer, it was down to either @Dries or me. Over the years, we've built this up to a team of 14 committers, including different specializations in Product Management, Framework Management, Frontend Framework Management, and Release Management. We've also brought onboard a Core Team Facilitator (Pamela Barone (@pameela)) to help with coordinating efforts of the team itself.
        • Another major initiative that falls under this is the Drupal.org contribution credit system, to encourage organizations to donate time back to the project and create more makers than takers.
        • In partnership with the Drupal Association, we created the Drupal 8 Accelerate grants program to bash through the final critical bugs holding Drupal 8.0 from release. The core committer team was in charge of disbursing $125,000 in the form of bug bounties, and directly resulted in Drupal 8.0 shipping in 2015 (without it, who knows :\).

      I'm sure I'm forgetting a million and a half other things that happened over the years, but hopefully this helps paint a picture for those who are newer to the company of how far Drupal has come, and the role Acquia has helped play in that growth.

      What's next?

      MongoDB Logo.
      Webchick is going Web Scale! ;)

      Starting today, I'm going back to my community building roots at MongoDB as Principal Community Manager on the Community Team, focusing on initiatives such as building out an open source contributor program and further awesome-ifying the MongoDB Champions program.

      What drew me to this opportunity is:

      • MongoDB has focused from the outset on stellar developer experience, which is a value I believe in strongly, even since before my time in Drupal. I really appreciate that they take a strong, developer-centered view of how databases ought to work, and that they've tackled so many of the hard problems up-front.
      • Because MongoDB is a technology that is used by tons of other projects, languages, frameworks, etc. it seems like a really great opportunity to both take some of the lessons learned from Drupal over the years and apply them to other communities, while also being able to get a broader perspective from other communities and bring those back into Drupal!
      • The people. While it's really (really!) scary to think about starting out in a new place with new faces, I had the opportunity to interview with folks from a wide cross-section of the company. Every single person I spoke with fully embodied their core values. Every single person was passionate, genuine, kind, and determined to make a huge difference. In a lot of cases speaking to folks felt like speaking to a friend you've had for years.
      • MongoDB has also been a tremendous ally to Drupal (speaking of 10+ years :)), putting funding and time into efforts such as Drupal 7's database abstraction layer, the Views in Drupal Core initiative, and more.
      • From being prompted for pronouns on the initial application form, to a variety of queer/trans-inclusive benefits, to dedicated LGBTQIA+ inclusive initiatives, MongoDB takes their commitment to Diversity and Inclusion more seriously than just about any other tech company I've seen. Colour me impressed!
      • AND, to top it off, they're going to continue to give me dedicated time to work on Drupal as well! :O

      An adorable chihuahua puppy wrapped in a multicoloured scarf.
      Our new chihuahua puppy Arthur wearing the MongoDB Pride bandana, more or less like a cape. :D

      So, fret not! I'll still be around in the Drupal community, hopefully with a broadened perspective and bringing in some new ideas and energy along the way! :)

      Sheesh, what's the TL;DR here?!

      So, in short:

      • I no longer work at Acquia, but want to sincerely thank everyone there for 10+ years of important work, learning opportunities, amazing friends, and of course laughs.
      • A LOT has changed in Drupal over the last 10+ years, and up above you can view a tiny sampling of it.
      • I'm starting a new position at MongoDB today as Principal Community Manager, and am really excited! (And also nervous, but hey. ;))
      • I'll still see you Drupal folk around in Drupal Slack and the issue queue and will still be committing patches. :)
      • MOST importantly, we now have a puppy. ;)

      One last thing: If we've worked together over the years in a Drupal community capacity and if you're up for it, I would be hugely appreciative of a LinkedIn recommendation. And I'll do my best to reciprocate! :)

Aug 02 2021
Aug 02

Building a Mutual Aid Network on Drupal

We’re thrilled to announce our confirmed keynote speaker for DDI Camp 2021! Monica S. Flores facilitates the development of digital products as a scrum master and technical project manager at Lullabot and will present on Friday, August 13.

Monica will walk through steps of building a Drupal-powered mutual aid network, including a "request" content type, views for that content type, and the Flag module to handle an ongoing flow of requests.

Monica served in leadership for DC FemTech and was elected board member to Green America, where she chaired the Diversity, Equity, and Inclusion board committee 2018-2020. She teaches for the Nonprofit Technology Professional certificate, started Techwomxn, and co-founded 10K Webdesign. She supports women-focused ventures through the Female Founders Network (LinkedIn).

A recipient of the 2018 and 2019 NTENny Award, Flores speaks at conferences and panels on technology, management, and entrepreneurship. Flores is a Pantheon Hero and an Arcadia Ambassador for clean energy.

Hear her speak on Friday, August 13, 2021 at 10:30 am PDT (GMT -7).

Register today

Drupal Diversity & Inclusion, an independent working group within the Drupal community, is holding the first ever Drupal Diversity & Inclusion (DDI) camp! Our aim is to bring new voices and important topics together into a relaxed and fun virtual conference. 


Jul 30 2021
Jul 30

We are living in an era where there is no end to invention and innovation. The world seems to surprise us with unbelievable growth and transformation in all sectors of society. But the biggest challenge we are facing today is, ‘sustainability.’ Meeting our own needs without compromising the ability of future generations to meet their own needs is imperative. Today’s growing society is less concerned about it. This indeed brings a threat to the welfare of mankind.

As sustainability problems can be seen bothering every sector, so is open source. What do you think, is open source sustainable? Today in this article, you will discover what motivates one to contribute to open-source projects. If there are any challenges while contributing, what are they? Most importantly, we will unfold all the solutions of open-source sustainability making it a secure community for all. 

What’s in open source for any individual or a company

Illustration showing multiple circles describing the benefits for an individual in open source and ensuring open source sustainability

The open-source movement is growing rapidly around the world by providing a great platform for people willing to utilize their talents and do wonders in their aspiring careers or businesses. With increasing users, we now see a growth in the contributors as well in the community. Some of the reasons why an individual should contribute to open source projects are discussed further. To start with, one gets valuable work experience which helps in shaping one’s career path by being a part of this community. Open-source projects allow one to enhance his/her coding skills and become a successful coder. Great job opportunities come along and one gets the chance to build a flourishing career. This platform gives an exposure to work with people who are superbly talented to guide a beginner participant regarding any open source projects or technologies. Open source projects are very inclusive. Therefore, people from different work backgrounds are welcomed in this community. Lastly, an OSS participant gets global recognition as his/her work is easily accessible and used by people around the globe. 

Illustration with a circle describing the benefits for an organization in open source and ensuring open source sustainability

Why should businesses take interest in contributing to open-source projects? With open source projects, you can make your company staff learn new concepts, ideas, or unique techniques to meet work needs or expectations. Using open-source software in place of expensive proprietary alternatives can be a good option in saving a lot of money which can further be used in meeting a company's other important requirements. The companies can contribute to open source projects according to their preferences. For example, Pfizer, the huge pharmaceutical company, has contributed to Drupal’s 8 content workflow system to shape one of the world’s most powerful content management systems. 

This platform allows you to find new clients and potential employees who can contribute to the growth and development of your company’s goals and aspirations. While using open-source software, you can analyze the code of the product you’re using and also change it according to your choice. Such modification is possible due to the availability of open source licenses. In open source after a software gets released, if a user wants certain types of changes, he doesn’t have to wait for someone. But rather he/she can make the changes in the form of updating and expanding with numerous plugins and modules also sharing them with the community. Therefore, this gives you a sense of ownership and self-satisfaction. So, these were some of the reasons listed to show the need for companies to run on open source. More on the impact of large companies on open source here.

Now, once an organization decides to run on open source, then one question which comes to my mind is, “How do you manage open source projects”? It isn’t an easy task because you will have to look into various aspects to successfully be a part of this free and open movement. Only by choosing the right open source project, one’s job doesn’t get finished unless there is approval coming from the product owners, legal departments, or executives to smoothly use the open-source projects. Sometimes organizations worry about the risks associated with open-source projects. Therefore, the following tips can reduce the concerns of the organizations making them more confident about choosing an open-source community. 

Illustration showing multiple circles describing the tips to reduce risk in open source project and ensure open source sustainability
  • Implementing component lifecycle management. You should develop a process to determine which components are acceptable for people in your organization to use. The level of risk can be reduced by testing components or doing static and dynamic analysis which further builds up more confidence with executives.
  • Finding the right convincer. If you find a person at your organization who can take the authority of convincing the project owners or legal departments to understand your company’s concern and work in your favor, then it will certainly help in the smooth functioning of your company’s work within the community. 
  • Get help from the open-source project. You will find that many open source communities include people who can help you in building a well-structured business case for your approvers. This indeed will be a great help for your organization to initiate a task or a project in the open-source community with clarity and confidence. 

Increasing awareness about the challenges of open source 

While contributing to open-source projects, one comes across few challenges which create hurdles in the process of participating in the community. Therefore, these challenges need to be overcome so that the growth and future of the open-source community are not hampered. Let’s find out what makes a good open-source project? 

Illustration showing multiple hexagons describing the challenges of open-source and how to ensure open source sustainability
  • Need for proper financial resources to support open source projects. The participants of OSS need adequate financial assistance for the smooth functioning of the community. This will further help in sustaining the contributors in open source projects for a longer time.  
  • Communication needs to be made stronger among OSS members. Good communication must be built up among the participants of OSS projects as this will help in proper coordination and understanding of the projects in a much better way.
  • One has to be smart enough to consult the right mentor for better performance. To gain knowledge about the OSS projects, it is essential to take guidance from an experienced person who has a high proficiency in terms of OSS projects and software.
  • Improvement is needed in the field of OSS governance. Good governance is followed by a code of conduct describing the guidelines and principles for the contributors to get full transparency and clarity about the OSS projects. The OSS projects should have a roadmap document describing the future goals, ideas, and plans to inspire participants of the community to reach the desired work aspirations.
  • The ratio between takers and makers has to be well balanced. The number of users and contributors has to be proportionate so that along with the usage of software, contributions can also be made to help the OSS community grow and flourish for a longer time. 
  • Improvement to be made in the field of security. Open-source security needs more development for increasing the trust factor of its users and contributors. For example, the OpenSSL and Heartbleed case can be an eye-opener regarding the significance of maintaining proper security within the community. Read the complete open source security manual here.

Here, I would like to take you through a discussion held between Aaron Stannard, CTO, and founder of Petabridge, and Rachel Appel, NET Developer Advocate at JetBrains regarding open-source sustainability challenges. It is generally observed that open source is adopted by the majority of the organizations but still it is seen struggling as a result of misalignment between the user’s value and contributor’s value. Therefore, there is a need for a better business model to help open source sustain for a longer time. Take a look.

[embedded content]

Ensuring sustainability and maintenance of open-source projects

Focusing on improvement: How do you maintain open-source software

By far we all have understood that the contribution made to improve sustainability in open-source isn’t enough. So, let’s look into the possibilities which can help to enhance sustainability in open-source in a much better way.

Illustration showing multiple circles describing the tips to ensure open source sustainability

How do you organize an open-source project? Let’s start with the most fundamental significance of open-source sustainability i.e. the governance. Good governance consists of a code of conduct that is created to state the project details enabling the contributors to have a clear understanding of OSS projects. Next, it is very essential to maintain a high-quality document as it receives the most amount of traffic. Documents like Contributor’s Guide can be of great help for the contributors. Depending on the quality of the project’s documentation, a contributor decides whether to continue learning about your project or not. 

There is a need to maintain high-quality code throughout the project. A documented code review process should be followed for every type of contribution including both human approval procedure and automated checks to maintain high-quality code standards. It is a good idea to set up a legal organization to safeguard the liabilities of individuals involved in the project. To give clarity to the community members, there should be an open ledger for every project’s income and expenditure showing how funds are spent on projects. Lastly, there is a need to improve the licensing of OSS projects as fair licensing of all contributions safeguards the security of the community. 

Therefore, with the above discussion you get clarity about how to create a successful open source project. 
Now let’s have a look at the basic sustainability principles of open-source which are of great importance. By following these set principles, the longevity of the open-source community can be guaranteed. Here it goes:

  • Under a Free and open source license, the software must be released. More on open source licensing here.
  • In the community, the membership rules must be published and adhered to.
  • All types of contributors shall have the availability of membership within the community. 
  • Membership must-have requirements for validation of identity, and review of contribution to the community (to avoid stacking the membership roles). Any impediment to membership must be low enough that a person with the least advantage could achieve it.
  • To give each member an equal vote, the voting process must be put in the proper place.
  • All positions of authority in the project must be, directly or indirectly, the result of a vote.
  • A strong code of conduct with clear, fair enforcement mechanisms is needed.
  • Under the terms of the open-source license, any patents included in the software must be granted.
  • Every contributor must retain his/her copyright unless the software is being managed by a foundation for license enforcement.
  • All contributors intending to have their work incorporated into a distribution must contribute their work under the same terms as the software license they received it under.
  • Any commercial activity around the software must further the sustainability of the community, and the potential for commercial benefit must be available to all.
  • The incentives in any commercial model must bend away from the creation of proprietary downstream software.

Contributing to open source: Essential strategies

To make meaningful contributions in open source projects, various strategies are developed which act as a support in sustaining participants in open source. The steps taken to bring a positive change within the community are discussed below.

Hiring sufficient maintainers for OSS projects. The companies can balance the workload by hiring suitable maintainers to handle the numerous OSS projects. They should have the flexibility of working with the contributors and handle projects according to their own convenience.

Here, we have an example of Drupal, where people are seen contributing according to their conveniences. Contributions are made in the form of a volunteer contribution, a sponsored contribution, and both volunteer and sponsored contributions at the same time. Generally, all the contributors provide support to Drupal in their respective capacities. But surprisingly, for the first time in Drupal’s record, volunteer contribution remained static due to the challenging time of COVID -19, in comparison to the increasing sponsored contribution. Take a look below. 

Graphical representation of volunteer and sponsored contributors' contribution in open-source during the COVID 19Source: Drupal.org

Developing an open-source award program. It is always a good idea to acknowledge the contributors with awards and recognitions. It also has a very special recognition for its contributors. When any contribution is made, it is marked with a green square on a huge calendar. With more contributions, the square becomes even brighter. If you contribute for several consecutive days, then GitHub counts it as a streak and records your score for future reference. This can be a way to motivate people for more active contributions. Below is the diagram:

Graphical representation given by GitHub about contributors' contribution in open-source for the year of 2017 Source: GitHub

The Drupal Association too hasn’t stepped back and introduced the contribution recognition committee a unique way to recognize the contributions of both individual contributors and their organizational sponsors, followed by measuring the contribution ecosystem which supports Drupal. This will encourage the employees to work even harder to generate unique innovation and ideas for the community. 
Starting an open-source program office. Companies like Google, Facebook, Amazon, etc have set up formal open-source programs within their companies to look after the open-source strategy to use and contribute better in OSS projects. 

Giving contributors their self-time. Apart from working at a company, employees should have their self-time where they can work on anything they want. This can help them to be more innovative and productive as they would dedicate their time according to their choice. For example, Google allotted 20% time to its employees to work for themselves which as a result led to the discovery of many innovative products. Similar flexibility was shown by Atlassian as they also set up a policy where their staff got 20% time allocation to work according to their own will. This further helped Atlassian to come up with great work ideas and innovations. Such a facility can help in employee contentment and retention.

Contributing to the non-coding tasks. The non-coders of a company can educate people about the benefits of contributing to OSS projects by writing blog posts. If someone is interested in designing, then he/she can help the developers with some design ideas regarding any icons or logos which could make their app look visually appealing and also help in justifying the concept or purpose of the app.

Open source has a funding problem: Resolving economic woes

  • Companies can start an open-source fund to support OSS projects financially. For example, CarGurus launched an open-source fund to support OSS projects. Contributing a portion of a company’s equity to open-source can be very beneficial. Here is an example, Citus data donated one percent of its equity to the PostgreSQL community. There are some initiatives taken by an American foundation i.e. the Gordon and Betty Moore Foundation, a nonprofit organization, the Alfred P. Sloan Foundation, and the Chan Zuckerberg Initiative (CZI) in providing financial support to open source software as well. Along with funding, there is also a need for full transparency regarding the finances, allowing everyone to see the money received and spent on any project. Therefore, Open Collective is the best example of providing such assistance to open source contributors helping them to get a clear vision about their finances and plan a better and healthier community for all.
  • GitHub announced an initiative called GitHub Sponsors where the users of OSS projects can pay the contributors for their work within GitHub. Such commercial sponsorship is very important to acknowledge the contributors for their work towards OSS projects. This not only helps open-source projects to sustain their contributors but also improves their diversity within the community. More on the diversity, inclusion and equity in open source here.
  • The Linux Foundation at the Open-Source Leadership Summit announced the formation of CommunityBridge, a platform for open-source developers. While announcing this, Jim Zemlin, executive director of the Linux Foundation said that the Linux Foundation would match funding for any organization that donated funds to Community Bridge projects. Read more about open source being recession-free and how the right sort of leadership within open source makes a world of difference.

What’s next?

How do you create an open source sustainability? I hope now you can answer this question in a very confident way since in this article we tried covering every aspect of open source sustainability. Well sustainability is not a one-off investment. It needs constant nurturing and support from its contributors. Therefore, every member of the community shall take ownership of delivering consistent efforts towards the longevity of open source projects. With open-source, together we learn and innovate. 


Over the last two decades, there has been a rapid growth of open-source technology around the world. Therefore, it leads to an increase in demand for better OSS projects, products, and services which isn’t possible without the support of its dedicated contributors. So, amid all the challenges that come across while contributing to OSS projects, the contributors shouldn’t step back from contributing and making the open-source community sustainable for us and our future generations. Now, I would like to end this article by pointing out a very important fact that the rights of the contributors are always to be safeguarded and taken care of in the most effective way.

Jul 29 2021
Jul 29

We've been posting blogs about Drupal for over 10 years at OSTraining, and so every once in a while someone finds an old blog post from Drupal 6 or even Drupal 7 and asks a question.  Well that's exactly what happened this week when somebody asked, "How do we display a pdf in the browser with Drupal 9 when someone clicks on a link?"

Keep reading to learn how!

"Hi! This is OSTips from OSTraining.  My name is rod martin, and in this video, I'm going to answer that question.

Actually, it's a really simple answer with Drupal 9. So a few years ago this was a big issue.  Before the Media Manager came along, we were left with modules like PDF Reader (which now really isn't being maintained) or Embedded Google Docs Viewer which is still only in Drupal 8 and hasn't been updated since 2018. Now we have the Media Module that allows us to embed pdfs right on our site! 

  • Click Structure/Content types/Testing/Manage fields

How to Display a PDF in Browser with Drupal 9 & 8

I have just a simple PDF Demo field which is a "media field". 

How to Display a PDF in Browser with Drupal 9 & 8

NOTE: You will need to have installed that over here under the extend menu (see below) - nothing fancy.

DHow to Display a PDF in Browser with Drupal 9 & 8

  • Return to Manage Fields tab
  • Click Edit button
  • Select Document under Media type

How to Display a PDF in Browser with Drupal 9 & 8

  • Click Manage display tab

NOTE: The format is Rendered entity and it is Rendered as Default. That's important!

How to Display a PDF in Browser with Drupal 9 & 8

  • Click Content tab

I have a node in this content type.

  • Click Edit tab
  • Click Add media button

How to Display a PDF in Browser with Drupal 9 & 8

I have one pdf uploaded.

  • Click Insert selected button
  • Click Save button

Now when I click on the pdf link, it's going to open it right up in my browser.  And of course, site visitors can save it from here.

How to Display a PDF in Browser with Drupal 9 & 8

So a difficult thing to do in Drupal 7 has now been brought into core in Drupal 8 and 9 and is now something that's really simple.

Well thanks for joining me again today. This has been OSTips from OSTraining, and I'm Rod Martin."

[embedded content]

About the author

Rod holds two masters degrees and has been training people how to do "things" for over 25 years. Originally from Australia, he grew up in Canada and now resides just outside Cincinnati, Ohio.
Jul 28 2021
Jul 28

You Might Also Like

Drupal 8’s EOL (end of life) is just three months away on November 2, 2021. What does this mean?

No security patches will be provided for Drupal 8 after this date. There is also no extended support for Drupal 8 like there will be for Drupal 7.

You will truly be on your own. And with such a mission-critical piece of software, you do not want to be on your own. 

The good news is that you can avoid being left in the lurch. Audit your site for Drupal 9 readiness and start planning your roadmap now. Right now is the easiest it will ever be. It is better to upgrade on your own terms rather than scrambling at the last minute. 

Why November 2, 2021?

Drupal 8 has many third-party dependencies, and if one of these dependencies updates to break backward compatibility with previous versions of Drupal 8, then Drupal 8 cannot update that dependency. Eventually, the older version of the dependency will stop being supported by the authors. 

This leaves Drupal 8 in a precarious position. The longer it exists, the more fragile it becomes. The longer it exists, the more the foundations crack. Eventually, the whole thing would need to be demolished.

Drupal 8’s largest dependency is Symfony. Symfony 3, the version Drupal 8 uses, reaches EOL in November of 2021, and moving to Symfony 4 would break backward compatibility with previous versions of Drupal 8.

Supported versions of Drupal must use supported versions of Symfony, which means Drupal must move to a new major version. This is the main reason for the cut-off date.

But wait! Why can’t the Drupal community fork Symfony 3 and maintain that alongside Drupal? Couldn’t we stay on Drupal 8 forever?


Symfony is used precisely because the Drupal community did not want to maintain certain features common to all websites and content management systems. Instead, the community wanted more freedom to focus on what makes Drupal unique.

A lot of work goes into building and maintaining Symfony. Duplicating that effort is not only unattainable but also undesirable.

The Drupal community has supported Drupal 8.9 as long as possible, but now it is time to move on.

Read more about the rationale behind the release schedule and chosen dates.

What happens if I don’t upgrade by that time?

Everything will still work…for a while. Everything might still be secure…for a while. Neither the Drupal nor the Symfony communities will be updating the code your website relies upon.

And eventually, something will break.

Or worse. A vulnerability will be discovered, and you will have no way to fix it.

Or even worse than that. A vulnerability is discovered by nefarious actors and never announced publicly, and you go on using your Drupal 8 website as if everything is fine. But your website has been compromised, or it can be compromised at any moment. You might never know.

The longer you wait to upgrade to Drupal 9, the more effort it will be to accomplish the upgrade. Right now, Drupal 9 and Drupal 8.9 are still very close to being the same piece of software. But that distance will grow with every new Drupal 9 release.

Is there any wiggle room or grace period that is “safe”?


You can go skydiving without a parachute, and you’re technically safe the entire way down. You can even close your eyes and pretend you’re flying. That might even be fun.

But eventually, you have to deal with the sudden stop at the end.

How long will Drupal 9 Last?

Until November 2023.

Read the official page on Drupal 9 support.

This is not something to be wary of. Thanks to the new minor release schedule, upgrades to new major releases of Drupal no longer require a complicated migration or upgrade process. Upgrading from Drupal 9 to Drupal 10 should be no more complex than upgrading from Drupal 8 to Drupal 9.

And you’ve already done that, right?

Or at least you’ve already started planning to do that, right?

How do I get started?

Start by making a plan and then start implementing that plan. The best time to start planning is yesterday. The next best time to start planning is today.

If you are busy or are feeling a little overwhelmed, we can help. We are planning and implementing the transition to Drupal 9 for many other organizations. The best place to start is to contact us for an audit of your Drupal 8 site which will you give you insight into the level of effort that will be required to upgrade to Drupal 9.

Jul 28 2021
Jul 28

Drupal is among the standard Content Management Systems (CMS) used in designing more complex websites. It uses advanced features to aid the developers in designing beautiful websites. It is also known for frequent updates, and the recent update to Drupal 9 is necessary for the marketplace. However, businesses are worried about the approximate cost to migrate from Drupal 7 to Drupal 9. We will discuss this aspect along with various considerations for the migration project.

Why must you Migrate to Drupal 9?

End of life is around the corner

It would be best if you upgraded the CMS at regular intervals. It helps add new features to the website and offers several core modules for better user interfaces. Performance enhancements are another reason you should go for upgrades. Moreover, any security vulnerabilities in earlier versions are also plugged through the upgrades.

It is essential to note that Drupal 8 is reaching the end of its life in November 2021 and Drupal 7 reaching end of life in November 2022, and it is necessary to migrate the website to Drupal 9. Web admins will not receive support or fixes from the Drupal community after this timeline. There are more than 565,000 websites still on Drupal 7 and more than 267,000 on Drupal 8, and they must be migrated in the near future for the sites to receive security updates.

Reasons to Migrate to Drupal 9

There are other reasons for your benefit when you migrate to Drupal 9. The new Drupal version has led to improved performance of the website. Few web admins may be awaiting a stable version of the upgrade, but there are no severe changes in the features. We will discuss some of the new features in detail.

Faster & Better Performance

With search engines preferring mobile responsive websites, Drupal 9 supports responsive images, leading to lesser data consumption. You can define several workflows, and the BitPipe enhances page viewing performance. Moreover, the upcoming versions will only provide a better user experience and faster websites.

Backward Compatible

The earlier versions of Drupal were not compatible with previous versions. However, Drupal 9 is consistent with the earlier version and preserves Backward Compatibility. It will essentially mean that most of the contributed modules in Drupal 8 will be compatible with the new version. The latest version can use the modules, data, and configuration from the earlier version. 

Cleaner Code Base

One of the best benefits of Drupal 9 is that it does not contain any of the deprecated code. Thus, the websites will have a clean codebase, and you must remove the deprecated code from the earlier versions before migrating to Drupal 9. It will help if you gradually remove the deprecated code from Drupal 8, and it will help make the Drupal 9 upgrade simpler.

Easiest Upgrade

Software experts are stating that the Drupal 9 upgrade is easy and is like a breeze. Earlier, the upgrades implied a time-consuming process that led to huge costs. In addition, there were configuration changes and involved content migration and porting modules to allow them to function as needed. One of the key targets for the Drupal 9 release was to ensure easier upgrades in future.

Understandably, future Drupal releases could be such that upgrades would not need major migration activities.

Symfony & Twig Updates

There have been upgrades in the Symfony and Twig software too. As they also see an upgrade, migrating your Drupal website to the new version is necessary. Other dependencies are getting updated too.

The Drupal Migration Cost

Website migration projects can expectedly be time-consuming. First, the migration team must find out the projected issues in the process. The timeline can usually depend on the size of data on your website.

Time Taken to Migrate

As with any other migration project, most web admins are worried about the time of Drupal 7 to Drupal 9 migration. The migration timeline will depend on the amount of data and content on the website. For example, it is estimated that a website without any customized modules and a few content types can be migrated within a few weeks. However, complex websites can take longer to migrate to Drupal 9.

The migration project involves migrating the content and the configuration to a new instance of the website. The content can cover various posts, files, blogs, and articles, etc. Therefore experts analyze and decide on the entire migration process. 

It is essential to take note that the custom modules must be written according to Drupal 9. This activity can take much time during the entire process. However, several techniques can be automated, as there are several modules to help in migration. Manual recreation may be needed too. Some projects may need field mapping while importing the website data present in different formats.

When the data is migrated, the migration team must check for errors and ensure that the correct data has been entered in the fields. Once everything is in order, you can go live with the migrated website.

Cost of the Migration

You must bear in mind that any migration activity can be tedious. It is also difficult to judge the precise estimates of Drupal 7 to Drupal 9 migration. The cost associated with the migration will depend on the content and design of the website. It will also depend on the functionalities involved and the associated custom code.

The migration strategy can be created keeping in mind the website's content, the investments involved, and the timeline. It is very important to appropriately analyze the requirements in the migration process to minimize the risk of cost escalation. Once the various features and functionalities are listed out, the developer can start the migration activity.

As mentioned earlier, it is difficult to predict the time of Drupal 7 to Drupal 9 migration. Some of our quickest migrations for medium-sized websites took around 2.5 - 3 months. On the other hand, a website of high complexity took about 5 - 6 months.

The migration to Drupal 9 is easier once you have migrated to Drupal 8 already. Drupal 9 is mostly like the last minor Drupal 8 release - Drupal 8.9. There are no huge configuration modifications or content migration and requirement to port modules. The new Drupal 9 release was mostly built on Drupal 8 by removing the deprecated unwanted APIs and updating the dependencies.

It is necessary that you update the website to the latest version of Drupal 8. Drupal 8.8 is fully compatible with Drupal 9. Hence, it is suggested to update to at least Drupal 8.8 before the migration. Our Drupal migration experts have the right experience across diverse Drupal projects. We expect that a medium complexity website can be migrated from Drupal 8 to Drupal 9 within 1 month. A high complexity website could take around 2 - 2.5 months to migrate.

Considerations before the migration

Revisit the Functionalities

You must finalize the features that you want on the new site. For example, do you wish to change the newsletters, forms, etc.? Also, it would help if you considered whether you want to make changes to the existing appearance of the website. The decision on migrating whole or part of the content must be taken as well.

Developer Skill Set

Are the developers skilled enough to carry out the migration activities? If they are not, then they must undertake adequate training before setting out with the migration. In addition, they must know about the migration's dependencies and be aware of the core code in Drupal 9.

Compatible Hosting Environment

The migration needs to keep in mind that the hosting environment must be compatible with the new Drupal version. The team must ensure that the required changes are carried out in the hosting environment to ensure a hassle-free upgrade.

Time and Budget Considerations

It is suggested that you understand the time of Drupal 7 to Drupal 9 migration. The timeline must also consider the resting of the new site and checking how the SEO of the new site is working.


Businesses must readily migrate their Drupal website to the latest version. The new version is laden with several valuable features. It is, however, difficult to assess the actual cost of the Drupal 7 to Drupal 9 migration. It depends on the size of the website and the content and features you wish to migrate.

We have undertaken several projects covering Drupal 8 to Drupal 9 migration within 200 hours. So if you are willing to migrate your website to Drupal 9, we are just a phone call away.

Jul 28 2021
Jul 28

Drupal is a very secure content management system and provides a lot of security for website owners out of the box. Drupal 8 and 9 come with flood prevention capabilities that protect against brute force login attacks on your website. However, if you want to go that extra mile and prevent access to the user/login page to anonymous users, you can use Disable Drupal Login Page module.

The module prevents access to /user/login page when accessed without a secret key and value that the admin can configure. So all access to /user/login without the secret key-value pair will result in an access denied response. This will prevent all kinds of bot access attempts on the website.

Once you configure this module you can also decide to configure the webserver to completely prevent access to /user/login when accessed without a query string. That will ensure that these login attempts would not even bootstrap Drupal and remove that unnecessary load on the server as well.

Jul 27 2021
Jul 27

This article assumes a basic knowledge of the building of custom modules, the Drupal 8 / 9 Migration system, and the processes behind creating customised migrations from a previous version of Drupal.

One of the more common components of any migration from a previous version of Drupal is the need to migrate files. In Drupal 7 there was a core ‘File’ entity type and on pretty much all of our clients' sites we would also have the contributed module File Entity enabled. This extended the core file functionality and gave the ability to add fields to the file entity, have separate file types, integrate with views and more.

As of Drupal 8.4.x and above, Drupal Core has the concept of a ‘Media’ entity type that allows you to upload, manage and reuse files and multimedia assets. This acts as a replacement for the standard core File entity upload field and once you have configured a Media entity reference field on your entity type, it allows you to reference previously uploaded files from a Media library, instead of having to upload a new file every time.

Internally, a Media entity references a file entity and this process happens automatically for uploads made through the site frontend. When you upload a file to a Media entity reference field that has been set to use the 'Media Library' field widget, Drupal will handle importing the file, creating the entry in the file_managed table, creating the Media entity and then referencing the newly created file in the file reference field on the media entity. You can then reference this newly created media entity in any other media entity reference fields that allow referencing the same media entity bundles as this field.

The Core Drupal 8 / 9 migration of files doesn’t automatically allow you to migrate from Files to Media entities. The core file migration plugin for Drupal 7 to 8 / 9 just provides a migration route for Files to Files, and any auto-generated entity to entity migrations (provided by the migrate_drupal core module) will only support a File reference field to a File reference field. However, we want the ability to migrate into Media entities, so read on to see how to accomplish this with a bit of custom code.

The Process

The process of getting Files migrated as Media entities is a two-step process. First, we need a migration to migrate the Drupal 7 Files into our Drupal 8 / 9 site as Files, and then we need one or more secondary migrations (one per file/media type) to create Media entities from those now-migrated Files.

Creating the custom module

First of all, we’ll need to create a new custom module (if you haven’t already got a custom migration module in place already!). You can name this anything you want - usually, we’d use a project name prefix followed by the name of the module but for this tutorial, we’ll just call the module ‘example_custom_migration’ for simplicity.


name: Example Custom Migration
description: Includes a custom migration for files.
package: example

type: module
core_version_requirement: ^8.8.0 || ^9.0
  - migrate:migrate

This is a minimal module info.yml file in which we include a dependency on the core migrate module.

Writing the migration source plugin

Next up we’ll need to create our custom migration source plugin. This is the plugin that we will reference in our migration(s) later on. We are going to be extending the core File migration source plugin to give the ability to filter the source files we want to migrate by file type, which we’ll need later on in order to determine which files will be referenced by which Media entity type.

We’ll name the plugin class file FileByType.php and it will live inside of our custom module in the directory src/Plugin/migrate/source. Be sure that the directory structure matches that exactly as Drupal 8 uses the PSR-4 standard for PHP autoloading. For more information about the PSR-4 standard with regards to Drupal 8 / 9 development, read this article.

We’ll start writing the class by extending the core File migration process plugin.


We only need to override two methods provided by the File class, query() and fields().

Our query() method override will handle filtering the files by a configured file type that we can pass into the plugin. The fields() method override will include the names of any extra fields that we will be returning in addition to the fields from the base File class.

The query() function

First of all, let's write the query function. The start of the function will call the parent query() method which will build up the query to query the Drupal 7 file_managed table for all files that are not stored under the temporary:// scheme, also providing the ability to only return files for a specified scheme based on the scheme configuration parameter. We don’t need to modify anything about the innards of the parent method so we can just call it here to save having the same code duplicated.

 * {@inheritdoc}
public function query() {
  $query = parent::query();
  return $query;

Next, we’ll add our customisations to support filtering the files by a specific file type. Later on, this will be passed in as a configuration option from our migration.

// Filter by file type, if configured.
if (isset($this->configuration['type'])) {
  $query->condition('f.type', $this->configuration['type']);

As we are migrating into Media entities, we may want additional data such as image alt and title text values from the Drupal 7 database. So we’ll support (optionally) returning this data as well.

// Get the alt text, if configured.
if (isset($this->configuration['get_alt'])) {
  $alt_alias = $query->addJoin('left', 'field_data_field_file_image_alt_text', 'alt', 'f.fid = %alias.entity_id');
  $query->addField($alt_alias, 'field_file_image_alt_text_value', 'alt');

// Get the title text, if configured.
if (isset($this->configuration['get_title'])) {
  $title_alias = $query->addJoin('left', 'field_data_field_file_image_title_text', 'title', 'f.fid = %alias.entity_id');
  $query->addField($title_alias, 'field_file_image_title_text_value', 'title');

Later on, when we are writing the migration for ‘Image’ media items we will be including two additional configuration lines in the call to our source plugin, get_alt and get_title. When we write the migration for ‘Document’ media items, we don’t want alt text and title text as they aren’t applicable, so we will omit them from the configuration there.

The finished query() function will look like this:

 * {@inheritdoc}
public function query() {
  $query = parent::query();

  // Filter by file type, if configured.
  if (isset($this->configuration['type'])) {
    $query->condition('f.type', $this->configuration['type']);

  // Get the alt text, if configured.
  if (isset($this->configuration['get_alt'])) {
    $alt_alias = $query->addJoin('left', 'field_data_field_file_image_alt_text', 'alt', 'f.fid = %alias.entity_id');
    $query->addField($alt_alias, 'field_file_image_alt_text_value', 'alt');

  // Get the title text, if configured.
  if (isset($this->configuration['get_title'])) {
    $title_alias = $query->addJoin('left', 'field_data_field_file_image_title_text', 'title', 'f.fid = %alias.entity_id');
    $query->addField($title_alias, 'field_file_image_title_text_value', 'title');

  return $query;

If you wanted to add any further logic in this function to return any other field data (your fieldable files may have extra field data that you need!) then you could do so here.

The fields() function

In the fields function, we want to return the additional fields that this source plugin now provides (file type, alt text, title text), in addition to the standard fields the File plugin already provides.

 * {@inheritdoc}
public function fields() {
  $fields = parent::fields();
  $fields['type'] = $this->t('The type of file.');
  $fields['alt'] = $this->t('Alt text of the file (if present)');
  $fields['title'] = $this->t('Title text of the file (if present)');
  return $fields;

We first call parent::fields() to get the list of fields from the parent method and then add our additional fields onto the $fields array afterwards. If you were to add further logic to the query() method which returned further additional fields, you would also want to add these here as well.

The finished source plugin

The finished source plugin should now look like this:

configuration['type'])) {
      $query->condition('f.type', $this->configuration['type']);

    // Get the alt text, if configured.
    if (isset($this->configuration['get_alt'])) {
      $alt_alias = $query->addJoin('left', 'field_data_field_file_image_alt_text', 'alt', 'f.fid = %alias.entity_id');
      $query->addField($alt_alias, 'field_file_image_alt_text_value', 'alt');

    // Get the title text, if configured.
    if (isset($this->configuration['get_title'])) {
      $title_alias = $query->addJoin('left', 'field_data_field_file_image_title_text', 'title', 'f.fid = %alias.entity_id');
      $query->addField($title_alias, 'field_file_image_title_text_value', 'title');

    return $query;

   * {@inheritdoc}
  public function fields() {
    $fields = parent::fields();
    $fields['type'] = $this->t('The type of file.');
    $fields['alt'] = $this->t('Alt text of the file (if present)');
    $fields['title'] = $this->t('Title text of the file (if present)');
    return $fields;


Writing the Migrations

As you will hopefully know already, since Drupal 8.1.x, migrations are now Plugins instead of Configuration, which means we can just add them into a migrations folder inside of our custom module. You no longer have to include the migrations as config in a config/install folder inside of your module or worry about deleting and re-importing said config to pick up any changes that were made. You simply need to do a cache rebuild and the changes will be picked up automatically.

The First migration - Drupal 7 Files to Drupal 8 / 9 Files

Create the migrations directory inside of your custom module which will contain this migration and the other ones later on. Then create the file that will contain our migration plugin and call it example_custom_migration.upgrade_d7_file.yml

At this point, the innards of our migration plugin definition will be pretty much the same as the core Drupal 7 migration file plugin. At this point, we are not using our custom migration source plugin that we wrote earlier. The standard d7_file plugin provided by core will suffice to initially migrate all of the files, regardless of their type.

id: upgrade_d7_file
class: Drupal\migrate\Plugin\Migration
  - 'Drupal 7'
  - Content
migration_group: migrate_drupal_7
label: 'Public files'
  plugin: d7_file
  scheme: public
    source_base_path: /path/to/your/drupal7/webroot
  fid: fid
  filename: filename
      plugin: concat
      delimiter: /
        - constants/source_base_path
        - filepath
      plugin: urlencode
    plugin: file_copy
      - '@source_full_path'
      - uri
  filemime: filemime
  status: status
  created: timestamp
  changed: timestamp
  uid: uid
  plugin: 'entity:file'

As you can see, this is pretty standard stuff for a migration plugin and we aren’t doing anything overly complex yet. This plugin definition will ensure we grab all the files from the Drupal 7 site and migrate them as files onto our Drupal 8 / 9 site.

You may notice the ‘migration_group’ key which isn’t something you would find with core migration plugins. This is an optional key that the migrate_plus module allows you to define in your migration plugin that allows you to group your migrations together and share configuration between migrations. This enables you to then run the migration(s) as a group through both the Migrate UI and through the command-line (Drush). This is a feature we use quite a lot when building Drupal to Drupal migrations! You don’t have to have migrate_plus in order to run these migrations but the grouping stuff is very useful.

Next up, we need to write the migration(s) to turn these Files into Media entities.

The Secondary migration(s) - Drupal 8 / 9 Files to Media

For this bit I’m assuming that you already have created the various media entity types in the site UI for ‘image’ and ‘document’ media types. If you haven’t, be sure to go ahead and create them and if you decide to name them something different you’ll have to update the relevant places in the scripts.


Now we have the file migration in place, we’ll begin by writing the migration for the Image media entities. Create a new file named example_custom_migration.upgrade_d7_file_to_media_image.yml inside of the migrations folder with the following contents.

id: upgrade_d7_file_to_media_image
class: Drupal\migrate\Plugin\Migration
  - 'Drupal 7'
  - Content
migration_group: migrate_drupal_7
label: 'Migrate Media image entities'
  plugin: d7_file_by_type
  scheme: public
  type: image
  get_alt: true
  get_title: true
    source_base_path: /path/to/your/drupal7/webroot
      plugin: migration_lookup
      migration: upgrade_d7_file
      source: fid
      plugin: skip_on_empty
      method: row
    plugin: migration_lookup
    migration: upgrade_d7_file
    source: fid
  field_media_image/alt: alt
  field_media_image/title: title
  status: status
  created: timestamp
  changed: timestamp
  uid: uid
  plugin: 'entity:media'
  default_bundle: image
    - upgrade_d7_file

Let’s break this down section by section.

In the source section, you can see that this time we are now using our custom source plugin d7_file_by_type that we wrote earlier. We are also passing in a couple of additional options to the plugin; get_alt and get_title that will enable the plugin to return the additional alt text and title text data that we want for our image media entities.

In the process section we write to the appropriate fields on the media entity; field_media_image/target_id and thumbnail/target_id to save the references to our file, field_media_image/alt and field_media_image/title to save the alt and title values. We also save the standard entity data like our file migration before; status, created, changed, and uid.

The destination plugin we use this time is ‘entity:media’ because we are now creating a media entity, and the default_bundle is set to ‘image’ as that’s the media bundle type we are using for this migration.

Finally, we add a required migration_dependency on our upgrade_d7_file migration. This will ensure that the migration will only run once the file one has fully ran and imported all of the available items.


The document migration will be pretty similar to the image migration that we wrote above.

id: upgrade_d7_file_to_media_document
class: Drupal\migrate\Plugin\Migration
  - 'Drupal 7'
  - Content
migration_group: migrate_drupal_7
label: 'Migrate Media file entities'
  plugin: d7_file_by_type
  scheme: public
  type: document
    source_base_path: /path/to/your/drupal7/webroot
      plugin: migration_lookup
      migration: upgrade_d7_file
      source: fid
      plugin: skip_on_empty
      method: row
    plugin: default_value
    default_value: 1
  status: status
  created: timestamp
  changed: timestamp
  uid: uid
  plugin: 'entity:media'
  default_bundle: document
    - upgrade_d7_file

The source section is the same except this time we pass in a type of document to our source plugin and as we don’t need the alt and title text data that we needed for the image media, we’ll omit the get_alt and get_title configuration lines.

The process section again is similar, except this time we are setting the referenced file inside of field_media_file/target_id and we also set the field_media_file/display to 1 which will enable the file to be displayed when viewing content. Again, we omit the get_alt and get_title bits and the rest of the configuration here are the same entity properties as before.

We keep the destination plugin the same (entity:media) but the default_bundle is changed to ‘document’.

Before running the migrations.

Before we are able to run our migrations, we need to make sure that your Drupal 8 / 9 site knows how to connect to your Drupal 7 site. If you are already mid-way through writing migrations from Drupal 7 to Drupal 8 / 9 then you will most likely already have this in place, but if not, you need to ensure your settings.php (or settings.local.php - wherever your current site database connection details are present!) has an entry with the connection details to the Drupal 7 site.

e.g. inside of settings.local.php

$databases['drupal_7']['default'] = [
  'database' => ‘your_database_name’,
  'username' => 'your_database_user_name',
  'password' => 'your_database_user_pass',
  'prefix' => '',
  'host' => 'localhost',
  'port' => '3306',
  'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
  'driver' => 'mysql',

Note the connection key drupal_7 there, in the $databases definition. We also need to ensure that our migration group knows that we should be using this key if it doesn’t already.

If you have already got a migration_group configuration setup as part of a Drupal -> Drupal site migration (you most likely will if you have migrate_plus enabled and have begun work on a migration) then ensure in the shared_configuration section at the bottom that you have the following:

    key: drupal_7

If you don’t have a migration group config already, then create a new one named migrate_plus.migration_group.migrate_drupal_7.yml

langcode: en
status: true
dependencies: {  }
id: migrate_drupal_7
label: 'Import from Drupal 7'
description: ''
source_type: 'Drupal 7'
module: null
    key: drupal_7

Put it into your site’s configuration directory (e.g. config/sync) and import the config.

If for some reason you aren’t using migrate_plus with migration groups then you’ll need to ensure in the source section of each migration plugin we have written earlier that you have

key: drupal_7

in the plugin definition. e.g. (for the document plugin this would be as follows)

  plugin: d7_file_by_type
  scheme: public
  type: document
  key: drupal_7
    source_base_path: /path/to/your/drupal7/webroot

Running the migrations

Nearly there (I promise!). Now you have your migration plugins all correct and in place, it’s time to try them out! First, ensure your module is enabled if it isn’t already (either via the extend menu in the UI or via Drush - drush en example_custom_migration).

Next, you can either try running the migrations through the UI (admin/structure/migrate) or via Drush (if you are using the migrate_tools module version 4.x / 5.x and Drush 9.x / 10.3.x OR Drush 10.4.x+ which includes most of the Drush commands the migrate_tools module included..) I’m a Drush man myself, so I’d either run the migrations individually with these commands

  • drush migrate:import upgrade_d7_file
  • drush migrate:import upgrade_d7_file_to_media_image
  • drush migrate:import upgrade_d7_file_to_media_document

or as a group (if you are using migrate_plus with the group support) with

  • drush migrate:import --group=migrate_drupal_7

although if you are writing these migrations as part of a larger migration with other migrations in the group, you’ll probably just want to run them individually to be sure they are working correctly.

All being well, after running the migrations you should find all the relevant files have been copied into your new site’s public files directory and you should be able to see all your lovely files as media entities by visiting /admin/content/media. (Great Job!)

Referencing the media in migrations that previously referenced files

Any migrations that you have previously written that referenced files and fid’s instead of media entities should now be updated. This is a relatively trivial task as the following example details. Please note that the fields you are migrating into will need to be recreated as Entity Reference fields, referencing the Media entity type. If you have let Drupal handle migrating your fields from a previous version then it will have created these fields as File entity reference fields.

This is an example of what part of your process plugin may look like before and after, on an entity migration for an image field named ‘field_images’.

Before (File)

  plugin: sub_process
  source: field_images
    target_id: fid
    alt: alt
    title: title
    width: width
    height: height

After (Media)

  plugin: sub_process
  source: field_images
      plugin: migration_lookup
      migration: upgrade_d7_file_to_media_image
      source: fid
      no_stub: true

And here is an example of what part of your process plugin would look like before and after for a document field named ‘field_documents’.

Before (File)

  plugin: sub_process
  source: field_my_documents
    target_id: fid
    display: display

After (Media)

  plugin: sub_process
  source: field_my_documents
      plugin: migration_lookup
      migration: upgrade_d7_file_to_media_document
      source: fid
      no_stub: true

If your file field in Drupal 7 allows both images and documents, then your field in Drupal 8 / 9 should allow the same. You can reference both media migrations in the process as follows:

  plugin: sub_process
  source: field_my_documents
      plugin: migration_lookup
        - upgrade_d7_file_to_media_document
        - upgrade_d7_file_to_media_image
      source: fid
      no_stub: true

Extending further

We have covered the basics on how to get images and document files migrated, but you can (and we have on lots of client’s sites) get this running for Video files as well in a similar manner with minimal changes.

You just need to create another file to media migration plugin for video files, in addition to the image and document ones already made. Ensure that the type of file passed into the source plugin section of the migration is ‘video’ and the default_bundle of your entity:media destination in the destination section is ‘video’. Then you should be hot to trot!

Bonus - How to have a dynamic file source_base_path

You may be wondering, “What if I don’t want to hard code my source_base_path in the source plugin definition of my migrations?”

This is another common requirement we have when writing our own migrations, and luckily the solution isn’t too tricky with a bit of custom code. You may find this useful if you are going to run this migration across different environments (e.g. your dev machine, testing server, production environment when the time comes) and you don’t want to keep having to change your migration plugin files each time.

In your migration source plugin for both the file and file -> media migrations, change

source_base_path: /path/to/your/drupal7/webroot


source_base_path: /

You don’t strictly have to do this as we are going to override it anyway but I think having a blank path gives a clearer indication that we haven’t explicitly set one, as we are going to override the value. Of course, you could also have a comment above the line explaining that this will be overridden if you so wish.

Migration Event Subscriber

In order to override the souce_base_path, we’ll create an Event Subscriber in our custom module. This will enable us to subscribe to the appropriate Migrate events and will allow us to modify the data at the correct point in time. For more detailed information about event subscribers, see this article we wrote way back in 2016 ‘Drupal 8 Event Subscribers - the successor to alter hooks’.

You’ll first want to create a services.yml file directly inside of the custom module as well named example_custom_migration.services.yml. This will let us define our migration subscriber so that Drupal knows about it.

    class: Drupal\example_custom_migration\D7FileMigrationSubscriber
    arguments: ['@config.factory']
      - { name: event_subscriber }

Next, create this file inside of the src folder in our custom module. You can name it what you want really but for this example, we’ll call it D7FileMigrationSubscriber.php.

configFactory = $configFactory;

   * {@inheritdoc}
  public static function getSubscribedEvents() {
    $events[MigrateEvents::PRE_IMPORT] = 'onMigrationPreImport';
    return $events;

   * Act on a migration before it imports.
  public function onMigrationPreImport(MigrateImportEvent $event) {
    $migrate_id = $event->getMigration()->id();

    // Inject the correct source_base_path to the file migrations.
    $file_migrate_ids = [

    if (in_array($migrate_id, $file_migrate_ids)) {
      $source_config = $event->getMigration()->getSourceConfiguration();
      $source_base_path = $this->configFactory->get('example_custom_migration.settings')->get('files_source_base_path');
      $source_config['constants']['source_base_path'] = $source_base_path;
      $event->getMigration()->set('source', $source_config);

There is a lot going on here which I'm not going to get into in this article. (The article I linked to above should help explain it all if you aren’t familiar with concepts such as event subscribers and dependency injection!) But the end result of this code will be to swap out the source_base_path in our source plugin configuration to one defined by a config entry named ‘example_custom_migration.settings’ with a key of ‘files_source_base_path’

Finally, all you need to do next is just pop this line into the bottom of your settings.local.php (which should be different per environment) replacing ‘/path/to/your/drupal7/webroot’ with the path to the Drupal 7 site webroot for the current environment.

$config['example_custom_migration.settings']['files_source_base_path'] = '/path/to/your/drupal7/webroot';

This will then allow you to have a different path set on a local dev build, another team member’s local dev build, testing and production servers as well! Neat huh?

Photo by Kaboompics.com on Pexels

Jul 27 2021
Jul 27

open waters podcast logo

Open Waters Podcast: Season 2, Episode 4 

In this episode, we're joined by Randy Fay from DDEV to discuss features and benefits of DDEV, the future of the project, and how you can get involved with contributing to the Drupal community. Randy provides his perspective on DDEV and the ways in which both developers and non developers can use it for projects.

Episode Transcript

Mario Hernandez: Hello, everybody welcome. We are very excited here. Shrop and I are very excited to have with us, Randy Fay, who will be talking to us about DDEV and what's coming down the pipe with that. We are very excited about that because we here, at Mediacurrent, use DDEV for most of our projects, and we are loving the product and looking forward to what's coming ahead. So thanks for joining us, Randy. We appreciate it. We just had you actually do a knowledge share for our team, our development team, not too long ago. It was just last week. I believe it was. And now you're back with us. So we appreciate you taking the time from your really busy schedule and talk about DDEV. There is some great news happening with DDEV, but before we get into that, tell us a little bit about your role today and how you became interested in open source. What brought you to this point as a prolific maintainer of a key piece of open-source software like DDEV?

Randy Fay: You bet, I'm glad to be here. Again, my name's Randy Fay, I'm R. Fay most places, Randy Fay some places, and I live in far western Colorado, right near the Utah border in a little town called Palisade. And I ended up here because my wife and I took a long bicycle journey through the Americas from 2006 to 2009, and at the end of that time, my parents were getting old and we decided to come, you know, take a turn. Our turn history ended up being quite long now, but take a turn with helping them out. And so that's, that's where they were and that's where we are. But the open source thing is, of course, when we took two and a half years out of our life to do bicycle touring, there was going to be a change when we got back, and I've worked in various kinds of software development since the early eighties, but of course, like everybody else, I got more and more excited about web stuff and I'd never, I benefited from open source over the years.

Randy Fay: I've done lots of, you know, Linux work over the years and all that kind of thing, but I benefited from open source, but never contributed at all. And so one big thought was, well, how could I, how could I figure out what this open source thing is? And so when we were restarting our life after our bike tour, Drupal was there. I felt like I had some idea what was going on with Drupal. And I said, well, maybe I could figure out how to contribute to Drupal. And you know, how Drupal is, if you stick your finger in there and you figure out who the players are, you will be sucked in. And you know, you can spend the rest of your life...just working on that. And I did that for a couple of years and had had a great time, met wonderful people and got very involved in the Drupal community, but it was Drupal that brought me into the open-source world.

Randy Fay: So anyway, so I did that for a long time and then I burned out pretty good. I even did a whole series of sessions at a Drupalcon and stuff like that on burnout. And I got flamed out pretty good. Couldn't do it anymore. Worked on various things for a few years, but about maybe five and a half years ago, something like that, I went to work for a company named DRUD that was developing a Golang Kubernetes hosting product. And they also had DDEV going, although it was very much in its infancy, and I really liked DDEV. I liked it a lot more than the hosting part. Maybe because, I don't know, I just, I just liked it a lot. And I started to feel like it was useful and they were amazingly generous. They just let me go ahead and maintain DDEV for, it must have been at least four years and paid me to do it and rarely asked anything in return. Every so often they'd want some kind of integration with the process and that kind of thing. But that's how I ended up maintaining DDEV and got to continue doing that through their amazing generosity. That was a long answer to a short question.

Mark Shropshire: That's great. I love hearing these stories, you know, about how people get to where they are today, because, you know, it's also humbling to hear these stories, but you know, Randy, when I've interacted with you, it just amazes me how quickly you respond and support the community. And you're just always had such a great positive attitude. But you seem like this, this huge persona, you know, coming in like that, like the maintainer of DDEV and they got real personal with Mario and Shrop and helped, helped us with our problems and all that. But it's great to hear just this real human stories. There's, there's the human behind the keyboard, right?

Mario Hernandez: I can definitely attest to Randy's generosity with helping. I mean, no matter what I ask him, he's always there. He never judges, is always willing to help and has got me out of some pretty big holes with things that I work on with DDEV. So that's excellent to hear.

Randy Fay: It's lovely being a member of a community where you feel like you have something useful to do. I mean, I, I love it when people ask questions and everybody is at a different place. I mean, there's so many things going on in our heads, trying to understand all the different technologies we're working on, and there's so many different layers of all those technologies. It is astonishing and crazy. And so we're all at a different place and how much we understand on those. And so it's, it's always great to work with people at whatever level they're at to try to go to the next level, even though it's...I can't, it's hard to believe anybody can do any of this stuff with all the layers of stuff you have to know. It's crazy.

Mark Shropshire: I agree. I agree. And that, that's some of what you just said is part of why I love open source so much. And I know we've said the word, or if you want to call it a word, DDEV a lot so far, cause that's really what one of the things we're here to talk about, and in addition to Randy you, as a community member, but so while I know a lot of our listeners are really familiar with DDEV and what that means, and we love it here at Mediacurrent, it's our go-to environment. We made that choice a while back and and have been really pleased with it. But for those who don't know what DDEV is, what that means, can you give us a high level overview of this really fascinating open-source project?

Randy Fay: You bet, you bet. So everybody needs, in web development or really in any other context, a developer has to be able to work in an environment that's their own, where they're not going to break something else or break somebody else's world or that kind of thing. And I mean, probably most of us, sometime in our shaded past, actually edited files on a server and hoped that it worked out, but don't do that, right? If you're going to be a real developer, you're going to have your own environment to develop in, and you're going to be able to see the results of what you do locally before you inflict it on somebody else and you're going to have processes to make that work. So DDEV is a local development environment. It's, it's a way for people to do web development. It works with PHP, works with HTML and JavaScript, and probably you could do lots of other things with it, but the most of the communities that are involved with it are PHP, Drupal, and TYPO3 are the biggest ones, but the big idea is it's a, it's a wrapper written in Go on Docker Compose and Docker.

Randy Fay: And so it basically runs a web server and a database server inside containers. So they're actually running inside Linux containers. So it's more like a real-world situation but it looks the same on every platform. So, and so, in other words, the containers are the same on every platform. They're exactly the same. So if you're working on windows or WSL Two, or MacOS or Mac M1, or...people even work on Chromebooks, or if you're working on Linux, I mean, Chromebook just offers Linux. So if you're working on any links, distribution, everything works the same. It's using the same containers underneath.

Mark Shropshire: Sorry, I didn't mean to interrupt, but I was just thinking I'm pretty sure I got it working on my Raspberry PI a while back, thanks to all the work from the community, too, which is I had to do it just to do it.

Randy Fay: It actually works pretty well on Raspberry Pi. The trick about Raspberry Pi, it's ARM 64. So you'd have to set up, I think, I think you have to get the current version of Ubuntu, it's the easiest way. I wrote a blog post about it, so you could search for DDEV and Raspberry Pi, and it, it actually is decent. It it could be a little faster, but it's decent.

Mario Hernandez: So you mentioned earlier, Randy, that you worked for DRUD, a company who was building this product and DDEV, and we know that, some of you may know, that the company split up and for a while, the community was wondering what was going to happen with DDEV, but just this week we heard some great news. Sounds like great news. DDEV has been acquired by Fruition. And is there something you can tell us about this? What does this mean to DDEV? What does it mean to the community? What should the community expect about this new acquisition?

Randy Fay: Yeah, you bet. So the company named DDEV, you know. Companies, come and go, it was called DDEV, it used to be called DRUD, it went by several names, but, you know, not everything always works out and the money doesn't always hold out. And it's just the way it is sometimes. And somebody pulled the plug. I don't know who, but somebody pulled the plug. And so the company named DDEV shut down. The DDEV project was never in any question. The DDEV local project was never in any question because I'm committed to it and it's an open-source project and it was going forward anyway, but there was a little bit of uncertainty about whether the project might have to be forked, or the name might have to change because there is a trademark, a DDEV trademark.

Randy Fay: So there was some uncertainty about that. And the company named Fruition in Denver has bought the what, what, what would it be? The software that (the) DDEV company wanted to make money off of, and didn't end up doing that. They bought that software and they got the DDEV trademark name with it. And they've been very generous to say that they're gonna make sure that the DDEV local project remains open source, and then it doesn't have to change its name. And...the thinking isn't fully thought out, but they're, they're thinking that they would like to be the the central place to try to organize financing for the project as it goes forward. So there's a number of companies that have stepped up and said that they'd like to support the project and you know, maybe even Mediacurrent will want to, and it may be that we're, you know, these are things that we're still talking about, but Fruition may want to organize that financially, or maybe we'll figure out another way to do it, but anyway, they're just putting their foot in there and trying to make sure that it's clear to everybody that there's nothing wrong.

Randy Fay: Everything's good. And and that the name will continue and there's, there's no problems.

Mario Hernandez: Will you be still involved in maintaining the product, and how do you feel about this news about Fruition acquiring DDEV?

Randy Fay: I'm glad that they got it worked out. It doesn't change anything for me right now because I'm just supporting the project. I'm the maintainer of the project, and I continue to be the maintainer of the project. So it doesn't change anything for me. I'm not becoming a Fruition employee. They're, you know, they've been through a lot getting this done, so they haven't even been able to think about the finances yet. I'm sure. But for me, it just resolves the primary thing it does is resolve some ambiguity about whether we would have to fork or, you know, or change the name or something like that. So it's all, it's all very good and they're very nice people and have been very generous trying to sort this out. And they...I think they're taking on a big task with their ambitions, with the hosting software as well. So they've got a lot going on right now and we'll see how this all, how this all plays out. It's all good.

Mario Hernandez: It sounds like it's a great win for the community.

Mark Shropshire: Yeah, this is such great news. And it's it's kind of a testament how open source can continue even around business changes and things that happen in that world. That's not to say it always works out. We've all read stories and heard things, you know, but it's great to hear this and, and we're really happy that you're there and there's still keep supporting that, Randy, and I'd love to talk more about like what kind of support you need, too, later in the podcast. But because I'm sure, you know, you'd love to continue to have more PRs and people helping the project. But yeah, go ahead. Did you have, did you have anything immediate in mind on that, Randy?

Randy Fay: No. That's, good. I, like I say, the thinking isn't done and stuff, but it's all good. It's all good. It's gonna work out great. And, there've been a couple of excellent things that have happened in the funding realm already. TagOne has been supporting specific features. And so that's an easy way to support the project. So they just made me a contractor and have been paying me to do features that are important to some of their projects. And so I, you know, I just work a few, a few hours a week on their project, you know, on their features. And those are big wins for the whole community. And I expect Fruition is going to do the same kind of thing.

Randy Fay: And I think there's other companies that may want to do that. And there may be other companies that just say, Hey, we'll take five hours, we'll take five hours a week. And just, you know, just support the community or just, or, or, you know, maybe dedicated to what they actually need as far as features, but it's all, it's all good. So TagOne stepped up, now Fruition stepped up. There are other companies that have certainly made noise, but of course, as you know, it hasn't been clear how we would do that until this part sorted out. So that's another reason. This is really good is that now that this is sorted out, we can sort out the, all the people that have wanted to financially support the project.

Mark Shropshire: Yeah. That's so great to hear. Thanks for the additional detail on that. So, jumping back to the tech a little bit on DDEV, what are some of the key advantages that you see of around DDEV over other local development tech that's maybe been around or is around currently?

Randy Fay: You bet. You bet. So the original way that you did local development with the website is you'd put Apache on your computer and you'd put MySQL on your computer and you would hook them up and it actually would work great if you were if you were a whiz at Sysadmin, I was always a whiz at Sysadmin. It was my thing, you know, I liked it. It was, you know, I do Linux and I do Windows and I do Mac and it was all, I thought it was great. In fact, I was pretty skeptical of DDEV when I first started using it, because if you're a whiz, then you can just run that stuff. You can, you know, it all runs on every computer and it's great. But not everybody wants to spend their life configuring Apache or Engine X or MySQL, and the thing that amazed me when I started working on DDEV that really really shown for me was that every project could have different configuration.

Randy Fay: So back when I used to maintain everything on my own computer, that wasn't true, right? You have it set up for PHP 5.6 and that's it. You couldn't have one project on PHP 5.6 and another one on PHP 7, PHP 7 wasn't around then, but you just, it wasn't something you could do. And so I started realizing that with DDEV, you could have every project be different and customized, and you could do it right. And so that's because it's a Docker based, DDEv uses Docker underneath and all the stuff underneath is per project, and it is configurable for that project. So that's the huge difference between the Docker generation and the on the machine generation. The difference between DDEV and other Docker based local development environments like Lando or Doxil, which by the way, are great, great products and have lots of supporters and lots of great things to say about them.

Randy Fay: DDEV has got full cross, full support across all these platforms. So many different platforms, which you won't really find that level of support. DDEV is actually tested on all the different platforms. So it runs the full test suite on all the different platforms. DDEV is interoperable with many different versions of Docker. And we think the performance is great. On MacOS it's always a challenge. I'm still working on new ways to improve that in MacOS. So you can look for mutagen, mutagen integration coming up. I think the biggest thing, though, and this actually was playing out in Twitter today, is that DDEV doesn't assume that it owns your machine. So when you install DDEv, DDEV is going to be as respectful as it can. The only thing that I know of that requires you to use Sudu is if you're not using the regular DDEV.site URLs or host names and then it has to...edit the Etsy host's file, but in general, DDEV tries not to do anything to your machine. It won't install Docker, it won't overwrite Docker, it won't kill off your Docker, all of those kinds of things. And I think that's a big deal. But maybe, maybe you can put in the notes. I wrote a thing called "What's so different about DDEV Local?" Maybe you can put a link to that in the show notes.

Mario Hernandez: So I can certainly personally attest I was trying to, I originally got an M1 Mac and was trying to get other development environments set up and I was unfortunately not able to, but DDEV just worked for me, you know, the first try. And so, so that's great to have that kind of support. But, as far as you know, the efficiencies that DDEV provides besides the support, what are other efficiencies that DDEV provides to help teams? Is it something that non-developers can use to run their sites locally and test, or is this mainly just for developers?

Randy Fay: No, actually lots of, anybody who needs to evaluate a site will often do it or, you know, to evaluate or to test a site. It, all those kinds of things, there's actually an obscure feature where you can actually run websites using it. I call it casual web hosting, but I run my little websites using DDEV. That's that's not what DDEV was intended for, but people asked for it for years. And so they finally did it and it actually works pretty well. But it is definitely, it is definitely not managed web hosting or anything like that. So you wouldn't, you wouldn't put a big customer site on that under any circumstances. So the biggest thing about teams is that you check in your configuration for the project. So each project, you just check in the DDEV directory, the dot DDEV directorty, you check it in, and then everybody can check that out and DDEV has already configured for them.

Randy Fay: And so usually a team lead would configure and check in DDEV, and then all the other members of the team can just DDEV start and DDEV launch and get to work and it's already configured, even if they're even if the team lead was on windows and somebody else is on Mac or Linux, it'll just go. And obviously there's going to be caveats there, but really it pretty much works that way. So we're going to do at at Drupal Camp Colorado, I don't know whether, you know, Truls (Steenstrup Yggeseth) who's a Norwegian developer who is kind of an expert at setting up DDEV for teams. He's done it for two different companies. He's the guy that makes that work for two different companies. So he and I are doing a session, an hour-long session at Drupal Camp Colorado, which is free. And we're gonna, it's about, it's about teams and DDev. So we'd love to have you at that.

Mark Shropshire: Oh, that's great. Yeah. And you know, just to reinforce, this we'll definitely add a lot of these links and items to the show notes, so that it's all available. So don't worry. And if you're listening, go Google for it, just check out the show notes. And we've already got that link in our notes here from you, Randy, so thank you for that. So I know you mentioned earlier you know, some of the platforms or frameworks that run on DDEV include, you know, Drupal, TYPO3, what are some of the others of interest? And are there any others that, you know, are maybe coming up? But I know you've got quite a few.

Randy Fay: Yeah, yeah. I mean, we got a really all versions of Drupal six to nine, WordPress, Oracle, TYPO3, Shopware six, Magento one, Magento two, I might've forgotten about one or two, but really, lots of people....you know, because we have explicit support for these and we create settings files and stuff, it doesn't actually mean that much to anybody that understands how to do a settings file. So, all it means basically is that DDEV will generate some settings files for you, so you can get up running really, really fast. There's...no PHP project that you can't run on DDEV, really no HTML, JavaScript, Node, whatever you can run them all on DDEV. It just, it requires the same setup that you would do in any other, in any other environment. Just...DDEV, it just makes like Drupal so easy.

Randy Fay: Cause you do a DDEV config and a DDEV start, and it's already configured. You don't even, you don't know where the database is, you don't care where the database is. You don't, you didn't do the settings file. It's just there, but that's just a settings file. It's not like, we all know how to do a settings file so we could all do that by hand. Then I'm pretty sure on like on Lando and Doxil, you have to do the settings file yourself. Well, that's fine. There's nothing wrong with that. It just makes it, I don't know. It's a little addictive. So that that's mostly what the framework stuff is. It's icing on the cake, but it's not the fundamentals, but it feels like the fundamentals because everybody gets used to it.

Mark Shropshire: It does, because I know when I'm in development mode and not a DevOps mode, I want to just worry about the code and get into the code. And so if it saves, you know, that automation save that time and you know, in an agency situation like Mario and I are in, we're popping in different projects all the time and spinning things up, spinning things. I mean, it becomes even more so a benefit, even though you do that settings file once, you know, usually, and then it's done, but yeah, totally agree. That's great insight. And I think, Mario, we've even had, we've even had some projects where we've run Gatsby in DDEV and some other node things like Randy mentioned.

Mario Hernandez: You know, shameless plug here. I actually, with the help of Randy, I wrote a blog post. I think it was late last year where I configure an environment and since I do a lot of training myself, training workshops, I configure an environment where the students would just run DDEV start and they will have everything from, you know, obviously Drupal, PHP, everything else, but also NVM, NPM, node and everything pre-configured and running from the containers, including Pattern Lab, which will run from the containers. And by sharing some ports, you can literally have an NPM watch task watch your changes and everything in the containers. Pattern Lab will even reload the browser for you, all running from the container. So it is incredible what you can do with it. So highly recommend if you are a developer to look into it. So, now that we talked a little bit about the DDEV, what it does, what it can do and how cool it is, what can you tell us, Randy, about what's coming up for DDEV?

Randy Fay: Well, I'm really excited about what I've been spent working on the last the last few weeks I already mentioned it. It's mutagen passing speed up. The big problem on MacOS and to some extent on Windows is that Docker is slow updating files between the host and the container. And so there's a workaround for that. You can call it caching, or you can call it asynchronous updates. But there's a project called mutagen that's another open source project that has been working on trying to solve that problem for some time. And it actually has pretty good potential. Basically what happens with it is when you make a change in the container, that change is immediately available to like the web server or a PHP FPM. And so it doesn't have to wait for that to sync before it is used.

Randy Fay: So that's not the way it is in current Docker setups. In, current Docker setups, every file change requires everything to happen immediately. Anyway, mutagen can be two to 10 times faster at like a, at like a Drupal nine installer or something like that. I've been doing some timing on it. Very, very impressive. And that's fast, I'm talking about faster than NFS, which is the other technique that we've been recommending for a long time. The complexity of mutagen is that...you can introduce conflicts by touching something on the Windows side or the Mac side, and also inside the container. The consistency stuff is hard and mutagen is good at it. But there's a lot of workarounds that DDEV is having to do to make that go. But I think you'll see an alpha of that in the next couple of weeks.

Randy Fay: And I hope, I'd love to have everybody try it and get their feedback. It is lovely to work with. The worry always is about consistency. Would some files suddenly go away on you that you didn't mean that to happen, that kind of thing. So consistency is the big deal. Also (developer) Ofer Shaal has been working like crazy making gitpod work with D dev. So there's a whole project called DDEV gitpod, (https://github.com/shaal/ddev-gitpod) that will just bring you up a whole Drupal, a whole Drupal nine set up, boom, there you are. By the way, Ofer likes to say boom. So I'm going to say boom a few times, you can put the boom into the release notes. And so, you can try that out and it's just lovely, but the next step, he's transforming that for Drupal contributions so that you can just say here, and this, this project is called Drupal pod capital D capital P.

Randy Fay: So Shaal drupalpod, and he's got it to where you can visit an issue on drupal.org and you can do an issue fork or contribute to an issue fork right there in your browser. Now I should have started by saying what gitpod is. Gitpod is a way to run a Linux computer in the browser. It's basically giving you a free Linux computer that's fully configurable in the browser with VS code. So it's got a very nice IDE. So if you bring up DDEV gitpod, for example, you have all of DDEV right there in your browser, all of it. You can, immediately do debugging. Ofer has done a number of demonstrations of this. You just spin up, you go to any PR or you go to any project on GitHub, click the gitpod link, and boom, you have got that boom in there, again for you, Ofer, you have it up and running and you can debug with XD bug in VS code without doing anything, nothing at all.

Randy Fay: So it's right there. It's got great potential for DrupalCons for contribution days. Both of these have enormous potential for that because you don't, if you've ever worked in that, one of the contribution days at DrupalCon about half the day can be spent helping people get a local environment set up and they've all got their own computer and it all has to be set up differently. And with with these various ideas that Ofer is spinning off so fast, all that goes away and it can all be done consistently in gitpod. It's an amazing demonstration. I don't think it probably works as well on a podcast.

Mark Shropshire: Yeah, yeah, that's right. This is audio only, but Ofer, he is on tour. It seems like giving demos, he gave a demo or a Drupal Camp Asheville unconference, and it blew my mind. I was immediately posting links and I've already got those listed now for the show notes, but I was posting links in our developers channel cause I was so excited. I saw the potential in Drupal pod, but I don't think I realized there was DDEV gitpod. So thanks for mentioning that, Randy.

Randy Fay: Yeah, well that's what Drupal pod is, too. Drupal pod just uses DDEV inside gitpod, but it's focused on Drupal issues. So it's focused on Drupal. And so that, I mean, that's gitpod is DDEV in gitpod.

Mark Shropshire: I see. Yeah, that makes sense. Drupal pod is for the issue queue side of things.

Randy Fay: Ofer and I are going to do a demo of a Drupal pod probably at Drupal Camp Colorado. I think, don't they always have like an IT day? I think we have a slot on that.

Mark Shropshire: That is fantastic. I guess we're at a point here where we can we can start to wrap up a bit. I mean, you've mentioned a few fantastic trainings already. So I would tell everyone to kind of check out the Drupal Camp Colorado website. We'll get links in the show notes. And also I think there's some training coming up with, with Mike Anello, too, Randy.

Randy Fay: Yeah, we're doing we're doing at, at Drupal Camp Colorado. We're doing a half day training with Mike Anello. If you haven't done one of Mike's classes, every one he does is wonderful, but he's been doing DDEV for years. He does this whole, like year-long Drupal thing to take you from zero to expert in a year. He does, he does all kinds of wonderful things. But he also does Composer, which I highly recommend his Composer class, but he and I are doing DDEV local, beginner to expert half day at Drupal Camp Colorado. Yeah.

Mario Hernandez: Mike...I have worked with them before and attended this class, actually. Mark Shropshire: He's fantastic. And a great community member. I highly encourage folks to check that out for sure. So I think that should do it for today. We really appreciate it there, Randy, taking the time to join us again and give us all this great information, especially it looks like the future looks very bright for DDEV and makes us all very happy here at Mediacurrent and I'm sure a lot of the community members out there, so boom, there you go.

Mark Shropshire: I like it. I'll drop a boom in now. It's like, it's so much better.

Mario Hernandez: So thanks again, Randy. We appreciate it. And anything else, Shrop, you'd like to close with?

Mark Shropshire: No, no, just encourage everybody to, if you haven't used DDEV, go check it out. We've got links for all of Randy's. Well, not all of Randy's places on the internet, but at least some places I know I looked for Randy and that's his website, GitHub links and Twitter. So definitely check that out and I encourage, also, this is open source, you know, Randy can't do everything, and I encourage folks to help with the project in whatever way they can, organizations or individuals.

Randy Fay: Yeah. Yeah. That's what I was going to follow up with that, too. DDEV Is a community of people and it's, you know, when there's a whole bunch of different Slack groups, there's DDEV in the Drupal slack and in the TYPO3 Slack, but DDEV depends on everybody learning new things and pioneering new approaches and helping each other more than anything else. And those communities where people are listening and helping people at all levels when they land are wonderful things. So remember that DDEV is a community project and you're part of it. And you're welcome there.

Mark Shropshire: Well, that can't say it any better than that. Thank you so much for your time today, Randy. We really appreciate it. And now we know it's precious, so thank you.


Jul 27 2021
Jul 27


Credits & Thanks

Thank you to:

About the Sitemap Module

The Sitemap module provides an HTML sitemap that gives visitors an overview of your website. It also displays RSS feeds for blogs and categories.

The Sitemap module makes it easier for visitors to find content and that improves SEO. This helpful page can increase visitor time on site and reduce bounce rate.

Search engines will also crawl the HTML sitemap which, along with the XML sitemap, increases positive exposure for your content.

Install and Enable the Sitemap Module

  1. Install the Sitemap module on your server. (Go here for more instructions on installing modules.)
  2. Go to the Extend page: Click Manage > Extend (Coffee: “extend”) or visit https://yourDrupalSite.dev/admin/modules in your browser.

    enabling the drupal sitemap module

  3. Select the checkbox next to Sitemap.
  4. Click the Install button at the bottom of the page.

Configure Permissions for the Sitemap Module

  1. Click Manage > People > Permissions (Coffee: “perm”) or visit https://yourDrupalSite.dev/admin/people/permissions in your browser.

    drupal sitemap module permissions

  2. Select the appropriate checkbox to give yourself permissions for “Administer sitemap” if necessary.
  3. Since you want visitors to view the sitemap, you’ll need to select the check boxes to allow Anonymous User and Authenticated User to “View published sitemap”.
  4. Click the Save permissions button at the bottom of the page.

Configure the Sitemap module

  1. Click Manage > Configuration > Search and metadata > Sitemap (Coffee: “sitemap”) or visit https://yourDrupalSite.dev/admin/config/search/sitemap in your browser.

    configuring the drupal sitemap module

  2. In the Page title field, add the title of the page using some keywords or your site name.
  3. Add some text to the Sitemap message field that will display at the top of the page as an introduction to the page listing. This helps the page look more like a natural page on your website, and not just a “sitemap”. You can make this as long or as short as you like.

    drupal sitemap module content configuration

  4. Within the SITEMAP CONTENT section, select the appropriate check boxes. You’ll likely want your Main navigation and any other visitor-facing menus along with your primary Vocabularies (tags and categories).

    drupal sitemap module configuration settings section

  5. Within the SITEMAP SETTINGS section, make sure the Show titles checkbox is selected.
  6. Click the Save configuration button at the bottom of the page.

You can view the sitemap at https://yourDrupalSite.dev/sitemap.

what the drupal sitemap looks like

The little orange icons next to each section are links to RSS feeds. Visitors who want to subscribe to your site and return when you’ve published new content will use that link in their newsreader applications.

Did you like this walkthrough? Please tell your friends about it!

twiter social icon linkedin social icon pinterest social icon

Jul 27 2021
Jul 27

Every strategic initiative begins with a vision. Drupal’s success as an opensource project substantially thrives on its vision for strategic initiatives. The adoption of continuous innovation and strategic initiatives since Drupal 7 is what distinguishes it from the rest. With successful past initiatives like the Configuration Management initiative (CMI), the Web services initiative, Layout initiative, Media initiative and more, the Drupal community is all charged up to be working on many more initiatives as you are reading this. 

But what exactly are strategic initiatives? What initiatives are Drupal working on? Who makes them? Why should you care? Read on to find answers to these burning questions.

Drupal Strategic Initiatives

What are Strategic Initiatives?

Thomas Edison – the man who garnered over 1000 patents - had once said in an interview – “I have not failed 10,000 times but have successfully found 10,000 ways that will not work”. Success comes when you embrace changes that can lead you to your end goal. The day you stop evolving is the day you stop growing. Strategic initiatives are typically sparked from a need for a change that guides an organization towards its future goals. It fuels growth and development of a product or organization.

How are Drupal’s Core Strategic Initiatives formulated?

As a continuously evolving opensource project, its strategic initiatives must always result in a breakthrough for Drupal. But how does Drupal’s project lead - Dries Buytaert – come up with these initiatives? 

  • They are backed by solid data. Regular surveys and usability studies are conducted to help build this data. This is usually done after every major Drupal release.
  • Fueled by a vision to build superlative digital experiences focusing mainly on non-technical content authors and site builders.
  • Market relevancy and competitor research is performed to ensure improvements on editorial, developer and customer experiences are delivered.
  • The initiative ideas are validated via community collaboration and discussions.

Initiative Stages

Proposed Stage: This is the beginning stage of the initiative where the initiative is recommended by Dries or the Drupal community members.

Planned Stage: This is when the initiative is nurtured with detailed plans. A strong team of initiative contributors is created who set goals and plans for the initiative.

Active Stage: This stage is where the real work happens, and the initiative comes alive.

What are the current initiatives Drupal is working on?

At DrupalCon North America 2021, the audience witnessed a first-of-its-kind “Initiative days” program where each day was dedicated to one initiative. Here the initiatives were introduced, discussed, and contribution sprints were also held at the end the program. 

  • Decoupled Menus Initiative

This initiative was proposed by Dries during his DrupalCon Global 2020 keynote speech. The goal of this initiative is to build APIs and documentation that can enable JavaScript frontend developers to integrate Drupal menus to the frontend in the best way possible. It also aims at offering content editors and site builders with an easy and intuitive way to build menus on Drupal with very less to no code. However, the broader goal of this initiative is to create a pattern that can be replicated to build various decoupled components, thus making Drupal the best decoupled CMS in the market.

  • Easy Out of The Box Initiative

During a user survey at a DrupalCon in 2019, it was gathered that many users preferred Drupal over other CMSs’ but only after a while of using it. Simply put, Drupal wasn’t as much of a CMS choice of a beginner user as much it was of an expert Drupal user. Which meant that Drupal needed to be more acceptable even at the beginner level. The goal of the Easy Out Of The Box (EOOTB) initiative is to make Drupal easy right out of the box for non-technical users as well. It bundles the three initiatives together – Layout, Media and Claro – to offer unmatched and simplified user experiences.

  • Automated Updates Initiative

Automated updates was one of the highest requested Drupal features in a survey conducted in 2020. The vision of this initiative is to address the challenges faced by small to midsized businesses in updating their Drupal sites manually. It aims at ensuring the website is safe to update and verify updates with package signing. Updates applied should also be able to be rolled back in case of any errors. 

  • Drupal 10 Readiness Initiative

Similar to the success of the Drupal 9 readiness initiative that ensured a smooth and on-time release of Drupal 9 by June 2020, the Drupal 10 readiness initiative aims at guaranteeing a timely release of Drupal 10 by June 2022. Along with an on-time release, the goals are also to get Drupal 10 compatible with the latest versions of the dependencies like PHP, Symfony, jQuery, Guzzle and more. Older modules, themes and other dependencies will also need to be deprecated.

  • New Front-end Theme (Olivero) Initiative

The goal of this initiative is to build a fresh new front-end theme with many improvements than what we had previously in Bartik. Olivero is going to be a modern theme with a positive and powerful look and feel. It aims at offering functionality that can support new features like the layout builder, embedded media and more. It will also be WCAG AA conformant ensuring the theme passes Drupal’s accessibility standards.

  • Project Browser Initiative

The Project browser initiative is at its very early stages – the planning stage. The initiative was proposed by Dries during DrupalCon North America 2021. The vision is to build a project browser that makes it easy for users to find and install modules without using command line. It aims at making module discovery and installation easy and fast.

Jul 26 2021
Jul 26

It’s been 10 years of not only teaching Drupal Career Online; but also working to attract people into Drupal careers as we market and do outreach for our 12-week course. We’ve made presentations to local and state workforce boards, the national workforce association, many Drupal Camp and Con sessions, and correspond with individuals, businesses, potential education partners and field inquiries every week about Drupal, working in Drupal and the DCO from all over the world.  We've become a bit of a Drupal recruiter. 

After a decade of explaining what Drupal is, finding answers, and collecting some pretty good information, we’ve compiled a solid list of Drupal Career Resources, now a fixture on our site. So, in the spirit of our Top 10 List anniversary series, here is a good one to use when you run into someone who you think might be a good addition to the Drupal Community, but needs some insight and background. Let us know if you have any other great resources; and go forth and attract.

#1:  Web Developers and Digital Designers Occupational Outlook HandbookThe facts on web developer careers from the US Department of Labor, Bureau of Labor statistics with a lot of great info., including a description of the job, geographic salary information, as well as future job prospects. 

#2: How do I get a Job In Drupal?The OS Training interview with our own MIke Anello: An oldie but a goody; with links to the audio of the expert-rich Drupal Career Trailhead panel presentation at DrupalCon Austin 2015. 

#3: Indeed Build a Career You’ll Love: Drupal DeveloperIndeed’s career overview, including links to average salaries, geographic statistics, job openings, common benefits and salary comparisons.

#4 Drupal Statistics & FactsA fun piece about Drupal history, facts and how it compares to other CMSs.

#5: Everything you need to know Before Starting a Drupal CareerLondon-based Cocoon provides a good, honest description of the elements, issues and steps to a Drupal Career. 

#6 Case Study: AmyJune HinelineSome inspiration and insight from a DCO alumna, and winner of the Drupal Community’s 2021 Aaron Winborn Award.

 #7 Drupal for DevelopersGreat descriptions and material on the markets and opportunities for developers considering Drupal as a CMS

#8 Drupical.comInteractive map with a calendar of Drupal events all over the world.

#9 DCO Scholarship PageWe can't help but promote the three amazing scholarship programs through Palantir.net, Bounteous and the Drupal Association that are helping to attract more, and more diverse Drupal talent!

#10 Taste of Drupal registrationThe sign-up sheet to attend the Taste of Drupal no-cost mini information webinars that Mike Anello leads in advance of the Spring and Fall sessions of the DCO. Next TOD is August 11!

The deadline to apply for the Fall 2021 session of Drupal Career Online is August 27th, with classes beginning August 30.  

Jul 26 2021
Jul 26

Is there a Drupal 9 community-supported platform for organizing a DrupalCamp or Drupal event? What happened to the Conference Organizing Distribution (COD)? Join us on the 4th Tuesday (tomorrow) of the month at 2 PM EST to help contribute to building the next Drupal Events Platform. Join our Meeting Here.

Earlier this year, the Drupal Event Organizer's Working Group (EOWG), took a page out of the infamous Driesnote’s and announced the three initiatives for the working group to make a priority. The three initiatives are: Getting Started with Drupal, Drupal Events Database, and the Drupal Event Platform. You can read about each of the initiatives here.  

The Drupal Event Platform (DEP) initiative is aiming to solve a challenge for all event organizers, the website. The event website is one of the most important and laborious tasks associated with producing a quality Drupal event. For some events, the website is the main application that helps organize and build the entire experience from collecting session submissions to assigning presentations to the schedule.

The Drupal Event Platform (DEP) initiative is forming a committee within the Drupal Event Organizers Working Group (EOWG) that is looking to reduce the time and resources it takes to create an event website site through the creation of a flexible and customizable website starter kit for event organizers.


  • Focus the website creation efforts of event organizers on a single open-source platform to reduce duplication of efforts

  • Create an MVP (minimal viable product) that can meet the needs of at least 80% of Drupal events globally

  • Reach and maintain adoption by at least 40% of all Drupal events globally

  • Model for Drupal best practices including accessibility, usability, inclusive design, documentation, security, performance, and internationalization

  • Provide an extensible, modular platform that allows event organizers to choose to use default functionality or build custom components

Join us on the 4th Tuesday of the Month at 2pm EST.

For more information on how to join the meeting visit The Drupal Event Platform (DEP) initiative page today.

Jul 23 2021
Jul 23

Websites are increasingly becoming an essential marketing tool for businesses. It helps companies reach out to a more influential audience at a relatively lower cost and enhance conversion rates. Websites are also used as a means of providing information about the portfolio of solutions provided by businesses.

As competition increases, there is a need to enhance website ranking during a keyword search. Therefore, you must adhere to the best Google ranking factors to ensure your website ranks high during a keyword search. We will take you through some of the Google ranking factors in this article.

Technical SEO Google Ranking Factors

Ensuring that you are adopting technical SEO best practices can be daunting. Therefore, you may take the help of a professional web design and development company to ensure you adhere to the best practices.

Easy Crawling for Search Engines

One of the critical Google search engine ranking factors is the use of a sitemap. It helps a search engine to index the web pages more thoroughly and quickly. It provides better visibility of the web pages to the users. The crawlers can understand the structure of the website better and can ascertain where the pages are located. You can utilize software like Screaming Frog to check the presence of the sitemap.

You must also check the Sitemap section at the Google Search Console to inform you if the sitemap was submitted and the number of indexed URLs. It can also notify you if there are any problems encountered. You can also check the sitemap for errors by using various XML validator tools.

rendering queue


The robots.txt file allows the crawlers to understand the URLs they can access on the site. The instructions enable the crawlers to understand the URLs that are allowed or disallowed from being crawled. If you have any pages that you do not wish to be crawled can be mentioned in this file.

The Site Must be Responsive

As the number of mobile users increases, search engines like Google ensure that the websites provide a seamless experience for them. Therefore, website developers must ensure that the website can be viewed seamlessly on all devices by the visitors. If it does not, the SEO rank of your website is bound to fall.

Mobile responsiveness has become one of the critical google search engine ranking factors since 2015. Google has plans to move all sites to mobile-first indexing and crawling. It would mean developers must consider the mobile design, too, as Google would use this version to rank websites. In addition, you can use the Search Console to check if there are any mobile-related errors on the site.

The Page Load Speed Should be Optimal

Are you aware that most of your visitors will wait for only three seconds for a website to load? These visitors will move to your competition and may never return to your site. Moreover, the bounce rate will increase and is an important SEO ranking factor too. You can use various tools like Google PageSpeed Insights and GTMetrix to inform you about the page load speeds.

One of the main optimizing factors would be to identify the heavy images. You must use plug-ins to ensure the photos are of optimal size. If the images are optimized correctly, it can help to increase site speed.

Use an SSL Certificate

Google had come up with an update in 2014 that showed its preference towards secure websites. The update stated that if all other factors remained the same, Google would prefer HTTPS websites. It is mainly as the certificates that install an SSL certificate encrypt the communication exchanged with the visitor's browser. This update is in line with Google’s mission towards a safer internet browsing experience for its users.

The Use of Schema Markup

An essential factor that SEO executives must remember is the use of Schema Markup. It helps the search engine to have a better knowledge about specific sections of the text. It is ideal when you plan to do local SEO. You can also use it to inform Google where your business is located.

You can use it to present meaningful information to Google about a web page. If you use the schema markup intelligently, you can get into Google Knowledge Graph. It also helps in showing up visually enhanced search results for your website. It also supports semantic search and enhances the authoritativeness of your website.

schema markup

On-page SEO Ranking Factors

There are also specific Google ranking factors that are more page-specific.
Use of Relevant Keywords

All SEO experts will tell you about ensuring that your website content is written, keeping the relevant keywords in mind. The keywords essentially search terms used by users and form the basis of the content on your website. Most marketers also feel it is a high-impact driver of website traffic and is among the key Google ranking factors. When writing content for a page, always keep in mind that you can have only 4 - 5 keywords on a page. Also, keep the keyword density best practices in mind.

The Need for High-Quality Content

One of the critical Google ranking factors is the high quality of content on the website. The content must be fresh, unique, and helpful for users. While you must ensure it is optimized for SEO, always ensure that it must be valuable for the website visitors. 

You must create original content and always undertake a duplicate check before publishing on your site. It would be best if you considered the length of the content too. While there is no word limit set for the content, it must neither be too short nor should it be too long. Most SEO plug-ins require your content to be a minimum of 300 words. Apart from the content quality, it must be well-organized and structured using proper tags. 

Optimizing the Title Tags and Meta Description

The title tags and the meta description show up on the Google SERP that allows a user to understand the web page's contents. You must ensure that you optimize the content you write here to help you draw more visitors to your website. You can use the keywords here as well.

Google can pull the information to create snippets that preview the content on the page relating to the search term used. You can also use the keywords for the image alt-text, and if you optimize it, you can also move the images higher up during image search. Also, do not use jumbled-up URLs as they are not SEO-friendly. If the URL has a simple structure, is concise, and contains the optimized keyword, it will be easier to rank these pages higher in search ranking.

Off-Page Ranking Factors

The search ranking of your website is also dependent on few entities outside your website. Some of them are other high domain authority (DA) websites, social media, etc.

Use of Social Bookmarking

The foundation of the ranking algorithm requires you to ensure that your website has backlinks from high DA websites. It is an essential SEO ranking factor, and you must also keep in mind that the backlinks must be relevant and related to the content on your website. While you may have backlinks from high DA sites, you must also ensure that the backlinks are fresh. It is because the users prefer the latest news. However, it will depend on the search term used.

The Search Intent

One thing that Google does is that it does not rank the same content for all queries. The ranking also varies according to the search intent of the user. For example, if you are looking for a "how-to" guide, the web pages shown to you will differ when you search for the best gadgets. The content types are also critical for the search engine when it is ranking the web pages. The search engine also checks whether the piece of content covers what the user is expecting to see.


The search algorithm covers various factors that SEO managers must consider ensuring their website ranks high during a keyword search. While the number of such parameters may total over 200, we have covered the top SEO ranking factors believed to be used by Google.

If you are planning to design a new website, you must keep these factors in mind. You can also take the services of a professional web design and development company and discuss with their subject matter experts on these parameters.

Jul 23 2021
Jul 23

As digital experiences become more and more ubiquitous, we’re also seeing a directly proportional proliferation of tools and frameworks for realizing digital strategies. This includes both a variety of differently specialized tools as well as very similar competitive tools with negligible differences.

How, then, do you choose the right technologies to power your brand’s digital strategy? How can you simultaneously eliminate both decision paralysis and the fascination with shiny newly emergent frameworks while ensuring your sites and apps remain modern? And, perhaps most importantly, why is it so key to have the right components comprising your technology stack?

We answer all of those questions in this article. Read on to learn more about the importance of a well-defined technology stack and the considerations you should have top of mind when building it.

Key considerations for building your technology stack

One of the first things that will determine your technology choices is the industry your company operates in. This will not only be important because of the nature of the products or services you offer, but also due to potential legal requirements and/or following established standards and regulations.

Closely tied to this are your company’s mission and its culture. A company promoting sustainability, for instance, will prefer to align itself with technologies based on similar values rather than those supported by companies who don’t share the same vision, or even work against it.

As for the company culture, you should ensure that the technologies you use for internal processes empower your employees as much as possible. Similarly to the above point, you’ll also likely want to ensure that the values of the companies behind those solutions don’t clash with those of your company.

Next comes your target audience. What are their preferences? Do they rely on mobile to such an extent that you should invest in a native app? Where and how much do you need to interact with them? These are all things you’ll need to consider to be able to best reach your optimal customers.

A big part of all this is integration. Having disparate systems working together to provide a great experience has become a trend, but that doesn’t mean you should overcomplicate things just for the sake of it even when your needs are simple. 

For brands engaging across numerous channels or operating in IoT, a headless/decoupled approach to managing their digital experiences may be the best fit to accommodate their multichannel reach. The same approach can be used for a single site with a heavily customized front end in the form of microservices.

Finally, you need to consider some of the fundamentals of great digital experiences: data, security, usability/accessibility and performance. 

  • You need systems that enable you to make data-driven decisions and provide personalized experiences, while also considering the privacy of your users/customers.
  • Privacy goes hand in hand with security. By choosing well maintained and regularly updated technologies, you drastically reduce the risks of cyberattacks, which have been on the rise lately. Additionally, in industries dealing with a lot of sensitive data, e.g. healthcare, you need solutions which guarantee the data is well protected and secure.
  • Usability is vital to a good digital experience, and that means usability for everyone. Make sure you use technologies that not only produce accessible experiences, but also take care to make the content creation experience accessible and user-friendly. 
  • Unfortunately, the above points matter little if your site or application performs slowly. Your super slick UI and super secure checkout process will be missed by everyone if the site takes ages to load. Invest in performant and lightweight front-end solutions to ensure a good experience both for users and for the Google algorithm.  

Tips for getting the most out of your technology choices

In this section, we’ll take a look at 5 ways to help you make more informed decisions and consequently get more out of your technology investments.

  1. Be in the loop. You’ll have a much better overview of your options if you keep up to date with new innovations in the field(s) relevant to you. That doesn’t mean you should jump on every new technology you discover, of course, but staying informed will enable you to move with more confidence when an opportunity does arise.
  2. Don’t adopt new tech willy-nilly. Tying back to the previous point, you shouldn’t haphazardly adopt each new modern framework out of concern of missing out or relying on an outdated technology. Instead, you should:
  3. Do thorough research and analysis. This can also be done proactively if you’re looking to replace old legacy systems, but definitely once you’ve discovered a potential new solution, or a new trend or problem demanding a solution. A key tip is to also research, if possible, the choices of your competitors and/or other companies with similar needs.
  4. Build with future-readiness in mind. At the current speed of innovation, if you’re building for today, you might as well be building for yesterday. When making technology investments, be mindful of possible and/or needed integrations and future capabilities, as well as flexibility, to ensure your digital experiences are as future-proof as possible.
  5. Partner with a specialized agency. This is your best bet for ensuring both the right choices and the best implementation of the choices, as well as their longevity. Not only does a digital agency provide the specific services you need, it can also provide technology consultancy as well as long-term ongoing maintenance.

Bonus point: if you’re adopting new technologies that your employees are very unfamiliar with, make sure to also invest in the necessary training to help them get on board and enable them to make efficient use of the new technology.

Why the right choice matters so much

Finally, let’s look at the benefits of investing in the right solutions for your technology needs.

Top-notch user experience

By choosing the right technology suite, you’ll be maximizing both your internal and external user experience. The user-friendliness of your content management system and great integration capabilities will gain you the efficiency and speed so needed in the highly competitive and fast-paced digital environment.

The main part, though, is of course the external experience. With so much competition, customer experience can serve as a great differentiating factor, and it needs to be more than just adequate - great is now essentially the baseline, so you should aim for more than that if you want to cut through the competition.

High ROI

A good internal and external UX will entail a much higher return on your investment and enable you to truly scale your business. And that’s ultimately what it’s all about, isn’t it? It only makes sense that you’ll want to make the investment with the highest return, and one with the most long-term potential.

Not getting locked into one system

One of the main reasons for sticking with a technology stack which is no longer adequate is the difficulty of switching to a new one. In extreme cases, this can even mean being completely locked into a particular system, where it’s not only difficult but actually impossible to migrate your data.

By investing in the right future-ready technologies you not only diminish the chances of having to switch, you also have a much easier time in case you do have to switch in the future.


This is what it all comes down to. You’ll want your technology choices to continue benefiting you in the future without drastic overhauls. This means you’ll need both the ability to leverage them to customize your customer-facing experiences as well as the ability to easily swap out different components of the stack in order to facilitate this.

Woman at the beach forming camera frame with hands

Need additional help?

Choosing and building a technology stack is no easy task and it’s not an investment you’ll want to be making every few years. We hope this article will help you to make more informed decisions when selecting the right solutions for your business.

If you need help selecting the optimal content management system and frameworks for your company, reach out to us and we’ll be happy to help you out with both the decision as well as its implementation.

Jul 22 2021
Jul 22

A security audit is the process of identifying security threats that can lead to unauthorised access to content, data leaks, bypassing the security, and other dangers. In the first part of the series on conducting a security audit, we'll focus on the overview of the Drupal module versions that we use at Droptica for this purpose, as well as on PHP and JavaScript libraries.

Drupal security audit

At Droptica, we make every effort to ensure that the solutions we provide are as safe as possible. We use the tools provided by the Drupal community, such as the Security Review module, to optimize the process of detecting the most popular security errors. We also use the Security Kit to make the project we're working on more resistant to attacks. You can learn more about the functionality of these modules in the linked posts, and the information on their operation will be useful in the following parts, in which we'll talk about the Drupal configuration review and code analysis.

Checking the versions of the installed Drupal modules

Updating modules and libraries is the simplest activity that we can perform to improve the security of our application. Drupal provides a view listing all the modules, which additionally indicates whether a given module is up-to-date, and if it isn’t – whether the update contains security fixes.

To check if the modules are up-to-date, go to /admin/modules/update

Checking the versions of Drupal modules as part of security audit

In the screenshot above, you can see that some of the modules need updating. Of course, in such cases we always recommend that you update all possible modules. If any of the modules contain a security fix, the update is required to ensure a high level of security for the application.

In the case of Drupal, the information about whether a given module has a security flaw is made available to the public when the author of the module releases its patched version. Module authors usually try to hide which code has been changed to patch a security flaw, but this always means that the attacker just needs more time to find a way to cause the bug and exploit it. Time is important, so you should keep track of security updates regularly, not only during a Drupal security audit. As we mentioned earlier, this is one of the simplest steps we can take to ensure a higher level of security for our application.

Patches review

When updating the Drupal modules, you should also check if a patch has been applied to a given module. If so, we proceed as follows:

  1. We check whether the patch was created by the community and if it concerns a specific issue on drupal.org. If so, we look for the issue that the patch is from. It's possible that the patch has been applied to one of the newer versions of the module. In such a case, we recommend updating the module and removing the patch with the information that the code that fixes the bug or adds a given functionality has been applied to the official, newer version of the module. If the patch hasn’t yet been applied to the newer version of the module, we still recommend updating and testing if the latest version of the patch serves its purpose.
  2. If the patch wasn’t created by the Drupal community, but is the result of working on the project, we still recommend updating the module. In this case, however, ensuring the correct operation of the patch lies with the people responsible for the custom code of the project. After updating, you should check whether the patch works as intended. If not, we recommend introducing appropriate fixes to the patch which will ensure its correct operation on the latest version of the module.

PHP libraries review

The next step will be reviewing the used PHP libraries. To list them, we can use the composer show command or the local-php-security-checker package. We recommend the latter solution because it significantly speeds up the process.

Result of the composer show command during the review of the used PHP libraries

Result of the composer show command.

If you choose to install the local-php-security-checker package, follow the guidelines in the README.md file.

Result of the scan using local-php-security-checker during a Drupal security audit

Result of the scan using local-php-security-checker.

There's also the little-known Drupal Composer Security Checker module that uses the security-checker package. Currently, this module doesn't fulfill its task and the security-checker package itself isn't actively developed (since January 2021), therefore we'll focus on the local-php-security-checker package itself. If you find a security risk, our recommendation will be to update the library, of course – as in any case. An audit of the PHP libraries should be carried out regularly, the same as in the case of the Drupal modules.

JavaScript libraries review

The next step will be to check if the used JavaScript libraries are up-to-date and if they contain security fixes. To do this, you should review the library directory and the used package.json files.

In the case of the library directory, you need to check the version manually. In the case of package.json, we use the npm-audit command.

Result of the npm-audit command checking the package.json during the JavaScript libraries review

Result of the npm-audit command

The npm-audit command will list all known vulnerabilities, determine the threat level, package, dependencies, package path, and show a link with information about the vulnerability.

The npm-audit command shows all vulnerabilities in the JavaScript libraries

If you find a vulnerability, as always we recommend the update. JS library scans should be performed routinely, more often than a comprehensive security audit.

Improving the Drupal security - further steps

In this part of the Drupal security audit cycle, we've learned how to check whether the used versions of the modules and libraries are up-to-date and don't contain known security bugs. We also understand how to proceed if there is a patch available for a module – both when the patch comes from the Drupal community and when it was prepared by the developer working on the application.

Acquiring the knowledge provided in this post is the easiest way to improve the security of your application. Checking the versions of the used solutions is the first step that we perform during a security audit - our Drupal support team recommends periodic checking for updates. In the event that an update containing security fixes is released, we recommend that you perform an update as soon as possible.

In the next part of this series of articles, we'll get to learn more about the Drupal configuration aimed at increasing the security of our application. We'll also learn how to reduce the number of attack vectors and we'll find out more about the modules that'll help us with this.

Jul 21 2021
Jul 21

Current stats on the high percentage of Drupal websites that are still on version 7, with no apparent migration plan in sight, are sparking concern and curiosity throughout the Drupal sphere. What exactly is standing in the way of decisions to shed this outdated version and start reaping the benefits of better security and a far superior CMS? 

The Drupal Association pandemic-inspired decision to move the Drupal 7 end-of-life date forward by one year to November 2022, may have derailed migration timelines from their previous top-of-mind status. We believe though, that the big reason for the migration delays, is a track record for complicated and cumbersome (and often, costly) migration processes. Drupal Community insiders are aware of this reputation, and have made great strides in reversing it with new modules, tools, systems, and accelerated project planning. The result is a new era for streamlined Drupal 7 to 9 migrations with minimal snags.

Here at Promet Source, we’ve stepped up as a key player in this process. We've also taken a big picture overview of all the work that’s going on to fast-track Drupal migrations. In doing so, we’ve assembled a comprehensive guide to information, insights, expert opinions, modules, tools, systems and more. 

Let’s start with our top picks for insights and expertise. 

Expert Perspectives

Upgrading to Drupal 9 Using the Migrate API 
This 30-minute recording from a DrupalCon North America 2021 presentation provides straightforward and solid information concerning a Drupal 9 migration path, leveraging the Drupal Migrate API. The presenters also cover recommended tools to facilitate a Drupal 9 migration, pitfalls, and essential perspectives. This presentation is chock full of great information and I highly recommend it. 
Tools to get your site ready for Drupal 9 & 10
When you are ready to get into the actual weeds of a Drupal 9 migration, this presentation from DrupalCon North America 2021 can serve as an excellent resource with recommendations concerning the right tools, along with step-by-step explanations of when and how to put them to work. 
How to Optimize a Drupal 7 to Drupal 9 Migration
There’s much more to a Drupal migration than simply following the right steps. A Drupal 7 to Drupal 9 migration represents an excellent opportunity to rethink and press the reset button on your organization’s entire web experience. This recent perspective sets forth eight considerations for reaping the most benefit from a Drupal migration.
What? So Drupal 8 Support Ends Before Drupal 7 Support?
In June of 2020, during the same week as the long-anticipated arrival of Drupal 9, I wrote a blog concerning the essential steps involved in a Drupal 8 to 9 migration. There’s a slight irony, in the fact that Drupal Community support for Drupal 8 will stop cold on November 28, 2021, without the option of extended commercial support, but Drupal 7 support will remain intact through November 2022, with the option of extended commercial support. This disparity is due to the Drupal 8 Symfony dependency, which has an end-of-life date of November 2021.

Drupal 9 Migration: Top Questions and Expert Insights 
Recognizing that there are more than a few facets to Drupal migrations, Promet Source tapped the brainpower of some of our top devs and solutions architects for insights and observations concerning how to make the most of migration-related challenges and opportunities. Here’s what they had to say.

Migrating From Drupal 7 to Drupal 9? Acquia has your back
Acquia has developed a Drupal 7 to Drupal 9 Migrate Accelerate tool designed to fast track the migration process. This blog post from the Acquia site covers some of the capabilities of that tool along with links to other helpful Drupal migration resources. 

Migration From Drupal 7 to Drupal 8 or Drupal 9
For the visual and audio learners among us, this online tutorial from Drupal expert Kantesh Hotchandani, an India-based Sr. PHP Drupal Developer, provides a step-by-step, on-screen tutorial of some of the key steps in involved in the Drupal 9 migration process. 

How to Plan Your Drupal 7 Migration
An overarching theme from all of the Drupal 9 migration literature is this: successful migrations are built upon thorough assessments of the existing site and thoughtful planning. This step-by-step E offers a helpful strategy for doing just that.

As a service to the Drupal Community, we've set out to present a solid overview of Drupal migration resources. If we've missed anything, please add it to the comments section below! 

Drupal Release Dates Gantt Chart

Due to Symphony 3 and 4 dependencies, EOL dates for Symphony 3 and 4 will mean a forced EOL on Nov. 28, 2021 for Drupal 8 and a forced EOL in Q4 2023 for Drupal 9. Drupal 7 sites, on the other hand, will have the option of extended paid commercial support.

Project Planners

Drupal 8 to 9 Upgrade Planning Template

Drupal 7 to 9 migrations are taking up most of the oxygen these days from conversations concerning Drupal 9 migrations. Fact is, Drupal 8 end-of-life is scheduled for four months from now -- with no option for extended commercial support. Even though, as many have pointed out, Drupal 8 to 9 is more accurately called an upgrade than a migration, Drupal 8 site owners face a critical imperative for upgrading ASAP to Drupal 9. This template can serve as a helpful tool in doing so. 


Drupal Migration Planning Checklist

Sometimes, a single oversight that could have been easily addressed at the start of a project can set a migration off course and spark undue setbacks. This Drupal migration planning checklist provides eight essential pointers that can set your migration up for success right from the start.

Pre-Migration Intelligence Gathering

The Upgrade Status module in its Drupal 7 version will check the list of projects your have installed and show their availability for Drupal 8/9

The Drupal Module Upgrader is a command line script that scans the source of a Drupal 7 module, flags any code that requires updating to Drupal 8/9, points off to any relevant API change notices, and (where possible) will actually attempt to convert the Drupal 7 code automatically to the Drupal 8/9 version.

Migrate Modules

With the arrival of Drupal 8, Migrate module has moved into Drupal Core. However there are a number of contributed modules that are helpful for migrations and are used in most, if not all, projects here at Promet Source.


Must-have Migration Modules

Migrate Plus
The Migrate Plus module provides a swiss army knife of useful extensions and plugins. Migrate Plus allows the grouping of migrations, which is often handy if there are multiple types of migrations in a project.

Additionally, Migrate Plus provides two example modules which are especially useful for learning how migrations work first hand.

See the full list of Process, Source, Destination and additional plugin types on the project page: https://www.drupal.org/project/migrate_plus

Migrate Tools
Migrate Tools is essential for most projects as it provides Drush commands and a user interface to run, roll back, and perfect migrations.


General Use Migration Modules

Migration Tools
Made by the awesome people at CivicActions, Migration Tools is a bevvy of useful plugins to help with the thorniest of migrations -- especially those from HTML sources. It is perhaps worth noting that the maintainer, dkucharm (https://www.drupal.org/user/3072643), is not only a great developer but also a fantastic musician!

See: DrupalCon Seattle 2019 - Migrating terrible static content into Drupal 8 


Migrate Manifest
While Migrate Plus provides the ability to group migrations, Migrate Manifest takes this to the next level by allowing developers to create a manifest file to run migrations. This can be very useful for large projects and complex migration workflows. https://www.drupal.org/project/migrate_manifest

Migrate Upgrade
Provides Drush support for Drupal 6 or 7 to 9 upgrades. https://www.drupal.org/project/migrate_upgrade 

Migrate Scanner
Provides a recursive directory scanner for migrations files, which helps to organize migrations into sub-directories.


Migrate Files
This is useful when you need to migrate files in the same migration as other data. It is especially relevant when migrating from sources where relevant entity data is offered in a single row such as CSVs or some APIs.


Source-specific Migration Modules

Entity-specific Migration Modules

Process and Source Plugins

Migration Facilitators

Import/Export Modules

At Promet Source we tend to approach every engagement with a deep dive into the details and a determination to understand big-picture perspectives, as well as all of the minutiae that also matters a lot.

Looking for insight or consultative support on any aspect of a Drupal migration? Let us know how we can help

Jul 21 2021
Jul 21

The Drupal project uses the pear Archive_Tar library, which has released a security update that impacts Drupal.

The vulnerability is mitigated by the fact that Drupal core's use of the Archive_Tar library is not vulnerable, as it does not permit symlinks.

Exploitation may be possible if contrib or custom code uses the library to extract tar archives (for example .tar, .tar.gz, .bz2, or .tlz) which come from a potentially untrusted source.

This advisory is not covered by Drupal Steward.

Jul 20 2021
Jul 20

➡️ ➡️ ➡️ ➡️ Submit your session: https://sessionize.com/ddi-camp/

Drupal Diversity & Inclusion, an independent working group within the Drupal community, is holding the first ever Drupal Diversity & Inclusion (DDI) camp! Our aim is to bring new voices and important topics together into a relaxed and fun virtual conference.  

This event exists to center and elevate marginalized voices in the Drupal & web community. We want to hear about what you want to talk about!

We want to know what’s important to the marginalized people in our community: People of color, women, LGBTQIA2S+ folx, religious minorities, people from the Global South, neurodivergent or disabled techies, and many others we couldn’t begin to name. Whether you’re a site builder, content creator, developer, designer, or any other kind of person in the Drupal world, we’d love to hear from you.

That’s you - what have you experienced? What has your experience in Drupal, tech, or the wider world been like? Teach us something! This isn’t a traditional Drupal Camp - we aren’t looking for any specific topics. Rather, we are looking to elevate marginalized speakers. Talks could cover all kinds of topics, including: 

  • How you’ve gotten to where you are, and where you’re going. Share your career struggles and job-hunting woes and successes.
  • Something awesome you’ve worked on, whether it’s technical, social, both, or neither. If you have a technical talk you want to give, submit it! 
  • If you have a people-oriented talk, go for it! We want to know how you relate to others, how you work with people, what you wish people knew, and much, much more.
  • If you want to talk about something else and you have no idea how to categorize it, submit that too! 

We don’t require any prior speaking experience, though if you have some, we’d love to know about it. You don’t need to be a part of the Drupal community to participate. 

We are planning to have 30 minute talks, delivered on Zoom. That time will include any Q&A, should you choose to include it - it’s not required. We’ll also have a Slack channel for the event so that any questions can be answered there, and we can have a “hallway track” during the event.

Jul 20 2021
Jul 20

When you start with the wysiwyg-container div, you will see four direct children with the top-level class. Starting with the first child, test for each special case. One of the advantages of using a DOMDocument is that you can use the getElementsByTagName function to ask any DOMNode if it has children tags like img, table, or iframe. On a match, turn all the content in the branch to a new paragraph. Otherwise, put each chunk of consecutive text into a new text paragraph. Here lies the first problem with Benji’s template: branches with mixed content.

Most of the time this isn’t an issue. If there’s a table inside a div, you probably want the entire div for your table paragraph. However, if there’s an image inside an anchor tag, your image paragraph will grab the image data but ignore the link, losing data along the way.

{# Top level tag #}

This may be an acceptable loss, or an issue that can be flagged for manual intervention. Otherwise, you’ll need a method that can recursively traverse an entire branch of the DOMDocument, cherry-pick the desired HTML element, and put the rest into the default bucket.

For instance:

/** * Recursively navigate DOM tree for a specific tag * * @param $post * The full page DOMDocument * @param $parent * The parent DOM Node * @param $tag * The tag name. * @param string $content * The content string to append to * * @return [] * Return array of DOM nodes of type $tag */ static protected function recursiveTagFinder($post, $parent, $tag, &$current) { $tagChildren = []; // Iterate through direct children. foreach ($parent->childNodes as $child) { // DOMText objects represent leaves on the DOM tree // that can't be processed any further. if (get_class($child) == "DOMText") { $current .= $post->saveHTML($child); continue; } // If the child has descendents of $tag, recursively find them. if (!is_null($child->childNodes) && $child->getElementsByTagName($tag)->length != 0) { $tagChildren += static::recursiveTagFinder($post, $child, $tag, $current); } // If the child is a desired tag, grab it. else if ($child->tagName == $tag) { $tagChildren[] = $child; } // Otherwise, convert the child to HTML and add it to the running text. else { $current .= $post->saveHTML($child); } } return $tagChildren; }

If a top level DOMNode indicates that it has an img tag, then this method will search all the DOMNode children to find the img tag and push everything else into the default text paragraph, the $current variable. There will likely be some disjointed effects when pulling an element out of a nested situation: a table may lose special formatting or an image may not be clickable as a link anymore. Some issues can be fixed in the plugin. In the migration, I checked if any img tags had an adjacent div with the caption class and stored that in the caption field on the paragraph. Again, others may need to be manually adjusted, like reordering paragraphs or adjusting a table. Remember that it’s much faster to tweak flagged migration content than to find and fix missing data manually.

On to the next issue, let’s dig into embedded media in Drupal 7. The tricky aspect here is that the media embed is not stored in the database as an image tag, but as a JSON object inside the HTML. This requires a whole new set of tests to parse it out. To start, check each DOMNode for the opening brackets of the object [[{ and the closing brackets }]]. If it only contains one or the other, then there isn’t enough information to do anything. If it contains both, then get the substring from open to close and run json_decode. This will either return an array of data from the JSON object or null if it’s not valid JSON. The data in this array should contain an fid key that corresponds to the file ID of the embedded image. That file ID can then be used to grab the image from the migration database’s file_managed table and create an image paragraph.

Those are the main gaps in Benji Fisher’s custom source plugin. Of course each implementation requires even more tweaks and data manipulations to get the exact migration to work correctly. Some content simply will not transfer cleanly, so remember to test thoroughly and stay in tight communication with your client in order to turn WYSIWYG chaos into neat paragraphs.

If you found this migration series useful, share it with your friends, and don’t forget to tag us @redfinsolutions on Facebook, LinkedIn, and Twitter.

Jul 20 2021
Jul 20

Being present when your customer needs you the most displays how much your business values responsiveness and customers engagement. Having a chatbot enables your business with these capabilities and more. A chatbot is a computer algorithm that simulates a human conversation. People interact with these bots by selecting predefined options. To give valid answers, chatbots require people to make a few selections.

With Drupal, you can try your hands out at different chatbots using modules like the Drupal Chatbot or other integration modules and APIs. In this article, we will be exploring more on Drupal Chatbot which uses Dialogflow as the NLP agent.

Building Chatbots in Drupal

Why use a Chatbot?

A Chatbot is an excellent marketing tool for a business to drive customer engagement. Chatbots enable a business to:

  • Gather customer insights
  • Increase sales
  • Be available 24/7
  • Save on time and money
  • Improve customer satisfaction

How do Chatbots built with Dialogflow work?

In a nutshell, this is how a chatbot normally works:

  1. User sends a text message through chat window 
  2. The chat app transfers the message to Dialogflow
  3. The message is matched to as intent (Intents updated manually by developers or admin in Dialogflow console)
  4. Based on the matching intent, a response is fetched. (Each intent will have its own developer defined response)
  5. The user gets a response back.

Why Dialogflow?

Dialogflow is a natural language understanding platform that makes it easy to design and integrate a conversational user interface into your mobile app, web application, device, bot, interactive voice response system, and so on. Dialogflow can analyze multiple types of input like text or audio. It can also respond to user in multiple ways, either through text or speech. 

Building a Chatbot in Drupal using Dialogflow

Step 1: Create a New Agent

  • Create and sign in to your Dialogflow account 
  • Click on Create Agent in the navigation bar and fill in the required fields.
  • Give a name and select language to your agent. Then, click the Save button.
Create New AgentAgent Name

Step 2: Create an Intent

But first, what is an intent? An intent links what a user says with what your agent does. Dialogflow matches the end-user phrase to the best intent in your agent.

A basic intent contains the following:

  • Training phrases: These are example sentences or phrases of what end-users might say. This should be updated in Dialogflow console by developer.  When an end-user expression resembles one of these, Dialogflow matches the intent. You don't have to define every possible phrases, Dialogflows built-in ML handles other, similar example phrases.
  • Responses:  Developer defined text response in return to the end-user. These may provide the end-user with answers or ask the end-user for more selection or terminate the conversation.

To create an intent:

  1. Select the agent that you created in step 1
  2. Click on the Add button next to Intents in the menu.
  3. Enter a name for your intent. 
  4. Enter Training Phrases
  5. Enter Response Test 
  6. Click Save.
Internet NameTraining Phase


Dialogflow contexts are similar to natural language context. If a person says to you "they are green", you need context to understand what "they" is referring to. For Dialogflow to handle an end-user phrase like this, it needs to be provided with output or input context to accurately match an intent.

There are 2 types of contexts:

  • Output contexts: control active contexts. When an intent is matched, any configured output contexts for that intent become active.
  • Input contexts: control intent matching. While contexts are active, Dialogflow is more likely to match intents that are configured with input contexts.

Input and output contexts are applied to intents. They work together to control bot conversation flow.


Step 3: Integrating Drupal with Dialogflow

  • Install the Drupal chatbot module from here.
  • Enable Webhook for first intent and then click on Fulfillment in the left panel, enable webhook and enter the URL (for example: www.yourURL.com/assist). Click on Save.
  • Click on the settings icon beside the Agent name in the left navigation. Copy the client access token to be used in the Drupal module.
  • Go to admin/config/services/chatbot-settings and fill in the client access token and other information required. 
  • Go to admin/structure/block and look for the "Chat Bot" block. Place the block wherever desired.
Jul 20 2021
Jul 20

Sometimes it can be handy to have extra pages for a node (or any entity). For example:

  • To show different sets of information on separate pages for a single product, page, or thing.
  • So you can set different access requirements on each page for a node.
  • You want to block access to the ordinary route (e.g. node/123 and its aliased equivalent) for some reason, but you still want some other page to represent that node.

I've found a few people with that need on Drupal slack before, so I thought I'd write a guide because it's surprisingly easy!

My imaginary requirement

I'm going to imagine my client has asked me to set up an additional page for products, to show information relevant to someone that has already bought the product. We'll call it the 'Product support' page. This page could be public, but shown as a separate tab for products, or even just hidden as a link only sent out to customers that have ordered the specific product. Access could even be restricted to those people entirely. All the content to show on the page would come from fields on the product. We don't really want to go creating another separate entity to hold data that's only relevant to the product in question anyway. This makes sense from a data point of view as all the fields are for one thing, whether for existing or potential customers. (Of course, Field Group could be used to split those things into tabs on the product's edit form, or a similar technique to this article's could be used to separate them out into an additional edit page!)

First, set up a view mode for your node/entity

Just like teasers can be configured separately to the full content version of a node, you can create your own view mode. Add it from /admin/structure/display-modes/view on your site, and then enable it from the 'Custom display settings' section at the bottom of the 'Manage display' tab for your entity type/bundle. Once that's done, navigate to the sub-tab for your view mode and choose the fields you'll want to show.

So I'll make one called 'Product support', and configure only fields like 'Support helpline', 'Manuals' and 'Returns information' to show in this view mode. I will probably go hide those fields in the usual (default/full) mode too.

Next, set up the page to use that view mode

HTML page routes for viewing entities are usually set up by the 'route_provider' specified in an entity type's annotation block. For nodes, that's Drupal\node\Entity\NodeRouteProvider, which dynamically sets up the view, edit & delete routes (take a look!). But you can define your route with some simple YAML. In a custom module, add (or use an existing) mymodule.routing.yml file, with the following code. Replace 'mymodule' with your module's machine name, and 'product_support' with the machine name of your view mode:

  path: '/node/{node}/product-support'
    _entity_view: 'node.product_support'
    _title: 'Product support'
    node: '\d+'
    _entity_access: 'node.view'
    _custom_access: 'mymodule_product_support_access'

The last line contains the name of a function you might want to use to add any custom access logic. The function could just be in your .module file. In my case, I might look up the current user's orders to check whether they have bought the product before allowing access. You might want to at least restrict which bundles the route works for, like so:

 * Extra access callback for product pages.
function mymodule_product_support_access(\Drupal\Core\Entity\ContentEntityInterface $node) {
  return \Drupal\Core\Access\AccessResult::allowedIf($node->bundle() === 'product');

But you can just omit that _custom_access: line from the YAML entirely to just use the same access that the ordinary node page has, no problem.

Rebuild the site caches; you're done!

Now you can access /node/123/product-support to view a different page of content for your product! If you want to set it up as a tab where the usual 'View'/'Edit' tabs of a node would be, then use the following YAML in a mymodule.links.task.yml file in your module. Again, replace 'mymodule' and 'product_support' as appropriate, and then rebuild the site caches to see it work:

  route_name: mymodule.product_support
  title: 'Product support'
  base_route: entity.node.canonical
  weight: 5

All of this can work for any entity type - try just replacing 'node' in each of these code snippets with the machine name of the entity type that you want to use.

There's a module for that

There are modules like View Mode Page which let you set these extra pages up in the UI. But I've found my additional pages usually need some additional bespoke logic though, whether for access or something else on the page. So given how little actual code is needed, I tend to just make them this way. But it does have some handy features, like supporting URL aliases for nicer paths.

Entity Form Mode also claims to help you make separate edit pages for form modes, which is very handy. But again, I find these tend to have even more interesting bespoke requirements with custom access logic. But see how you get on. Making these in custom code can be just as easy anyway - just replace the _entity_view: 'node.product_support' part of the routing YAML with _entity_form: 'node.my_form_mode', and the _entity_access part should use 'node.update' instead of 'node.view'.

I'm sure there are some interesting use cases for this - let me know in the comments what you've needed custom entity routes for!

Photo by Thant Zin Oo on Unsplash

Jul 19 2021
Jul 19

Lynette has been part of the Drupal community since Drupalcon Brussels in 2006. She comes from a technical support background, from front-line to developer liaison, giving her a strong understanding of the user experience. She took the next step by writing the majority of Drupal's Building Blocks, focused on some of the most popular Drupal modules at the time. From there, she moved on to working as a professional technical writer, spending seven years at Acquia, working with nearly every product offering. As a writer, her mantra is "Make your documentation so good your users never need to call you."

Lynette lives in San Jose, California where she is a knitter, occasionally a brewer, a newly-minted 3D printing enthusiast, and has too many other hobbies. She also homeschools her two children, and has three house cats, two porch cats, and two rabbits.

Jul 19 2021
Jul 19

Are you willing to develop a mobile app for your business? This article describes various phases in mobile application development process. Read it for more information.

The increased penetration of smartphones has led to more mobile users. Businesses are also trying to cater to this new set of users by creating mobile apps and improving customer experience. As a result, there is an increased requirement for developing mobile apps, rapidly addressing this audience, and catering to their needs. However, to ensure the application's success, businesses must adhere to a robust mobile app development process. We will discuss the steps involved in the process in detail.

Stages of Mobile App Development Process

Here is now the detailed overview of each phase involved in mobile application development.

Research and Strategy

The process of mobile app development starts by deciding the strategy for why you will need the app. Many apps are an extension of the desktop application. Next, you must identify the audience and understand their likes and dislikes. Research and strategy must take up a significant amount of time in the initial stages. The demographics and behavioral patterns of the audience must be considered too. 

While doing your research, you must also check out your competition and assess how they are reaching out to their audience and the features they are offering. The information forms the background in deciding the goals and objectives that include a critical step in mobile app development. 

Planning and Evaluating the Feasibility

Once you have finalized the app's goals, you can now analyze the features you will need in the project. It is where the analysis of competitor apps is critical. You can include the features that are absent in your competition and include them in yours. Once you have identified the elements you wish to include, you must prepare a product roadmap.

The features must be prioritized based on their importance and grouped into delivery milestones. It is also essential to identify the technologies that you will require. You must also check whether the backend system will support the functionalities you wish the app to have. You can take the help of experts from a leading mobile app development company.

UI/ UX Design

The app design must follow the optimized workflows that will allow the users to use the app seamlessly. In addition, it must ensure customer loyalty and increase dwell time on the app. So, first, map the customer journey and visualize how the visitors will go through the workflows in your app. Then, create the wireframes and a storyboard to explore the mobile app and demonstrate the navigational workflows.

The wireframes will cover the app layouts along with the device-specific designs. During this process, you must also include the specific branding guidelines of your company, also called the Style Guides. It will cover the font and style to be included in the app. The design of the navigation icons and how the app will adhere to your branding guidelines will also be covered.

Based on the guides created, the mockups will be made based on the wireframes. You can discuss with the client and finalize the aesthetic and the workflows. The static mockups can be turned into prototypes with high-quality tools. It can help stimulate the workflows that the final app will use. The user experience can also be assessed.


Before the actual development of the mobile app starts, you must define the architecture and finalize the technology stack to be used. It is the most critical portion of the mobile application development process. Next, the backend technology covering the database and various other server-related objects is finalized. Next, the APIs to be created are assessed too. Finally, an intuitive user interface design is prepared for the front-end using the selected technology.

The developers will set up the project, and the pieces of code are checked before being merged into the project. Then, the app could be released to a small group of external testers for further testing of the code. If you are developing a complex app, you can use the agile methodology that helps in continuous improvements and progressive development.


The testing phase forms an integral part of your mobile app development initiative that ensures that the app is secure and stable. A team of expert testers must create appropriate use cases based on the industry and the various workflows included in the app. It will help the testers to record the results involving evaluation of the software quality. It will also help them to track the fixes in the code that must be done.

Your Quality Assurance team must be an integral part of this process. The application is now tested for compatibility, usability, performance, stress, and security, etc. The mobile app must undergo several tests to ensure a high-quality mobile solution. Some of the testing processes to be followed are:

  • User Experience Testing
  • Functional Testing
  • Device and Platform Testing
  • Security Testing

Deployment and Support

When the app is ready, you must choose the time to launch the app. After that, you can wish to publish the app on the Google Play Store or the App Store, or both. Of late, the Amazon App Store is also famous. The process involved in publishing on the different mobile app stores can vary across the various platforms.

Before publishing, you must have the metadata content ready. Keep in mind that the content must be optimized for the App Store you have chosen. You can also upload various promotional materials like videos and graphics. Some other necessary information like any geographic restrictions, configurations, and pricing may require uploading.

With Google Play Store, there would be a time lag before your mobile app is formally published. It is not the end, but only the beginning of future changes. You will receive feedback from the users that can be used as feedback for future improvements. 

App Maintenance and Future Developments

Once the app has been published, the app's performance can be tracked by deploying adequate control points through KPIs. You can detect the crashes, downloads, etc. long with other metrics as set by you. However, your work on the app continues through the support activities and future developments needed. You must keep in mind that the enhancements must be uploaded onto the app store platforms in the same process as before.


Mobile app development is a continuous process that does not stop with the app being published on the app stores. You must take the help of a leading mobile app development company that can help you visualize the app and suggest the features and functionalities needed through adequate research.

We have been providing mobile app development services to some of the leading businesses cutting across different industries. You can reach out to us to start a discussion about how we may be of help.

Jul 17 2021
Jul 17

Drupal is evolving as one of the leading open-source projects that is providing the best services to its community by adopting some significant initiatives, focusing on desirable goals and outcomes. These initiatives are known as strategic initiatives that are currently being worked on and are progressing over a while. Therefore, strategic initiatives of Drupal play a major role in making Drupal the first choice for any open-source user. This article will take you through the contributions made by these initiatives in helping Drupal reach the position that it stands today. 

The role of strategic initiatives in Drupal’s success

Drupal is supported by its community and group collaborations that lead to accomplishing common priority goals. Their strategic initiatives are prioritized at solving major problems that act as a barrier for the users from receiving the optimum benefits from this free and open platform.

Dries Buytaert, Drupal founder and project lead, envisioned the power of strategic initiatives in making Drupal a huge success. Receiving support from community collaboration, these initiatives have contributed to producing some remarkable developments driven by forces such as:

  • Cooperation with the core maintainers
  • Studies related to usability and survey data
  • Building an open-source digital platform experience
  • An improvement in customer experience and advanced editorial can lead to progress in market relevance
  • The facility of validation by collaborations and larger community discussions 

After the initiatives are recommended, they are forwarded to the planned initiatives stage, where every initiative is nourished with objectives and goals by its dedicated contributors. Once an initiative crosses this stage, it then moves forward to the next stage, i.e. active initiatives stage. This is how initiatives come into existence. Drupal has numerous ongoing strategic initiatives that are in progress to provide exceptional outcomes. To learn more on how Community initiatives are proposed and how Strategic initiatives come about, read here. Also, learn what’s happening with these strategic initiatives: Drupal 10 readiness initiative and Automatic updates initiative. We will now focus upon another strategic initiative of Drupal, Decoupled menus which has significantly contributed to Drupal's accomplishments.

Understanding Decoupled menus initiative in depth

At the event of DrupalCon Global 2020, Dries came up with an idea of a new initiative for building a decoupled menu component that is well written in JavaScript. Therefore, for Drupal, to be framework agnostic, he preferred to begin with building components for Vue.js and React.js.

Dries expresses that various websites are progressing into customized, omnichannel digital experiences. Drupal has to keep on advancing with the growing demands in the marketplace. It has to be built into the best web service platform and well-structured data engine regarding the back end. On the other hand, JavaScript seems to grow rapidly on the front end. As Drupal is considered as a decoupled CMS and capable headless, a lot of improvements and advancements can be made with the right approach.

Learn more about decoupled Drupal here:

According to the Drupal 2020 Product Survey, the second most requested feature was a need for a much modern administration UI. Such types of UIs can be built with the help of web services APIs and JavaScript. There is a major need to improve JavaScript and invest in web services APIs. It is well proved by the following facts.

  • Most of Drupal’s end users focus on creating decoupled front ends and omnichannel digital experiences.
  • An improvement can be made upon its administration UI with more WYSIWYG, drag-and-drop, and other ease-of-use features.

Dries further shares that to take a step towards enhancing Drupal's headless capabilities and administration UI, there is a need to include official Drupal JavaScript components to Drupal Core. The first step can be executing a JavaScript menu component in Vue and React. It can mark the first official JavaScript component in Drupal. By developing a JavaScript component, the major issues of the front-end developers can be solved. So, this menu component would provide a menu that can be placed in a front-end JavaScript application. To release the first official JavaScript component, will require the tools and processes to control and release JavaScript components. This further helps in forming a pattern for more components allowing Drupal to successfully embrace JavaScript, the need of the hour.

Illustration with a rectangle describing the path towards having a first official JavaScript component which is longer than it might appearSource: Drupal.org

The path to having a first official JavaScript component is longer than it may appear.
Here, I would like to take you across one important aspect of Decoupled menus, i.e. Drupal Decoupled Menus Survey which was announced at DrupalCon Global 2020. The reason behind conducting this survey was to get an insight into the preferences of individuals and organizations who have already built decoupled applications. By receiving the necessary understanding, Drupal actively tries to make this platform a preferred choice for the JavaScript developers. Therefore, using Survey Monkey, this analysis was executed and was promoted majorly through existing Drupal developer channels.

The primary goal of the decoupled menus initiative in Drupal is to facilitate the most convenient way for JavaScript front-ends to consume configurable menus managed in Drupal. It includes forming official, community-supported components (e.g. React & Vue) that one can use in his project or as a recommended implementation followed by necessary support that includes docs, security, and packaging, etc. Drupal prefers to keep a practically achievable target, for example, stating the fact that they will be able to ship a single menu component in place of an entire overhaul of Drupal's admin UI is good proof.

Illustration with a rectangle describing the mission and success of Decoupled menus initiative of DrupalSource: Drupal.org

Challenges faced

JavaScript is rapidly growing but Drupal doesn’t have much to offer to this specific field resulting in the feeling of incompetence among its competitors. Using Drupal, many developers are seen building “decoupled sites” for the back end and JS frameworks for the front end. This makes the following people less likely to opt for Drupal:

  • Since by using Drupal not many benefits are attained, JavaScript developers show less interest in this open-source project.
  • Less participation by Drupal evaluators who would prefer using Drupal for its content management features but at the same time would want their site to witness the more "application-like" experience facilitated by modern JavaScript frameworks. They would want to hire developers who are well versed in HTML, CSS, and JS, but not importantly familiar with Drupal.

Problems to be resolved

  • Drupal lacks an important process for building, maintaining modern JavaScript libraries, and shipping.
  • Drupal doesn’t share a good connection with the JavaScript developers as it is unable to resolve the problems they witness.
  • Working on a site using a JavaScript front end, the content editors have less authority over their content and also the structure of their site.

Solutions to the existing problems

With the help of the below strategies, it is possible to solve all the above-discussed problems.

  • Including read-only menu items to Drupal's HTTP APIs (e.g. the JSON: API module)
  • An easy process made for a front-end developer to consume the menu data to provide navigation instead of hardcoding it by:
  1. Writing documentation for the process of integrating a React or Vue application with Drupal to render an effective menu.
  2. Eliminating the unnecessary and monotonous steps by providing JavaScript tools and/or libraries for consuming the HTTP API specified above. With the help of these libraries or tools, the processes for building modern JavaScript and policies can be documented and approved.

This initiative is suitable for

  • It will be beneficial for JavaScript framework developers who would want to use Drupal as a back end and also provide user-editable menus.
  • A good option for Drupal evaluators who prefer to have all of Drupal's CMS features and more options for their front end.

Scope excludes

  • Components of frontend with markup and styles
  • Changes made to admin UI/editing interface

Here is a short informative video giving a brief about Decoupled menus initiative in a very interesting way. Take a look.

[embedded content]

To emphasize more upon the milestone which this initiative has achieved, take a look at the Decoupled Menus Initiative Keynotes which were delivered at DrupalCon North America 2021. Below are the sessions.

[embedded content]

[embedded content]

[embedded content]

[embedded content]


Drupal aims at building a community where the participants can easily get access to all its features, new modules, etc without any concerns that can make their software and sites much secure and convenient. This desired vision can be turned into reality by the support of strategic initiatives that can significantly make a positive shift in attaining the community goals and objectives. Decoupled menus are one of the most key initiatives that focus on upgrading the most expeditiously grown JavaScript of present times. Hence, this initiative is a work in progress that will lead to exceptional outcomes making Drupal the best choice for an open-source platform.

Jul 16 2021
Jul 16

For the July 2021 SC DUG, I gave my new talk titled “Queries on Queries” which poses questions to ask yourself when migrating data between systems. Data migrations are often critical to project success, but all too often that are treating as a throw-away process. This talk is intentionally platform agnostic building from my experience with both Drupal and Salesforce.

[embedded content]

If you would like to join us please check out our up coming events on MeetUp. You’ll find our meeting times and, once you RSVP, remote connection information.

We frequently use these presentations to practice new presentations, heavily revised versions, and test out new ideas with a friendly audience. So if some of the content of these videos seems a bit rough please understand that is some of the point. If you want to see a polished version checkout our group members’ talks at camps and cons.

If you are interested in giving a practice talk, leave me a comment here, contact me through Drupal.org, or find me on Drupal Slack. We’re excited to hear new voices and ideas. We want to support the community, and that means you.

Jul 16 2021
Jul 16

Many people probably wonder why system creators recommend regular updating to the latest version and why we are informed at every step by pop-ups that the latest patch or other fix has been released, sometimes changing only a few lines of code in the software. Using Drupal as an example, I'll try to explain why it's so crucial. Although the system works properly, it can contain many errors and surprise you with unstable work.

Why should you update your systems?

The first and most important reason why you should carry out regular updates (including the ones related to Drupal) is the security of the system itself. If the authors or the community discover a software flaw, with an update they can immediately fix it and protect users from threats (such as hacker attacks) that lurk at every step.

In the case of Drupal, new versions of the software not only protect you against dangerous attacks, but may also provide new functionalities. Usually options of this type appear in the "major" versions, such as 8.2, 8.3. You can check the update plan at any time on the roadmap on the Drupal website.

System personalization is important for every user and thanks to an update you can gain new modules or additional options that'll make your work easier. It's also worth keeping in mind that regular updates protect you from unnecessary programming work in the future, because the older your Drupal version is, the more difficult it is to install the latest update. Another advantage is the continuity of the webpage's operation, because you avoid time-consuming failures and minimise the risk of unstable system operation.

When is it worth performing an update?

As we've already mentioned, it's best to perform updates on a regular basis. As soon as you receive a notification about a new version or find out about it from another source, you should plan that update in the near future.

In the case of Drupal, updates are released approximately twice a month. You should also remember that monitoring the date until which support for a given version of Drupal is provided is sometimes a matter of several years. Therefore, you should bear in mind that every version has its "end of life" planned, and usually a migration to the newer version should be performed when updating. If you want to protect your system from hacker attacks and downtime, as well as keep the website running smoothly, you should remember to always use the latest version (or the one that is supported).

In addition, there are also updates of the modules themselves (depending on which ones are currently installed) and the PHP itself. In the case of modules, you don't always have to act so quickly, because when they are released, the information about what exactly has been fixed and who is at risk is provided. If the given problem doesn't concern you, you can do it at a time that's more convenient for you. You should pay attention in the case of PHP - it's worth acting quickly in this case, especially if the new release fixes security holes from the previous version.

To sum up, when you don't have time to install the latest update (such situations, unfortunately, sometimes happen), try to use a version that's currently supported. In the case of modules, you can take care of the ones you use most often first. This will ensure stress-free work and the certainty that you'll always be able to count on quick help in the event of unexpected errors.

Drupal update - upgrading to a higher version

A Drupal update within the same major version usually runs smoothly and doesn't cause many bugs. However, if you change major versions of Drupal, updating may be much more difficult.

Upgrading from Drupal 7 to 8

The update from version 7 to 8 can't be performed automatically, unfortunately. In most cases, you need to write the page from scratch. Drupal 8 has significantly changed the way content and configuration are stored in the database. Therefore, the database and other files must be transferred to the new page based on version 8. The configuration data include content types, user roles, and field definitions. You must also remember that not all modules have automatic update paths. Manual code tampering or custom migration will sometimes be required.

The structure of the themes has changed compared to version 7. This is another thing that needs to be rebuilt for the content to display properly in version 8. To facilitate this task, it's best to obtain the appropriate tools from the official Drupal website:

Another thing that'll help you migrate is an analysis of the Drupal modules. You need to determine which modules are most important to you (preferably in the form of a list), and whether their installation on Drupal 8 is really necessary. Also, remember to update Drupal 7 to the latest version. This'll make it easier to transfer the configuration and content data. The last step before the migration is to back up your current page, based on version 7. If anything goes in the wrong direction, you'll have a guarantee that you won’t lose the page and data.

Upgrading Drupal 7 to 8 is a complicated operation, but it brings many benefits.

  1. Lots of new features and modules have been added to the Drupal 8 core, e.g. Media and Layout Builder.
  2. Drupal 8 has access to more modern technologies - it uses more modern tools that facilitate an editor's work. Thanks to this, the configuration is easier and better adapted to people who are just starting their adventure with this CMS.
  3. In Drupal 8, part of the core is the Views module, which easily presents the added content to you in many different ways. In addition, the main page itself is a separate view, therefore you can easily manage individual elements.
  4. The core also includes the modules that provide new field types (such as phone, e-mail, link, meta tags, entity reference and contact forms).

In addition, Drupal 8 is much better suited for larger pages than Drupal 7, because it can be optimized (it has a much more advanced cache system, controlled by tags and contexts), which makes it smooth and fast to work with. It's based on the components of the Symfony framework, which is considered in the world of PHP development to be the best solution for creating complex applications.

Upgrading from Drupal 8 to 9

Drupal 9 doesn't differ significantly from version 8. One important piece of information is the upgrade to Symfony 4, which ensures compliance with the latest standards - thanks to this you can program in accordance with the latest specifications. Besides, Drupal 9 is an improved variant of the previous version. Some of the old code has been removed, Symfony and Twig have been updated, so you can be sure that the system will always work effectively and without any problems. The quick and easy update between releases (i.e. switching from 8 to 9) has also been kept. Also, the modules' updates will not require many additional changes. You should also keep in mind that Drupal 9 uses PHP 7.3 or higher versions.

The migration to the latest version will certainly require you to verify the application's code. You should remove the items marked as "deprecated" from it. You can use the drupal-check tool for this, which will automatically track down the obsolete code fragments. Then you can proceed with an automated process, the execution time of which depends on the page, and which will provide you with the latest version of the software.

How to test the system after the update?

One of the most important steps you should take after any software update is to test the introduced changes or the entire application or system. There are situations when an update is associated with data loss, system crash or unexpected errors. In the case of Drupal, you can, for example, use smoke tests. They allow you to check whether all subpages are displayed without critical errors. Another option is any visual tests that compare the previous look of the page to the new one. It would also be necessary to verify the operation of individual forms and modules and check whether the data entered on the pages is assigned to the correct fields.

To sum up, you should check the website both visually and functionally. Technically the page should work fine. You can correct minor changes to its appearance later.


Software, whether it is for a web page (as in the case of Drupal) or an operating system or other application, should be updated regularly. This ensures the support of the producer or creators and may protect you from any external attacks. In addition, you often have at your disposal new functions, modules or improvements that can significantly change your comfort of working with a particular system.

If you aren't sure how to update your CMS's version, find out how we can help you with Drupal support.

Jul 16 2021
Jul 16

Unlike other CMSs, the update of Drupal core is not difficult, but somehow complicated because of all the details involved. In this tutorial, we are going to implement a local Drupal 9 installation, and then we will upload (push) this codebase to a central repository on Bitbucket. We will then download (pull) the codebase from this repository to the live server, where the website is going to be stored.  

How to set up a Drupal workflow in cpanel with Git

Using this (terminal-oriented) process, you will be able to speed up Drupal core and module updates, and you will follow best practices. 

It is assumed that you already have a LAMP stack installed on your system. Furthermore, you require terminal access on your web server.

Keep reading to learn how!

Step 1: Install Drupal 9 Locally

Open the Terminal application of your system, and place the cursor on your local server directory, typically /var/www/html on a Linux system.

  • Type:  composer create-project drupal/recommended-project my_drupal

This will download the latest stable Drupal version to your machine. 

cd my_drupal/
mkdir config
cd web/sites/default/
cp default.settings.php settings.php
cd ..
sudo chmod -R 777 default/ 

These terminal commands perform the following actions in order: 

  • Access the my_drupal directory
  • Create a directory called config
  • Access the default directory
  • Copy the file default.settings.php and change its name to settings.php
  • Go back to the sites directory
  • Assign global permissions to the default directory, so that the system can complete the installation process

How to set up a Drupal workflow in cpanel with Git

Once this is completed, we need to create a database. 

  • Type:  mysql -u root -p 

Enter your MySQL root password.

create database my_drupal;

This creates the database you will link to your codebase. 
How to set up a Drupal workflow in cpanel with Git

  • Open your web browser
  • Type:  localhost/my_drupal/web

Finish the local installation process.

How to set up a Drupal workflow in cpanel with Git

Step 2: Creating and Adding a Key to the Remote Repository

For the purpose of this tutorial, I am going to use Bitbucket. The steps are pretty similar to a Github profile. 

Once you have logged in to your Bitbucket account, click your profile icon, located (at the time of this writing) on the bottom left corner. 

  • Select Personal settings
  • Click SSH Keys

How to set up a Drupal workflow in cpanel with Git

  • Click Add key

You will see a popup window prompting you for a label and a key. 

  • Type MyLaptop, BobsPC, or whatever you like to identify your own machine at Bitbucket

How to set up a Drupal workflow in cpanel with Git

  • Open your terminal application
  • Type:  ls -al ~/.ssh

The period before the name is telling us, this is a hidden directory.  There are two possibilities:

  1. You get a list of files, one of these files has the extension .pub.

How to set up a Drupal workflow in cpanel with Git

  1. You get the message "File or directory not found".

The file with the .pub extension is the public key of your system. If you do not see this file, you have to create one. If you do see the file, keep reading anyway. 

  • Type:  ssh-keygen -t rsa -C "[email protected]_domain.com"
  • Press Enter to select the default directory where the key is going to be stored (.ssh).
  • Enter the same passphrase twice (You can leave this empty by pressing Enter twice.)

The system will notify you about the location of your public key and its fingerprint. If you already had the .pub key on your system, step back in here.

  • Open the file .ssh/id_rsa.pub with your preferred code editor
  • Copy the whole text, including your email address

How to set up a Drupal workflow in cpanel with Git

  • Open your browser and paste it into the text area
  • Click Add key

How to set up a Drupal workflow in cpanel with Git

Your local machine can now connect to Bitbucket.

Step 3: Creating the Remote Repository

On your Bitbucket profile:

  • Click Create repository
  • Select a Workspace and a project name (create them if this is the first time)
  • Give your repo a proper name
  • Do not include a README file
  • Do not include a .gitignore file
  • Click Create repository

How to set up a Drupal workflow in cpanel with Git

Step 4: Add the Local Repository to Bitbucket

cd /var/www/html/my_drupal/web
mv example.gitignore .gitignore
git init
git add .
git commit -m 'Fresh Drupal installation'

You are accessing the root directory of your Drupal installation, changing the name of the file example.gitignore to .gitignore, initializing your local repository, adding the files to the git staging area, and finally committing these “changes” (the repo was initially empty) to the repository.

git remote add origin [email protected]:[MY_PROJECT]/my-drupal.git
git push -u origin master 

You can copy and paste these two commands from the repository’s page at Bitbucket.

How to set up a Drupal workflow in cpanel with Git

How to set up a Drupal workflow in cpanel with Git

  • Type yes, if prompted
  • Enter your passphrase

Check the repository on Bitbucket. Almost all files inside the web directory (your local repo) have been copied over to your remote repository. Take a look at the sites/default directory.  

How to set up a Drupal workflow in cpanel with Git

Notice that the settings.php file is missing. This is because it is included inside the .gitignore file.

  • Open your terminal and
  • Type:  nano .gitignore

How to set up a Drupal workflow in cpanel with Git

  • Type Ctrl+x to close the nano editor

If you take a look at the cards in the first image of this tutorial, you will notice that we have already finished the tasks of card 1, and there is only one task left in card 2. Let’s continue with the last part of this process.

Step 5: Create a Live Database

Open your dashboard at your hosting provider and create a new Drupal account with your domain name.

  • Click the Drupal “one button installer”.
  • Click Create account

This may vary from provider to provider, so you have to find your way out here. 

How to set up a Drupal workflow in cpanel with Git   

You will receive an email with a Drupal user (admin) and a Drupal password. Furthermore, you will also receive the username and password for your cPanel account. These are the ones we need. They are also available on your dashboard at your hosting provider.

How to set up a Drupal workflow in cpanel with Git

  • Click Enable SSH, so we can have access to the terminal on the live server.

How to set up a Drupal workflow in cpanel with Git 

  • Click the cPanel link
  • Type databases in the search box
  • Select MySQL® Databases

The one-clck installer created a database. Delete this database.

How to set up a Drupal workflow in cpanel with Git

  • Enter a proper name for your database.

Notice the database prefix automatically added by cPanel (in most of the cases your user name). 

How to set up a Drupal workflow in cpanel with Git

Step 6: Import the Local Database

  • Open your terminal application
  • Type:  

mysqldump -u root p my_drupal >

  • Enter your SQL root password

This will make a copy of your database and place it on your desktop. This database on the desktop must have the same name as the one you created on cPanel. 

If you have MySQL version 8 on your machine, you will most probably have to adapt the database to work with MySQL 5 (available at your hosting provider).

sed -i -e 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g'

This is the Linux command to perform this operation.
How to set up a Drupal workflow in cpanel with Git

  • Open your cPanel dashboard
  • Type phpMyAdmin in the search box and select it
  • Click on the name of your database to select it. It should be empty (No tables found in database)
  • Click Import

How to set up a Drupal workflow in cpanel with Git

  • Click Choose file
  • Select the database from your desktop
  • Scroll down and click Go

This will take a couple minutes, so please be patient. 

How to set up a Drupal workflow in cpanel with Git

Step 7: Redirect Your Domain

Drupal is stored inside the web directory, so to access your site, you have to enter the URL:  https://yoursite.xxx/web

If you use a cloud service, this is no problem, you can edit your hosts file. With cPanel, this is not possible (as far as I know). You have to create a permanent URL redirect.

  • Open your cPanel dashboard
  • Type Redirects on the search box and press Enter
  • Select Permanent redirect (301)
  • Choose the name of your domain from the dropdown
  • Add the redirect link
  • Click Add

How to set up a Drupal workflow in cpanel with Git

  • Type Domains in the search box
  • Press Enter
  • Click the Force HTTPS Redirect toggler

How to set up a Drupal workflow in cpanel with Git

Step 8: Upload the Codebase

  • Open your cPanel dashboard
  • Type File Manager in the search box
  • Press Enter
  • Double click the public_html directory
  • Click the Settings button on the top right part of the screen
  • Check Show Hidden Files (dotfiles)
  • Click Save
  • Click Select all
  • Click Delete

How to set up a Drupal workflow in cpanel with Git

  • Open the File Manager of your system
  • Compress the whole my_drupal folder

How to Set Up a Drupal Workflow in cPanel with Git

  • Open the cPanel File Manager
  • Click Upload Inside the public_html directory
  • Click Select File
  • Upload the zip file
  • Click Go back once the file has been uploaded to the server
  • Right-click the zip file and select Extract > Extract Files > Close
  • Double click the my_drupal folder
  • Make sure you have the Show hidden files option activated
  • Click Select all
  • Click Move
  • Select the public_html directory
  • Click Move files

How to set up a Drupal workflow in cpanel with Git

  • Click Up one level
  • Right-click the zip file and click Delete
  • Remove the zip file from your local server too

How to set up a Drupal workflow in cpanel with Git

  • Open your terminal or file manager
  • Copy the settings.php file of the local installation to your desktop

How to set up a Drupal workflow in cpanel with Git

  • Open the file with your preferred code editor
  • Replace the username with the username supplied by your hosting provider (Do the same with the name of the database and the password - see Step # 5)
  • Save and close the file

How to set up a Drupal workflow in cpanel with Git

  • Open the File Manager in the cPanel dashboard
  • Click public_html/web/sites/default
  • Click Upload
  • Select the settings.php file from your desktop
  • Click Yes to overwrite the file
  • Click Go back
  • Change the file and directory permissions according to the image below

How to set up a Drupal workflow in cpanel with Git

  • Click Up one level
  • Change the permissions of the default folder to 0755

Step 9: Set the PHP Version on Your Server

Drupal requires at least PHP 7.3. 

  • Open your cPanel dashboard
  • Type Select PHP in the search box
  • Press Enter
  • Select 7.4 
  • Click Set as current
  • Check the opcache extension

How to set up a Drupal workflow in cpanel with Git

  • Type [yoursite.xxx/web] in the address bar of your browser
  • Click Login with the username and password of your local Drupal installation
  • Click the Edit tab and change your password if necessary

Step 10: Add the Production Server Key to Bitbucket

  • Open your cPanel dashboard
  • Type Terminal in the search box
  • Click Enter
  • Click I understand and want to proceed
  • Repeat the process detailed in Step # 2

How to set up a Drupal workflow in cpanel with Git

  • Type:  less ~/.ssh/id_rsa.pub

less is a terminal editor

  • Copy and paste the key like shown in Step # 2, this time for the server machine
  • Type:  q

That will let you exit less.

You will have one key for each machine (or virtual machine) connected to Bitbucket.

 How to set up a Drupal workflow in cpanel with Git

Step 11: Clone the Remote Repository to the Production Server

  • Open the terminal application of your server
  • Type: 

cd public_html
rm -rf web
git clone [email protected]:[YOUR_PROJECT]/my-drupal.git web

How to set up a Drupal workflow in cpanel with Git You are deleting the web folder and replacing it with the remote repository. You obtain the last terminal command if you open the Bitbucket repository and click the Clone button (don’t forget to add web at the end of the command!).

How to set up a Drupal workflow in cpanel with Git

 Step 12: Install a Module or Theme

  • Open the terminal application of your local system
  • Type:

cd /var/www/html/my_drupal
composer require drupal/bootstrap

How to set up a Drupal workflow in cpanel with Git

  • Type cd web to get into the web directory
  • Type:

git add .
git commit -m 'Bootstrap theme installation'
git status

How to set up a Drupal workflow in cpanel with Git

  • Type git push 
  • Enter the passphrase if required

How to set up a Drupal workflow in cpanel with Git

  • Open the terminal on your remote server.
  • Type (enter passphrase if required):

git fetch
git status

How to set up a Drupal workflow in cpanel with Git 

If you see:  Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded,

  • Type:  git merge

 This will merge the code in your server with the code being pulled from the remote repository.  

  • Go to the themes section of your Drupal backend, the Bootstrap theme should be there

How to set up a Drupal workflow in cpanel with Git

NOTE:  You only have to repeat this last step, each time you download a module, update Drupal core, or edit the CSS code of your theme.


If you get 404 Error pages after installing Drupal on the production server,

  • Delete the .htaccess file
  • Upload it again to the server

How to set up a Drupal workflow in cpanel with Git

 I hope you liked this tutorial. Thanks for reading!

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.
Jul 16 2021
Jul 16

Since Drupal 8 there Tour module is in core. It is very useful when you need to guide user within your application. We use it In EK management tools targeted at users with small to medium scale companies. They usually have limited resources and time to spend on back office trainings. This is where the Tour module is very convenient to introduce functionalities to users who can quickly grasp the functions available to manage their back office.

You can try the latest version of Tour with the demo application where many of the forms and pages have a tour guide for users.

Jul 15 2021
Jul 15

The long answer:

  1. cd to /web/themes/contrib/localgov_base
  2. run bash scripts/create_subtheme.sh
  3. done

The details are available in this short video:

I've started streaming some of my work, especially if it's contributions to open source, on twitch if you'd like to follow along/subscribe. As it turns out, Twitch deletes your videos after 14 days, so I have also been uploading them to YouTube. Feel free to subscribe.

Jul 14 2021
Jul 14

Option 1: Rebuild

Rebuilding in Drupal 9 is the perfect option for companies who wish to continue to get the absolute most from their online presence. It does require effort - both on the part of developers and the company itself - to ensure that the resulting system matches the business objectives in order to maximise effectiveness and ROI.

Rebuilds work best when they are backed up with proper discovery and design phases, and do not rely on historical design patterns from past iterations. As mentioned above, rebuilding in Drupal 9 is the last major rebuild required, as Drupal’s new semantic versioning makes all future upgrades far less onerous.

Option 2: Minimise

The minimise option is for those who may wish to have all the engine-room clout of Drupal 9 behind their site, but for whom it is not the right time for a full rebuild.

In this case, an option might be to minimise the feature set and build a ‘minimum viable product’ - i.e. a core website with a limited feature set, which can be expanded on in the future as business needs arise. You could liken it to 'bridging' between an old system and a new system.

Option 3: Decouple

A decoupled approach is not a conventional solution, but in certain cases could make sense. Decoupling means that the “front end”, as viewed by the public, is separate and distinct from the “back-end”, which stores the data and which would be used by website editors.

In this scenario, you could feasibly firewall off an old Drupal 7 system from the internet, but allow it to feed data to the front end for consumption by visitors. In this way, you could continue to use an established system well past its end-of-life, allowing editors to continue using an interface they know, and data structures with which they are familiar.  The front end is typically a ‘static’ site, which usually means that it is fast, secure, and requires minimal maintenance.

Option 4: Reassess

The ‘reassess’ strategy is where a company reconsiders what it wants out of its digital presence. Possibly business objectives have changed, or KPIs dictate another direction, or possibly even digital is the obvious only game in town. 

This strategy is all about making deliberate, informed decisions about how to invest in your company’s digital identity and your customers' digital experiences. Outcomes could range from a minimalist approach through full rebuild or even as far as a digital experience platform.

Option 5: Redistribute

In a redistribute strategy, a company might take a legacy monolith site which does many things, and break it apart: splitting functions and features across specialist services across the web.

For example, you could use a shopping platform for e-commerce, a GIS platform for mapping, a storytelling platform for rich engagement pieces, etc. In this scenario, a minimalist core website might tie together several disparate specialist services.


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