Planet Drupal

Syndicate content - aggregated feeds in category Planet Drupal
Updated: 23 hours 10 min ago

MD Systems blog: Drupal 9 beta release and module compatibility status

Thu, 03/19/2020 - 11:45
Drupal 9 is expected to be released on time in June 2020. Are the most popular modules ready? How are we at MD Systems helping in the D9 readiness effort?

PreviousNext: Preparing your site for Drupal 9

Thu, 03/19/2020 - 07:06

Drupal 9 is just around the corner. Here's what you need to do to ensure a smooth upgrade.

by Kim Pepper / 19 March 2020 Changes from Drupal 8 to Drupal 9

Unlike the Drupal 7 → 8 update, which required a rebuild and migrate, Drupal 9 is a simple incremental update from Drupal 8.

Third-party Dependencies

Drupal 8 is built upon 30+ third-party libraries. In order to keep Drupal stable, these have been kept at major version numbers throughout the Drupal 8 release cycle. Some of these will be end-of-life in coming years, so Drupal 9 is bumping these to newer versions in order to maintain long-term support coverage. The major dependency changes are:

  • Symfony 3.4.x  → 4.4.x
  • Twig 1.x → 2.x

In addition, Drupal 9 requires Drush 10.x or later.

Deprecated Code Removal

Drupal 8 introduced a backwards compatibility policy that required public APIs to remain stable while new features or improvements were added. The old APIs were marked as deprecated, but kept in place for backwards compatibility. This gives developers fair warning that code will be removed in future versions of Drupal giving them time to move to the new APIs.

Drupal 9 removes all deprecated code that has built up during the Drupal 8 release cycle.

Platform requirement changes

In addition, platform requirements have changed. Most importantly, this includes new minimum versions of:

  • PHP 7.3 or later
  • MySQL 5.7 or later
Getting Your Site Ready

Fortunately, there are only a few steps you need to follow in order to get your site ready for Drupal 9.

Update Contributed Modules to their Latest Version

Drupal 9 will work with modules that worked on Drupal 8, so there are no major rewrites required. This means the current module version naming scheme (e.g. 8.x-1.0) doesn't make much sense any more. It will gradually be replaced with a semantic versioning scheme (e.g. 2.1.0) as new module releases are published.

If you are a site builder, the easiest way to ensure your site is compatible with Drupal 9 is to keep your contributed modules up to date. You can check the status of your contributed modules using Acquia's Drupal 9 Deprecation Status page.

Replace Deprecated API Usage

Of course, many Drupal sites include custom modules. In order to get your own modules ready, you need to:

  • replace any usages of deprecated API usage
  • specify core version requirement to include Drupal 9

To automatically find usages of deprecated API usage, there is the excellent Drupal Check tool by Matt Glaman. Follow the installation instructions, then from the command line, run it against your custom module:

drupal-check web/modules/contrib/address

Almost all Drupal deprecations have handy instructions on the newer alternative API methods to use as well as a link to the change record that describes it in more details. For example:

drupal_set_message() is deprecated in Drupal 8.5.0 and will be removed before Drupal 9.0.0. Use \Drupal\Core\Messenger\MessengerInterface::addMessage() instead. See

Reading the change notice, we just need to change:

drupal_set_message("example message");


\Drupal::messenger()->addMessage("example message")

You can run drupal-check again and again until you have no more deprecation messages.

If you aren't comfortable with the command line, there is the excellent Upgrade Status module that you install to give you a user friendly report of what needs updating. There is also Drupal 8 Reactor which can automate some of this for you.

Specify Core Version Requirement

The last step is to specify your modules core compatibility. As per the change record there is a new key to add you your module info.yml file:

core_version_requirement: ^8 || ^9

This new key allows you to use composer-style version constraints and tells Drupal your module is compatible with Drupal 8 and 9.


That's it! There aren't many steps required to get your site ready for Drupal 9, and the best news is you can do it now and be ready the day Drupal 9 is released.


Tagged Drupal 9 Drupal 6 security update for CKEditor module

Wed, 03/18/2020 - 22:22

As you may know, Drupal 6 has reached End-of-Life (EOL) which means the Drupal Security Team is no longer doing Security Advisories or working on security patches for Drupal 6 core or contrib modules - but the Drupal 6 LTS vendors are and we're one of them!

