Drupal Planet

Talking Drupal: Talking Drupal #317 - Govcon Keynote Non-Code Contribution: Using your passion and skills to power open source.

3 hours 8 minutes ago

Today we are talking about Non-Code Contribution


  • What is Talking Drupal
    • Podcast with audio and video
  • We recorded our 300th episode in June, over 175 guests, 700K audio downloads
  • Weekly episodes covering a variety of topics
  • Most recent 315 with Tara King, Director of Developer Relations at automatic, Comparing Drupal and Wordpress Communities
  • Visit www.talkingdrupal.com
  • This may be a different keynote than you are accustomed to. Talking Drupal is a discussion, and that’s what we are having today.
  • Today we are talking about Non-Code Contribution: Using your passion and skills to power open source.
  • What is contribution in an open-source project?
  • Providing your time, skills or resources to benefit the project
  • Today we’re talking about non code contributions
  • Early on contribution was considered writing code
  • Over time we have learned to value non-code contributions just as much as code contrib
  • Rather than defining non-code contribution by what it is not, we need a term to define it by what it is
  • Community is built in meetups, camps, and cons
  • Majority of contribution has nothing to do with coding at a camp
    • Attending
    • Speaking
    • Training
    • Organizing
  • Organizing a camp (NEDCamp.org / Nov 19th)
  • Volunteering at a camp
    • Stephen - Sponsorship, lead for many years
    • Nic - Website & Signage
    • John - Current Lead, Day of Logistics, Venue coordination
  • Some other examples of contribution
    • Mentorship
    • Documentation
    • Training
    • Summits
    • Being on a committee/Board
    • Answering questions in issue queue
    • Answering questions in slack
  • Who is a contributor?
  • Is it a self designation or a community designation?
  • Why would you contribute?
    • Contribution is a relationship
    • Give and receive
    • Makes you feel good
    • Benefit Skills
      • Technical
      • Communication
      • Project Management
    • Benefit Career
      • Skills
      • Visibility
      • Building Personal Network
      • Networking at Events
    • Financial Compensation
  • Contribute does not always mean nights and weekends
    • Usually starts that way
  • Contribute as part of your job
    • Employers are open supporting open source, there are benefits got both company and employee
    • Contribute to external project or contribute internal project to open source
  • Will your company support your time to make NCC
    • 315 we learned about Wordpress’ contribution goals
    • Launched in 2014, Five for the Future encourages organizations to contribute five percent of their resources to WordPress development.
  • Government
    • 2016 Federal Source Code Policy
    • Support for open source usage, encourage sharing across agencies
    • 20 percent created code should be open source
  • Start the Dialog with your company
  • Why do we contribute - Contribution can be personal like donating to your favorite charity or playing your favorite game.
    • Nic
      • I was asked
      • I enjoy giving back
      • Helps my career
    • Stephen
      • Sharing and Learning
    • John
      • To help people and solve technical challenges for people
      • Education and knowledge sharing
      • To support something larger than myself / make the world a better place
  • How did TD Start
    • Long before Joe Rogans podcast deal with Spotify of 100 million
    • 2008 - With Liberty and Justice for All - 5th grader
    • Obama McCain
    • 7 episodes
    • Mechanics of podcasting,work involved with pre and post record production
    • Virtual book club with Jason Pamental - pick a web design book, assign weekly chapters, Google Hangout
    • Like to learn - similar Drupal journeys - makings of an interesting podcast… great reason to talk every week
  • When did we start considering it a contribution? When did we start giving contribution credits on Drupal.org
  • How did Talking Drupal come to be a non-code contribution?
    • It always was a non-code contribution, we didn’t consider it at first because the Drupal community was code focused.
    • Drupal.org Credit for TD started 20 November 2020
  • Community Projects
    • When did the drupal community start supporting NCC
  • Why is this important
  • How has the show & other non-code contribution impacted our lives / careers
    • Stephen
      • Friendships
      • Have helped others
    • Nic
      • Friendships
      • Clients
    • John
      • Connections - Hey you are that guy
      • Given me a sense of value
      • Gives me a sense of supporting the community
  • Why are non-code contributions important
    • As valuable to the health of a project as code contributions.
    • There are non-code requirements for all projects
    • Not everyone is a developer/coder
    • Get’s more people with a variety of skills involved in the community
    • Moves open source forward
  • Challenges of Contributing
    • Contribution Imposter Syndrome
    • My Contribution isn’t valuable
    • Dealing with concerns that it’s not helpful
  • Focus on your skills and passions
  • Work, life, contribution balance
    • Work it into your work
    • Build a career based on contribution
    • Contrib doesn’t have to be Nights and Weekends
    • Add 30 min to the start or end of your day
    • If you do tackle one thing a night
    • Provide contrib during your workday
  • Sustainability
  • Projects are easy to do short time,
    • Energy is high
    • Newness interesting
  • Most podcast don’t make it past 8 episodes
    • Long term is a challenge
    • Pre-show guest scheduling, content planning, shownotes
    • Post Production audio and video
    • Release and marketing
    • 1 hour show = 6 - 8 hours
  • Priorities and interests change over time
  • NCC easier to transition in and out
    • Had to make transition out of my primary roles and I did that, projects have thrived in those transitions
  • Be honest with yourself
  • How to get involved / How to contribute
    • Just get started
    • Look at your skill set
    • Look at your interests
    • Ask in the issue queue or drupal slack for a starting point
    • You can also reach out to most camp organizers for recommendations
  • Takeaways
    • John
      • Anyone can and everyone should contribute
    • Stephen
      • Your contribution is valuable
    • Nic
      • Code and non code are equal to the long term health of the project
Resources Hosts

Nic Laflin - www.nLighteneddevelopment.com @nicxvan John Picozzi - www.epam.com @johnpicozzi Stephen Cross - @stephencross

Sooper Drupal Themes: Top 20 Best Drupal 9 Themes in 2021

7 hours 22 minutes ago

Website themes are pre-made designs for website content management systems or “CMS” like Drupal, WordPress, and Joomla. If you are looking for a secure, flexible, and scalable Enterprise-ready CMS, Drupal is the best choice. With the 20 top Drupal themes we researched for you it will be easy to get started with Drupal 9. 


Using a good Drupal theme as a starting point can give your project a head start. Some Drupal themes are highly opinionated and designed for specific use cases like e-commerce webshops or magazine style websites. Other themes in our top 20 are less opinionated and architected more like a framework. 

Here are the best Drupal 9 themes:   1. DXPR Theme

Time is of the essence. With DXPR Theme, you will build powerful marketing content faster. The DXPR Settings Dashboard gives you every customization you need to create a website that exceeds expectations. DXPR theme is installed on more than 2000 sites, and you’re going to love it too.


DXPR Theme is the fastest and most easy-to-use low-code theme that Drupal site builders deserve! Furthermore, thanks to the tight integration with the DXPR Drupal Layout Builder, this theme can be part of a state-of-the-art digital experience platform. 


This theme deserves the #1 spot because it has the highest number of customization options and features, and that’s how this theme will save you time and money. DXPR Theme is really more of a low-code theming platform than a theme. It’s based on Bootstrap 3, but a Bootstrap 4 update is coming in Q1 of 2021. 

DXPR Theme (Free)

Framework: Bootstrap 3 (Bootstrap 4 update coming soon)

  2. Tico Theme

Tico theme is a professional and modern business Drupal theme with an eye-catching look. Most suitable for any website for personal or business use. Tico is simple to use and highly customizable. It’s designed with user-friendliness in mind. Tico sports a distinctly unique, modern look. It has a super powerful theme control panel with many useful options and tools to manage your site: Block builder, customize, sliders, etc. Tico theme is built with Gavias Block Builder. The significant drag and drop builder allows you to create professional blocks in just some simple clicks. Besides, with over 19 widgets integrated, building content has never been this easy. Tico theme uses the latest web technologies: Drupal 9.x, Bootstrap 3, SASS, HTML5, CSS3, Font Awesome 4

Tico theme (48,- USD)

Framework: Bootstrap 3

  3. TheMag Drupal Theme

TheMAG Drupal theme lets you create a modern magazine website with a lot of ease. It is excellent for sites that want to rake in ad revenue or profit from content. This bestseller theme is perfect for blogging, journalism, or entertainment sites.

TheMAG comes with lots of features and is fully compatible with Drupal Thunder distribution. It utilizes and extends the powerful and unique Drupal Layout Builder that lets you create complex layouts and pages with few clicks.

Video Review

TheMag Theme ($54,- USD) 

Framework: Bootstrap 4

  4. Jango Theme

 Jango is an ever-growing multipurpose theme for Drupal 7 and 9. It is powered by visual shortcodes and a layout builder.

Jango is a flexible theme that will simply be able to support every site. Such as portfolios, blogs, corporate, product showcase, landing pages, and many others. By utilizing 300+ components, you can mix-and-match any element together.

Jango theme was fired and designed with creative and modern web trends. It provides the most reliable, smooth, clean, and intuitive user experience. Jango is bundled with a completely responsive design and suitable with all popular internet browsers and devices. Jango is genuinely a theme prepared to launch upon buy.

Video overview

Jango Theme ($59- USD)

Framework: Bootstrap 3

  5. Pivot Theme

Pivot is the most sold theme on ThemeForest. Pivot is a fully featured multi-proposed, responsive, and Bootstrap based HTML5 Theme, which is suited for Business, Education, Hospitals, Corporate, and Portfolio type websites. 

Pivot includes the variant page builder through which you can build refreshing and confident appealing pages. It provides pre-build necessary pages like login, error, pages, and coming soon pages. 


Here are some best features.

  • MailChimp & Campaign Monitor Integration

  • Contact form with different variations and validation.

  • 14 Color schemes, LESS files are included for each scheme

  • Social media sites feed.

  • Variety of pages for login, Errors, and Coming soon, etc.

Pivot Theme ($48- USD)

Framework: Bootstrap 3

  6. Progressive Theme

Progressive is a visual shortcode based theme. Most suitable for those who need a content-full website. This is available for both Drupal 7 and 9 versions. It provides 200+ interactive web elements, and 50+ pre-build stunning pages, usable for a variety of businesses. Livicone and mega sliders are included for free. You can create animated layered based sliders.

The progressive theme has support for e-commerce and the best choice for online stores. It is using Ubercart for Drupal 7 and Drupal Commerce for Drupal 9. You can sell your services, products and it is also comfortable for paid membership websites.  

Progressive Theme ($59- USD)

Framework: Bootstrap 3

  7. Inston Theme

Inston is a new, modern, and professional business theme. Inston is a super Drupal 9 theme specially built for freelancers, designers, artists, and all types of agencies. The template is ideal for showcasing your work or projects in the best manner possible. In the Inston package, five different homepages are available, easily customizable.

You can modify it with a few clicks to fit according to your needs. Inston is a great candidate for any kind of website. You can either use it for personal or business purposes. Inston is very easy to use and highly customizable. Designed with user-friendliness in mind. Inston supports a unique, modern look. This Drupal theme has a powerful control panel with sets of useful options and tools to manage your website. 


The Inston theme is built with Gavias content builder. This basic drag and drop builder allows you to create a professional block in just a few clicks. Besides, with over many widgets, integrated, building content is never more natural. Inston theme applies the latest web technologies Drupal 9, THML 5, CSS 3, Bootstrap 4, SASS, Font Awesome 5.

Inston Theme (43,- USD)

Framework: Bootstrap 4

  8. EM Theme

 Em is a premium theme for Drupal 9, using thunder for publishing with an outstanding design and impressive features. Em is ideally suited for blogs, magazines, and news publishing websites. To make a content full website responsive for all devices is difficult. On the EM theme for Drupal 9, your site will look beautiful on every device.