Today, there is a Moderately Critical security release for the CKEditor module to fix a Cross Site Scripting (XSS) vulnerability.

The CKEditor module provides one way to integrate CKEditor into Drupal.

Due to the usage of the JavaScript eval() function on non-filtered data in the admin section, it was possible for a user with permission to create content visible in the admin area to inject specially crafted malicious script.

The problem existed in CKEditor module for Drupal, not in JavaScript libraries with the same names, however, it's highly recommended that you update to the latest version of the CKEditor JavaScript library as well, because it also recently fixed some XSS vulnerabilities.

See the security advisory for Drupal 7 for more information.

Here you can download the Drupal 6 patch or the full release.

If you have a Drupal 6 site using the CKEditor module, we recommend you update immediately! We have already deployed the patch for all of our Drupal 6 Long-Term Support clients. :-)

If you'd like all your Drupal 6 modules to receive security updates and have the fixes deployed the same day they're released, please check out our D6LTS plans.

Note: if you use the myDropWizard module (totally free!), you'll be alerted to these and any future security updates, and will be able to use drush to install them (even though they won't necessarily have a release on

Lullabot: Using Drupal in a Pandemic

Wed, 03/18/2020 - 20:51

One of the founders of Lullabot and former CEO, Jeff Robbins, used to joke that Lullabot has "built-in disaster recovery" because the employees are accustomed to working from just about anywhere. Lullabot, one of the first Drupal consulting companies, started in 2006 after Matt Westgate and Jeff Robbins met on Drupal has been at the heart of Lullabot's work for more than 14 years, and the core of what Jeff suggested could apply similarly to the Drupal community.

MidCamp - Midwest Drupal Camp: MidCamp Thursday (March 19) Schedule

Wed, 03/18/2020 - 20:34
MidCamp Thursday (March 19) Schedule

MidCamp is almost here!  We’re thrilled to kick-off sessions tomorrow (3/19) and have a full line-up from 9:00am - 3:45pm CDT. We’re leveraging a virtual format for the first time, so each session page has a direct link to join the presentation via Zoom. We encourage you to share the following schedule with colleagues and look forward to having you join us!  No need to register – the more, the merrier!

How will it work?

Each session page has a direct link to join the presentation via Zoom. The rooms will open shortly before the first presentation each day and stay open throughout the day.

Here’s what you need to attend the sessions: 

  • Any device that can run Zoom (computer, phone, tablet)
  • Headphones (recommended)
  • Good internet/wifi
  • Zoom - downloaded on your device
Thursday's Schedule

9:00am - 9:30 am CDT

  • Welcoming Words

9:45am - 10:45am CDT

  • Build it better, stupid:  Using design systems for scalability
  • Live Captioning:  Make your next event accessible for everyone
  • Your data model is terrible! Let me show you why
  • Battle for online privacy
  • Caching Large Navigation Menus in Drupal

9:45am - 12:00pm CDT

  • [Half-day] Getting started with Drupal 8

11:00am - 12:00pm CDT

  • MUDdying the waters:  Creating text-based adventure games using Drupal and Slack
  • Scope in CSS with and without JavaScript
  • When there’s not a module for that
  • Maximum PhpStorm

1:15pm - 1:45pm CDT

  • Embracing usability and accessibility:  a Pace case study
  • Surviving the Drupal learning curve
  • Decoupling Drupal commerce to multiple and scale the front-end
  • How content editors use the layout builder:  What the user research shows

2:00pm - 2:30pm CDT

  • Bringing chart-making out of the back-end
  • Custom Drupal data migration: a Georgia GovHub story
  • Preparing custom and contributed code for Drupal 9

2:45pm - 3:45pm CDT

  • Planning for personalization:  Tips for Dev, Design, and I&A
  • Taking maximum advantage of Drupal core’s composer template
  • Automate Drupal 9 upgrades:  Addressing deprecated code as a community
  • From squiggles to straight lines:  Sketch to make decisions & get on with it

To join any of these presentations, you can check out our Thursday session schedule and click the Zoom link.

Volunteers needed!