You can use predefined layouts or simply drag, drop, and arrange everything to customize it down to your own taste. You can use different designs for each of your posts. Choose from 5 predefined layouts or create your own with only a few clicks. It gives a unique accent to the articles and makes them stand out with different styles. EM has support to reuse the existing media files and libraries like images and videos that you have previously used in your site. You can also start your E-shop on your website using EM. It is fully compatible with Drupal commerce.

EM Theme (59,- USD)

Framework: Bootstrap 4

  9. Enar Drupal Theme

 Enar is a modern, responsive, and Multi-Purpose Drupal 9 Theme. It is Created with the Bootstrap framework. Enar has great designs for the website of Creative Corporate, corporations, company profiles, personal portfolios, and more. You can create an impressive website or blog in minutes. Everything is possible with Enar.

It includes 10+ ready-to-use homepages with awesome design, unique concepts, scalable, responsive, amazing flexibility, premium plugins, useful shortcodes & many More.

Enar Drupal theme (58,- USD)

Framework: Bootstrap 3

  10. Maarif Drupal Theme

Maarif is a fully responsive, unique & modern designed Drupal 9 Theme. This theme can be used for car servicing, car repairing, car wash, auto shop, mechanic shop, batteries shop, tire/wheel shop, multipurpose businesses. The code is well commented, so one can find it very easy to customize. It also includes detailed documentation where everything is described how to customize each template with screenshots. The developer tried to give an attractive look to this theme to gather more traffic on your website.

Maarif Drupal Theme (43,- USD)

Framework: Bootstrap 4

  11. Pillar Theme

 Pillar is a rugged, responsive multipurpose Drupal 9 theme build with Bootstrap. Pillar embeds reusable HTML and modular CSS first, blending modern styling with clean markup everywhere in each template in the pack. take your startup business website to the next level, show off your one-page portfolio with smooth parallax, boost your blog, and amp up your multi-page corporate or mobile app website. The paragraph builder takes the pain out of building a website. It has an exclusive page builder to save time. Pillar forms the ideal starting point to Drupal projects of any kind.

Pillar Theme (48,- USD)

Framework: Bootstrap 3

  12. Kunco Theme

 Kunco is best for charity crowdfunding and fundraising websites. It is a clean, modern, super flexible, and responsive Drupal theme. It comes packed with powerful features and functions. Kunco theme is best suited for charity organizations such as NGO non-profit donation and fundraising organization websites.
Users can customize it with the facility to fit their requirements. Kunco theme is built with a famous and flexible Gavias builder. Astonishing drag and drop builder permits us to build professional blocks, pages in a few simple clicks. Furthermore, it contains over 35+ widget integrations. Preparing and writing the content is not easy work to do. Kunco theme implemented and applied the latest technologies keeping in view the latest version of Drupal, which is Drupal 8.7.x, SASS, HTML5, CSS3, Font awesome.

Kunco Theme (56,- USD)

Framework: Bootstrap 3

  13. Consulta Drupal Theme

Consulta Drupal theme is Perfect for Finance, Consulting & Business. Consulta is best suited for corporate websites like financial advisors, accountants, consulting firms, etc. This is a business template that is helpful for online presence for corporate businesses and financial firms. 

Consulta is fully responsive and retina ready, having 7+ headers and mega menus. It includes 11 pre-build readymade homepages you just have to include your own content. It has great SEO support (integration with most SEO Plugins)  

Consulta Drupal Theme (50,- USD)

Framework: Bootstrap 4

  14. Facdori Theme

Facdori is the most reliable Drupal 9 Theme for industrial & factory businesses and companies. The theme is also ideal for construction, industry, architecture, engineering, manufacturing, building services, and other construction or industry-related services. The theme has its own super powerful theme control panel with many useful options and tools to manage your site: Block builder, customize, sliders, etc. Facdori Theme is built with Gavias Content Builder; the amazing drag and drop builder allows you to build professional blocks in a few clicks. Facdori theme applies the latest web technologies: Drupal 9.x, Bootstrap 4, SASS, HTML5, CSS3, Font Awesome 5.  

Facdori Drupal Theme (43,- USD)

Framework: Bootstrap 4

  15. Rogan Theme

 Rogan is a multipurpose Drupal 9 theme for robust, eye-catching, and high-performance websites. The theme includes 7 home pages and 66 multipurpose demos and variants. This website has been developed using feature-rich plugin ideas and designs for a modern website. In this theme, the purchaser can find striking designs that best suits his needs.If you like Drupal and seeking a modern, clean, and flexible theme then Rogan is one of the topline recommendations for you to pick. This theme is adequate for corporate-level organizations, agencies, and any type of business. To display and share their company history, services, portfolio, and projects most creatively and professionally.

Rogan Drupal Theme (48,- USD)

Framework: Bootstrap 3 and 4


16. IBlue Drupal Theme

IBlue is a Responsive Drupal 9 clean and Professional Theme. It comes with over ten homepages and many more inner pages. It is decorated with awesome slideshows and color variations. Easy-to-customize and fully featured page design. This template is created for all sorts of businesses such as corporate, business, portfolios, hosting, creative, blogs, construction, and more.

Iblue Drupal Theme (49,- USD)

Framework: Bootstrap 3 and 4

  17. Stack Drupal Theme

Stack is a completed multipurpose Drupal 9 theme built with reusability and modularity at the core. Combining contemporary styling with clean markup, Stack forms a good starting point for many types of website. They are boasting over 140 demo pages, 270 customizable interface blocks, and a plethora of carefully crafted base elements. Quality and quantity in equal measure.

Using the Paragraph Builder Stack theme includes 240+ interface blocks in the huge collection of customizable elements. This modular system enables site builders to build their own blocks quickly and easily, leaving more time for layout and interface experimentation. Stack never uses inline styles, junk classes, or layout-specific stylesheets.

Stack Drupal Theme (48,- USD)

Framework: Bootstrap 3

  18. BizReview Directory Listing Drupal Theme 

On ThemeForest, BizReview is the best-selling theme for directories. ThemeForest review team selected it as a featured theme. There are no hidden charges, no extra fees to utilize features. All are available on the demo. You can create an interactive online directory portal with comprehensive searching, many map layers, attractive markers, and much more. A variety of tools are available for advertising. PayPal is also integrated in this theme. 

BizReview Theme (58, - USD)

Framework: Bootstrap 3

  19. Wosh Theme

Wosh is a multipurpose Drupal 9 theme with e-commerce integration using Drupal commerce and featuring different product types, Product reviews, product attributes, carts, and all you need for your next online commerce shop.


This responsive e-commerce template built with bootstrap 4 will be ideal for any web developer to customize and make their own site become one of the top online shopping sites since this theme has a great combination of a clean, modern, minimalist design and many powerful features.


It has different header and footer options as well as unlimited color styles. Wosh is packed with various features and options to make a complete website, such as landing pages, sale promotion, sales product, etc. Whatever products that you are selling, it will catch your viewer’s interest fromfirst sight.

Wosh Theme ($49- USD)

Framework: Bootstrap 4

  20. VoltBuzz Drupal Theme

VoltBuzz- is a stylish and professional Drupal 9 theme for SEO and digital marketing. All kinds of digital marketing service Websites like SEO Services, online marketing, digital agencies, Social Media Marketing, and any other marketing strategies based agency can use it.This theme is easily customizable, fully responsive, and supported in all new browsers and devices. 

VoltBuzz Drupal theme (43,- USD)

Framework: Bootstrap 4

Should you use these Drupal themes on your next Drupal 9 project?

Here are some of the advantages for using one of the below top Drupal 9 themes:

  • All top Drupal themes are SEO friendly

  • You will get a great mobile responsive design with all Drupal themes

  • Easily customize these themes with theme settings

  • Theme owners provide updates to enhance website functionality and maintain browser compatibility so you won’t have to

For good measure we’ll also list a few disadvantages to consider:

  • With feature-rich themes you are increasing the technical debt in your project

  • The more opinionated a theme is the harder it will be to customize the theme. For example if your theme is an ecommerce theme it might be harder to make it work for a new magazine section on your website. Choose a less opinionated theme if you plan to grow your site beyond its initial scope.

Golems GABB: Popular CLI tool renovated: what’s new in Drush 9 & 10

10 hours 26 minutes ago
Popular CLI tool renovated: what’s new in Drush 9 & 10 Editor Thu, 10/21/2021 - 12:35

Despite the availability of an administrative interface in content management systems, developers love command-line tools. A CLI enables them to do more actions or is just very convenient for tech-savvy minds. Installing modules, updating websites, clearing caches, exporting configurations, and much more is available through clear terminal commands.

In one of our previous posts, we discussed the powers of Composer for Drupal websites. This time, another CLI tool will be in the limelight. This tool’s name starts the same as Drupal, it was created exclusively for Drupal, developers respect it a lot, and it has been renovated in recent years. Let’s begin our story about Drush, its key capabilities, and its latest releases — Drush 9 and Drush 10.

Drupal Core News: Drupal 9.3.0-alpha1 will be released the week of October 25

13 hours 22 minutes ago

In preparation for the minor release, Drupal 9.3.x will enter the alpha phase the week of October 25, 2021. Core developers should plan to complete changes that are only allowed in minor releases prior to the alpha release. The 9.3.0-alpha1 deadline for most core patches is October 22, 2021. (More information on alpha and beta releases.)

  • Developers and site owners can begin testing the alpha after its release.

  • The 9.4.x branch of core will be created, and future feature and API additions will be targeted against that branch instead of 9.3.x. All outstanding issues filed against 9.3.x will be automatically migrated to 9.4.x.

  • Once 9.4.x is branched, alpha experimental modules will be removed from the 9.3.x codebase (so their development will continue in 9.4.x only).

  • All issues filed against 9.2.x will then be migrated to 9.3.x, and subsequent bug reports should be targeted against the 9.3.x branch.

  • During the alpha phase, core issues will be committed according to the following policy:

    1. Most issues that are allowed for patch releases will be committed to 9.3.x and 9.4.x.
    2. Most issues that are only allowed in minor releases will be committed to 9.4.x only. A few strategic issues may be backported to 9.3.x, but only at committer discretion after the issue is fixed in 9.4.x (so leave them set to 9.4.x unless you are a committer), and only up until the beta deadline.

Roughly two weeks after the alpha release, the first beta release will be created. All the restrictions of the alpha release apply to beta releases as well. The release of the first beta is a firm deadline for all feature and API additions. Even if an issue is pending in the Reviewed & Tested by the Community (RTBC) queue when the commit freeze for the beta begins, it will be committed to the next minor release only.

The release candidate phase will begin the week of November 22. See the summarized key dates in the release cycle, allowed changes during the Drupal 8 and Drupal 9 release cycles, and Drupal 8 and 9 backwards compatibility and internal API policy for more information.

The scheduled release date of Drupal 9.3.0 is December 8, 2021.

Drupal 10 branch will be open soon

The Drupal 10 branch will be opened for development when meaningful third party component updates are available. We will post an update when that happens.

Bugfix and security support of Drupal 9.2.x, 9.1.x, 8.9.x.

Security coverage for Drupal 8 and 9 is generally provided for the previous minor release as well as the newest minor release. However, Drupal 8.9.x is a Long-Term Support release where support is provided until November 2, 2021. Based on these the following changes are upcoming:

Drupal 8.9.x Security releases will be provided until November 2, 2021. Bugfix support is restricted to selected low-disruption major and critical bug-fixes. Drupal 9.1.x Security releases will be provided until the release of Drupal 9.3.0 on December 8, 2021. Bugfix support is restricted to selected low-disruption major and critical bug-fixes. Drupal 9.2.x Normal bugfix support ends on December 8, 2021. However, security releases are provided until the release of Drupal 9.4.0 on June 15, 2022.

Nonprofit Drupal posts: October Drupal for Nonprofits Chat: Anything Goes

1 day 5 hours ago

Our normally scheduled call to chat about all things Drupal and nonprofits will happen TOMORROW, Thursday, October 21 at 1pm ET / 10am PT. (Convert to your local time zone.)

We don't have anything on the agenda at the moment, so join us for an informal chat about anything at the intersection of Drupal and nonprofits. Got something specific on your mind? Feel free to share ahead of time in our collaborative Google doc: https://nten.org/drupal/notes!

All nonprofit Drupal devs and users, regardless of experience level, are always welcome on this call.

This free call is sponsored by NTEN.org and open to everyone.

View notes of previous months' calls.

Dries Buytaert: Who sponsors Drupal development? (2020-2021 edition)

1 day 5 hours ago

For the past few years, I've examined Drupal.org's contribution data to understand how the Drupal project works. Who develops Drupal? How diverse is the Drupal community? How much of Drupal's maintenance and innovation is sponsored? Where do sponsorships come from?

The report might be of interest even if you don't use Drupal. It provides insights into the inner workings of one of the largest Open Source projects in the world.

This year's report shows that:

  • Compared to last year, we have fewer contributions and fewer contributors. The slowdown is consistent across organizations, countries, project types, and more. We believe this is the result of COVID-19 and where we are in the Drupal Super Cycle.
  • Two-thirds of all contributions are sponsored, but volunteer contributions remain important to Drupal's success.
  • Drupal's maintenance and innovation depends mostly on smaller Drupal agencies and Acquia. We don't see many contributions from hosting companies, multi-platform digital agencies, system integrators, or end users.
  • Drupal's contributors have become more diverse, but are still not diverse enough.

For comparison, you can also look at the 2016 report, 2017 report, 2018 report, 2019 report, and the 2020 report.

Methodology What data did we analyze?

We looked at all Drupal.org issues marked "closed" or "fixed" in the 12-month period from July 1, 2020 to June 30, 2021. This is across issues in Drupal Core and all contributed projects, including all major versions of Drupal.

What are Drupal.org issues?

Each "Drupal.org issue" tracks an idea, feature request, bug report, task, or more. It's similar to "issues" in GitHub or "tickets" in Jira. See https://www.drupal.org/project/issues for the list of all issues.

What are Drupal.org credits?

In the spring of 2015, I proposed some ideas for how to give credit to Drupal contributors. A year later, Drupal.org added the ability for contributors to attribute their work to an organization or customer sponsor, or mark it the result of volunteer efforts.

A screenshot of an issue comment on Drupal.org. You can see that jamadar worked on this patch as a volunteer, but also as part of his day job working for TATA Consultancy Services on behalf of their customer, Pfizer.

Drupal.org's credit system is unique and groundbreaking within the Open Source community. It provides unprecedented insights into the inner workings of a large Open Source project. There are a few limitations with this approach, which I'll address at the end of this report.

How is the Drupal community doing?

In the 12-month period between July 1, 2020 and June 30, 2021, Drupal.org's credit system received contributions from 7,420 different individuals and 1,186 different organizations. We saw a 10% decline in individual contributors, and a 2% decrease in organizational contributors.

For this report's time period, 23,882 issues were marked "closed" or "fixed", a 30% decline from the 2019-2020 period. This averages out to 65 issues marked "closed" or "fixed" each day.

In total, the Drupal community worked on 3,779 different Drupal.org projects this year compared to 4,195 projects in the 2019-2020 period — a 10% year-over-year decline.

Metric 2019 - 2020 2020 - 2021 Delta Number of individual contributors 8,303 7,420 -12% Number of organizational contributors 1,216 1,186 -2% Number of issues "fixed" or "closed" 31,153 23,882 -23% Number of projects worked on 4,195 3,779 -10%
Understanding the slowdown in contribution Individual contributors slowed down

To understand the slowdown, I looked at the behavior of the top 1,000 contributors:

  • The top 1,000 individual contributors are responsible for 65% of all contributions. The remaining 6,420 individuals account for the remaining 35%. Overall, Drupal follows a long tail model.
  • In the last year, 77 of the top 1,000 individual contributors stopped contributing to Drupal, 671 contributed less, and 252 contributed more.

A 7.7% annual attrition rate in the top 1,000 contributors is very low. It means that the average contributor in the top 1,000 is active for 13 years. In other words, Drupal's top 1,000 contributors are extremely loyal — we should be grateful for their contributions and continued involvement in the Drupal project.

While we can't compare Open Source projects like Drupal to commercial companies, it might be useful to know that most commercial organizations are very happy with an attrition rate of 15% or less. This means that an employee stays with their employer for almost 6.5 years. Nowadays, a lot of people don't stay with their employer for that long. When it’s put that way, you can see that an attrition rate of 7.7% is very good!

The big takeaway is that the top individual and organizational contributors aren't leaving Drupal. They just became less active in 2020-2021.

Organizational contributors also slowed down

Next, I looked at the behavior of the top 250 organizations:

  • The top 250 organizational contributors are responsible for 82% of all contributions. The other 936 organizations account for the remaining 18%.
  • In the last year, 8 organizations (3%) stopped contributing, 168 (67%) contributed less, and 74 (30%) contributed more.
  • Five of the 8 organizations that stopped contributing were end users; they most likely switched their website away from Drupal. The remaining 3 were digital agencies. The end user attrition rate in the top 250 was 2%, while the digital agency attrition rate was 0.4%.

The top Drupal agencies remain very committed to Drupal. While many agencies contributed less, very few agencies stopped contributing to Drupal altogether.

Why are individuals and organizations contributing less?

As part of my research, I reached out to some of the top contributing Drupal agencies. The main reason why they are contributing less is that they are too busy growing:

  • We grew 33% so far in 2021. We have grown our contribution as well, but there has been a shift from code contributions to non-code contributions. We've contributed less code because Drupal has all the features we need to deliver amazing digital experiences, and has become really stable and robust. There has been less code to contribute. — Baddý Sonja Breidert, CEO of 1xINTERNET, Germany
  • We have grown 35% in the last year — from around 65 employees to 90. — Nick Veenhof, CTO of DropSolid, Belgium
  • Customer investment in digital has accelerated by several years the past 12 months. We grew our Drupal practice by 35% in the past year. — Paul Johnson, Drupal Director at CTI Digital, UK
  • We grew 27% in revenue last year. We expect to continue on that growth trajectory. Our only concern is shortage of Drupal talent. — Janne Kalliola, CEO of Exove, Finland
  • We grew 40% over the last year. This has been driven by an increased demand for large Drupal projects on tight deadlines. With more time pressures from clients and changing personal commitments, it’s been more difficult for people to find the time to contribute. But also, more of our contribution shifted from Drupal.org to GitHub, and doesn't use the credit system. — Stella Power, Managing Director of Annertech, Ireland

It's great to see so many Drupal agencies doing well.

Other than being too busy with client work, the following secondary reasons were provided:

  • Drupal is a stable and mature software project. Drupal has all the features we need to deliver ambitious digital experiences. Furthermore, Drupal has never been this stable and robust; we don't have many bug fixes to contribute, either.
  • There is a shortage of Drupal talent; the people we hire don't know how to contribute yet.
  • COVID eliminated in-person events and code sprints. In-person events inspired our employees to contribute and collaborate. Without in-person events, it's hard to instill employees with a passion to contribute.
  • It's more difficult to teach new employees how to contribute when everyone is remote.
  • People want a vision for Drupal that they can rally behind. We have already achieved the vision: Drupal is for ambitious digital experiences. People want to know: what is next?
  • The tools and processes to contribute are becoming more complex; contribution has become more difficult and less desirable.
  • We are getting more efficient at managing major Drupal releases. Rector automates more and more of the upgrade work. When we work smarter, contribution drops.

There is no doubt that COVID has accelerated a lot of digital transformation projects, but it has also slowed down contribution. Parents are busy home-schooling their children, people have Zoom-fatigue, some families may have lost income, etc. COVID added both stress and extra work to people's lives. For many, this made contribution more difficult or less possible.

Drupal Super Cycle

Drupal agencies provided many valid reasons for why contribution is down. In addition to those, I believe a Drupal Super Cycle might exist. The Drupal Super Cycle is a new concept that I have not talked about before. In fact, this is just a theory — and only time will tell if it is valid.

The Drupal Super Cycle is a recognition that Drupal's development cycle ebbs and flows between a "busy period" and "quiet period" depending on when the next major release takes place. There is a "busy period" before a major release, followed by a "quiet period" after each major release.

Major Drupal releases only happen every 2 or 3 years. When a major release is close, contributors work on making their projects compatible. This requires extra development work, such as adopting new APIs, subsystems, libraries, and more. Once projects are compatible, the work often shifts from active development to maintenance work.

A slide from the my DrupalCon Europe 2021 keynote where I explain the Drupal Super Cycle theory.

The last major Drupal release was Drupal 9, released in June of 2020. Last year's report analyzed contribution activity between July 1, 2019 and June 30, 2020. This period includes the 11-month period leading up to the Drupal 9 release, the Drupal 9 release itself, and 1 month after the Drupal 9 release. It's the "busy period" of the Super Cycle because the Drupal community is getting thousands of contributed modules ready for Drupal 9.

This year's report analyzes contribution data starting 1 month after the Drupal 9 release. There was no major Drupal release this year, and we are still 9 to 14 months away from Drupal 10, currently targeted for the summer of 2022. We are in the "quiet period" of the Super Cycle.

If the Drupal Super Cycle concept is valid, we should see increased activity in next year's report, assuming we remain on track for a Drupal 10 release in June of 2022. Time will tell!

What is the community working on?

Contribution credits decreased across all project types, but increased for Drupal Core.

Core contributions saw a 7% year-over-year increase in credits, while work on contributed projects — modules, themes and distributions — are all down compared to last year.

Who are Drupal's top individual contributors?

The top 30 individual contributors between July 1, 2020 and June 30, 2021 are:

For the weighted ranking, I weighed each credit based on the adoption of the project the credit is attributed to. For example, each contribution credit to Drupal Core is given a weight of 10, because Drupal Core has about 1 million active installations. Credits to the Webform module, which has over 450,000 installations, get a weight of 4.5. And credits to Drupal's Commerce project get 0.5 points, as it is installed on around 50,000 sites.

The weighting algorithm also makes adjustments for Drupal's strategic initiatives. Strategic initiatives get a weight of 10, the highest possible score, regardless of whether these are being developed in Drupal Core's Git repository or in a sandbox on Drupal.org.

The idea is that these weights capture the end user impact of each contribution, but also act as a proxy for the effort required to get a change committed. Getting a change accepted in Drupal Core is both more difficult and more impactful than getting a change accepted to a much smaller, contributed project.

This weighting is far from perfect, but so is the unweighted view. For code contributions, the weighted chart may be more accurate than a purely unweighted approach. I included both charts:

No matter how you look at the data, all of these individuals put an incredible amount of time and effort into Drupal.

It's important to recognize that most of the top contributors are sponsored by an organization. We value the organizations that sponsor these remarkable individuals. Without their support, it could be more challenging for these individuals to contribute.

How much of the work is sponsored?