Be a part of something BIG! Help MidCamp go virtual by volunteering! We have plenty of space for those who want to contribute. We need room monitors and hosts to keep the Zoom presentations running smoothly! After all, there are many ways to give back to #Drupal besides code. Fill out our volunteer survey if you're interested. We'll have a training at 4PM CDT today, and it will be recorded for folks who aren't able to join. Check #volunteers in the MidCamp Slack for more info.

Virtual game night sponsored by

Don’t forget to join us tomorrow (3/19) evening, from 6-9pm CDT, to take part in a gaming session group. There will be digital adaptations of tabletop games available directly from your web browser. Look forward to gaming with you!

Drudesk: Automatic website updates in Drupal: finally there!

Wed, 03/18/2020 - 19:26

Automatic website updates are incredibly convenient, whatever CMS your site is built on. Unfortunately, the automation of Drupal website updates used to be impossible. But now we have great news for all Drupal 7 and Drupal 8 website owners — automatic website updates are already there! Read on to discover more details.

Security advisories: Drupal core - Moderately critical - Third-party library - SA-CORE-2020-001

Wed, 03/18/2020 - 19:07
Project: Drupal coreVersion: 8.8.x-dev8.7.x-devDate: 2020-March-18Security risk: Moderately critical 13∕25 AC:Complex/A:User/CI:Some/II:Some/E:Proof/TD:DefaultVulnerability: Third-party libraryDescription: 

The Drupal project uses the third-party library CKEditor, which has released a security improvement that is needed to protect some Drupal configurations.

Vulnerabilities are possible if Drupal is configured to use the WYSIWYG CKEditor for your site’s users. When multiple people can edit content, the vulnerability can be used to execute XSS attacks against other people, including site admins with more access.

The latest versions of Drupal update CKEditor to 4.14 to mitigate the vulnerabilities.


Install the latest version:

Versions of Drupal 8 prior to 8.7.x have reached end-of-life and do not receive security coverage.

The CKEditor module can also be disabled to mitigate the vulnerability until the site is updated.

Note for Drupal 7 users

Drupal 7 core is not affected by this release; however, users who have installed the third-party CKEditor library (for example, with a contributed module) should ensure that the downloaded library is updated to CKEditor 4.14 or higher, or that CDN URLs point to a version of CKEditor 4.14 or higher. Disabling all WYSIWYG modules can mitigate the vulnerability until the site is updated.

Tag1 Consulting: What's ahead on Claro's roadmap and how you can get involved - part 4

Wed, 03/18/2020 - 17:59
Drupal has seen a range of administrative experiences over its history, starting with early Drupal mainstays like the Garland theme and Seven, perhaps the most recognizable iteration of Drupal's editorial experience in its history. Recently, another administration theme joined the pantheon of administration themes in Drupal core that have had an outsized influence on how users interact with Drupal not only for the first time but for countless times afterwards. The Claro administration theme is a new theme for Drupal 8, now available in Drupal core, which offers a more modern user experience thanks to its emphasis on usability and accessibility during the design and development process.Read more preston Wed, 03/18/2020 - 08:59

Promet Source: Words Matter: Communication in a Time of Crisis

Wed, 03/18/2020 - 01:35
Current realities are rapidly shifting for all of us. What to do now? What can we expect?  During a time of crisis, the quality of communications can have a huge impact, and not just in the moment. The effects of what is said and what is not said will linger, and reveal much about the organization, its leadership, and individuals involved. 

Gábor Hojtsy: Join us at the free virtual MidCamp this week to learn about and improve Drupal 9

Tue, 03/17/2020 - 18:46

I heard a lot of good things about Midwest Drupal Camp (MidCamp) throughout the years. I also had the chance to follow Avi Schwab sharing best practices from it at various events. It is one of the real model events. I never had a chance to attend unfortunately.

In 2020, due to the ongoing pandemic, they did not have the opportunity to run the camp as usual. While that is sad, they decided to turn it around entirely and made MidCamp all digital and free to attend. This means you and I can attend finally and not just admire the event from afar! Let's do that! There is no registration or tickets required anymore, so sign up for details via email, or keep up on the site.

Great Drupal 9 content

While there are lots of great sessions to participate in, I am really excited about the Drupal 9 content. Presentations will be streamed over Zoom with links being provided later in the week.