When people contribute to Drupal, they can tag their contribution as a "volunteer contribution" or a "sponsored contribution". Contributions can be marked both volunteer and sponsored at the same time (shown in jamadar's screenshot near the top of this post). This could be the case when a contributor does paid work for a customer, in addition to using unpaid time to add extra functionality or polish.

For those credits with attribution details, 16% were "purely volunteer" (7,034 credits). This is in stark contrast to the 68% that were "purely sponsored" (29,240 credits). Put simply, roughly two-thirds of all contributions are "purely sponsored". Even so, volunteer contribution remains very important to Drupal.

Volunteers contribute across all areas of the project. A lot of volunteer time and energy goes towards non-product related contributions such as event organization, mentoring, and more. Non-code contributions like these are very valuable, yet they are under-recognized in many Open Source communities.

Who are Drupal's top organizational contributors?

Similar to the individual contributors, I've ranked organizations by both "unweighted contributions" and "weighted contributions". Unweighted scores are based solely on volume of contributions, while weighted scores also try to take into account both the effort and impact of each contribution.

If you are an end user looking for a company to work with, these are some of the companies I'd work with first. Not only do they know Drupal best, but they also help improve your investment in Drupal. If you are a Drupal developer looking for work, these are some of the companies I'd apply to first.

A variety of different types of companies are active in Drupal's ecosystem:

Category Description Traditional Drupal businesses Small-to-medium-sized professional services companies that primarily make money using Drupal. They typically employ fewer than 100 employees. Because they specialize in Drupal, many of these companies contribute frequently and are a huge part of our community. Examples are Third and Grove, OpenSense Labs, Srijan, etc. Digital marketing agencies Larger full-service agencies that have marketing-led practices using a variety of tools, typically including Drupal, Adobe Experience Manager, Sitecore, WordPress, etc. Many of these larger agencies employ thousands of people. Examples are Wunderman Thompson, Possible, and Mirum. System integrators Larger companies that specialize in bringing together different technologies into one solution. Example system integrators are Accenture, TATA Consultancy Services, EPAM Systems, and CI&T. Hosting companies Examples are Acquia, Pantheon, and Platform.sh, but also Rackspace or Bluehost. End users Examples are the European Commission or Pfizer.

A few observations:

  • Most of the sponsors in the top 30 are traditional Drupal businesses with fewer than 100 employees. With the exception of Acquia, Drupal's maintenance and innovation largely depends on these small Drupal businesses.
  • The larger, multi-platform digital marketing agencies are barely contributing to Drupal. Only 1 digital marketing agency shows up in the top 30: Intracto with 410 credits. Hardly any appear in the entire list of contributing organizations. I'm frustrated that we have not yet found the right way to communicate the value of contribution to these companies. We need to incentivize these firms to contribute with the same level of commitment that we see from traditional Drupal businesses.
  • The only system integrator in the top 30 is CI&T with 1,177 credits. CI&T is a smaller system integrator with approximately 2,500 employees. We see various system integrators outside of the top 30, including EPAM Systems (138 credits), TATA Consultancy Services (109 credits), Publicis Sapient (60 credits), Capgemini (40 credits), Globant (8 credits), Accenture (2 credits), etc.
  • Various hosting companies make a lot of money with Drupal, yet only Acquia appears in the top 30 with 1,263 credits. The contribution gap between Acquia and other hosting companies remains very large. Pantheon earned 71 credits compared to 122 last year. Platform.sh earned 8 credits compared to 23 in the last period. In general, there is a persistent problem with hosting companies not contributing back.
  • We only saw 1 end user in the top 30 this year: Thunder (815 credits). Many end users contribute though: European Commission (152 credits), Pfizer (147 credits), bio.logis (111 credits), Johnson & Johnson (93 credits), University of British Columbia (105 credits), Georgia Institute of Technology (75 credits), United States Department of Veterans Affairs (51 credits), NBCUniversal (45 credits), Princeton University (43 credits), Estée Lauder (38 credits), University of Texas at Austin (22 credits), and many more.

I often recommend end users to mandate contributions from their partners. Pfizer, for example, only works with agencies that contribute back to Drupal. The State of Georgia started doing the same; they made Open Source contribution a vendor selection criteria. If more end users took this stance, it could have a big impact on Drupal. We'd see many more digital agencies, hosting companies, and system integrators contributing to Drupal.

While we should encourage more organizations to sponsor Drupal contributions, we should also understand and respect that some organizations can give more than others — and that some might not be able to give back at all. Our goal is not to foster an environment that demands what and how others should give back. Instead, we need to help foster an environment worthy of contribution. This is clearly laid out in Drupal's Values and Principles.

How diverse is Drupal?

Supporting diversity and inclusion is essential to the health and success of Drupal. The people who work on Drupal should reflect the diversity of people who use the web.

I looked at both the gender and geographic diversity of Drupal.org contributors.

Gender diversity

While Drupal is slowly becoming more diverse, less than 9% of the recorded contributions were made by contributors who do not identify as men. The gender imbalance in Drupal remains profound. We need to continue fostering diversity and inclusion in our community.

A few years ago I wrote a post about the privilege of free time in Open Source. I made the case that Open Source is not a meritocracy. Not everyone has equal amounts of free time to contribute. For example, research shows that women still spend more than double the time as men doing unpaid domestic work, such as housework or childcare. This makes it more difficult for women to contribute to Open Source on an unpaid, volunteer basis. Organizations capable of giving back should consider financially sponsoring individuals from underrepresented groups to contribute to Open Source.

Compared to men, women do more sponsored work, and less volunteer work. We believe this is because men have the privilege of more free time.

Free time being a privilege is just one of the reasons why Open Source projects suffer from a lack of diversity.

The gender diversity chart above shows that there is a growing number of individuals that no longer share their gender identity on Drupal.org. This is because a couple of years ago, the gender field on Drupal.org profile was deprecated in favor of a Big 8/Big 10 demographics field.

Today, over 100,000 individuals have filled out the new "Big 8/Big 10" demographics field. The new demographics field allows for more axes of representation, but is also somewhat non-specific within each axis. Here are the results:

Diversity in leadership

Drupal.org recently introduced the ability for contributors to identify what contributor roles they fulfill. The people who hold these key contribution roles can be thought of as the leaders of different aspects of our community, whether they are local community leaders, event organizers, project maintainers, etc. As more users begin to fill out this data, we can use it to build a picture of the key contributor roles in our community. Perhaps most importantly, we can look at the diversity of individuals who hold these key contributor roles. In next year's report we will provide a focused picture of diversity in these leadership positions.

Geographic diversity

We saw individual contributors from 6 continents and 121 countries. Consistent with the trends described above, most countries contributed less compared to a year earlier. Here are the top countries for 2020-2021:

The top 20 countries from which contributions originate. The data is compiled by aggregating the countries of all individual contributors behind each issue. Note that the geographical location of contributors doesn't always correspond with the origin of their sponsorship. Wim Leers, for example, works from Belgium, but his funding comes from Acquia, which has the majority of its customers in North America. Wim's contributions count towards Belgium as that is his country of residence.

Europe contributes more than North America. However, contribution from Europe continues to decline, while all other continents have become more active contributors.

Asia, South America, and Africa remain big opportunities for Drupal; their combined population accounts for 6.3 billion out of 7.5 billion people in the world.

Limitations of the credit system

It is important to note a few of the current limitations of Drupal.org's credit system:

  • The credit system doesn't capture all code contributions. Parts of Drupal are developed on GitHub rather than Drupal.org. Contributions on GitHub usually aren't credited on Drupal.org. For example, a lot of the work on the Automatic Updates initiative is happening on GitHub instead of Drupal.org, and companies like Acquia and Pantheon don't get credit for that work.
  • The credit system is not used by everyone. Because using the credit system is optional, many contributors don't. For example, while they could, not all event organizers and speakers capture their work in the credit system. As a result, contributions often have incomplete or no contribution credits. Where possible, we should automatically capture credits. For example, translation efforts on https://localize.drupal.org are not currently captured in the credit system, but could be automatically.
  • The credit system doesn't accurately value complexity and quality. One person might have worked several weeks for just 1 credit, while another person might receive a credit for 10 minutes of work. Each year we see a few individuals and organizations trying to game the credit system. In this post, I used a basic weighting system based on project adoption. In future, we should consider refining that by looking at issue priority, patch size, number of reviews, etc. This could help incentivize people to work on larger and more important problems and save smaller issues, such as coding standards improvements, for new contributor sprints.

Because of these limitations, the actual number of contributions and contributors could be much higher than what we report.


While we have fewer contributions and fewer contributors compared to last year, it is not something to be worried about. We can attribute this to various things, such as COVID-19, agency growth, and the Drupal Super Cycle.

Our data confirms that Drupal is a vibrant community full of contributors who are constantly evolving and improving the software. It's amazing to see that just in the last year, Drupal welcomed more than 7,000 individual contributors and over 1,100 corporate contributors.

To grow and sustain Drupal, we should support those that contribute to Drupal and find ways to get those that are not contributing involved in our community. We are working on several new ways to make it easier for new contributors to get started with Drupal, which I covered in my latest DrupalCon keynote. Improving diversity within Drupal is critical, and we should welcome any suggestions that encourage participation from a broader range of individuals and organizations.

Special thanks to Tim Lehnen, CTO at the Drupal Association, for supporting me during my research.

Specbee: How to Get Drupal 10 Ready and What Should Be Your Next Move

1 day 13 hours ago
How to Get Drupal 10 Ready and What Should Be Your Next Move Shefali Shetty 20 Oct, 2021

In today’s fast-paced and dynamic digital world, it’s nearly a requirement for businesses to deliver web experiences that are more secure, better performing and feature-rich. Luckily, there is an easy way to close the gap if your organization is still a little behind; Simply get your CMS updated to its latest version.   
With the release of Drupal 9 in mid 2020 and the news of an imminent Drupal 10 release, the mid-cycle time frame can be a confusing time for some organizations. As the details become more clear, Specbee is here to answer all your questions about Drupal 10. We’ll also help you get prepared for Drupal 10 and give you updates on what the Drupal 10 readiness initiative team is currently working on later in this article.


When does Drupal 10 release and why is it releasing so soon?

Drupal 10 is tentatively scheduled to release between June 2022 and November 2022. As of the latest reports, the Drupal 10 readiness initiative team has been making great progress and is on track with its goals and deliverables - which means any delay would be unexpected.
The reason for such a fast cycle from Drupal 9 to Drupal 10 is that, since the release of Drupal 8 and its adoption of continuous innovation practices, Drupal has fueled integrations and dependencies with many third-party components which has, in a positive turn, actively driven technology advances. Integrating some of these fantastic components like Composer, PHP, Symfony and CKEditor (amongst many others) has taken Drupal’s usability and robustness to another level as well as opened doors to wider pools of talent.

But all of these component and dependency advances also means that Drupal will have to move at a faster pace to keep up with those release cycles. With every major integration update to major/minor versions, Drupal needs to update its major/minor versions as well.
Symfony is one of Drupal’s biggest dependencies. Drupal 9 requires Symfony 4 which reaches its End Of Life (EOL) by November 2023. There is a similar situation with CKEditor and other 3rd party components as well. With those major components reaching EOL, Drupal 9 will also be reaching EOL by November 2023. In preparation, Drupal 10 is scheduled to be released before then (between the window of June and November 2022) to give organizations enough time to upgrade.

DriesNote at DrupalCon Europe 2021 - https://youtu.be/VuSBnL_uG2I

Upgrade to Drupal 8 or Drupal 9?

When Drupal 7 was released early 2011, there was huge excitement among the community because of the massive leap from Drupal 6. It was also a long time coming… It took almost three years of hard work, passion and commitment to build that game-changing version of Drupal.
But now that Drupal 7 is more than 10 years old (which is a century in “website age”), it is time to move on to a modern version of Drupal for all organizations. Drupal 7 reaches End of Life (EOL) in November 2022. One of the bigger reasons for this is that, with PHP and MySQL releasing their latest versions, it’s harder for Drupal 7 to stay compatible and for websites still using it to work as intended. More importantly, organizations are also missing out on key improvements and features that have been made since its restructuring in Drupal 8.
Drupal 8 was released in November 2015 and brought in huge architectural changes while embracing modern libraries and components. It was a whole paradigm shift for Drupal. With those advancements came semantic versioning, shorter release cycles and, most importantly, easy future upgrades - to the appreciation of many.
So, if you’re on Drupal 7 or Drupal 8, what’s your next move? That decision is a bit easier than you might expect. Drupal 8 reaches EOL by November 2, 2021 (it will no longer receive any further community support or security fixes) and all Drupal 8 sites need to upgrade to Drupal 9 before then. We recommend moving to Drupal 9 now. The good news is that the upgrade from Drupal 8 to Drupal 9 is really easy!
Drupal 9 was released in June 2020 and wasn’t very different from the last version of Drupal 8. The main difference is that it had cleaner & leaner code, the latest versions of some of the best technologies and a modern default theme.

Image Credits: Drupal.org

Get Drupal 10 Ready

The other good news is that the upgrade from Drupal 9 to Drupal 10 is going to be even easier! With the help of amazing tools like Rector to help you with automating code updates, upgrading your Drupal 9 site to Drupal 10 is going to be 300% more automated than a Drupal 8 to Drupal 9 upgrade.

According to the recent DriesNote at DrupalCon Europe 2021, the Drupal 10 readiness initiative has been making some amazing progress and completed 70% of the work already!
Here’s what you can do to get ready for Drupal 10:

  • If you’re still on Drupal 7 (or Drupal 6), find a reliable and skilled Drupal partner to help you with a seamless migration to Drupal 9.
  • If you’re on Drupal 8, make that easy upgrade to Drupal 9 soon (before Drupal 8 EOL)
  • Make sure you have updated to the latest (last released) version of Drupal 9
  • Upgrade all your contributed projects to remove deprecations to support Drupal 10.
  • This will ensure that it supports all the latest released libraries, components and latest PHP versions (as their older versions will deprecate in Drupal 10)
  • From here, it is going to be an easy ride to Drupal 10 with just a simple core upgrade.
Updates from the Drupal 10 Readiness Initiative

Drupal 10 is already being built in Drupal 9. According to the Drupal 10 readiness initiative team, “Drupal 10 will be a refined version of Drupal 9”. The team has been working hard since March 2020 to make sure Drupal 10 is released on time without any glitches. If you would like to contribute to the initiative, you can do so through many different ways. Check out how you can help here.
Here are some of the latest updates from the Drupal 10 readiness initiative:
1. Symfony 6 compatibility

Resolved Symfony 4 deprecations in Drupal 9 for Symfony 5. It's just better for site owners and module developers to have as much Symfony 6 compatibility as possible in 9.3. 
2. Remove jQuery UI components used by Drupal core and replace with a set of supported solutions

Rebuild jQuery UI functionality ourselves. This could be done either by using vanilla JavaScript or by using a framework such as React.
3. Provide a proper mechanism for deprecating modules

A set of best practices for naming, versioning, deprecating, leaving wrappers or not, forcing uninstallation, etc. Introduce a 'lifecycle' -property to be used in info.yml files, both for themes and modules.
4. Allow Drupal 9 to be installed with Twig 3

We don't know exactly when Twig 2 EOL will be, but whether it forces an update in Drupal 10 or 11, it is better to upgrade to Twig 3. 
5. Add optional support for CKEditor 5 in Drupal 9 so we can remove CKE 4 from Drupal 10

Moving Ckeditor 5 to contrib for seeking the support from the community. The CKEditor 5 module needs to be stable in the last Drupal 9 minor if we want to be able to deprecate CKEditor 4 before Drupal 10, so we can remove CKEditor 4 in Drupal 10.
6. Php 8.1 support for Drupal 9 and Drupal 10

There is a great progress on PHP 8.1 compatibility. It has only two internal issues to fix now. Also, PHP 8.1 is in RC3, so it is quite stable now to work against.
7. Upgrade to Guzzle 7

Guzzle has been updated to Guzzle 7.3.0. It requires psr/http-client 1.0.1, which has also been added as a dependency.
8. Replace Classy with a starter kit theme 

Replace Classy with a new starter kit theme. The starter kit markup and CSS will be allowed to change over time since it acts only as a starting point for themes.
9. Remove deprecated modules on the Drupal 10 branch 

Remove modules where agreement was made and modules were deprecated in Drupal 9.
A big thanks to @AkshayDevadiga, who is also a contributor to the Drupal 10 readiness initiative, for these helpful updates!

Drupal 10 is coming and the best way to get prepared for it is to stay updated. With Drupal now adapting to a flexible update schedule and easier migration processes, organizations are less likely to think twice before making that change. If you’re looking to migrate your website to Drupal 9 and get prepared for Drupal 10, you can count on our Drupal migration expertise and experience. We’d love to talk!

Drupal 10 Drupal 9 Drupal Development Drupal Migration Drupal Planet Subscribe to our Newsletter Now Subscribe Leave this field blank

Leave us a Comment

  Recent Blogs Image How to Get Drupal 10 Ready and What Should Be Your Next Move Image A Deep Dive into the Webform Module for Drupal 8/9 Image How to Migrate Content from XML files to Drupal 8 (or 9) Need help Migrating to Drupal 8 or 9 Schedule a call Featured Success Stories

A Drupal powered multi-site, multi-lingual platform to enable a unified user experience at SEMI.


Discover how our technology enabled UX Magazine to cater to their massive audience and launch outreach programs.


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


Droptica: What is Droopescan and How to Use It Effectively

2 days 6 hours ago

Website reconnaissance is one of the elements of a security audit. This task can be automated to some extent by choosing one of the free, open-source programs available on the web. One of such tools is Droopescan.

What is Droopescan?

Droopescan is a script allowing speeding up the initial reconnaissance of the audited website if it uses one of the CMSs listed below. The script enables defining your own plugins, which can allow even greater automation of the initial review process. You can find more about creating own plugins, that extend the functionality of the script, in README.md on the previously linked tool’s page on Github.

Drupal scanner features

Droopescan capabilities vary depending on the content management system.

In Drupal, these are the functions that allow identifying:

  • installed plugins,
  • installed themes,
  • paths of interest to a potential attacker (such as the login panel or the changelog file),
  • Drupal version used.

In Joomla and WordPress, you can identify the paths of interest to an attacker, and the used version of these systems. In another CMS, Moodle, the Droopescan tool can recognize the installed plugins and themes, and the version of the content management system in use.

In the Silverstripe system, we'll identify:

  • installed plugins,
  • installed themes,
  • paths of interest to an attacker,
  • Silverstripe version used.
Methods of installing the script

The developers have prepared several methods of installing the script. We can choose the most appropriate way, depending on our preferences.

Using pip

This is the installation method recommended by the creators:

apt-get install python-pip pip install droopescan

Manual installation

To install the script manually, run the following commands:

git clone https://github.com/droope/droopescan.git cd droopescan pip install -r requirements.txt ./droopescan scan --help

On the BlackArch distribution

For installation on the BlackArch distribution, the creators recommend using pacman:

sudo pacman -S droopescan


Droopescan can also be installed as a Docker container:

git clone https://github.com/droope/droopescan.git cd droopescan docker build -t droope/droopescan . # display help docker run --rm droope/droopescan # example scanning a drupal site docker run --rm droope/droopescan scan drupal -u https://drupal.example.com Unboxing

The Droopescan script is very flexible and allows configuring the scan as you wish. Thanks to the settings, we can change the type of scan, choosing one of the available frameworks, provide an address or a list of addresses to be scanned, and much, much more. Here's a complete list of the configurable options.


droopescan scan --help

Opens a list of the available commands.

droopescan scan


Runs the scripts responsible for scanning the website that uses the selected CMS.

droopescan scan --debug

Runs the debug output.

droopescan scan --quiet

Enables silent mode that doesn't show the information about the scan while it's running.

droopescan scan -u {URL} and droopescan scan --url {URL}

They allow defining the target of the scan.

droopescan scan -U {URL_FILE} and droopescan scan --url-file {URL_FILE}

They allow defining the file path where the target scan websites are located. The file structure should look like this:

> cat example.txt http://localhost/drupal/8.9.0/ http://localhost/drupal/8.7.1/ http://localhost/drupal/8.9.13/ http://example.com

droopescan scan -e {a, t, p, v, i} and droopescan scan --enumerate {a, t, p, v, i}

They allow defining what the script should scan:

  • p - plugins,
  • t - themes,
  • v - version,
  • i - useful links,
  • a (default) - all.

droopescan scan --method {not_found, forbidden, ok}

It allows specifying what type of error is treated as an indicator and whether a given path exists. For some servers, it's 403, for others – 404. By default, the script tries to deduce this itself.

droopescan scan --verb {head, get}

It allows specifying the type of request that the script will use. The default option is head.

droopescan scan --number {NUMBER} droopescan scan -n {NUMBER}

Specifies the number of words to be checked from the plugins or themes dictionary. It's one thousand by default. To use all available, you should type all.

droopescan scan --plugins-base-url {PLUGINS_BASE_URL}

Allows specifying the path where plugins are stored in the CMS. Without providing this parameter, the script checks the default path for a given system.

droopescan scan --themes-base-url {THEMES_BASE_URL}

Allows specifying the path where themes are stored in the CMS. Without providing this parameter, the script checks the default path for a given system.

droopescan scan --timeout {TIMEOUT}

Specifies how long the script should wait for an HTTP response in seconds.

droopescan scan --no-follow-redirects

Enabling this flag prevents redirects from being followed.

droopescan scan --host {HOST}

Overwrites the host query header with the provided value.

droopescan scan --user-agent {USER_AGENT}

Overwrites the User Agent header of the query.

droopescan scan --massscan-override

Using this flag replaces the default values with those convenient for mass scanning of hosts.

droopescan scan --threads {THREADS} and droopescan scan -t {THREADS}

A number of threads used for scanning. It’s 4 by default.

droopescan scan --threads-identify {THREADS_IDENTIFY}

A number of threads used for CMS identification.

droopescan scan --threads-scan {THREADS_SCAN}

A number of threads used for mass scanning of hosts.

droopescan scan --threads-enumerate {THREADS_ENUMERATE}

A number of threads used for plugins identification.

droopescan scan --output {standard, json} and droopescan scan -o {standard, json}

Allows specifying the format of the output returned by the script.

droopescan scan --hide-progressbar

Enabling this flag allows turning off the progress bar.

droopescan scan --debug-requests

Enabling this flag enters into the console the contents of all HTTP requests made by the script, together with the response received from the server. Enabling this flag disables scan threading and progress bars.

droopescan scan --error-log {ERROR_LOG}

Allows defining the file that all scan errors will be logged to.

droopescan scan --resume

Returns the scan to the stage where it was last completed. It's a useful option when using mass scanning.

Example of using Droopescan

Our test page uses Drupal 8.9.15 and contains a list of many popular modules. It uses a custom theme, and logging into the admin panel is carried out with the default path.

To start the scan, we'll use the command:

droopescan scan drupal -u example.com

You can see the result of the scan below.

➜  droopescan git:(master) docker run --rm droope/droopescan scan drupal -u example.com modules [ ===                                                ] 224/4000 (5%)[+]  Got an HTTP 500 response. modules [ ====                                               ] 287/4000 (7%)[+]  Got an HTTP 500 response. modules [ ====                                               ] 288/4000 (7%)[+]  Got an HTTP 500 response. modules [ ========                                           ] 626/4000 (15%)[+]  Got an HTTP 500 response. modules [ ==============                                     ] 1053/4000 (26%)[+]  Got an HTTP 500 response. modules [ ==============                                     ] 1056/4000 (26%)[+]  Got an HTTP 500 response. modules [ ================                                   ] 1272/4000 (31%)[+]  Got an HTTP 500 response. modules [ ============================                       ] 2227/4000 (55%)[+]  Got an HTTP 500 response. modules [ ================================                   ] 2509/4000 (62%)[+]  Got an HTTP 500 response. modules [ ===============================================    ] 3746/4000 (93%)[+]  Got an HTTP 500 response. [+] Accepted redirect to https://www.example.com/ [+] Plugins found:     image_widget_crop https://www.example.com/sites/all/modules/image_widget_crop/     flexslider_views_slideshow https://www.example.com/sites/all/modules/flexslider_views_slideshow/     service_links https://www.example.com/sites/all/modules/service_links/     compact_forms https://www.example.com/sites/all/modules/compact_forms/     strongarm https://www.example.com/sites/default/modules/strongarm/     video_embed_field https://www.example.com/sites/default/modules/video_embed_field/     tablefield https://www.example.com/sites/default/modules/tablefield/     ctools https://www.example.com/modules/contrib/ctools/         https://www.example.com/modules/contrib/ctools/README.txt         https://www.example.com/modules/contrib/ctools/LICENSE.txt     token https://www.example.com/modules/contrib/token/         https://www.example.com/modules/contrib/token/README.md         https://www.example.com/modules/contrib/token/LICENSE.txt     pathauto https://www.example.com/modules/contrib/pathauto/         https://www.example.com/modules/contrib/pathauto/README.md         https://www.example.com/modules/contrib/pathauto/LICENSE.txt     metatag https://www.example.com/modules/contrib/metatag/         https://www.example.com/modules/contrib/metatag/CHANGELOG.txt         https://www.example.com/modules/contrib/metatag/README.txt         https://www.example.com/modules/contrib/metatag/LICENSE.txt     field_group https://www.example.com/modules/contrib/field_group/         https://www.example.com/modules/contrib/field_group/CHANGELOG.txt         https://www.example.com/modules/contrib/field_group/README.txt         https://www.example.com/modules/contrib/field_group/LICENSE.txt     google_analytics https://www.example.com/modules/contrib/google_analytics/         https://www.example.com/modules/contrib/google_analytics/README.md         https://www.example.com/modules/contrib/google_analytics/LICENSE.txt     redirect https://www.example.com/modules/contrib/redirect/         https://www.example.com/modules/contrib/redirect/README.txt         https://www.example.com/modules/contrib/redirect/LICENSE.txt     colorbox https://www.example.com/modules/contrib/colorbox/         https://www.example.com/modules/contrib/colorbox/README.txt         https://www.example.com/modules/contrib/colorbox/LICENSE.txt     features https://www.example.com/modules/contrib/features/         https://www.example.com/modules/contrib/features/LICENSE.txt     devel https://www.example.com/modules/contrib/devel/         https://www.example.com/modules/contrib/devel/README.txt         https://www.example.com/modules/contrib/devel/LICENSE.txt     admin_toolbar https://www.example.com/modules/contrib/admin_toolbar/         https://www.example.com/modules/contrib/admin_toolbar/CHANGELOG.txt         https://www.example.com/modules/contrib/admin_toolbar/README.txt         https://www.example.com/modules/contrib/admin_toolbar/LICENSE.txt     better_exposed_filters https://www.example.com/modules/contrib/better_exposed_filters/         https://www.example.com/modules/contrib/better_exposed_filters/README.txt         https://www.example.com/modules/contrib/better_exposed_filters/LICENSE.txt     paragraphs https://www.example.com/modules/contrib/paragraphs/         https://www.example.com/modules/contrib/paragraphs/README.txt         https://www.example.com/modules/contrib/paragraphs/LICENSE.txt     smtp https://www.example.com/modules/contrib/smtp/         https://www.example.com/modules/contrib/smtp/README.txt         https://www.example.com/modules/contrib/smtp/LICENSE.txt     search_api https://www.example.com/modules/contrib/search_api/         https://www.example.com/modules/contrib/search_api/CHANGELOG.txt         https://www.example.com/modules/contrib/search_api/README.md         https://www.example.com/modules/contrib/search_api/LICENSE.txt     entity_reference_revisions https://www.example.com/modules/contrib/entity_reference_revisions/         https://www.example.com/modules/contrib/entity_reference_revisions/LICENSE.txt     linkit https://www.example.com/modules/contrib/linkit/         https://www.example.com/modules/contrib/linkit/README.md         https://www.example.com/modules/contrib/linkit/LICENSE.txt     eu_cookie_compliance https://www.example.com/modules/contrib/eu_cookie_compliance/         https://www.example.com/modules/contrib/eu_cookie_compliance/README.md         https://www.example.com/modules/contrib/eu_cookie_compliance/LICENSE.txt     scheduler https://www.example.com/modules/contrib/scheduler/         https://www.example.com/modules/contrib/scheduler/README.md         https://www.example.com/modules/contrib/scheduler/LICENSE.txt     simple_sitemap https://www.example.com/modules/contrib/simple_sitemap/         https://www.example.com/modules/contrib/simple_sitemap/README.md         https://www.example.com/modules/contrib/simple_sitemap/LICENSE.txt     google_tag https://www.example.com/modules/contrib/google_tag/         https://www.example.com/modules/contrib/google_tag/README.md     addtoany https://www.example.com/modules/contrib/addtoany/         https://www.example.com/modules/contrib/addtoany/README.txt         https://www.example.com/modules/contrib/addtoany/LICENSE.txt     advagg https://www.example.com/modules/contrib/advagg/         https://www.example.com/modules/contrib/advagg/README.md         https://www.example.com/modules/contrib/advagg/LICENSE.txt     config_update https://www.example.com/modules/contrib/config_update/         https://www.example.com/modules/contrib/config_update/README.txt         https://www.example.com/modules/contrib/config_update/LICENSE.txt     robotstxt https://www.example.com/modules/contrib/robotstxt/         https://www.example.com/modules/contrib/robotstxt/README.txt         https://www.example.com/modules/contrib/robotstxt/LICENSE.txt     config_filter https://www.example.com/modules/contrib/config_filter/         https://www.example.com/modules/contrib/config_filter/README.md         https://www.example.com/modules/contrib/config_filter/LICENSE.txt     menu_link_attributes https://www.example.com/modules/contrib/menu_link_attributes/         https://www.example.com/modules/contrib/menu_link_attributes/README.md         https://www.example.com/modules/contrib/menu_link_attributes/LICENSE.txt     migrate_plus https://www.example.com/modules/contrib/migrate_plus/         https://www.example.com/modules/contrib/migrate_plus/README.txt         https://www.example.com/modules/contrib/migrate_plus/LICENSE.txt     checklistapi https://www.example.com/modules/contrib/checklistapi/         https://www.example.com/modules/contrib/checklistapi/README.md         https://www.example.com/modules/contrib/checklistapi/LICENSE.txt     config_split https://www.example.com/modules/contrib/config_split/         https://www.example.com/modules/contrib/config_split/README.md         https://www.example.com/modules/contrib/config_split/LICENSE.txt     migrate_tools https://www.example.com/modules/contrib/migrate_tools/         https://www.example.com/modules/contrib/migrate_tools/README.txt         https://www.example.com/modules/contrib/migrate_tools/LICENSE.txt     config_ignore https://www.example.com/modules/contrib/config_ignore/     schema_metatag https://www.example.com/modules/contrib/schema_metatag/         https://www.example.com/modules/contrib/schema_metatag/README.txt         https://www.example.com/modules/contrib/schema_metatag/LICENSE.txt     tvi https://www.example.com/modules/contrib/tvi/         https://www.example.com/modules/contrib/tvi/README.txt         https://www.example.com/modules/contrib/tvi/LICENSE.txt     svg_image https://www.example.com/modules/contrib/svg_image/         https://www.example.com/modules/contrib/svg_image/README.md         https://www.example.com/modules/contrib/svg_image/LICENSE.txt     link_attributes https://www.example.com/modules/contrib/link_attributes/         https://www.example.com/modules/contrib/link_attributes/README.md         https://www.example.com/modules/contrib/link_attributes/LICENSE.txt     facets https://www.example.com/modules/contrib/facets/         https://www.example.com/modules/contrib/facets/README.txt         https://www.example.com/modules/contrib/facets/LICENSE.txt     yoast_seo https://www.example.com/modules/contrib/yoast_seo/         https://www.example.com/modules/contrib/yoast_seo/README.txt         https://www.example.com/modules/contrib/yoast_seo/LICENSE.txt     panels_everywhere https://www.example.com/modules/contrib/panels_everywhere/     stage_file_proxy https://www.example.com/modules/contrib/stage_file_proxy/         https://www.example.com/modules/contrib/stage_file_proxy/README.md         https://www.example.com/modules/contrib/stage_file_proxy/LICENSE.txt     entity_reference_display https://www.example.com/modules/contrib/entity_reference_display/         https://www.example.com/modules/contrib/entity_reference_display/README.md         https://www.example.com/modules/contrib/entity_reference_display/LICENSE.txt     we_megamenu https://www.example.com/modules/contrib/we_megamenu/         https://www.example.com/modules/contrib/we_megamenu/README.md         https://www.example.com/modules/contrib/we_megamenu/LICENSE.txt     ckeditor_codemirror https://www.example.com/modules/ckeditor_codemirror/ [+] No themes found. [+] Possible version(s):     8.9.10     8.9.11     8.9.12     8.9.13     8.9.14     8.9.15     8.9.16     8.9.17     8.9.6     8.9.7     8.9.8     8.9.9 [+] Possible interesting urls found:     Default admin - https://www.example.com/user/login     Default changelog file - https://www.example.com/CHANGELOG.txt [+] Scan finished (0:16:25.708460 elapsed) CMS scanning - results analysis

The Droopescan tool helped to identify many of the modules used on the website and provided links to the files that made this identification possible. The script identified the Drupal version used as one with a minor update from 8.9.6 to 8.9.17 and detected the path to the login panel and the CHANGELOG.txt file. Unfortunately, in the case of the audited website, it wasn't possible to identify the theme used.

Droopescan - summary

The Droopescan script speeds up the initial reconnaissance of the audited website. It's a fast, stable, constantly updated solution that allows threading the scanning of multiple websites simultaneously and requires only Python. The scanning result is presented in a user-friendly way. It's possible to save the results in the JSON format, which can then be freely processed in order to, for example – using an application specially designed for this – to view the results in an even more friendly way or to use the results in the next stages of the audit. If you are interested in the topic of controlling application security, our Drupal support team can help you with their expert knowledge.

BADCamp News: BADCamp 2021 - Nonprofit Technology Summit

2 days 22 hours ago
BADCamp 2021 - Nonprofit Technology Summit Mon, 10/18/2021 - 12:00 volkswagenchick Mon, 10/18/2021 - 14:08

Join nonprofit peers on October 28th for a free, hands-on virtual event that will help nonprofits leverage technology to scale their capacity and impact. As a participant, you will be invited to take TechSoup’s Digital Assessment Tool to help identify your organization’s most pressing technology opportunities. Then join small group conversations with peers and subject matter experts around: 

Drupal Planet

Talking Drupal: Talking Drupal #316 - Accessibility

3 days ago

Today we are talking about Accessibility with Rain Breaw Michaels.


  • We are talking about Accessibility today, but specifically gearing the conversation towards developers. Why?
  • So many people when coding for accessibility simply provide workarounds. Why can this be dangerous?
  • What is ARIA?
  • What is meant by the term Landmarks?
  • How does this apply to dev’s working with Drupal?
  • What modules do you recommend?
  • How can you help content editors maintain accessibility while adding content?
  • What are common pitfalls you see devs make
  • How can Javascript help or hurt Accessibility?
  • In closing, is there anything you would like to add?
Module of the Week

Anti Spam by CleanTalk


Clean Talk - Geerling’s Post Anti-spam by Clean Talk Acquia Engage Time Timer Driven to Distraction Design of everyday things (Book) ColorCube - Color Testing Tool ARIA WAI-ARIA HTML 5 Landmarks Module for decorative images Editoria11y Layout Builder Content Strategy for the Web PDF Accessibility course on Deque VPAT Hanlon’s Razor: “never attribute to malice that which is adequately explained by stupidity”


Rain Breaw Michaels - @rainbreaw


Nic Laflin - www.nLighteneddevelopment.com @nicxvan John Picozzi - www.epam.com @johnpicozzi Chad Hester - www.chadkhester.com @chadkhester

Tag1 Consulting: On 20 Years of Drupal - an interview with James Rutherford

3 days 5 hours ago

Tag1 continues its series celebrating 20 Years of Drupal in this Tag1 Team Talk with Pantheon’s Senior Manager of Strategic Partnerships, James Rutherford. Before moving to Pantheon, James was a long time member of Mediacurrent, one of the largest agencies working with and creating Drupal websites. James joins Tag1 Managing Director Michael Meyers for another trip down the halls of Drupal history, from early versions of Drupal, to today’s highly experienced agencies. James' initial Drupal experience was with Georgia Public Broadcasting. Over the years, James has worked with many clients - some of whom moved to Drupal from their homegrown CMS, to major launches such as weather.com. Join us for this talk, and learn more about how it’s not just the code - it’s the community that makes Drupal successful. --- For a transcript of this video, see Transcript - 20 years of Drupal with James Rutherford. --- Photo by Moritz Kindler on Unsplash

Read more [email protected]… Mon, 10/18/2021 - 07:07

OpenSense Labs: Drupal accessibility modules: The essentials

3 days 11 hours ago
Drupal accessibility modules: The essentials Maitreayee Bora Mon, 10/18/2021 - 16:52

Web accessibility is always prioritized by Drupal to provide its potential users a decent user-experience. Without any fail, Drupal has succeeded in providing an extensive range of modules that can be downloaded according to user convenience. This platform has consistently put efforts in bringing significant improvements in all its versions when it comes to accessibility modules. So, with this article, I will try to give you an insight of some of the recently refreshed or newly released Drupal modules that will efficiently help you in your various challenging projects. You will also get the answer to a common question that often comes to your mind, “Why Drupal for accessibility”?

To begin with, for your better understanding, I am describing the Drupal web accessibility modules by categorizing them based on their different functionalities. 

Accessibility Auditing

Under this category Drupal has a sufficient number of modules that help in offering you an enhanced accessibility audit for your ambitious projects.

Editoria11y Accessibility Checker

Editoria11y can be termed as a user-friendly checker that provides support to the content authors and editors. Compatible with Drupal 9, it also looks after the three most vital needs of the content authors. 

  • It makes sure that the spellcheck is constantly running and rectifies the content mistakes when it occurs.
  • It makes sure that no mistakes take place in terms of Views, Layout Builder, Media and other modules, as it runs in context with them and it's checkers are also constantly on. 
  • It prioritizes content issues by fixing them, also ensuring that the page editors do not omit any issue that is easily rectifiable.
Monsido Tools

Monsido helps in smooth optimization of your website, also focusing on web governance, quality assurance, and accessibility compliance. Since accessibility laws differ from country and sector, this module helps in validating your site against the international standard, the WCAG 2.1. This module which is compatible with Drupal 9 provides your site with the scanning facility to identify any difficulties that might further hamper accessibility, and also enhances your search engine rankings by recognizing SEO errors. 


Known as the most comprehensive cloud-based Digital Presence Optimization (DPO) software, Siteimprove enables you in creating high quality content, editing efficiently, driving better traffic, measuring digital performance and working towards regulatory compliance. Siteimprove plugins help in filling the gap between Drupal and the Siteimprove Intelligence Platform, also empowering contributors to test, fix and optimize their work without any hurdles. This module has Drupal 9 compatibility which is an added advantage.

CKEditor Accessibility Auditor

CKEditor Accessibility Auditor is a module that has Drupal 9 compatibility and it functions by clicking a button which runs the HTML_CodeSniffer Accessibility Auditor on the source code of the current content. With this module, you get to access a detailed view on any type of specific error, convenient success criteria and suggestions of techniques, and also upon what exactly triggered the error, once you run the auditor. 

CKEditor Accessibility Checker

CKEditor Accessibility Checker helps in enabling the Accessibility Checker plugin from CKEditor.com in your WYSIWYG. You can inspect the accessibility level of content that is generated in CKEditor, and resolve any accessibility concerns at the earliest. 

Sitemorse Lite - a11y Audit

Integrating Drupal with the inCMS service, this module enables to run the on-page accessibility audits and view results from the Drupal Administration interface. Sitemorse along with Ixis bring you a Drupal connector that provides the facility of checking your content quality before it gets published. Additionally, this module is compatible with Drupal 9 as well. With this module, the content editors can have more command over their content by making it more SEO friendly, accessible and resolving any issues that adversely affect the customer experience. 


The Accessibility module is a great support for the content authors and theme developers as it enables them to make their websites accessible to the users regardless of their capabilities and the technologies they prefer. It offers a set of available Accessibility tests that helps in scrutinizing the content for any accessibility errors that are published by the editors. Since this module uses the QUAIL jQuery plugin, it is not covered by Drupal's security advisory policy.

Accessibility Scanner

The Accessibility Scanner module enables you to use Drupal along with Axe toolset to opt for web accessibility scans on local and remote websites within the Drupal admin interface. It is compatible with Drupal 9 but isn’t covered by Drupal's security advisory policy.

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.

Quail API

This module is a complete rework of parts of the Drupal 6 project known as “Accessible Content”. It offers an API for the 3rd-party Quail Library to Drupal modules. Quail API has Drupal 8 alpha version as well.

Site builders

This is the second category under which Drupal offers exclusive modules to its users which enable them to design and create functional sites without the need of manual code editing.

Automatic Alternative Text

Automatic Alternative Text module allows you to automatically generate an image caption, while none of the Alternative Text has been given by the users. It is made possible by using the Microsoft Azure Cognitive Services API. This module offers one or even more descriptions of an image that are ordered as per their confidence. Although the default descriptions are in English, there is an option of translating them into other languages. This module is also compatible with Drupal 9. 

iFrame Title Filter

To comply with WCAG guidelines, the iFrame Title Filter helps in ensuring that embedded tags include a title attribute. When there is no title attribute available in an iFrame, this particular filter parses the src attribute's URL and also adds a title attribute which reads "Embedded content from [url]". There are many Drupal filters that generate iframes, for example, media, video_filter but their compliance with iFrame accessibility needs differs. It is compatible with Drupal 9.

Text field formatter

Text field formatter module which is compatible with Drupal 9 can be termed as the extension of the plain text formatter. The main concept of creating this module came from another similar module known as String field formatter. The main features of Text field formatter include: 

  • Adding additional wrapper to the text field.
  • Adding classes to this wrapper.
  • Adding any of the attributes to this wrapper and 
  • Ability to override a link label (tokens are supported).

This module is compatible with Linked Field and Layout Builder. 

Field Display Kit

The Field Display Kit module enables fine tune rendering of any field in the system. The main features of this module consist of:

  • Independently changing title (label) of the field in every display (identified as view mode).
  • Ability to change the title (label) element tag, along with adding classes and some other attributes to the wrapper.
  • Ability to change the wrapper element of the field, and also add classes and other attributes to the wrapper.
  • Ability to change the wrapper element of every individual field item, and also add classes and other attributes to the wrapper and
  • Ability to link any field item. Therefore, to build the link, tokens like [node:url] can be used. 

When authorized, this module helps in facilitating configurations for each field on each entity of your site. It works with fields which are normally displayed or with Layout Builder as well. It is compatible with Drupal 9 but isn’t covered under Drupal’s security advisory policy.

Block ARIA Landmark Roles

Taking inspiration from Block class, the Block ARIA Landmark Roles module prioritizes on adding additional elements to the block configuration forms that helps users to assign a ARIA landmark role and/or ARIA labels to a block. It is compatible with Drupal 9.

A11Y Paragraphs Tabs

With the A11Y Paragraphs Tabs module, you get the authority to smoothly add tabs through paragraphs to your content which complies with the standards of Accessibility (A11Y). The paragraphs which are already configured, to provide you tabs on desktop and an accordion on mobile are added by this module. There is no need to configure anything from your end. The three new paragraphs created by this module consist of:

  • A11Y Paragraphs Tabs Wrapper
  • A11Y Paragraphs Tabs Panel
  • A11Y Paragraphs Tabs Content

The wrapper (A11Y Paragraphs Tabs Wrapper) consists of the tab panel (A11Y Paragraphs Tabs Panel) that enables you to add tabs according to your convenience. On the other hand, the tabs panel (A11Y Paragraphs Tabs Panel) consists of a paragraph in which you are able to add the paragraphs you would prefer to use inside the tab panel. It is compatible with Drupal 9.

Decorative Image Widget

The Decorative Image Widget proves to be a solution for the site builders that prefers the option of leaving an image's alternative text blank explicit (by checking a new "Decorative" checkbox) instead of implicit (by simply leaving the alt text field blank). To put it simply, the editors are made to affirm the reason behind leaving alt text empty, which is because of the decorative image that needs to be hidden from the screen readers. The primary features of this module consist of: 

  • Providing an option of a “Decorative” checkbox to image widgets that has to be checked if the user chooses to leave the alt text empty.
  • Forcing users to focus upon alternative text instead of leaving it blank. 
  • Working with any existing image widget which extends from core's default. For example, it can be used with the default image widget or the one offered by Image Widget Crop.
  • Lastly, there is no need for any kind of data model changes, since the position of the state of the "Decorative" checkbox is completely inferred from the value of the alt text.

This module is compatible with Drupal 9 but isn’t covered under Drupal’s security advisory policy.

A11Y: Form helpers

A11Y: Form helpers module helps you to make forms more accessible in Drupal. Following are the modules features: 

  • You do not need any HTML5 validation.
  • You can include readable inline error messages for screen readers.
  • You can also put in pre-filled attributes to certain form elements.

This module is compatible with Drupal 9 but isn’t covered under Drupal’s security advisory policy.

CKEditor Abbreviation

CKEditor Abbreviation module helps you in adding a button to CKEditor for inserting and editing abbreviations. This module also has an added benefit i.e., the availability of a link to edit the abbreviation. It is compatible with Drupal 9.

Node Link Report

Since links within content can take various forms in WYSIWYG, such as link fields, free text, entity reference fields and many more. It might be a difficult task to ensure that links are not broken in your content. But the Node Link Report module offers you a block which displays a link report also including all the links in the rendered note. It enables you to display the links on node view, node edit, and node preview as well. Also, it is compatible with Drupal 9.

Devel Accessibility

The Devel Accessibility module offers support to the module developers by providing them an API for aria-live region update announcements. It is compatible with Drupal 9.

CKEditor Balloon Panel

CKEditor Balloon Panel module allows the Ballon Panel plugin from CKEditor.com in your WYSIWYG editor. The Balloon Panel plugin offers the capacity for creating a floating, balloon-shaped container that is capable enough of presenting content at the preferred position in the document. The CKEditor Accessibility Checker uses this module to create the floating panels with accessibility tips. 


Under the third category, Drupal provides significant modules to the developers that helps in enhancing their experience in building well-designed and user-friendly websites. 

WCAG Drawer

The WCAG Drawer module is compatible with Drupal 9 and has Drupal 8 alpha version. Although it isn’t covered under Drupal's security advisory policy, you can take the benefit of utilizing the framework offered by this module in order to create easily accessible drawers.

Color Swatch

Color Swatch module is considered as an alternative to the Drupal Core color module and color scheme. This module prioritizes supplying a css with the preferred colors. And it is also said to be flexible as the generated css isn’t compiled in the form of a file but rather added as an inline css. Additionally, the css operates via rendering of a twig file with a theme function that provides more control from preprocess functions, and also twig template overrides on a theme level. This module is compatible with Drupal 9 but isn’t covered under Drupal’s security advisory policy.


Under this category, the end-users of Drupal are offered with some unique modules that enable them to witness an excellent experience while building their respective projects.

Accessibility Enabler

People with any kind of disability can easily consume and navigate sites in a very effective way with Accessibility Enabler. It also meets the differently abled population in using the preferred content, enhancing accessibility, and increasing the sales and conversation. It helps in making your site more compliant with accessibility regulations of your country, preventing lawsuits and heavy penalties. You get an opportunity to build your brand among your customers, and also exhibit social responsibility by increasing accessibility via this module. The key features includes:

  • Availing accessibility tools for each and every disability.
  • Providing intelligent design for mobile.
  • Availing accessibility presets for each persona.
  • Option to put accessibility triggers anywhere.
  • Ability to change accessibility trigger button position.
  • Facility of making your own custom trigger.
  • Multiple color theme options.
  • Freedom to express your commitment towards accessibility.
  • Enhancing your site navigation to the best of its ability and
  • Ability to return to the top of the page easily.

This module isn’t covered under Drupal’s security advisory policy.

Civic Accessibility Toolbar

Civic Accessibility Toolbar facilitates a block with accessibility utilities to enable end-users switch theme versions with higher color contrast and also change font size of text. You can create a block with both or one of the utilities to allow visually impaired users access Drupal sites without any difficulty. It is further tested with Bartik, Garland, Zen Starterkit, Stark, Oliveiro themes and is compatible with Drupal 9.

Text Size

For a better web accessibility, the text size module exhibits an adjustable text size changer or a zoom function on the page. Although, in Firefox 3, the zoom function is comparable to the text zoom function, this module also resizes vector images, variable pixel images and variable media objects. 

Text Resize

The Text Resize module provides a great support for the visually impaired people by increasing the accessibility of the pages with necessary text size adjustments. By using jQuery and the jQuery Cookie plugin, this module creates a Drupal block which can be themed. Moreover, it gives the option to resize  images as well. Also, never forget to enable the "Text Resize" block of your theme to help the block appear.

High contrast

With the High contrast module, you are able to smoothly switch the active theme and a high contrast version of it. You will only need to press the tab on the keyboard after installing the module and will then get the high contrast pop-up link on the screen. It is compatible with Drupal 9.

Voice Search Redirect

The Voice Search Redirect module enables you to redirect on any page with the help of voice command. And there is no need to click manually on the menu. This module isn’t covered under Drupal’s security advisory policy.

Fluidproject UI Options

Fluidproject UI Options offers accessibility options to its users to modify a page's font size, font style, link style, line height and contrast using cookies. But there are some limitations such as:

  • Internationalization is done through JSON files within the module folder instead of the Drupal interface. 
  • Although this module is tested successfully with the most popular themes, some of the themes like Bootstrap require additional CSS for font-sizing or line heights to work. 
  • The contrast settings do not prefer working for elements that use CSS gradients.

 It is compatible with Drupal 9.

Style Switcher

The Style Switcher module empowers themers to create themes with alternate stylesheets, and site builders to add other alternate stylesheets in the admin section. It provides all those styles to site visitors in the form of a list which consist of links in a block. This helps the site visitors to select the style of the site they prefer. Cookies are being used by this module so that when people return to the site or even visit a different page they still get their preferred style. It is compatible with Drupal 9.

Generic HTML validations

The modules under this category enhance the overall accessibility for screen readers and other non-browser devices.


Along with accessibility, the htmLawed module also provides you security. This module restricts and purifies HTML code for compliance with the site administrator policy and standards and for security by using the htmLawed PHP library. In addition to that, you are allowed to autocorrect and beautify HTML markup, restrict HTML elements, attributes and URL protocols in the input. It helps in balancing tags and ensuring that HTML elements are well nested, , transforms deprecated tags and attributes, and many more. It is compatible with Drupal 9.

HTML Purifier

Similar to the htmLawed module, the HTMLPurifier library is a great mix of both accessibility and security. Along with removing malicious code from your site, it also ensures your site with W3C standards compliance. Since this module works perfectly with WYSIWYG editors, it proves to be a great fit for Drupal as well. Also, options like custom fonts, tables, inline styling, and many more are offered by this module. It is compatible with Drupal 9.

Now, what do you think, is Drupal accessible? Undoubtedly, YES, as all the above Drupal accessibility modules prove so. 

Learn more about accessibility and what Drupal has to offer:


With the above mentioned Drupal module list, I tried providing you the essential modules that can efficiently help your developers, content editors and site visitors with better web accessibility. So, now it’s completely up to you how you choose the right modules that fits your project needs and expectations. Without waiting further, take your pick!

blog banner blog image Drupal Drupal 8 Drupal 9 Accessibility Blog Type Articles Is it a good read ? Off

Ny Media: Entity bundle classes and its possibilities

3 days 21 hours ago
Entity bundle classes and its possibilities alf.harald October 18, 2021

Projects vary vastly in terms of complexity. Sometimes there are just one or two entities, sometimes a standard product structure. But what happens when you have several layers of interconnected nodes or terms that rely on each other via custom entity reference fields? My take is, it may (will) tip over to becoming messy code, very fast.

Say we are doing an online class. We have 3 entities:

  1. A group of people
  2. A participant in this group
  3. A physical person (which can be in multiple groups)

And let's say we have this structure organized as nodes, with entity reference fields defining the connections.

Core & contrib entity behavior

Let's say that we are preparing some data from this structure. Based on a participant, we are going to find the description of the group to display in some template somwehere. Just traversing the fields of nodes, we would do this:

// Get the description and location of the group $group_participant = $a_node; $group = $group_participant->field_group_reference->entity->field_text->value; $location = $group_participant->field_group_reference->entity->field_location->value;

This is the most standard thing to see in custom Drupal code when traversing entity reference fields. Alas, very unfriendly code in terms of readability, eh? In this case, we are using core node entities with two different bundles. If we had spent time on creating custom entities, we could of course do like so:

// Get description and location for the group $participant = $custom_entity; $participant->getGroup()->getDescription(); $participant->getGroup()->getLocation();

This looks a lot more intuitive, right? And, we can use such modern things as code completion in editors like PHPStorm to traverse the entity objects. But this approach does not apply to taxonomies, media entities, nodes, or any other entities that a core or contrib module provides.

Here is another example. References between nodes and taxonomies are usually one-way only. The participant can be a member of several groups. Let's say we know only of a participant, but we want to know in what groups this participant is in? Using an injected service, you would most probably do something like this, using an entityQuery in the background:

// Find the groups that this participant is in. $participant = $a_node; /** @var MyService $some_service */ $groups = $some_service->getGroupsByParticipant($participant);

This is type-completion capable, provided that you add that service in every class you need it. But why on earth, why would you need a service to find the groups? It should be as simple as:


Right now, we can only do clean code like this in two scenarios:

  1. By overriding the node class in its entirety, once and for all
  2. By creating a custom entity module

Using option 1, if you override the entire class completely, we would get this scenario:

// Get the Schroedinger's participant. $participant = $node; // Is it a participant? let's find out. $is_participant = $participant->isParticipant(); // Or maybe like this: $is_participant = $participant->getType() == 'participant'; // Now it is a real participant.

PHP would know what type it is, but the code completion won't know that because we cannot differentiate on bundles. So on the same object, we could both do:

$node->isGroupParticipant(); // would be false $node->isParticipant(); // would be true

Using option 2, in many cases, there are two or three commands that we'd like to add to each bundle of a node. Creating a custom entity just to make some small alterations to the functionality of the node system is in most cases completely overkill. It is loads of custom code that can easily be avoided if we only could create custom entity classes for those bundles.

Enter the savior patch

The patch is here: https://www.drupal.org/node/2570593

This patch provides a way to add entity bundle classes, which allows us to create customized classes that applies to one single bundle. To use it, we use hook_entity_bundle_info_alter to register the bundles with its separate classes:

function fabulous_module_entity_bundle_info_alter(&$bundles) { $bundles['node']['participant']['class'] = ParticipantNode::class; $bundles['node']['group']['class'] = GroupNode::class; };

Alas, we create two classes, one for the group:

class GroupNode extends Node { }

And one for the participant:

class ParticipantNode extends Node { }

Or instead, you can of course be a pro and describe your custom class in an interface:

class ParticipantNode extends Node implements ParticipantNodeInterface { }


The important thing here is, the class *must* extend the registered entity class, in this case, Node. And that is basically it.

You can now start building functionality for each of the bundles separately. Here is the magic, let's say you load a node:

// If we load.. $id = $a_participant $node = Node::load($id); if ($node instanceOf ParticipantNode) { // Hooray, this is true! }

Instead of receiving the standard Node object, you'll get your own ParticipantNode object!

Now, to make the example above work, instead of remembering field names, add this to the group node class object:

public function getParticipant() { return $this->field_participant->entity; }

And you can add this to the participant node object (provided it is a 1-many relationship):

public function getGroups($status) { $result = $this->entityQuery('node') ->condition('type', 'group') ->condition('nid', $this->id()) ->condtition('field_group_status', $status) ->execute(); return Node::load(reset($result)); }

Then you can basically go on an eternal trail of type-completed entities, wheter it is nodes, users or taxonomies:

$participant->getGroupParticipant()->getGroup()->getMunicipality()->getRegion(); Not just nodes

Any entity bundle, core or contrib, can get an entity bundle class. Taxonomies, nodes, media, files.

$term->reIndexReferencedEntities(); $comment->whatever(); $file->doSomeOtherFunkyBusiness(); // More examples here!! It's nice, but be careful

Using the approach that this patch provides, there are a few dos and dont's.

First of all, a single bundle type can only be overridden once. So, this approach is best used:

  • In the semi-lawless world of custom project-specific code
  • Very carefully in reusable code, but only where the entity type is defined by the module itself

So the limit on this approach is primarily for custom projects. But, that is also where code tends to get most messy.

#! code: Drupal 9: Loading All Routes From A Module

4 days 2 hours ago

When creating Drupal modules I like to keep the hard coded components to a minimum. This helps when changing parts of the module in the future as hard coded links and other elements will require manual intervention and slow down maintenance. Sometimes, though, this isn't an option as you just need to have a few routes in your *.routing.yml file that point to controllers or forms within your module.

I had a situation today where I was looking to load all of the routes that are contained in a module. I could then construct a page of links that would handily point to different parts of the module or feed those links into a sitemap. This meant that I wouldn't need to hard code this list into a controller, I just needed to load all the routes and print that list out instead. Especially handy if I ever added or removed a route as that would mean that list would update without me having to do it manually.

Using Core Services

As it happens, Drupal doesn't have a service that allows you to search for routes that have a similar signature or structure. There are a couple of things that look like they might work, but end up not being what I was looking for. I'll go through them here for completeness.

The first option I found was the getRouteByName() method from the router.route_provider service. This does a one-to-one match of a given route against the routes you have within a site. Because the searching is done as lookup on an array of routes the method doesn't accept wildcard searching.

The following example would only retrieve a single route.

Read more.

55 minutes 39 seconds ago
Drupal.org - aggregated feeds in category Planet Drupal
Subscribe to Drupal Planet feed