Let's get contributing

Following sessions on Thursday and Friday, there will be a virtual contribution day on Saturday from 3pm to 9pm UTC. I am really excited about these three contribution topics and would love to see you join in them! I will swap a workday out this week with Saturday to participate in this event and still have personal time for my family while they all stay at home due to the pandemic.

  • Working on automation rules to fix deprecation issues in Drupal 8 projects. This is the practical application of Dan Montgomery's session. Dan and Ofer Shaal will be available and lead this topic. Rector saves a lot of manual work by automating code upgrades from Drupal 8 to Drupal 9. The immediate goal is to create Rector rules for the 15 most popular deprecations. Those 15 rules will cover 50% of all Drupal deprecations so a lot less manual work would be needed!
  • Work on contributed project Drupal 9 compatibility. Applying the above tooling combined with manual work to make contributed projects compatible with Drupal 9. Mike Lutz will be leading this topic. I would also love to help anyone interested. I maintain the overview of contributed project readiness on (thanks for the source data to the Drupal Association), which can be used to find what to work on effectively.
  • Improve the proposed new Drupal 9 default frontend theme Olivero. Various members of the team will be available to work on outstanding issues for the proposed new Olivero frontend theme. Putra Bonaccorsi, Aubrey Sambor and Brian Perry indicated they would be there.

Contribution will be coordinated on Slack I believe, more information to come later this week. Sign up for details via email, or keep up on the site. See you (virtually) there!

Tag1 Consulting: The unique challenges of implementing shared editing - part 3

Tue, 03/17/2020 - 16:54
One of the seemingly intractable difficulties in content management systems is the notion of supporting collaborative editing in a peer-to-peer fashion. Indeed, from an infrastructural standpoint, enabling shared editing in a context where server-side CMSs rule the day can be particularly challenging. All of this may soon change, however, with the combination of Yjs, an open-source real-time collaboration framework, and Gutenberg, the new editor for WordPress. With the potential future outlined by Yjs and collaborative editing in WordPress, we can open the door to other thrilling potentialities such as shared layout building or even collaborative drawing in the CMS context.Read more preston Tue, 03/17/2020 - 08:48

Specbee: Drupal 8 Custom Modules – Creating efficient Drupal 8 modules with these best practices

Tue, 03/17/2020 - 15:10
Drupal 8 Custom Modules – Creating efficient Drupal 8 modules with these best practices Shefali Shetty 17 Mar, 2020 Top 10 best practices for designing a perfect UX for your mobile app

Drupal 8 custom modules can range from being super simple to highly complex, depending on the need for the customization. The true power of Drupal can be unlocked with custom modules in Drupal 8. Irrespective of the complexity of a custom module, following some best practices can help you create more efficient custom modules. So, let’s get started!

Recently, I was looking for a module in Drupal and something just crossed my mind. In the Drupal world, when you are looking out or considering solutions, the first thing you might hear is, "there is a module for that!". While there are close to 70 core modules in Drupal, it is the additional contributed modules built by the Drupal community that extends the platform's functionality. And with Drupal 8, there is a completely different architecture and modernized approach towards CMS, with a shift towards object orientation to improve the overall efficiency and software quality. Creating a Drupal 8 Custom Module to further extend Drupal’s capabilities is not the same as it was in Drupal 7.  

What is a custom module in Drupal 8? Why create one?

A Drupal 8 custom module is basically a module that is made up of customized functionalities. The Drupal custom module could start with a contributed module that needs small customizations or a completely new Drupal 8 module with new sets of non-existent functionalities custom fit to the project. Or sometimes, a migration from Drupal 7 to Drupal 8 will call for a custom module because the Drupal 7 module isn’t available in Drupal 8. A Drupal 8 custom module is essentially built to extend the core functionality of Drupal, which by itself comes with built-in set of core modules. 

Regardless of how your experience has been with the previous versions of Drupal, module development in Drupal 8 has its own set of challenges. To give you a fair idea, there are some differences between Drupal 7 and Drupal 8, the key ones being that Drupal 8 requires the latest version of the PHP 7 to run and it uses Symphony, a PHP framework that relies on Object Oriented Programming. Nonetheless, Drupal 8’s new approach is a futuristic approach and has opened doors to a wider set of developers who are well-acquainted with OOP and MVC concepts.

Also, there are changes in the way a module is built and there are certain best practices to keep up with the community standards. Let us talk more about this.

Change in the Drupal 8 File Structure

One important point to remember is that in Drupal 8 modules development the file structure is quite different from the one in Drupal 7. Custom modules in Drupal 8 are stored in the /modules directory, unlike in Drupal 7 where this directory was reserved for the core modules. The core Drupal 8 modules now go into the /core directory.
Next up, to let Drupal 8 know that your custom module exists, you need to create an .info.yml file which provides the meta data. This process is similar to the one used for Drupal 7.

name - This key is to provide a name for your custom module.
type - This key defines the type of the extension (module/theme/profile).
description - This key provides the detailed description about the custom module (displayed on the module list page).
package - This key specifies the package in which the module should be included.
version - Specifies the version of the module. 

If your file looks something like '', the syntax will be as follows-
name - blogexmple Module
type – module
description - A simple demo module
package – Custom
version - 1.0
core - 8.x

Use of Configuration before code

Having to rewrite the code every time you make any changes is quite a task. Instead of hard coding a class into a theme, set the values in the configuration and apply it with the code. This ensures easy and faster ways to code and results in high quality modules. With reusable codes being the norm in writing quality software, configurations in the code ensure advanced functionality and "easy to modify" features.

Use What Drupal Offers

Once you have built your module, you should know that Drupal comes with various built-in admin functionalities to store and display module data and settings. The module settings page can be defined with hook menu. This hook enables modules to register paths in order to define how URL requests are handled. With the drupal_get_form page callback usage, all you must do in the callback function is define and return the settings that are to be stored.

Too Many Cooks Spoil the Broth

Having worked on large scale Drupal sites for a long time, Drupal developers would have learnt that hundreds of modules can work their magic together to produce an effective large-scale project. But when working on enterprise Drupal websites, it is important to note that avoiding a single poor module has greater effects than avoiding 30 well-developed Drupal modules (in an attempt to use lesser modules). Developers then tend to favor programming their own modules over reusing existing modules. The higher the number of custom modules you write for a project, the more work it takes to maintain and modify your Drupal site later. Instead, consider publishing your modules on Github. This allows you to avoid usage of a large collection of custom modules and instead encourages you to create reusable code that has the required configuration.

Environment & Coding Standards

Development environment is an important influence as it ensures that a Drupal project runs without any hassle. Drupal development companies ensure that the entire team works in an exact same development environment for an efficient workflow.

While working in such an environment, one of the biggest issues to handle is to make sure that the code is clean and maintainable. Drupal developers need to make sure that their code is readable and makes sense to everyone they are working with. And this doesn't apply only to the team members or to anyone from your organization, but also to the larger Drupal community itself. With community involvement being an essential part of Drupal development and a key aspect in distributed teams working together efficiently, following the coding standards helps in achieving a project's goals and objectives.

Being an open source platform, in a short span of time, Drupal 8 has made tremendous impact on businesses. Many top organizations like PayPal, Tesla and NASA have leveraged the power of Drupal with their modular framework. Backed by a strong community which is constantly improving the platform and extending its core functionalities with new and exciting modules, Drupal 8 has gained a competitive edge. Custom modules in Drupal 8 bring out the true flavor and power of the robust CMS.  As an experienced Drupal development company, we have helped enterprises create their own winning formula with custom fit modules that met their granular requirements. Want to know how we can help you? Contact us now and get a FREE site audit.

Drupal Planet Shefali ShettyApr 05, 2017 Subscribe For Our Newsletter And Stay Updated Subscribe

Leave us a Comment

  Shefali ShettyApr 05, 2017 Recent Posts Image Drupal 8 Custom Modules – Creating efficient Drupal 8 modules with these best practices Image Top 8 Drupal 8 Themes for Media and Publishing Websites Image Drupal 8 Web Accessibility – Why we love it and Why you should care too Want to extract the maximum out of Drupal? TALK TO US Featured Success Stories

Know more about our technology driven approach to recreate the content management workflow for [24]


Find out how we transformed the digital image of world’s largest healthcare provider, an attribute that defined their global presence in the medical world.


Discover how a Drupal powered internal portal encouraged the sellers at Flipkart to obtain the latest insights with respect to a particular domain.

link Blog: Introduction to Digital Experience Frameworks

Tue, 03/17/2020 - 12:50

In this post, we’ll take a look at what’s meant by the term digital experience framework, or DXF, present some types of DXF, and discuss how to select the correct one(s) to set your business up for success today and in the future.


PreviousNext: Keeping the engine running in uncertain times

Tue, 03/17/2020 - 05:44

Like many companies, PreviousNext didn't expect the Coronavirus crisis to hit so hard or quick, nor did we anticipate the rapid effects on the global economy. However, we have always run our company based on sustainable principles, so feel well prepared to deal with what's coming over the next few months. We hope sharing our approach might help others weather the coming storm too!

by Owen Lansbury / 17 March 2020

First and foremost, the wellbeing of our team is our number one priority and our immediate steps were to ensure everyone is as safe as possible from contracting or spreading COVID-19, including:

  • While our team is already highly distributed with most working from home offices, we were quick to enforce a full work from home policy, including no in-person client meetings or unnecessary travel. This was communicated to clients, with video conferencing and chat tools becoming the standard form of interaction.
  • Making sure our team knew we were taking things seriously and reiterating official guidelines on personal hygiene and social distancing.
  • Noting that attending conferences and personal travel were likely to be affected well before official lockdowns started coming into force, and to plan ahead accordingly.
  • Understanding that many staff will have reduced availability due to school closures and having children at home.
  • Outlining clear provisions for staff to use personal and annual leave in the event they became ill themselves or needed to care for family members. We also made it clear that if leave allowances were exhausted due to COVID-19, leave credits would be extended until individual team members were able to return to work. The last thing we want is our team worrying that their personal finances or long term roles might be in jeopardy due to something completely outside their control.
  • Asking team members to privately notify us if anyone close to them becomes ill which may indicate their own health could be at risk in coming weeks if they've had exposure. This then allows us to forward plan potential contingencies for reduced team availability.

We also took a close look at the likely impact of an economic slowdown on the overall business, such as:

  • Identifying which clients may reduce budgets and starting conversations early with these clients around the likely impact to projects we're working on. This demonstrates that we understand things are likely to change and are willing to work with clients so that neither party is left in the lurch.
  • Working with clients to build larger backlogs of project work so that we can continue working if key people on the client side become unavailable to move a project forward.
  • Assessing what operational expenses can be reigned in the short and medium term to ensure our cash flow stays healthy. This includes evaluating current rental arrangements, subscription based services that may not be critical to operations and other non essential expenses.
  • Establishing a clear overview of our current project pipeline, what our break-even costs would be if projects are scaled back and how long we could maintain that state.
  • Understanding what trigger points we'd have to start drawing on our cash reserves to ride out a few slower months.

Another key consideration is our commitment to the Drupal open source project while the world moves into crisis mode. As we saw in the years following 2007's Global Financial Crisis, Drupal is well placed to thrive as a cost effective alternative to proprietary Content Management Systems and we expect similar things will occur this time around. Obviously, without a strong Drupal we don't have a strong business, so initiatives in this regard are:

  • Maintaining our open source contribution policy so that our team is consistently pushing code into the Drupal ecosystem. This is particularly important with the imminent release of Drupal 9. We would encourage other Drupal services companies to adopt similar contribution policies, especially if their teams are suddenly finding they have extra time on their hands due to the economic downturn.
  • Ensuring that the Drupal community remains strong and unified. There'll obviously be many cancellations or postponements of key conferences in coming months, but we can still collaborate closely through Drupal's issue queues and remote events, like live-streamed meetups.
  • While some initiatives are likely to be delayed, maintaining the continuity of operations for our local DrupalSouth committee and the global Drupal Association is of paramount importance. We can achieve this through donating both our time and funding as specific needs arise. Again, we'd urge other Drupal services companies to share this commitment.

This is the third major economic crisis I've lived through in my professional life, and while things will definitely get tough, they will definitely get better again in the long run. By taking pre-emptive steps now, maintaining the confidence of your team and clients and staying committed to Drupal's long term success, there will be light at the end of the tunnel!

Tagged Drupal Community, Open Source

Gábor Hojtsy: A whole new version of the open source "State of Drupal 9" slideshow, present it yourself!

Mon, 03/16/2020 - 18:28

Ten months ago I created the first version of "State of Drupal 9" and published it as an open source slideshow for anyone to review and present. It has been presented by myself and various other people since then. I kept it up to date and I got lots of feedback to improve it. Since we are closing in on the Drupal 9.0.0-beta1 release where milestone dates are better defined and the release itself is quite close, I decided to rework the whole slideshow with a more practical approach in mind focusing first on what happens to Drupal 7 and outlining the concrete practical upgrade paths for what people should do coming from Drupal 8.

I was slated to present this new version of it at DrupalCamp London, DevDays Ghent and DrupalCon Minneapolis (with Amber Himes Matz). Due to the ongoing pandemic I did not attend DrupalCamp London anymore and further events are being gradually cancelled or postponed. So I don't know if I or someone else will have a chance to present this in person anytime soon. (Which I think is for the better of our health). However, you can still review the content yourself and present it virtually on a remote Drupal meetup or conference or at your virtual company meeting. I did present the slides for DrupalCamp London remotely myself and the camp made the recording kindly available:

I added plenty of speaker notes. You can present/review it from or fork it (even with a free registration) and replace the "About me" slide as well as the opening and closing thanks slide with your attribution. Please keep the rest of the attribution intact. Instructions are in the slides.

I'll keep this version updated from now on and archived the old version with a note pointing to this.

OSTraining: How to Remove Unused Modules in Drupal 8

Mon, 03/16/2020 - 16:30

One of the important aspects of keeping your Drupal 8 site up-to-date, secure and performing well is to remove unused modules.

There are a number of reasons why you would want to do this:

  • Security - Every module should be kept up-to-date.  If you're not using a particular feature, you're just giving yourself more work to do.
  • Performance - Drupal is an event-based CMS so at every point in the page-build process, Drupal is checking to see if any module on your site wants to do something.  All of this adds up!
  • Site clutter - The "Extend" menu is long enough!  Not to mention any configuration menu items that a module might add.
  • Fluff - Some modules just don't belong - Some development modules such as Devel should never be on a production server.  It's always best to remove those completely. Reflections on my migration journey from Disqus comments

Sun, 03/15/2020 - 17:34

Very recently I relaunched this blog using Gatsby.js, which is in the category of static page generators. Having comments on a static webpage is a common requirement, and a popular way to do so is to use a third party service, like Disqus.

I have used Disqus on my blog for a long, long time. The first time I went from using Drupal comments to using Disqus was when I migrated to Drupal 8 (in july 2014, while Drupal 8 was in an alpha version). I could be mentioning this to sound very distinguished, but the main reason I am mentioning it this: Back then, for security reasons, I was running Drupal 8 more or less like a static page, since I explicitly disallowed PHP sessions. This meant it was not possible to use the Drupal comment system. After migrating to Gatsby.js it was only natural for me to keep using Disqus, since all the comments were already there, and it still works with the "static site builder" Gatsby.js.

What changed?

There are several trade-offs with using a third-party solution like Disqus. One of them is privacy, and the other is not owning your own data. For example, you have no logs. So while I have comments on my blog, and many posts have comments on them, I do not have any insight into how many people are trying to add comments, but failing. This was the case on my blog post on Geography in web page performance. Shortly after I published it, I got an email from a fellow Drupal community member, ressa. The email was related to the blog post, so I asked them "Why did you not submit a comment?". After all, questions and answers could potentially benefit others. Well, the reason was that they tried to comment, but had to give up after fighting captcha pictures from Disqus for several minutes. And although I had thought of it before, this was the final push to look into Disqus alternatives

Requirements Keeping the comments and not starting from scratch

The first requirement was that I should be able to keep all of the comments from Disqus, even when using a new platform. This can either be done by migrating the comment data to a new platform, or by "archiving" Disqus comments and embedding them in my pages. With that though process in place, let's go ahead and look at technical solutions.

Technical options and their consequences

My preferred option would be to use something open source, but not host it myself. I tried out Commento, which is open source with a hosted version. To be honest, it seems like a very good option, but it is not free (free as in $0). I could host it myself for free, but that would require me to maintain the server for it. They also provide an import of Disqus comments, which would satisfy my requirement to keep the existing comments. In the end, I decided to not go with this since I had to either pay for it or host myself.

Since self-hosting was out of the picture I then went in another rather radical direction: Commenting through!). provides an API, so in theory that should for sure work. Instead of repeating it here, I will now just post a quote from my email to the Drupal infra team asking for permission:

I want to replace disqus as comment provider on my blog, so I had this idea of letting every blog post be an issue on a project on d o, and you would comment there to get it to show up as a comment on the blog post. This way I would get account creation, spam prevention and email alerts "for free". I could theoretically also incentivize commenting by handing out issue credits for valuable comments (which in my opinion serves as community contribution anyway).

So there you have it. I would get loads of stuff "for free". This seems like a great deal for me. So I guess I am asking kindly for permission technically to do this, as well as asking if that would be an OK use of issue credits?

As you probably can see from the quote, I felt I had a fantastic idea for myself, but realized that this might not be the intended use of After a great conversation with Tim Lehnen (CTO at the Drupal Association) we both agreed that this is a bit outside the intended use of a community project, also considering the members and supporting partners would be paying for parts of my blog infrastructure. Although this was not the option I went for, the option would make it possible to not self-host. And is open source. However I would not own my own data (which technically would be the same as Disqus). I also would not be able to import the comment history into the new platform.

Now that I was already down the road of using issue comments, my next step was to research Github as the comment hosting provider. Also here I would get account creation, spam prevention and email alerts "for free". In addition one can lock a thread for more comments.

My initial research led me to many other people doing the same thing. So the idea is for sure not new. There is even a service wrapping the whole thing called (adding embedded Github login and auto creation of issues when configured). Again, this would mean not owning my own data. And not being able to import comments into a new platform.

Reflections on choices available

Thinking about how your comments are stored is an interesting exercise. Ideally, I would want it stored where I own it. I would want to control the method of storing it (for example using an open source CMS). I would also want to control policy and thoughts behind privacy and moderation. Would I save comments on a third party provider, they would be able to delete all of my comments if they disagreed with me somehow. Or they could in an intrusive or abusive way compromise the privacy of users wanting to comment on my blog. These are real questions to ask.

Even with that in the back of my mind, I ended up moving to comments via Github. The convenience of storage, spam prevention and email alerts trumped the need for freedom, at least for now. To be fair, Github already hosts the code for this blog, and runs the deployments of the blog, so the trust is already there. I did however do a couple of twists to make things smoother, safer and more SEO friendly.

Short technical walkthrough

I promise I will write a longer blog post on this (with code examples), but the current set-up looks something like this:

I wanted to keep my Disqus comments, but as mentioned, I can not import Disqus into github issue comments. But, Disqus provides a dump of all my data. Fortunately there is also a Gatsby source plugin for this format, called gatsby-source-disqus-xml. Using this approach has the added bonus of Disqus comments now being printed on all pages (instead of loaded with JavaScript), so they are now indexable and searchable through Google! Quick SEO win!

I wanted the new comment system to be transparently appended to archived comments. So I also import issue comments for blog posts using the same method. Basically that involves writing a quick source plugin using Gatsby's Node APIs.

Now, comment data is more or less the same, no matter where it first appeared (Github or Disqus). Since comment data is mostly similar I can use the same Reat component to render imported comments from Disqus, alongside the new (dynamic) comments from Github. And so now it can look like this:

I also wanted comments to feel real-time. Since they are rendered through building the codebase, I would not want to wait for a full build when people are posting comments. They should be available right away! But since Gatsby has a client-side layer as well, I can update the state of the blog post client side. To make this philosophy a bit more quote friendly:  "it's built eventually, but visible immediately".

Expanding on this, I also plan to be able to have a copy of the comments stored somewhere else than Github. But that sounds like another blog post, and this journey has already made the blog post long enough. Let's instead finish off with an animated GIF of the comment system in action. And of course, if you want to test it yourself, feel free to comment comment on this post!