Upgrade Your Drupal Skills

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

See Advanced Courses NAH, I know Enough
Feb 26 2021
Feb 26

If you work in the digital industry, you’ve almost definitely encountered the term “agile” - actually, since you’re reading this article on Agiledrop’s website, you no doubt at least know about it.

First officially used in the 2001 Agile Manifesto, the term referred to a collection of software development practices initiated in the 1990s, e.g. scrum and kanban, as an alternative to the “waterfall” approach. 

In contrast with waterfall software development, agile methodologies allowed for much more innovation and experimentation, with projects done in incremental “sprints” and a focus on the “fail fast, then optimize” mentality. 

Waterfall vs. agile graphic

The agile business

Recently, however, this phenomenon of “agile” has expanded beyond software development into other aspects of the digital business. Agile marketing is one example of this, but mostly this meant agility being adopted on a more company-wide basis, with all or most of the business processes transformed to accommodate this new mindset. 

So, a business or company that has really embraced agile can be called an agile business/company. And, unsurprisingly, a lot of such businesses have not only been keeping afloat but actually thriving throughout the Covid pandemic, with the ability to act fast and take risks representing a significant business advantage.

There are many advantages of agile for businesses, and with the already fast pace of digitalization only further sped up by Covid, these advantages have only become more pronounced. The following section will take a more detailed look at six of the major ones.

Benefits of adopting agile

1. Innovation

One of the most important and impactful advantages of agile is the high degree of innovation it enables. Because of the work being done in sprints and due to streamlined cross-team collaboration, a lot more experimentation is possible throughout the process, even when projects don’t last a really long time.

With things such as MVPs and A/B testing, you’re able to gain a better understanding of the market and your audiences faster, giving you the upper hand over your competitors.

It’s important to note that you can only truly tap into this innovation if your teams/departments aren’t siloed; they need to collaborate effectively in order for the exchange of ideas and knowledge to take place. Once you de-silo, you facilitate out-of-the-box thinking which provides a better basis for innovation.

2. Collaboration and productivity

In contrast with the waterfall model, different teams simultaneously work on their respective parts of the project in agile. The different teams have frequent stand-up/scrum meetings that ensure issues are found and resolved quickly and that everyone has access to all the working materials they need.

Since the project is done in sprints, it’s easier to organize the work and to bring new people in for specific tasks. The streamlined processes allow for greater autonomy, and consequently greater efficiency and productivity.

On-point digital communication is also key to effective agile collaboration, especially post-2020. Make sure you have your internal as well as external communication channels well set up and facilitate both on-the-fly as well as async communication.

3. Stronger relationships

One very important result of better collaboration are the strengthened internal relationships within the company. Moreover, due to agile’s tendency for proactive problem solving and frequent communication, this is also extended to the relationships with partners or clients in a B2B environment.

And this also holds true for B2C, of course: being agile means being able to better reach your customers wherever they are and respond to market shifts swiftly, leading to a kind of “always-on” approach where it’s harder to fall behind the fast pace of innovation than with the traditional waterfall approach.

For those brands that really prioritize building meaningful relationships with their customers, using agile is a huge boon, if not almost a necessity considering the increasingly fast pace of things moving in the digital age.

4. Employee experience

Stronger relationships within the company, together with streamlined processes and good transparent communication, contribute immensely to a positive employee experience.

One important thing to note here is that agile bridges the perennial gap between developers and marketers by providing them with tools for better collaboration. And something such as implementing DevOps can also greatly benefit productivity and experience of employees working in IT and development.

5. Fast time to market

A vital element of keeping up with digital trends and innovations is being able to get your new product or service to market quickly. But that’s easier said than done in a work environment bogged down by outdated processes and overcomplicated hierarchies.

Agility, naturally, is one of the main factors of being agile. In a truly agile environment, the approval process should not take so long that the new product or feature ends up missing its mark once it’s finally released. 

Since teams are enabled to simultaneously work on different parts of the project, and with both more autonomy and greater collaboration, products can be rolled out quickly, which feeds back into the experimentation and innovation we covered under point number one.

This becomes more and more important as competition in the digital industry grows - with several competing products responding to market demands, the one that’s available first logically has an upper hand. The Covid pandemic has made this especially relevant in the e-commerce sector.

A slow time to market is one of the biggest drawbacks of the waterfall model of managing projects, and the speed and efficiency gained by agile in this area are one of its major benefits.

6. Future-readiness

Another advantage of being agile that’s related to the previous point is that it guarantees a higher degree of future-readiness

By being open to iteration and experimenting, and with testing being an integral part of the entire process, it becomes easier to prepare for the future and/or plan for a potential pivot. This flexibility that comes with agile is crucial in times of uncertainty.

During the first months of the Covid pandemic, we saw different types of responses: some scrambled to stay afloat while trying to digitalize, while others were quick to innovate and immediately come up with efficient solutions to the newfound remote and digital way of life.

Going agile empowers you to be in the latter group the next time a major disruption occurs, by either giving you a future-proof foundation to continue or by facilitating a pivot.


Executives walking in an office alongside abstract streams of bits

Has your company already adopted agile? If you’re still on the fence about it, maybe this article will help you make the call once you get familiar with all the potential benefits, especially considering the recent disruption’s longer-term consequences.

With the increasingly fast pace of the digital age, it can truly pay off to go with an agile approach, or at least adopt those agile methods that work best for your business. This is especially becoming true in a post-Covid “new normal”.

If you’re an agile company looking for an equally agile development partner, Agiledrop may be just what you’re looking for. Reach out to us or learn more about working with us here.

Feb 26 2021
Feb 26

This is the first of the two-part series on ‘Formulating a business case for a new CMS’. The first part debates on open source CMS and proprietary CMS. The second part will discuss various other factors that are to be considered before opting for a new CMS for your business.

A successful business is resultant of an array of decisions, whether big or small, leading to its conception, formulation and finally, execution. With digital being normalized to the extent where it is the only way we know of to access a ton of products and services, a solid online presence has come to be of utmost importance for a business. A lot of times, businesses prefer going for a CMS (Content Management System) instead of building a website from scratch, as a CMS gives you a pre-built website, good to go as it is, or easily customisable even without having a dedicated team of developers and related coding knowledge.

What are the options?

The first step towards making a business case is to weigh your available options side by side. As a business choosing a new CMS, you will be rendered the following options -

A) Proprietary Model CMS

A CMS built under the proprietary backdrop will have a unitary ownership. Every tool and feature available will be created and listed by the owner organisation, and will be served to the end user in a transactional manner, with not much deliberation involved as everything sources back to one single origin. 

B) Open Source CMS

On the contrary, in an open source CMS model, apart from a few core features, contributions are invited from everybody. The model opens up avenues for discussion and innovation for its end users thus forming the likes of a community, working together for the greater goal.

Due to the community benefits that come along with an open source CMS, recent statistics point towards an increase in inclination towards adopting an open source model for a business.

blue and pink bar chart analysing the likelihood of large companies to opt for open source cmsSource : The New Stack

The said benefits can largely be summed up in the following points.

grey chart with blue lines mapping the benefits of open source adoptionSource : SASwhite chart using blue lines to map the customer benefits of using open sourceSource : SAS

Business Case : Open Source CMS vs. Proprietary CMS 

For a better understanding of the business case for a CMS of either kind, let’s compare from various dimensions the features of Open Source and Proprietary CMS models with a business point of view -

The Costs

In a proprietary model, since it is the organisation that bears all the cost of maintenance, addition and subtraction of features, upgradation and bug fixation, it will recover these expenses in the form of subscriptions, licenses etc. You might need to pay yearly renewal fees or monthly usage charges. Along the line, be prepared for cost surprises, as they may initially be hidden, but will pop up soon enough.

If you’re wondering why to choose an open source CMS in this case, it is because it’s free to use with no charges in the form of subscriptions or premiums.

Hence, both the models do need some form of monetary support, and it is the business owners’ call what they want to invest their money on. 


With the homogeneity that comes with proprietary CMS models, also comes rigidity in terms of customisation and personalisation, since there’s very little that is left to you for deliberation. Hence, if your business thrives on establishing unparalleled user experience by tapping on features like personalised feed and customisable layouts, go for open source. An open source model remains connected to its user base owing to continuous contributions and ongoing discussions within the community, making the field research for customisation much easier. 

On the other hand, if your requirements do not place much focus on the look and feel of the site, and rather banks on niche content for niche audiences, the associated costs and effort that comes with customisation is not that high utility for you and this is when to choose a proprietary CMS.


Needless to say, all the additional features and tools make open source CMS unnecessarily complex. A small business with limited resources might find it too overwhelming to delve into web development especially if it is not their calling. However, the open source community, like that of Drupal, for instance, is available at your disposal any time. Just leave your questions in the dedicated forum, someone from the Drupal Community, that comprises millions of members, would surely revert. Or, if you wish to get web performance optimisation services or support and maintenance services, you can also partner with a digital agency which specialises in Drupal. In the case of proprietary CMS, with a single vendor to reach out to, things can be streamlined here as well.


A proprietary CMS is a one-stop-shop experience, everything is handed out to you at once and you have very little to worry about if your area of expertise lies elsewhere. You can certainly rely on it in customary scenarios where you’re looking for greater stability of the product. But what must be kept in mind is that the ownership decides the lifespan of every service offered, and reliance takes a hit if the products you’ve based parts of your business on are changed opposite to your liking, or even removed. You also need to rely on the owners for bug fixes.

On the other hand, in case of an open source CMS, when our surrounding technology sphere undergoes change, open source is the first to reflect it, as it consists of users, and more importantly, contributors, from all across the globe. It gives one the freedom to work on a part of the software that is useful to them, hence creating their own safety net.


Proprietary CMS models bank on security by keeping their source code under wraps, which might backfire as any bugs that creep into the source code will remain hidden from the public eye as well. Although the source code being open in open source models has drawn speculation, it is widely known for bug fixes being very prompt as multiple hands are working constantly to make it error free. Snyk found out in one of their reports that there were lower vulnerabilities reported across popular open source ecosystems, and that there was an improved security mindset within open source organisations. 


Proprietary software packages come in a bulk, installing various components that you might never end up using, as choosing exactly what to install isn’t everybody’s cup of tea. Open source softwares are based online, taking up negligible computer storage space. If bulkiness is your area of concern because you already have a lot of bulk on your plate, closed source might add to the problem.

Expertise Required

Open source is a developer’s paradise. If you have the expertise to work on an open source software or can afford people with the needed skills, nothing like it. However, if your website requires multiple people being on board to handle the content on a regular basis, it might not be the best choice for you. A closed source software doesn’t need any technical knowledge or coding skills to work seamlessly, while open source does. People with little to no technical experience can also work on proprietary software.


The flexibility and space for innovation that comes with an open source software is unparalleled. Open source is like a self service buffet, each user is free to take what he or she wants, but it does not end there. New ideas for the betterment of the software and the community are always invited. In comparison, closed source models have a few people deciding on the features of the software, so it is impossible to cater to everybody. If your business’ future is to thrive on change and creativity, it is best to go for an open source model to avoid a fix in the future.

In open source communities, we see newer ideas and technologies on the ground not only sooner, but also on a continuous test drive with multiple technicians already working on the issues as soon as they’re detected. Open source CMS Drupal has held quite a starry record in unleashing new trends and making those functional as an open source platform. Macro trends in the industry like Continuous Delivery for superfast project deliveries, microservices infrastructure for small, autonomous services and machine learning for ‘intelligent’ web development’ have been brought to good use by Drupal. Hence, newer technologies see optimum utilisation with the backdrop of an open source community. 

Most importantly, the satisfaction of working with open source and contributing to it

Contributing to open source also has a plethora of hidden, indirect benefits. A company that is known to contribute to the common good is sure to build a positive, welcoming and compassionate brand value both within and outside the company. Developers involved in working on the open source components would be interacting with similar abundantly skilled people from all around the globe. Hence, not only is open source the right thing to do, it is equally exciting and challenging to work on. A person constantly interacting with the community is bound to gain a lot of dynamic experience, leading to a much faster growth rate as compared to a stagnant worker. And at the end of the day, one walks home satisfied and content with the feeling of having contributed to the bigger picture, to have fulfilled a bit of their own social responsibility. 

Companies as big units also find it important to provide funding to the community as a part of their CSR (Corporate Social Responsibility). Since they derive so much in terms of components and knowledge from the open source community, it only makes sense at the end of the day to give back to it. More on large companies' preference for open source here.

Drupal as an open source software has time and again seen how contributions and community engagement keep the platform afloat. Drupal acknowledges each contributor by issuing them credits for their work, and derives essential data from the trends of contributors. For example, if they see minimal engagement from a social or ethnic group, the inclusion statistics are likely to be revisited in order to analyse whether Drupal is accessible to everybody to engage and contribute in. Drupal also states in its Values and Principles that the bigger goal is to foster a learning environment leading to collaborative decision making and overall excellence. To know more, take a look at what makes open source recession proof, how it has tackled Covid-19 problems, and how Drupal stayed on top in the coronavirus pandemic.

At present, Drupal receives contributions from thousands of organisations and individuals who believe in the power of open source. Learn more about the approaches and perks of contributing to Drupal here.


The process of choosing a new CMS should be undergone carefully after thorough analysis of every aspect of the business cases for different softwares. The CMS is what you choose to represent and associate your brand image with, hence it should do justice to your goals, agendas and vision.

Feb 26 2021
Feb 26

Bright vivid colours

While this trend might be counteracted by another - brutalism - you’ll find a gluttony of sites brandishing a set of bright colours emboldened further with soft gradients. This of course poses some accessibility challenges with text overlapping such backgrounds. Check out Stripe.

Animated background

The more courageous of the brands push their vivid colours even further with background gradient animations. Check out Qoals.


Peering through glass-like interface elements might hark back to Windows Vista times, and more recently with the latest builds of iOS. UI designers are taking it further with 'glassy' overlays to help text become a bit more accessible over gradients and bright backgrounds. Check out DesignCode.

Stay tuned

We’ll keep you updated as we release these and more on Convivial

Feb 26 2021
Feb 26

How does it stack up

Those of you who work with Drupal, you are probably familiar with the combination of using Search API with a search backend such as MySQL or Solr. A pluggable architecture makes Search API a good choice for indexing content in Drupal.

For a long time MySQL and Solr were the popular choices. MySQL was an easy choice as performance was good and results were OK. For those working with large datasets and many concurrent facets, Solr made more sense. Most Drupal hosting companies provide it as a service for this reason. As the search market has matured, other backends have become available, including one for Sajari.

The table below compares these three options and highlights the strengths and weaknesses of each.

Feature Database Solr Sajari

Separate service


Built into Drupal.


Drupal hosting companies provide a Solr as SaaS.


Sajari is available as a SaaS.

Full text search








More like this



A useful feature for providing item recommendations based on similarity.


Result quality



Very good



Slow with many filters over large datasets with facets.



Easy install


Requires a module such as Search API Database to push data across to Solr.


Requires a module such as Search API Solr to push data across to Solr.


We can configure Sajari in the Sajari UI to run from metadata on the page. Sajari provides an embeddable widget.

We recommend the Search API Sajari module approach.

Search API Integration


Search API Database module


Search API Solr module


Search API Sajari module





A site parameter can be passed into the index for easy filtering.

ReactJS components




Interface is faster than Search API as server round trips are not needed.

Result tracking




Built-in metrics understand page trends and poorly performing keywords to help you see what searches led your users to individual pages, or which content visitors are searching for but can’t find.



Reports can be set up in analytics software.


Reports can be set up in analytics software.


Sajari provides logs and charts of search requests.

Autocomplete - suggestions


Extra module can be installed.


Extra module can be installed.






Libraries of synonyms can be uploaded via Sajari UI.





Support for misspelled words.





Advanced rules can be defined on certain plans.

Machine learning




Sajari will learn which results are more or less relevant, promoting the best results to the top.



Database comes with Drupal hosting.


Solr server comes built in with typical Drupal hosting.

Free and up

Starts free for smaller sites and then increases.



An easy, low cost search solution.

A more scalable solution with handy features such as “more like this”.

A fast system with smart results helpful for those looking for synonyms, results boosting, tracking and reporting.

Sajari is a viable alternative for clients who are looking for more insights into how their audience use the search on their site and more control over the delivery of the results. This is the case for content driven sites as well as for ecommerce configurations where preferences play a big role.

Integrating Sajari with Drupal

The Sajari Widgets

It is possible to implement Sajari search into any website without the need for the addition of modules or custom code in the backend. Sajari provides a set of widgets which will allow search to operate without the need for much technical knowledge.

Firstly, a Javascript tracking code will allow for “instant indexing”. When a user visits a page, the code fires up and tells Sajari about the page. Sajari can then visit and index the page to update its index. This approach is simple to set up but has its downsides - freshly updated or deleted content will not make it into the index immediately. If this is a concern, then using Search API Sajari, below, would be an alternative.

Secondly, Sajari offers a tool in the admin UI to define a search form and results. It covers things such as the search query, filters, tabs, result counts and result display. It is very easy to configure. The result is a snippet we can embed onto your search page. A set of ReactJS components drive the search and return results in lightning speed, leading to a good experience for users.

Drupal Module: Search API Sajari

For those looking for a tighter integration between their Drupal site and Sajari, it is possible to use their API to push updated content across. The Search API Sajari module , authored by the developers at Morpht, provides a backend to the venerable Search API module  This will update Sajari when content is updated on your Drupal site.

The main advantages of this approach are:

  • Content is indexed instantly, even when no one views it;
  • Deleted content is removed from the index immediately;
  • The tools within Search API allow for the fine tuning of the various fields;
  • There is support for sending a site name across in the result, allowing for federation of results.

Drupal Module: Sajari

The widgets provided by Sajari offer a quick way to get up and running with a search page. However, there are some limitations in the way they work. At the time of writing (early 2021) the widgets did not support the definition of facets.

In order to overcome this shortcoming, Morpht developed a ReactJS library which sits on top of the components provided by Sajari. It has quite a number of configuration options for queries, result counts, filters, tabs and facets. It even has the ability to customise the results through the provision of a callback function which can convert the JSON result to HTML. This code is available at Sajari Configuartor.

The Sajari module makes use of Sajari Configuartor to power the way search is implemented. The module provides a block for defining how the search will operate. The configuration is then passed through to the Sajari Configurator and the UI and results are then shown.

The Sajari module also makes use of the JSON Template module which allows for different handlebars templates to be defined by the themer. These templates can then be selected by an editor during the block creation process. The select template then forms the basis for the callback which is passed into the Sajari Configuartor. The result is that editors can select how to show results. There is no need to alter the ReactJS templates which are in the library.

A recipe

If you are looking to get up and running with Sajari, we recommend this process:

  • Sign up for a free account at Sajari;
  • Set up an initial collection in Sajari, but add no fields;
  • Install JSON Template, Sajari and Search API Sajari;
  • Configure Search API Sajari with your collection details in a new Server;
  • Define your Node Index and assign it to the Sajari server you have just created. The schema will be updated automatically in Sajari with the changes you make in Drupal;
  • Confirm that content is being indexed properly;
  • Add a Sajari search block to your search page and configure it. Be sure to use the correct pipeline and get the field names right;
  • Test the search and confirm it is working.


Sajari is an up-and-coming search provider offering a new breed of search which can utilise human behaviour to improve the results it shows. It's useful for content heavy and ecommerce sites which have a strong need for good search results. There are now integration modules for Drupal to get you up and running with Sajari easily.

Is Sajari right for you?

If you currently have a Drupal site based on a different engine and are interested in what Sajari can offer you, please get in touch with us to discuss it further.

Feb 25 2021
Feb 25

In November 2022 the Drupal community and the Drupal Security Team will end their support for Drupal 7. By that time, all Drupal websites will need to be on Drupal 8 to continue receiving updates and security fixes from the community. The jump from Drupal 7 to 8 is a tricky migration, often requiring complex data transformations to fit legacy content into Drupal’s new paradigm. If you are new to Drupal migrations, you can read the official Drupal Migrate API, follow Mauricio Dinarte’s 31 Days of Drupal Migrations starter series, or watch Redfin Solutions’ own Chris Wells give a crash course training session. This blog series will cover more advanced topics such as niche migration tools, content restructuring, and various custom code solutions.

There’s a certain leniency afforded to migrating content from an old Drupal 7 website to its new Drupal 8 rebuild. Preserving old content with all its outliers can be complicated and tedious. However, it is typically run only once in production then augmented and completed. Take notes for future migrations and move on. This leniency is not available for ongoing migrations that need to be run routinely to keep a website’s content up to date. This can be anything from a website's directory to up-to-the-minute news and events data where the data comes from outside the website and requires a custom migration. Here the code needs to work consistently and report errors gracefully.

To run these migrations on cron, there are a few different options. The easiest is to use a module like Migrate Cron Scheduler or Migrate Cron. Both of these allow you to quickly pick a custom migration to run on cron and choose its frequency. Migrate Cron Scheduler, however, allows the user to configure the “update” and “sync” flags on the migration import.

The "update" flag will update all previously imported entities. The "sync" flag will also remove any previously imported entities that are no longer in the source database, so that the source and destination are synchronized.

These modules also let you choose a migration group, so that the migration import will automatically respect migration dependencies. The downside is that any custom code that needs to be run in conjunction with the migration will have to be split into a different cron job, and there is no setting on these modules to run the migration at a certain time of day or at an irregular frequency.

For situations that require these additional features, install and configure the Ultimate Cron module. This is a powerful tool that can be used to fine-tune any cron job to an exact time and frequency. The combination of Ultimate Cron and a migration cron module will cover the majority of use-cases. However, if custom code or reporting is necessary immediately before or after the migration runs, then a custom cron job may be needed. To build this, go to your custom migration module and create a hook_cron function in the .module file. This file will need to use the following classes:

use Drupal\migrate_tools\MigrateExecutable; use Drupal\migrate\MigrateMessage; use Drupal\migrate\Plugin\MigrationInterface;

Exactly how you configure this hook will depend on your situation. For each migration that you want to run on this cron job, you will need to follow these steps. First create an instance of the migration plugin by feeding the migration’s id into the Drupal plugin manager: $migration = \Drupal::service('plugin.manager.migration')->createInstance($migration_id);

Next, check the status of the migration. Often if there is an error, the migration will be hung in the “importing” state. Running a migration with the “importing” status will result in an error. To get around this, check the status and if necessary reset it to idle:

// Reset migration status. if ($migration->getStatus() !== MigrationInterface::STATUS_IDLE) { $migration->setStatus(MigrationInterface::STATUS_IDLE); }

At this point there are a couple options. You can leave the migration as-is and run a straight import where the content that has already been migrated will remain the same and any new content will be imported. Or set the “update” flag so that new content will be imported and existing content will be updated to match the source: $migration->getIdMap()->prepareUpdate();

Additionally, you can set the “sync” flag to remove any migrated content that no longer exists in the source database (e.g. an event that was cancelled). Note that this option requires at least migrate_tools version 5.

$migration->set('syncSource', TRUE);

Finally, create the MigrationExecutable plugin and run the migration:

$executable = new MigrateExecutable($migration, new MigrateMessage()); $status = $executable->import();

The “status” variable indicates whether the migration ran into any errors. If the status is empty, then there was an error and we can send a report and make custom adjustments to help the migration fail gracefully. Otherwise the migration ran fine.

Once the cron hook is ready, go to the Ultimate Cron jobs page (/admin/config/system/cron/jobs) and click the “Discover jobs” button. Your custom cron job should show up in the table, and you can click the “edit” button to fine-tune the exact timing. For updating or syncing migrations with hundreds of entities, the page may timeout if you manually hit the “run” button for your custom cron job. However, Ultimate cron version 2.x adds the drush commands cron-list and cron-run. Use cron-list to find your cron job id. Then use cron-run with that id and the “--force” flag to manually run your cron job for testing.

The Migrate Cron Scheduler or Migrate Cron module route is much faster to set up and is the better choice for quick, simple migrations that need to be run on the hour. However, for bigger, more complicated migrations that require additional code either immediately before or after the migration, or need to be run in the middle of the night, the Ultimate Cron module combined with a custom cron job provides the most customization and flexibility.

Feb 25 2021
Feb 25

When speaking with government clients, I’m often asked about web design trends. 

The fact is, design trends for government sites have very little to do with colors, fonts, or any sort of fleeting fashion. Nor are government sites the place where the boundaries of technologies such as augmented reality, virtual reality, or voice control are being pushed.

What matters most for government sites is trust, transparency, and ease of use. 

Government sites have a lot of heavy lifting to do, and more so than ever before, these sites are serving as a central hub from which constituents keep informed about events, monitor public health alerts, take care of official business, stay connected to the community, and a lot more. 

Web Design at Work

Those responsible for government and public sector sites tend to be very savvy about the need to engage constituents and ensure that the navigation and overall experience of their sites aligns with what visitors are looking to accomplish. The pandemic, of course, catapulted the importance of excellent UX to the forefront, but as COVID-19 heads for the history books, expectations for the UX of government sites will remain high. 

Given the depth and breadth of content that often needs to be organized and accommodated on government sites, modern design practices such as proper use of white space along with a spacious and fresh feel that mitigates against clutter and confusion, is an essential best practice. While the interior pages of the site often need to be more content heavy, an open and inviting home page serves as an engaging launch pad for a wide range of user journeys. 

Once the key persona groups who visit the site are defined, and the user journeys are mapped, the essential focus needs to be on streamlining and simplifying the UX, with a focus on removing any potential roadblocks or frustrations. 

People First

A people-first design philosophy, is the “trend” that serves as a key driver for us at Promet Source. This calls for a recognition that government sites are being designed for a broad range of users -- those who are young, those who are elderly, users who are accustomed to conducting business online, users who are easily frustrated with technology, users with disabilities that require assistive technology to access the site, and a wide swath of users within every spectrum. Given the complex content models and scope of objectives that government sites need to accomplish, we find that the Drupal is the CMS tends to be the best suited

Much of the world’s websites and many government sites among them are running on outdated, clunky user interfaces that were developed long before the concept of user experience or UX entered into the general lexicon or the discipline of web design. Now that we understand the design imperative of defining end-user needs, goals, motivations, and pain points,we are much better positioned to leverage design thinking as a solution to streamline user experience journeys. 

Among the indicators of this trend is increasingly friendly and highly contextual navigational language. One example would be navigational tabs that represent a walk-through to specific talks. Rather than a “Forms” tab, or a list of departments, for instance, a tab we recently designed for a county website read: “I want to.” Clicking that tab resulted in a sub menu of options within the categories of: 

  • Apply for
  • Pay for 
  • Register
  • Report
  • View

Visual Storytelling

While there are a multitude of tasks that need to be accomplished on government websites, a well designed government or public sector website factors in a lot more than information and functionality. Perspectives and messaging can be intracately woven into design, through a holistic approach to collaborating with government clients and drawing upon multiple disciplines to create the look, feel, messaging, and entire experience that conveys the government entity’s story and identity. 

Working closely with content and development teams, we’re able to optimize engagement, conveying information a manner that is both creative and informative. 

This holistic design approach to the user’s experience on a site digs much deeper and ensures a greater degree of inclusivity than simply asking, “does it look nice?” Government websites truly need to work for everyone.

The more we strategically approach design and UX and the more we educate ourselves and others on the best practices for inclusive design the better everyone will be for it. I see it as an opportunity to be conscious of others and unite within a digital platform.

Working in close collaboration with federal, state, county, and municipal clients, Promet Source is making a difference and having an impact. Interested in starting a conversation concerning the distinct objectives for your website? Let’s talk

Feb 25 2021
Feb 25

The work of a content manager requires intensive linking of various content together. Proper linking of subpages is one of the foundations of SEO. It also makes it easier to navigate your website, which may have a great impact on marketing effectiveness.

Drupal by default allows you to create links in text. You just select the appropriate button in the editor and enter the URL of the new link. However, when you need a more convenient autocomplete solution, I recommend trying the Linkit module. In this article, I’ll show you its abilities.


The module debuted at the beginning of 2010. The first stable version 1.0 for Drupal 6 was released back then. Since that time LinkIt has been updated regularly. The latest beta release, 6.0.0, saw the light of day in December 2020.


The LinkIt module is extremely popular in the Drupal world. Official statistics show over 110 thousand installations. This number also includes the websites based on our Drupal distribution – Droopler. 41% of the above websites are based on Drupal 7.


Module's creators

The module has been maintained by Emil Stjerneman for ten years, and he’s created over 900 commits in the project so far. In total, almost 80 users made contributions to it.

Purpose of the module

The LinkIt module adds to WYSIWYG editors the ability to conveniently link internal and external content. It offers built-in support for content types, taxonomies, users, files, and comments. Thanks to this, you don’t have to remember or copy the URLs you link to when you’re editing a webpage. All you have to do is enter a title fragment and the target page will be suggested by autocomplete. This is a very useful functionality, especially since errors in URLs are one of the most frequently detected problems in SEO audits.


The module is available on the Drupal.org website. Like other Drupal add-ons, you can install it from a .zip file or via Composer (using composer require drupal/linkit command).

The administration panel can be found in the menu by selecting Configuration → Config Authoring → Linkit.

Module's use

When you start editing any text format, pay attention to the "Drupal link" section.


After clicking the "Linkit enabled" checkbox, the standard link widget in CKEditor will be replaced with a new one, with built-in autocomplete.


At this stage, you can finish the module configuration.

Linkit profiles

If you want to customise autocomplete, create your own Linkit profile in the Configuration → Config Authoring → Linkit panel. Each profile has its name, description and a list of matchers.


You have the following types of matchers to choose from:

  • Content – basic matcher, searches for content by title among all or selected types of content,
  • Contact form – searches for contact forms,
  • Email – detects e-mail addresses and creates a mailto: link automatically,
  • File – searches for files from the sites/*/files directory managed by Drupal,
  • Front page – suggests a home page when you start typing "Front page",
  • Media – searches for media of selected types,
  • Taxonomy term – searches for taxonomy terms,
  • User – searches for website users.

Example of use

The easiest way to explain the operation of matchers is by using an example. I’m adding a new "Example profile" containing the following elements:


Notice that the “Metadata” fields are filled in, showing additional information about the link match found. Now, let’s set the “Example profile” as active in the text format configuration.

When you go to webpage editing, the effect of the above actions will be as follows:


You can see three matchers here, one below the other. The first one shows the article, the second one shows the Media object with a thumbnail, and the third one - the taxonomy term.

URL format

When you save the content with a link inserted via Linkit, you will notice that instead of a URL alias (of the /example-article type), the link contains its abbreviated form (e.g. /link/20). You can change this behaviour by activating the following filter in the text format settings:


Hooks and integrations

The Linkit module is object-oriented and highly flexible. You can extend it with:

  • "matcher"-type plugins, allowing you to easily add your own sources of link hints,
  • "substitution"-type plugins that return links to content.

There are currently no additional Linkit modules on Drupal.org. This is probably due to the fact that the basic version covers most cases of use.


Linkit is a simple and reliable solution that will improve the UX of your website at a low cost. It’ll also allow you to better control the structure of links and help you avoid linking errors. We’ve been using this module for many years – also as part of our own Drupal distribution – Droopler.

Feb 25 2021
Feb 25

Do you spend your time on the right things when working on your online store? Do you publish content that is important to your customers? Are you focusing on the things that have the greatest effect? Using good analysis tools can help you answer such questions. A continuous and targeted analysis is important for identifying areas of problems and improvements. It provides good indicators on what is working/not working and what you should focus on, and gives you a good basis for making the right decisions when it comes to your online store.

Google Analytics 

Google Analytics is the most popular web analytics tool used to get detailed statistics about a website.  By using Google Analytics you can for example find out: 

  • Who are the users on your website
  • Where are the users coming from 
  • How the users navigate your website
  • Users shopping behavior
Infographic: who is the typical user of the website? (numbers from Google Analytics)Presentation of data from Google Analytics - who is the typical user of the website?Infographic: the users shopping behavior (numbers from Google Analytics)Presentation of data from Google Analytics - the user's shopping behavior.

Data from Google Analytics can give you an overview of what challenges the website faces, but not necessarily what is causing these challenges. Statistics from Google Analytics can for example show that many users on your website drop off on the product page and in the checkout process. What could be the reason for this? Why are so many users not completing the purchasing process? It can be challenging to know how you should tackle these issues.


A good option is to use the visual analytics tool Hotjar in combination with Google Analytics. Hotjar helps you understand the user's behavior on the website. What are the users actually doing on the website? What content is important to them? By using heat maps you can see where the users click and how they scroll through the pages. This can help you understand why users behave the way they do and can give you directions on where to start your work.

For example, by looking at how the users behave on the product page, you can see if you find any explanations for why so many drop off on this page, and why they don’t add products to the shopping cart. You can see where the users click, how far they scroll, and how they interact with the different elements on the page. Based on this information you can A/B-test different solutions, make changes, and subsequently test the effect of these changes.

By doing Hotjar analyses regularly you can get useful information such as: 

  • What content you should focus on/not focus on 
  • Where you should place your most important content 
  • Whether users have desired behavior on your site
  • Whether important elements such as buttons, links, and CTAs (calls to action) are effective 
  • Whether the site should be better adapted for desktop, mobile, or tablet

Briefly summarized 

Actions based on findings from Google Analytics and Hotjar can lead to fewer drop-offs in the purchasing process, more page views, improved design with lower bounce rates, and better conversion rates. The analyses also give a good basis for A/B-testing of different solutions on the website. The analyses are easy and cheap to implement, and if you know how to take advantage of these tools, they can provide great insight and effect, so you can take action that improves your online store. In this way, you ensure that you have the highest return on your editorial efforts. 

Don’t hesitate to contact us if you need tips or help to conduct such analyses! We would love to hear from you.

Feb 25 2021
Feb 25

Looking to build or revamp your newspaper or media website and don't know where to start?

In this e-book, the team that built award-winning and nominated digital experiences will guide you through the key technologies, tools, and components you will need to build a holistic and engaging news and media digital experience.

The information you will gain from downloading the "How To Build A Winning News Website" guide will feature essential UX features that were implemented by our team's recent digital media project for Al-Khaleej - one of the most prestigious newspaper publishers in the Middle East region.

Feb 24 2021
Feb 24

Following yesterday's Entity Metadata Wrapper blog post and as I continued to work on this task, I noticed some duplication and found that I was repeating several of the same chaining steps in different methods in the same file. For example:

public function getFirstName(): string {
  return $this
    ->get('profile_user_basic') // Get the pupil's profile.

private function getTeacherFirstName(): string {
    ->get('profile_student') // Get the pupil's profile.
    ->get('field_class') // Get the pupil's class.
    ->get('field_teacher') // Get the class' teacher.
    ->get('profile_user_basic') // Get the teacher's profile.

In both cases, the last three lines are the same, where the same profile type is loaded, and the value is loaded from a field.

I wanted to find a way to remove this duplication whilst also making the code more readable. Ideally, this would mean adding a method like getFirstNameFromBasicProfile() that would group the last three steps.

Extending the EntityDrupalWrapper

I've done this before, where I've created a custom wrapper class with its own methods and extends EntityDrupalWrapper. This is how that might look:

final class PupilWrapper extends \EntityDrupalWrapper {

  public function __construct(\stdClass $data, $info = []) {
    parent::__construct('user', $data, $info);

  public function getFirstName(): string {
    return $this->getFirstNameFromBasicProfile();

  public function getTeacherFirstName(): string {
    return $this

  private function getFirstNameFromBasicProfile(): string {
    return $this


Whilst this has worked in previous situations, this time I had this error:

Error: Call to undefined method EntityDrupalWrapper::getFirstNameFromBasicProfile() in Drupal\my_module\EntityWrapper\PupilWrapper->getTeacherFirstName

This is because the get() method is returning an instance of EntityStructureWrapper (another class that extends EntityDrupalWrapper) which means that getFirstNameFromBasicProfile() is not accessible though it's in the same file.

I tried overridding the get() method but wasn't able to get this to work.

Decorating the EntityDrupalWrapper

Another option that I tried was to follow the Decorator design pattern, and add a new class that takes an EntityDrupalWrapper as an argument as uses it internally but doesn't extend it. Here's an example:

final class PupilWrapper {

  private $accountWrapper;

  public function __construct(\EntityMetadataWrapper $accountWrapper) {
    $this->accountWrapper = $accountWrapper;

  public function getFirstName(): string {
    return $this->getFirstNameFromBasicProfile();

  public function getTeacherFirstName(): string {
    return $this

  private function getFirstNameFromBasicProfile(): string {
    return $this


In this case, the constructor argument is an instance of EntityMetadataWrapper so that it could be either an EntityDrupalWrapper or EntityStructureWrapper.

Re-adding required wrapper methods

As the get() method is missing, this would cause an error:

Error: Call to undefined method Drupal\my_module\EntityWrapper\PupilWrapper::get() in Drupal\my_module\EntityWrapper\PupilWrapper->getFirstName()

However, we can re-add it, have it get the value from accountWrapper and return another instance of PupilWrapper so that getFirstNameFromBasicProfile() will be available.

public function get(string $property): self {
  return new self($this->accountWrapper->get($property));

The value() method is also required, but this can delegate to the decorated wrapper:

Error: Call to undefined method Drupal\my_module\EntityWrapper\PupilWrapper::value() in Drupal\my_module\EntityWrapper\PupilWrapper->getFirstName()

public function value(): string {
  return $this->accountWrapper->value();


This was the first time that I tried extending Drupal 7's entity metadata wrappers in this way, but it worked well, removes the duplication and cleans up the code further.

Feb 24 2021
Feb 24

With the end-of-life (EOL) for Drupal 8 closing in fast, we wanted to share our experience on how we have been handling the process of upgrading our client projects to Drupal 9.

The Drupal 8 EOL date is November 2nd 2021. This is because Drupal 8 has a dependency on Symfony 3 which has an end-of-life in November. That means there will be no further security fixes implemented, so to keep your project safe and secure against potential threats, it is strongly advised to upgrade to the latest version of Drupal.

No “migration” needed?!

Correct! With the upgrade from Drupal 8 to Drupal 9 – there is no need for migration; the new features for Drupal 9 were gradually released inside Drupal 8. The main change that Drupal 9 brings is the removal of deprecated code, much like getting a hair-cut.

However, this was not the case with the change from Drupal 7 to Drupal 8. From Drupal 7, there was a multitude of different changes that resulted in requiring a comprehensive and often complex migration. This led to many clients opting for a complete rebuild from the ground up to take full advantage of new features such as “workspaces” that arrived in Drupal 8.6.0.

With the upgrade from Drupal 8 to Drupal 9 – there is no need for migration.

What about contrib modules?

The “Drupal 9 deprecation” dashboard overview shows the overall compatibility status of all contributed modules to the Drupal ecosystem. Over 88% of the top 1000 contrib modules are explicitly compatible with Drupal 9, meaning they have a Drupal 9 release.

Additionally, more than 50% of all Drupal modules are compatible with Drupal 9, and a further 20% require only the info.yml file and/or the composer.json file to be upgraded to make them compatible with Drupal 9.

How do we upgrade our projects?

At Amazee Labs, we deal with a diverse range of clients – all of which have their own distinctive requirements – so we  construct elegant solutions tailored to their unique business needs.

With such a diversity of projects, we developed a solid plan to upgrade each project to Drupal 9. Our maintenance team’s strategy involves the following three stages:

  1. Analyse
  2. Tackle
  3. Deploy

Two construction workers standing on scaffolding.


The Analysis stage involves scanning the project server and codebase to identify the complexity of the upgrade process. Some of the information we gain from this analysis answers the following questions:

  1. What version of PHP is the server using?
  2. What version of Drupal Core is installed?
  3. Is the Drupal Core Media module enabled?
  4. How many contrib modules are installed?
    - How many of those contrib modules are outdated?
  5. How many custom modules have been created?

We have a few pre-conditions that the project must pass before we can continue:

  1. The server is running on PHP version 7.4
  2. Drupal Core 8.8.x is installed or ideally the latest release from the Drupal Core 8.9.x branch
  3. Drupal Core’s Media module is enabled

If we have detected that the PHP running on the server is lower then version 7.4, then we need to update this first. If the project is hosted on Lagoon, by amazee.io, then this is generally a breeze to update, as it is highly developer-friendly.

If we detect an older version of Drupal Core released before version 8.8.x, then we create a task to upgrade Core to the latest 8.9.x version. Within the web maintenance team, we have taken over some very outdated projects and meticulously updated each one, always involving the client within our Agile workflow, to build trust throughout the entire development process.

To ensure Media in Core is enabled, the process to migrate from the contrib Media Entity modules to Drupal Core Media is outlined over on the FAQ page on drupal.org.

During this initial investigation, we install the Upgrade Status and Upgrade Rector modules, then generate a report containing information on what modules require updating. Furthermore, we generate fixes for deprecated code in the custom modules.

Analysis report.


With our web maintenance service offering, we ensure the longevity and reliability of our clients’ projects by keeping their websites up to date and secure.

With the results from the analysis stage, we then create individual tasks to tackle the challenges that lie ahead. The drupal.org documentation has some information on how to upgrade from Drupal 8 to Drupal 9 or higher.

The Upgrade Rector module helps us to perform automated fixes on the codebase. For contrib modules that lack a Drupal 9 release, we contribute back to the community by submitting fixes and collaborating with maintainers to aid them in releasing a new version of their module.

Many Open Source communities have found that to support their growth and ensure long-term sustainability they’ve opted to utilise platforms that pay contributors or embrace corporate sponsors. Underrepresented groups, in particular, do not always have the privilege of free time to contribute to Open Source outside of work hours. At Amazee Labs, we can take advantage of providing contributions to the Drupal community during work hours. Gábor Hojtsy has an extensive overview of articles aimed at helping to push contributed modules to a successful Drupal 9 release.

Two teams in a rugby scrum.


So we have gone through and analysed the code, updated the modules and exported the configuration, now how do we deploy our changes to the production environment?

Our workflow for the majority of our projects tends to be as follows:

  • All projects have at least two environments:
  • A production git branch, often named “prod” for short
  • A development git branch, often named “dev” for short

Here is our 13-step guide:

  1. A developer first checks out the project codebase locally.
  2. The developer then fires up a local instance either with Docker or with native PHP.
    - For Docker, they would either use Pygmy or Lando’s Lagoon beta. For native PHP, they would simply run “drush serve” with an SQLite database.
  3. The developer then creates a feature branch on git from the latest changes on the prod branch.
  4. Using the composer tool, the developer upgrades the necessary modules as well as upgrades Drupal Core.
  5. Then they run the update database command in Drush and export the configuration changes.
  6. After this, they commit all changes: configuration changes, composer JSON and lock file changes, as well as any other changes to the custom modules or custom theme.
  7. They push their local git branch to the remote origin and create pull-request into the prod branch.
  8. If PR environments are available, then this would automatically spin up a new environment with all the changes, ready to be tested by another developer.
  9. If the project does not have PR environments available (i.e. if it is not hosted on Lagoon), then the developer will merge their changes into the development environment so that another developer can test.
  10. If the second developer does not find any specific issues during their testing process, then the project manager is informed that they can test the changes with the client.
  11. If the project manager and the client find no specific issues with the changes, then the pull-request is approved for deployment to production.
  12. The original developer is empowered to deploy on their own (but the team is always there for one another). The developer will trigger the deployment by simply merging the pull request they made into prod.
  13. Once the deployment is completed, the developer informs the project manager and client that their website is now running on the latest version of Drupal.

Rocket launching at the Kennedy Space Center, United States.


Once we have gone through and updated the modules, upgraded Drupal to the latest stable release, and deployed everything to the production environment, then...we celebrate our accomplishment internally with the rest of the team – a job well done!

In retrospect, the upgrade from Drupal 8 to Drupal 9 is a piece of cake compared to the upgrade from Drupal 7. It feels like we are modernising the website in small bites instead of trying to gobble down a brand new refreshed website all at once.

Ready to talk about your upgrade needs? Whether you’re operating on Drupal 7 or 8, We’re ready to help. Get in touch with us and upgrade to Drupal 9 today!

Feb 24 2021
Feb 24

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

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

Feb 24 2021
Feb 24

We plan to release Drupal 10 in 2022, ideally in June. That means there are 15 months left before the new major release is expected to be available. I provided an update about the initiative last time in December at DrupalCon Europe. I wanted to give a quick update on some of the highlight areas we are working on. Join the discussions and help shape Drupal 10's direction every other Monday at 19:00 UTC in the #d10readiness channel on Drupal Slack.

All work is done in Drupal 9 for now

The same way we built most of Drupal 9 in Drupal 8, we are building Drupal 10 in Drupal 9 as much as possible. There is one key exception, the CKEditor 5 project is being built as a contributed module to help test it and make it easier to collaborate on.

PHP 8 and Composer 2 support shipped

Both shipped in Drupal 9. Composer 2 support was even backported to Drupal 8, but that was not possible for PHP 8 compatibility. We plan to require PHP 8 for Drupal 10 given the end of life of PHP 7 in November 2022.

Symfony 5 support is good, Symfony 6 support in the works

One of two main drivers of the Drupal 10 timeline is Symfony 4's end of life in November 2022. We plan to update to at least Symfony 5. We did resolve all known Symfony 5 compatibility issues to date, so that looks promising.

While in Drupal 10's time, Symfony 5 will be on the long term supported 5.4 branch, that would "only" be security supported until November 2025, giving Drupal 10 a 2.5 year lifetime. To possibly expand this, we are exploring to update to Symfony 6 and resolving incompatibilities identified in Drupal 9 already. Symfony 6 development is not itself open yet, so we are only able to work on things that are already deprecated.

CKEditor 4 to 5 update needs more hands

The other big motivation behind the Drupal 10 timeline is CKEditor 4 support lasting until 2023 only. CKEditor 5 support is being worked in a dedicated contributed module for now. We are collaborating heavily with the CKSource team on runtime plugin support (Webpack DLLs), general HTML support (to avoid data loss when using CKEditor 5 on legacy content), etc. There are various great benefits of CKEditor 5 including optional collaborative editing functionality (using a paid server component).

We need more people involved in this. Dedicated CKEditor 5 meetings happen every other Thursday in #ckeditor5 on Drupal Slack at 15:30 UTC.

Starterkit theme prototype needs feedback

This is a Drupal theming paradigm shift! While inheriting from runtime base themes have served us well to avoid duplication, it causes serious problems for innovation and makes us supporting old bugs to not break live sites. So instead we aim to provide built-in support for generating a theme in core that is based off of a prepared starterkit: php core/scripts/drupal generate-theme . Lauri prototyped an initial solution, needs more feedback.

jQuery UI components have replacements prototyped, need reviews

Practically all of the jQuery UI components as well as various uses of Backbone.JS have replacements prototyped: dialog, toolbar, tabbing manager, autocomplete, tours, etc. All of them are in need of serious feedback though and testing.

Internet Explorer 11 support will be dropped

An agreement has been made to drop support for IE11 from Drupal 10. The official announcement is forthcoming.

Some one-off feature modules will likely be removed

We already agreed to deprecate aggregator module in Drupal 9 and remove in Drupal 10. There will possibly be other single-use core modules removed that lack maintainers and momentum. Work is underway to indicate individual module lifecycle states, although this needs more help soon for us to be able to use it to deprecate modules in time.

Drupal 10 readiness day at DrupalCon North America

The above were just some of the highlights we are working on. DrupalCon North America 2021 is online and will focus one of the days on Drupal 10 readiness. We submitted various in-depth talks to illuminate further details of the above areas and more. Join us there and use the opportunity to be at the forefront of the new version.

Feb 24 2021
Feb 24

The advent of Drupal 8 brought about many new features and improvements. One highly anticipated change was the move to a new structured release cycle. The update promised to improve compatibilities between versions, introduce gradual deprecation of old APIs alongside new features, and strongly suggested that the days of performing full-site rebuilds to move between major versions of Drupal were in the past.

Now that Drupal 9 has been released, we’ve had the opportunity to work through the upgrade process from Drupal 8 and found that it is indeed a significantly lower lift than doing re-implementations while moving to Drupal 8. That being said, there are still important considerations to keep in mind when preparing and executing your upgrade to Drupal 9.

Required Tooling
The first step of any project is making sure you have the proper tools to proceed, and Drupal upgrades are no different. Because the first challenge is finding and fixing all of the deprecated code and identifying modules that need updating, you will need a tool to help you. Fortunately, the Upgrade Status module gives you almost everything you need by checking:  

  • Global requirements to ensure our environment is configured correctly and has all of the prerequisites installed to run Drupal 9. 
  • Contributed modules to see if they are Drupal 9 ready, have a compatible upgrade, or have a patch available to make them compatible.
  • Custom code to identify deprecations and required changes.
  • Themes for deprecated Twig syntax.
  • Any installed libraries for deprecation status, required changes to our info.yml files, and other possible compatibility issues.

Upgrade Status can be run with Drush or from within your Drupal site, but it’s not a good idea to run this on production. Instead, install it as a dev requirement and run it locally or on your development or local environment. If your codebase is larger, the checks can take a little bit of time to run, particularly when run locally. You can run against a subset of your site’s modules if necessary and export the results after running the checks.

If your site has a significant amount of custom code, you also want to install Upgrade Rector. This module uses the Rector PHP refactoring library to automatically generate patches to fix the deprecations in your code. While it can’t fix everything, it can significantly speed up the process.

Updating Core
Routine site maintenance should always include installing and testing updates to the latest versions of Drupal Core and installed contributed modules. While Third And Grove’s support process consists of this as part of our regular support contracts, it’s a fact of life that many teams struggle with prioritizing these updates over more critical work to meet actual business goals. If your site is well-maintained, this step will be easy: The Upgrade Check report will be mainly Green, and you are well on your way to being ready for D9.

More commonly, sites will lag on updates, and your reports will show several updates that need to be applied. The first step of the Drupal 9 preparedness project should be to ensure that you are running the latest version of Drupal 8 (8.9.13 at the time of this writing).  Drupal 8.9 is the long-term support version of Drupal 8 and is the ideal starting place for a D9 upgrade. If your site’s code is working on Drupal 8.9 and clean of any deprecations, it should work with Drupal 9 since they share the same public APIs.

The first major stumbling block many upgrades hit is when the site has lagged significantly behind the Drupal update schedule and is currently on a version of Drupal older than 8.8.  This can be problematic because each Drupal feature release introduces different overall requirements and various changes under the hood that can require database updates and other special handling. To address this, we strongly recommend first reviewing the release notes of each minor version (i.e., Drupal 8.4.0, 8.5.0, etc.) and note the changes introduced by each version. Changes include the fact that Drupal now requires PHP 7.3 or greater, the addition of new core modules (such as Workflows, Media Library, and JSON: API), changes to the way path aliases are handled, and the introduction of a new set of Composer packages and a default project template. Make a note of each change that may impact your particular site install and correct any discrepancies that may arise.

Once reviewed, we don’t recommend jumping directly to 8.9 unless you are on a version *prior* to 8.6.1. Generally, you want to perform each minor upgrade individually and test them before moving on to the next version. Still, if there was a bug related to taxonomy updates in the update to 8.6, that is best avoided. Otherwise, use Composer to require and install the latest patch release of a specific version, run any database updates, and test your installation running that version before moving on to the next minor version upgrade.

Update Contributed Modules
By this point, you have used Upgrade Status to generate a list of modules your site uses and their readiness for Drupal 9. This is a straightforward process for most common modules: The module will have a version ready that is compatible with both Drupal 8 and 9, and you will update it as usual (after reviewing the release notes — see the next section). There are three cases where this can become less straightforward:
No Update Available, But There Is A Patch
Some module maintainers may not have released a version of the module with the required Drupal 9 changes yet, but Upgrade Status tells you that a patch is available for the module. One tricky aspect of this is that if some of the required changes are to the module’s composer.json file, they cannot be patched using Composer. This is due to the way it checks dependencies — a classic chicken and egg problem. While in general, it is not recommended to add contributed modules to your codebase, you can pull the modules that require patching into your project, remove them as composer dependencies, and then follow the [process of applying that patch to your codebase with Composer](https://groups.drupal.org/node/518975).  If you have to take this approach, you should continue monitoring the project and adding it back to your composer.json when the module is D9-ready.

Module Has No Patches Available
Because of the Drupal 9 Project Readiness Bot, most modules should have at least one patch available to bring the module up to speed from a compatibility standpoint. However, if you are using a module that does not, there’s still hope. With the information that Upgrade Status gives you about specific deprecations and the patches generated by Upgrade Rector, you can patch the module yourself, making it ready for other users.  

When you build these patches, we recommend following the standard Drupal module contribution guidelines and working on the module against the dev version outside your site’s codebase. Once the patch is built, you can contribute it back to the community via the project’s issue queue, then follow the process outlined above for a module that has a patch available.

Update Is A Major Version Change
We have seen one tricky situation arise with some contrib modules: modules that have a version that supports Drupal 9, but the version is also a major release with breaking API changes. This is rare but worth noting, especially if the module is one that your custom code depends on in some way. Big API changes in a module behind the scenes may significantly impact your site and require that you refactor your code to account for them. 

Updating Custom Code
Your custom code can be the most significant source of potential changes to your codebase in preparing your site for Drupal 9, especially for long-running projects that started in the early days of Drupal 8. The API changes and deprecations in D9 are well-known and documented. Still, it’s never surprising to find that routine maintenance has taken a back seat to implement new functionality to handle new business requirements.  

Fortunately, the tools for upgrading Drupal also handle custom code, pointing out where the deprecations are, what changes need to be made, and sometimes even making the change itself using Upgrade Rector. Rector can’t fix every deprecation, but it can automatically make quick work of many of the items, freeing up developer time to tackle more difficult changes. This is also an opportunity for possible efficiency, as many custom module updates could be happening in parallel to the contributed module work.

Testing Your Upgrade
Once the code is all in place and all database updates have been run, it’s time to test your site for potential regressions. Most issues and edge cases can be caught when performing the upgrades themselves, which is one reason we suggest performing the module upgrade steps one-at-a-time. If you update one module at a time (or in small groups of modules of similar/shared functionality), obvious regressions and unexpected behavior can be caught early, reviewed, and fixed. If you have enough hands, fixing problematic code can be handled by one developer while another developer continues updating and testing other modules.

A smart strategy for getting ahead of these issues is to review the release notes for the modules you are updating before beginning the process. Most module maintainers will give guidance on any additional upgrade steps or considerations you should take before upgrading, saving you time and headaches later on in the process.

Once your upgrades are complete, you will want to perform a series of checks of your site's overall functionality to ensure you aren’t running into edge cases that your unique combination of code is surfacing. It’s crucial to check all editorial and administrative functions as well — the site may appear to be operating normally. Still, some unseen interaction could be wreaking havoc with your editors’ ability to update content.  Behavioral and visual regression testing can help accelerate this process. Still, sites with complex interactions and administrative needs should be tested in concert with the actual people who use these sites daily — they are often the people best equipped to detect if something is amiss.

In The End
As we said at the outset, the underlying architecture changes to Drupal 8 brought with them a promise for easier future updates and the ability for our sites to continue to grow and evolve through many major versions of Drupal. Every functioning Drupal site relies on modules from the wider Drupal community for essential functionality. This adds another layer of complexity and dependency on the maintainers of those modules. The community as a whole has been good about maintaining modules to the D9 standard, but it’s not unusual for a site to depend on a module that lags.  

Another critical factor in the upgrade conversation is whether your site has been maintained and kept up to date already. Many site owners struggle to keep their sites' code current, but sacrificing these regular updates makes sites vulnerable to security issues and makes the Drupal 9 upgrade process significantly more difficult. That being said, a well-maintained Drupal 8 site can deliver on the promise of easy upgrades to Drupal 9 and beyond.

Feb 23 2021
Feb 23

Join me for a walkthrough of the steps I had to perform to keep track of the Drupal 9 compatibility, upgrade underlying tools like Composer 2, BLT 12 and adapting contributed as well as custom modules to be compatible with Drupal 9.

Discover more about the service CMS our digital agency has to offer for you.

Recently, I had the opportunity to upgrade one of our projects from Drupal 8 to Drupal 9. In this blog post I would like to share some of the learnings I had while completing the upgrade. As you might expect, updating from Drupal 8 to Drupal 9 involves very little steps on the application layer. Most contributed modules are Drupal 9 ready and only a few exotic modules required me to work on a reroll of a Drupal 9 compatibility patch.

1. Keep track of Drupal 9 compatibility using Upgrade Status

To get started, I used Upgrade Status to analyse and keep track of the Drupal 9 readiness of the site.

It takes a while to scan all modules, but the UI is really helpful in identifying what is left for you to do. Follow these steps:

Run a full index from the command line:

drush us-a --all

Index individual projects:

drush us-a project_a project_b

You can access your upgrade report at yoursite.dev/admin/reports/upgrade-status.

2. Update to Composer 2

One fundamental step was to update to Composer 2. Refer to the documentation here. First we update composer itself:

composer selfupdate --2

If you have the composer version specified in your docker container, you might need to set it up there. In our case, we are using Lando, so let’s refer to the documentation on how to choose a composer version in Lando. In our lando.yml, we can explicitly specify the composer version as follows:

    composer_version: 2

Updating to composer 2 may result in errors depending on the packages that you are using. When you run composer install, you might get an error like the following:

Your requirements could not be resolved to an installable set of packages.

Problem 1
    - Root composer.json requires wikimedia/composer-merge-plugin 1.4.1 -> satisfiable by wikimedia/composer-merge-plugin[v1.4.1].
    - wikimedia/composer-merge-plugin v1.4.1 requires composer-plugin-api ^1.0 -> found composer-plugin-api[2.0.0] but it does not match your constraint.

The according issue was just merged recently, but during the upgrade composer 2 support was only available via a fork of the original repository. In such a case, you can include a forked repository using the following approach. Add the following to your composer.json:

    "require": {
        "wikimedia/composer-merge-plugin": "dev-feature/composer-v2 as 1.5.0"

    "repositories": {
        "wikimedia/composer-merge-plugin": {
            "type": "vcs",
            "url": "https://github.com/mcaskill/composer-merge-plugin"

3. Update to Drupal 9 and BLT 12 using Composer

We are using Acquia BLT to automate building and testing our Drupal sites.

Updating to Drupal 9 requires updating BLT to version 12. Make sure to follow the BLT 12 upgrade notes. Most importantly, some dependencies like PHPCS have been moved into their own plugins such as acquia/blt-phpcs. The following adaptations should be performed in composer.json:

    "require": {
        "acquia/blt": "^12",
        "cweagans/composer-patches": "~1.0",
        "drupal/core-composer-scaffold": "^9.1",
        "drupal/core-recommended": "^9.1",
    "require-dev": {
        "acquia/blt-behat": "^1.1",
        "acquia/blt-drupal-test": "^1.0",
        "acquia/blt-phpcs": "^1.0",
        "drupal/core-dev": "^9",

With the BLT update, some commands have changed. The BLT 11 versions of the commands, i.e.

blt validate:all
blt tests:all

Are now replaced with BLT 12 versions:

blt validate
blt tests

To perform the necessary updates, you need to run the following

composer update -w

Depending on your module dependencies, this might result in update errors. Follow the next sections for tips how to update your module dependencies for Drupal 9 compatibility.

4. Update contributed modules for Drupal 9

Because of the switch to support semantic versioning, modules might have changed their major release. For example devel has abandoned the 8.x-3.x series and uses now 4.x. You can always check the module page and verify that you find a version that requires Drupal ^9. Adapt the version in composer.json as follows:

    "require": {
        "drupal/devel": "^4.0",

5. Notes on applying patches for module compatibility

Since drupal.org now supports issue forks & merge requests based on GitLab, .diff patch files might not need be available anymore within issues. You can still apply them using the following approach. Add “.diff” at the end of the merge request url. The following example illustrates how a merge request-based patch can be applied to a module in composer.json:

    "extra": {
        "patches": {
            "drupal/config_ignore": {
                "Support for export filtering via Drush (https://www.drupal.org/i/2857247)": "https://git.drupalcode.org/project/config_ignore/-/merge_requests/3.diff"

When a module doesn’t state Drupal 9 as core_version_requirement or you need to have the composer.json to be added, you can use the following approach to include such a module using the composer workflow. You can use the module based on the version that is provided by the git branch that contains the fixes.

    "require": {
        "drupal/term_reference_tree": "dev-3123389-drupal-9-compatibility as 1.3-alpha3",
    "repositories": {
       "drupal/term_reference_tree": {
            "type": "git",
            "url": "https://git.drupalcode.org/issue/term_reference_tree-3123389.git"

6. Update your custom code for Drupal 9 using Rector

Drupal 9 compatibility issues should be outlined by the Upgrade Status module mentioned previously. We are using drupal-check to automatically detect issues in the code base and this threw significantly more errors after the upgrade as code style requirements were increased. I used Rector to apply some automatic code style fixes for our custom modules. Rector wasn’t able to do all of them, so plan for some additional work here.

7. Working in multiple Lando instances of the same site

Because the Drupal 9 upgrade branch has a lot of dependencies that are different from Drupal 8, switching back and forth between branches might be cumbersome. I decided to run two instances in parallel, so that I don’t have to do full lando rebuilds.

Check out the same repository twice in two separate folders. Add and adapt the following .lando.local.yml within your second instance, so that you can run lando separately for both folders.

name: project_name_2

Use the following configuration to adapt url mappings, so that they don’t overlap with the original project.

    - project_url_2.lndo.site
    - project_domain_2.lndo.site
    - admin.solr.solr_index.project_2.lndo.site:8983

        DRUSH_OPTIONS_URI: "https://project_2.lndo.site"

In case you need have specified a portforward for the database, you should define a custom port for your second project instance

    portforward: 32145

Now you will be able to use lando start and respective commands within both project folders and access both site instances independently.

8. Conclusions

Thanks to semantic versioning, updating from Drupal 8 to Drupal 9 involves very little steps on the application layer. Most contributed modules are Drupal 9 ready and only a few exotic modules required me to work on a reroll of a Drupal 9 compatibility patch.

As you can see from the topics being mentioned, the effort to update the infrastructure certainly accumulates with upgrading from Composer 1 to 2, PHPUnit and making sure that other toolchain components are up to date.

Thank you Karine Chor & Hendrik Grahl for providing inputs to this post.

Feb 23 2021
Feb 23

PHP 8 brings a host of new features improvements, functions, and deprecations to the language compared to PHP 7. Among all of these new features, the JIT compiler is the one sharing the limelight. However, other features like syntax changes are also to be taken into account as it is these features that will have a greater impact on the practitioners.

Since there are many important changes that we would like to talk about, so we have split this blog into several parts. This is part 1 of the series.

Issues with the old code:

With PHP 8 we should no longer consider that it will be backwards compatible as it has a pack of syntactical changes. The latest changes include:

  • The Magic quote legacy
  • The real type
  • Reflection export() methods
  • Unbinding $this from non-static closures
  • implode() parameter order mix
  • hebrevc() function
  • mb_strrpos() with encoding as 3rd argument
  • money_format() function
  • convert_cyr_string() function
  • allow_url_include in directive
  • restore_include_path() function

Let us take a look at the major PHP 8 features:

New functions


When trying to find out if one string is a part of another string, you will generally use str_pos() which makes use of the needle in a haystack concept. It returns an integer showing the first position at which you see the needle. When it is returning the position of a string you simply cannot check for whether or not strpos() discovered it; if it returns “0” (positions are zero-indexed and begin with 0 rather than 1), then the conditional is going to treat it as a false value, and indicating it wasn’t found. 

This means you will have to wrap it in a condition such as “strpos($haystack, $needle) !== false.” Where false indicates that it could not find the string’s position. 

To counter this, PHP 8 introduces str_contains(), which returns a simple boolean indicating if the needle is present in the haystack.

So instead of doing this:

if (strpos('string with lots of words', 'words') !== false) { /* … */ }

You would now do this:

if (str_contains('string with lots of words', 'words')) { /* … */ }

str_starts_with() and str_ends_with() functions:

These functions are now incorporated into the core:

str_starts_with('haystack', 'hay'); // true
str_ends_with('haystack', 'stack'); // true

fdiv() function

The new fdiv() function does something similar as the fmod() and intdiv() functions, which allows for division by 0. Instead of errors, you'll get INF, -INF or NAN, depending on the case

get_debug_type() function:

The function get_debug_type() returns the type of a variable. get_debug_type() returns more useful output for arrays, strings, anonymous classes and objects. Sure it sounds like gettype() but there are benefits of the later. 

For example: calling gettype() on a class \Foo\Bar would return object. Using get_debug_type() will return the class name.

get_resource_id() function:

Resources are special variables in PHP, referring to external resources. One example is a MySQL connection, another one a filehandle.

Each one of those resources gets assigned an ID, though previously the only way to know that id was to cast the resource to int:

$resourceId = (int) $resource;

PHP 8 adds the get_resource_id() functions, making this operation more obvious and type-safe:

$resourceId = get_resource_id($resource);

Named arguments

Named arguments allow you to pass in values to a function, by specifying the value name, so that you don't have to consider their order, and you can also skip optional parameters.

function foo(string $a, string $b, ?string $c = null, ?string $d = null)
{ /* … */ }

    b: 'value b',
    a: 'value a',
    d: 'value d',

Constructor Properties

This syntactic change allows us to create data transfer objects. Instead of specifying class properties and a constructor for them, PHP can now combine them into one.

So instead of doing this:

class Money 
    public Currency $currency;
    public int $amount;
    public function __construct(
        Currency $currency,
        int $amount,
    ) {
        $this->currency = $currency;
        $this->amount = $amount;

You can do this:

class Money 
    public function __construct(
        public Currency $currency,
        public int $amount,
    ) {}

Attributes allow us to declare meta-data for our functions, classes, properties and parameters. Attributes map to PHP class names (declared with an Attribute itself), and they can be fetched programmatically with PHP Reflection API.

class Foo {
    public function bar(): void {}

This allows us to easily declare attributes/annotations which previously required storing them in doc block elements and parsing the string to infer them. 

The null safe operator

The null coalescing operator is similar to the ternary operator but will behave like an isset on the left-hand operand instead of just using its boolean value. This makes this operator especially useful for arrays and assigning defaults when a variable is not set.

It is not fully reliable as it doesn't work on method calls. Instead, you need intermediate checks, or rely on optional helpers provided by some frameworks:

$startDate = $booking->getStartDate();

$dateAsString = $startDate ? $startDate->asDateTimeString() : null;

With the addition of the null safe operator, we can now have null coalescing-like behaviour on methods.

$dateAsString = $booking->getStartDate()?->asDateTimeString();

Union types

Union types are a collection of two or more types that indicate that either one of those can be used.

public function myfunction(Foo|Bar $input): int|float;

Note that void can never be part of a union type since it indicates "no return value at all". Furthermore, nullable unions can be written using |null, or by using the existing? notation:

public function myfunction(Foo|null $foo): void;
public function alsomyfunction(?Bar $bar): void;

JIT Compiler

PHP Opcache supports JIT. It's disabled by default, and if enabled, JIT compiles and caches native instructions. It does not make a noticeable difference in IO-bound web applications but provides a performance boost for CPU-heavy applications.

# Enabling JIT in php.ini
Feb 23 2021
Feb 23

Today I needed to load some Drupal user data via a profile2 profile. When looking into this, most resources that I found suggest using this approach and calling the profile2_load_by_user() function directly and passing in the user object:

$account = user_load(...);

$accountWrapper = new EntityDrupalWrapper('user', $account);
// or `$accountWrapper = entity_metadata_wrapper('user', $account);

$profile = profile2_load_by_user($account->value());
// or `$profile = profile2_load_by_user($account);`

$profileWrapper = new EntityDrupalWrapper('profile2', $profile);

$firstName = $profileWrapper->get('field_first_name')->value();

This though requires a few steps, and as I'm a fan of object-orientated code and Entity Metadata Wrappers, I wanted to find a cleaner solution.

This is my preferred method that uses method chaining. It returns the same value, is less code, and in my opinion, it's cleaner and easier to read.

$firstName = $accountWrapper
Feb 23 2021
Feb 23

The framework contract award highlights Agiledrop’s commitment to utilizing the power of open source software for the benefit of Open Data 

Capgemini Invent just announced that the Publications Office of the European Union has awarded them a six-year framework contract to continue the development of the European Data Portal and related consultancy and research work into a new service: Data.Europa.EU.

We’re proud to announce that Agiledrop is part of the consortium led by Capgemini Invent that will deliver the project. It will combine the two European data portals, and their efforts towards facilitating open data publication and re-use in Europe. 

Capgemini Invent, the digital innovation, consulting and transformation brand of the Capgemini Group, will lead the six-year engagement, coordinating the project consortium.  

The new Data.Europa.EU, to be launched in spring of 2021, will integrate the pre-existing European Data Portal and European Union Open Data Portal into a single, coherent core component of the public sector data infrastructure that has been set up by the European Union, its institutions and Member States. Like its predecessors, it will offer three key pillars: 

  • Access to public data resources across Europe via the single point of contact, which is the portal itself, offering over 1 million datasets across 36 countries, 6 EU institutions and 79 other EU bodies and agencies;
  • Support to EU institutions and Member States via the set-up of communities of practice of national open data portal and policy owners, training and consultancy to improve, sustain and document data publishing practices;
  • Evidence of the socio-economic benefits of re-using public data resources and various stimuli to foster and showcase uptake and value creation. 

The goal of Data.Europa.EU is to leverage this three-pillar approach to support the creation and improvement of processes, products and services re-using public data resources to create economical, societal, political, and environmental impact. The more this impact is documented and understood, the further access, discoverability and data uptake will increase.

The latest Capgemini Invent study published in 2020 as part of the European Data Portal estimated a value between 199 (baseline scenario) and 334 (high growth scenario) billion EUR in market size for open data in Europe in 2025.

“We are honored to have been invited to join this consortium by Capgemini Invent and to get the opportunity to participate in a project as impactful as Open Data. Having been working in the open-source world for over a decade now, we’re keenly aware of the importance of freely available information, and this is why we’re particularly excited about being able to contribute to the Open Data movement”, says Marko Bahor, Managing Director of Agiledrop.

Beyond delivering improvements to the pre-existing two services, the agreement will continue including the measurement of open data maturity in Europe and the socio-economic impact of open and shared data in Europe in light of the current and planned developments.

Assistance will be given equally to European countries where specific attention should be paid to improving the discoverability of data and improving data portals to foster re-use of public data resources within each respective country and community.

Capgemini Invent leads the project’s Consortium, in partnership with INTRASOFT International, including Fraunhofer FOKUS, OMMAX, con terra, 52°North, Agiledrop, Timelex, the Lisbon Council, Universidad Politécnica de Madrid, and Capgemini’s global design leader Idean and the Cybersecurity Services.

About Agiledrop

As long-time open-source advocates, Agiledrop specializes in the Drupal CMS and is very active in its community through code contributions, event organizations and sponsorships, knowledge sharing, and more.

We provide high-end digital experiences based on Drupal in combination with highly capable front-end technologies, e-commerce frameworks and powerful back-end technologies for government and non-government organizations, agencies, and media and publishing firms from Europe and North America. 

Headquartered in Ljubljana, Slovenia, Agiledrop’s team boasts over 65 members working from four offices in Slovenia, the majority of them being engineers and developers. Our three founders all come from technical backgrounds, and so technology proficiency and an innovative, solution-oriented outlook are integral factors of Agiledrop’s work.

We are one of Slovenia’s leading and fastest-growing software development companies and we’re also very active in the local development community, spreading the word about Drupal and open-source software to new generations of development enthusiasts.

One of our main goals is to facilitate the entry into the world of programming for aspiring developers by providing local offices all across the country and elaborate onboarding programs for a wide range of technologies. 

Key to Agiledrop’s success is our strong company culture of collaboration and knowledge sharing. Team members are encouraged to support and learn from each other, which results in a cross-pollination of experience and a strong team spirit.

Throughout the years, our team has collaborated and delivered multiple projects for organizations such as UNESCO and SAGE Publications.

For Agiledrop, being part of this consortium is the culmination of our long-standing commitment to open source and a true testament to our high degree of expertise and professionalism. 


Ales Kohek, Client Advisor

Feb 23 2021
Feb 23

Project Management is easy. It is like riding a bike. Except the bike is on fire. You are on fire. Everything else is also on fire.

A whole set of easy-looking tasks with enormous responsibilities to take care of - Yes you guessed it right, we are talking about "Project Management" - a task which seems easy to everybody else but to the one who is doing it. While the main intention of project management is to complete the project with less struggle and to deliver it within the budget and on time, not everybody has an idea about how much planning, strategizing, and communication it involves.

The other day I was curious about what Drupal.org has to say on project management. Nothing less than a bible for all Drupal developers, I was sure to find something of my interest for Drupal project management, & I was not surprised to find a set of Drupal Project Management Tools (a suite containing several components, structured as Drupal modules) But what left me wondering was, are these tools and project modules enough to achieve a Drupal project's goal. As a Drupal project manager, tools are just not enough to bring the scope of a Drupal project to completion. From Drupal website design to development and maintenance, there is a lot more to Drupal Project Management and it is certainly not one of those tools.

Drupal Project Management - What no one is talking about


Irrespective of your approach or methodology and the type of project to be handled, Drupal requires preparation. From objectives or goals to the time frames, you need to be quite clear with what the client requires and this is possible only if you and your client are on the same page. Inputs from your team who are experts in Drupal will be your trump card in the process of planning and preparation. This will not only enable you to come up with better time frames, but you would also be able to know the prerequisites, interdependencies, and work conditions.

Never fail to miss critical inputs irrespective of how small they are to the Drupal project. You might end up missing something valuable.

Communication - Keep it Open

Always keep the communication lines open. It might be from your team, the client, or even the end-user, every input is important. Though the inputs might not be from a Drupal expert, it might still be something that you could have missed or you don't even have a clue about. This type of open communication makes managing your Drupal project easy as the success entirely depends on this. Good communication allows you to discuss challenges, roadblocks, and risks associated with your Drupal project, which in turn helps you focus better on your goal.

Time Management

The bad news is time flies. The good news is you are the pilot - Michael Altahuler

Time management is the most important factor of a Drupal project. But before you even jump into the pit and start juggling multiple tasks to ensure you manage everyone else's time, you better be good at managing your own time! And the good news in a Drupal project is that everything can be broken into smaller tasks for you and your team. Irrespective of its size, breaking down your project into smaller tasks helps your team to visualize and focus in a better manner. Keep it simple and keep it real.

Take Feedbacks Seriously

Never be reluctant to receive feedback from anybody related to your Drupal Project. Feedbacks are the step to improvement & we all need people who can give us such feedback. Feedback helps you realize your mistakes and learn ways to tackle them going further. Such constructive criticism helps in stabilizing the project before it goes off the deck completely. What is better than staying one step ahead from yesterday and performing in a superior way?

Transparency: Key to Success

You need to ensure that there is a high level of transparency between your client, the core team, and the extended project team. One way of doing this is by keeping them proactively in a loop. This corroborates trust-building and open communication between the team members. For example, if there is a delay in your Drupal project, let the client know about it! Never end up in a place where they come looking for you.

Add some Spice

Coming together is a beginning, keeping together is progress, working together is a success. - Henry Ford

Teamwork is by far the best possible way to handle any hassles in your Drupal project. Bond with your team, take a day or two out from the busy schedule to do something fun. Research has proved that such activities help people work more efficiently on a project. As a matter of fact, Drupal development companies around the world conduct Drupal cons and Drupal meetings to create a bonding between developers from around the globe.

Know Your Tools

While all the above-mentioned points play a major role in Project Management, you still need to know your tools/modules in order to successfully deliver your project.

The most popular tools in the market are the ones that help you break down your project into various tasks and sub-tasks. Most of the tools provide additional capabilities or features required for better project management.

Some of these tools include Jira, Trello, Redmine, Zoho, etc.

Drupal offers quite a few modules that can play a major role in assisting Project Management. Though Drupal 8 does not quite yet provide a suite of tools, the list includes some good modules.

Feb 22 2021
Feb 22

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

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

Feb 22 2021
Feb 22

Imageshop is a Cloud based Digital Asset Management system. It lets you store all your company’s images, videos and digital files easily and securely in an online image bank.

What can Imageshop do?

Imageshop is a secure image bank, where you can store and organise your images, videos, documents and graphics, making them easy to find for anyone you choose to grant access.

Drag & drop uploading and ultra-efficient image tagging means that they are always available when and wherever they are needed, in the right format and highest quality.

Banner Imageshop

About the integration

The module itself has been built to support Drupal out of the box. The main features are:

  • Uses Imageshop interface for searching, cropping and selecting media.
  • Support for image fields out of the box.
  • Support for Media library out of the box.
  • Support for CKEditor (through Media library) out of the box.
  • Easy installation / configuration.

More information about the Imageshop product can be found here.

You can download the module from drupal.org here.

The module has been made in cooperation with Screentek, the company behind the Imageshop product. We feel that Drupal needs more good alternatives for media handling and this could just be the right option for you. Feel free to contact Imageshop and have a talk to them about Imageshop and how it can help you handle your media files across your company, channels and systems.

Feb 22 2021
Feb 22

Many organizations have done Drupal vs. some other CMS, but I think my hands-on expertise with Drupal might offer some unique insight when learning a new CMS. Migrating to the DXP's new CMS will consume a lot of my time. As a result, I’ll need to limit my involvement in the Drupal community,

attend fewer virtual conferences, and limit my focus to the Webform module's maintenance.

Feb 22 2021
Feb 22

If you’re part of the Drupal community, you know that contribution is a great way to expand your skills and hands-on experience, make connections in the community, and make Drupal better.

Sometimes the barrier to making code contributions feels high. But in fact, non-code contributions are equally important. If you’re passionate about marketing and communications, and looking to contribute through writing, design, translation, or leading and managing marketing efforts, the Promote Drupal Initiative is recruiting for several positions.

The Promote Drupal initiative exists to:

  • Create content and marketing materials targeted to decision-makers who are considering adopting Drupal

  • Use events to drive the expansion of Drupal adoption and the Drupal community

  • Create social media content and campaigns to position Drupal as a thought leader

At the moment, we’re recruiting for several positions, including DrupalCon

  • DrupalCon Marketing and Outreach Committee Member - You want to support the success of DrupalCon through outreach to both potential and returning attendees.    

  • 20th Birthday Committee Member - You want to highlight the 20 years of achievements and success of the Drupal project and community throughout 2021

  • Drupal Ambassador - You are looking for opportunities to promote Drupal in other communities and at conferences outside the bubble.    

  • Drupal Initiative Marketing Lead - You are passionate about Drupal’s innovation and want to highlight the work of the project initiatives.    

  • Drupal Social Media Team Member - You want to improve Drupal’s social media presence on an on-going basis.    

  • Drupal Evaluator Marketing Team Member - You want to improve Drupal’s onboarding experience for evaluators.    

You can review the details of these opportunities and fill in our recruitment form to help match you with the right position.

The wide-ranging benefits of contributing to Promote Drupal include:

  • Official contribution credits

  • Expansion of marketing skills and open source audience awareness to leverage in other marketing positions

  • Position you and your organization as a Drupal and open source thought leader at the center of one of the world’s largest and most-successful open source projects

  • Expansion of your network of open source and technology leaders in the Drupal community

  • Hands-on experience marketing virtual conferences and insight into attendee personas

  • Joy of creating positive community engagement

  • Enjoy recognition for your service (exposure for both your personal brand and your company/organization)

If you’re interested in getting involved, fill in our recruitment form to help match you with the right position.

Contact me on the #promoteDrupal channel on Drupal Slack or directly message me at @pixelite.

Feb 22 2021
Feb 22

Today, everything is being done online. If you are not online, you just might be considered antiquated. From social media to e-commerce, every aspect of the online world is, thus, improving by leaps and bounds. We are benefiting from these advancements, so no complaints there. 

All the advantages that we are able to reap from the online world, from the websites we so eagerly use, are dependent on a particular system. This is the system that they are built on, the more versatile it is, the better the website’s versatility is going to be. And this is exactly what we expect from our web experiences and the system provides almost every time. 

Drupal and Contentful logos can be seen together.

It is the Content Management Software, I am raving about. There are plenty available for the developers to choose from. However, we’ll be talking about two of them in particular, comparing them actually as they are strangely a bit alike and a bit different too. These are Drupal and Contentful. So, let’s begin.


Drupal   Contentful Market Share  Founded in 2000, Drupal has a substantial market presence, with a million sites using it  Launched in 2013, Contentful’s market share is impressive too Decoupled Architecture  Drupal offers efficient decoupling with an API-first infrastructure  Decoupling features are similar to Drupal

Performance and Scalability 

If optimised properly, Drupal provides impeccable performance and limitless scalability  Contentful offers great performance too, however, it poses technical limitations Security  Quite reliable and the most secure open source CMS with a proactive community constantly working on issues  Good, however, bugs can be a common occurrence Content Workflow  The content modelling and editorial experience is wholesome for the authors, Views system being the highlight Contentful works differently, but offers an equally wholesome experience to content authors Pricing  Free to install and configure, there can be other costs depending on the scale of the project  Not free, being a proprietary software, has a standard monthly cost to be paid Third-party Integrations  Integrates seamlessly with third party tools and application  Matches Drupal in this regard Community  The Drupal community is over a million and growing  Contentful does not have such a wide community, but its Community Plan is a step towards it Migrations  Difficult in the past, but a breeze with the launch of Drupal 9 The CLI tool helps in migrations, making them automated Responsiveness  Designs, themes, images and tables, everything is mobile-friendly with Drupal  The responsiveness to mobile devices is quite impressive as well. Multilingual  Translates content, configurations and interfaces in over 90 languages Offers translation services similar to Drupal, but in 30 languages Accessibility  Drupal follows WCAG 2.0 and ATAG 2.0 guidelines for accessibility  Contentful follows WCAG 2.1 guidelines SEO  Drupal has a module for every SEO need, be it keywords or links Contentful also supplements SEO needs, but it is dependent on the creation of dedicated content types

Understanding the CMSs and their abilities 

Drupal, leading as an open source  

Drupal has been around for two decades. The 15th of January 2021, marked its 20th birthday, being around for this long, it has mastered all the nuances of content management and digital experiences. It is a digital experience management system that has the potential of driving web content onto multiple platforms to provide personalised experiences that would allow your users to connect with your organisation.

The kind of content management tools Drupal comes with are not only sophisticated, but also stimulate perpetual innovation. The great thing about Drupal isn’t its numerous modules, themes and templates, even though they are great too, but it is the fact that Drupal is open source and accessible to far more people than a proprietary software would be. 

A line graph is showing Drupal usage statistics. Source: BuiltWithA table is showing the number of sites using Drupal at different points of time.Source: Drupal.org

Contentful, not the conventional CMS

Contentful was founded in 2013 by Sascha Konietzke and Paolo Negri in Berlin. It hasn’t been around as long as Drupal, but it isn’t the new kid on the block as well. In simple terms, Contentful is a content infrastructure, a platform that would allow you to create, manage and distribute content to any platform. 

This pretty much sums up the definition of a CMS. So, why did I say Contentful was not conventional?

Other CMSs, Drupal included, come with out-of-the-box content models that you have to choose from. However, with Contentful you have the liberty to create your own content models and you get to decide which content you want to manage. The RESTful APIs provide you the ability to deliver your content across multiple platforms, including websites, mobile apps, be it iOS, Android or Windows. From Google Glass to infinity, it is your pick. You can utilise the potential of Contentful on your own or a team. The uncluttered UI makes assigning custom roles and permissions a breeze. Contentful is a modern content platform that paves the way for faster launches.

A bar graph shows the market share of Contentful in different countries since it was founded.Source: BuiltWith 

Drupal vs Contentful: Putting them under the microscope

How efficient is decoupling? 

Usually a CMS is equipped to manage content in the backend and push it to the front-end templates that essentially provide the desired user experience. This meant that a CMS served as an all-in-one system that provided for all the development needs. However, that is changing with decoupling, where-in the frontend and the backend are two different entities, independent of each other.


With Drupal, you can decouple the frontend from the backend where you want to, making the content become reusable chunks that are independent of the presentation layer and always prepared for delivery to as many sites and apps.

When you decouple, you get the benefit of Drupal’s presentation-neutral content. The REST API, GraphQL, JSON:API and all the different alternatives that you get in decoupled Drupal ecosystem to build a front-end as you want, with any technology you want, is amazing

These are a few of the tools and frameworks that decoupling Drupal would allow you to take up and build interactive sites and apps. You can get the complete insights on what frontend technology to use with decoupled Drupal architecture here.

You also get the opportunity to future-proof your project by refreshing designs without re-implementing the entirety of the CMS.


Since decoupling is dependent on one principle, that is the separation of the frontend from the backend, I wouldn’t say that Contentful is all that different from Drupal in this regard. 

  • It is an API-first content infrastructure.
  • It makes front-end layers less rigid and more versatile, with a number of tools and frameworks.
  • It acts as a content repository delivering your content.

All of this is achievable through Drupal as well. What is different are two things;

  • It has its own Contentful API, delivered through a CDN, while Drupal operates on RESTful APIs, JSON and GraphQL. 
  • Next is the fact that Contentful uses an approach known as JAMstack, JavaScript, APIs and Markup; while decoupled Drupal uses MERN, MangoDB, Express, React, NodeJS.

There are also chances of API requests turning wrong. When that happens, the Contentful server will automatically create an error, with an appropriate HTTP status code in the header along with a JSON response in the body. 

How reliable is the performance and scalability?


Drupal comes equipped to handle any and all performance scalability needs an organisation might have. However, it would only be able to do that if you optimise it properly, that is a contingent for scalability. 

For instance, sites operating on Drupal 8 and later versions come with tools that will allow you to scale on the frontend and the backend. 

Content Delivery Network 
Server Scaling 
Site Monitoring tools 

All account for a better performing Drupal site that is always ready to accommodate for traffic spikes and content growth making your site always available. To know more, read these comprehensive guides to Drupal performance optimisation techniques and scalability provisions.


Contentful was made to scale to compensate for your site’s growth much like Drupal. It has taken into consideration all of the dimensions of growth that a site or app may face and categorised them into seven categories.

It is prepared to handle 

  • heightened levels of traffic, data and usage; 
  • the addition of more projects, products and channels; 
  • an increased level of complexity and sophistication in use cases;
  • an expansion in global markets; 
  • an elevated number of internal users; 
  • an enhanced pace of development; 
  • and cater for an advanced level of security for business perpetuity.

At the end of it all, Contentful comes with certain technical limits upon the infrastructure. These are enforced to mandate a lack of interruption on the shared-service infrastructure functions, however, they are limits all the same. Reading them before using Contentful would be wise.

How sufficient is the security?


In terms of security, Drupal is on the higher level of sufficiency, if not the best. The kind of features it comes equipped with make it a frontrunner. A Sucuri’s report even showed that Drupal is amongst the most secure open source CMS out there.

Drupal security is very competent because of; 

  • Its expert security team, adhering to the guidelines set by Open Web Application Security Project; 
  • Its community, being proactive and analysing any security issues; 
  • Its implementation of a secure access through strong passwords that are even encrypted;
  • Its secure codebase; 
  • Its control over the most trivial user access; 
  • Its encrypted database; 
  • Its APIs, ensuring validation of data and preventing malicious entry. 


Contentful almost competes with Drupal in terms of security, I have used the term almost because there is a catch. 

Talking about the positives, Contentful’s security infrastructure is based on Amazon Web Services, making it quite impressive. 

  • It has ISO 27001 compliant data centres; 
  • It comes with data storage, that is encrypted at rest along with an encryption of all forms of communication in transit; 
  • It comes handy with a web application firewall, brute force prevention, data retention policy, threat detection and two-factor authentication along with security audits. 

Despite all of these measures, Contentful isn’t totally secure from hacks. There are bugs and fixes that are often highlighted, and with a large codebase like that of Contentful, it is almost understandable. Therefore, its Bug Bounty Program was launched to reward hackers for finding these issues and vulnerabilities. 

How streamlined is the content workflow?

For a content management system, the content is the most essential part, its creation and management to be streamlined for the CMS to be successful.


In terms of content modelling and the editorial experience, Drupal’s abilities are more than impressive. 

  • Drupal offers numerous field types like boolean, comments, date, email, links, timestamp and numbers, inclusive of decimals, integers and floats. 
  • Drupal’s Field Group module enables you to custom group fields, allowing easy customisations for your editors.
  • The Views system helps in creating an experience that has enhanced uniqueness because it gives you the power to add any field to the view, pull relationships as well as executing many operations at once.
  • Then there is the Content Moderation module along with the Workflows module that can define an innumerable count of arbitrary publishing states and workflows. You could have a largely diverse team, and still be able to map out your preferred workflow before implementing it.

Majority of these are unfound in Contentful, however, it does have its own share of tools accounting for a streamlined workflow.


Contentful doesn’t really fall behind Drupal in content workflow by a substantial margin. Its abilities are almost as good as that of Drupal’s. Contentful’s default editorial experience is extremely easy to understand and use. However, when you decouple it, say using React, you would have to part with the default features. 

  • Contentful offers field types as many as Drupal’s, however, it doesn’t highlight specific format types like email and links and physical addresses. But then it has a JSON object, which Drupal is missing out on. 
  • Contentful uses widgets to define each field type. 
  • Default content views make viewing and filtering content very easy. 
  • Contentful also has easy field restoration with a referencing experience for searching and creation of entities, both of which aren’t found in Drupal.

Contentful’s content modeling and editorial workflow are quite different from Drupal, but effective all the same.

How pocket friendly is the pricing?


Being an open source software, Drupal is free to install and configure. If you have the right human resources, it is absolutely free. However, if you don’t, then it is going to cost you. And these costs depend on the kind of site you are building.

Costs would be dependent on; 

  • The size of the site you are aiming for, the bigger the project, the higher the cost; 
  • The kind of complexity it is going to mandate in relation to workflows, integration and multilingual sites;
  • The timeline and the team you would be relying on; a bigger project would need additional team members like project managers and quality assurance personnel;
  • Then there is the question of the Drupal agency to do all of this for you, if you cannot, which is going to cost you.


Contentful isn’t associated with being free like Drupal. It has different pricing models for different needs of developers and organisations.

  • If you are looking to build a personal site as an individual developer, Contentful would be free for you.
  • If you are looking to power a modern stack site or two with enhanced authoring roles and technical support, you could take up a free trial and then subscribe to Contentful starting at $489 per month.
  • And if you are looking to build hundreds of digital experiences while scaling your content platform, you can get a custom plan from Contentful for your specific needs.

I wouldn’t say Contentful is too heavy on the pocket as is, but including the cost of hiring developers and staff and it would become more expensive than Drupal. 

How effective are the third party integrations?


Drupal is renowned for its abilities to integrate itself with third party tools and applications. Be it analytic platforms, e-commerce verticals, ERP systems or email and marketing systems, Drupal works well with all of them.

Its API-first focus, like Contentful, makes it essential for finding connections to make content reach to other sites and apps. And third-party integrations are just the way to do that.


Contentful comes with UI extensions that are able to integrate themselves with external APIs and third party data. From e-commerce sites to YouTube to local translators, Contentful can merge itself with a number of tools. 

There is also the fact that Contentful has successfully integrated itself with Gatsby and Metalsmith as its official projects proving its abilities further in this regard. Drupal and Contentful aren’t all that different in terms of third party integrations.

How helpful is the community?


Drupal is a large platform, operational all over the globe. This means that its community is also spread throughout the world. And it has, the Drupal community has over a million users in as many as 230 countries, isn’t that an achievement in itself?

People from different backgrounds, different skill sets and different perspectives come together to improve Drupal and enhance its community ties. Perks of contributing to open source are immense and this guide to Drupal contribution will shed more light on the advantages that you get.


Contentful does not have a community as wide as Drupal’s. However, it is making strides towards building one. It has devised and launched a Community Plan that would empower individual developers to build as they like, without incurring any costs as opposed to its 14-day free trial. 

The community also provides technical support through its slack channel, where thousands of developers are active and ready to help.

How seamless are the migrations?

Upgrades and migrations are inevitable when it comes to web development. Usually developers do not look forward to the hassle they bring along. So, do Drupal and Contentful bring on the hassle or eliminate it?


With Drupal 9 having launched last year and Drupal 10 on the horizon, there is a lot of anxiety amongst the Drupal 7 and 8 using folks. The primary reason for the anxiety being the looming EOL dates and the heavy-duty upgrades. 

However, the anxiety isn’t necessary at all.

Talking about the switch from Drupal 8 to 9, as per the makers, this upgrade is considered the easiest in almost a decade. By following a four-step guide, you can have your current site ready for the functionality and better security standards of Drupal 9 by using the Upgrade Status

As for the upgrade from Drupal 7 to 9, easy is not a term that would be used to describe it. The migration will overwhelm you, but all the advantages of Drupal 9 will make it seem worth it. Developers can make the upgrade themselves with the help of Upgrade Status and Drupal Module Upgrader. These help in letting you know whether your themes and modules are competent for Drupal 8/9 and converting your custom code respectively. Explore the ultimate guide to Drupal 9, all the burning questions that you may have about Drupal 9 and the must-have modules to start your Drupal 9 website to know more


Contentful has a tool that helps in the migration process, making it rather easy by using CLI. The Contentful migration CLI helps developers to script changes to the content model with a fine-tuning that wasn’t possible before. Using continuous integration services along with it will also help you in validating the deployment before it hits production. 

Installation and configuration of the Contentful CLI; 
Writing of your own migration script; 
And applying the migration with CLI, is all you need to do to make it happen. 

The result would be getting documented and versioned content types along with automated and predictable migrations that can be repeated in other environments.

How versatile is the responsiveness?


In terms of responsiveness to devices, Drupal is a pro. Providing an optimal visitor experience is one such feature of Drupal that makes it worth everyone’s while and responsiveness is its core. 

Drupal offers; 

  • Responsive designs;
  • Responsive themes; 
  • Responsive images and breakpoints; 
  • And even responsive tables; 

All of these enable Drupal sites and apps to identify the width and height of any device and adapt itself accordingly, making it mobile and user-friendly at the same time. 


Contentful is often referred to as a mobile content management system, meaning it was built keeping in mind the fact that developers and authors would want to publish content on the go through a smartphone or tablet and Contentful makes that work seamlessly.

It optimises mobile performance with three features; 

  • Selective sync;
  • Image auto-compression; 
  • And providing support for offline persistence.

This makes it as good as Drupal in responsiveness.

How fluent are the multilingual sites?


Another one of the benefits of Drupal is the fact that it caters to a multilingual audience very well. With inbuilt language handling abilities, it provides localised digital experiences that are both fast and easy to get.

  • It can translate content, configurations and interfaces. 
  • It can be run in 90+ languages.
  • It also provides an overview screen for translators, making their work easier.  

Access this guide to Drupal’s multilingual capabilities to know more.


Much like Drupal, translations in Contentful also take place in-house. It has a six-step process to make translations happen, which isn’t very complex or rigid. You can add and delete the locales (languages) from the settings as and when you wish, provided you have administrative access. 

The only aspect that pales Contentful in front of Drupal is the number of languages supported. Sadly, Contentful only offers translations in 30 languages. 

Contentful uses locales to define the varying languages a site might use. This allows you to define localisations of content easily enough. However, when you have to work with multiple locales, it can become confusing for your authors. That being said it is an insurmountable task, organisations have worked with as many as 30 locales at once. 

How universal is the accessibility?


Drupal follows the WCAG 2.0 and ATAG 2.0 guidelines to make its projects accessible to people with disabilities. 

Features for screen readers are a major part of it, with the inclusion of drag and drop functionality, colour contrast, image handling, form labeling and exclusion of null tags, to name a few. 

Drupal accessibility also transcends from the users to the developers, with themes, modules and community sites making an inclusive developer environment. 


Contentful also offers similar features and functionalities for accessibility like Drupal. The only major difference is that it adheres to WCAG 2.1 guidelines, which are more recent. 

Building sites that are easy to adapt, navigate, have distinguishable elements and are keyboard accessible are some of Contentful’s accessibility principles. It also implements automated accessibility testing to check whether the project is compliant with the set standards or not. 

How friendly is the SEO?


Drupal has powerful SEO tools that can enhance your site’s visibility by a landslide. When I say tools, I mean modules, the use of which can make you a pro at SEO. 

Mastering the keyword game through Real-time SEO for Drupal; 
Mastering the linking game through Linkit module
Mastering the duplicacy predicament through Redirect module

Drupal can and will keep you at your A-game in terms of SEO. The Ultimate Drupal SEO Guide will help you become acquainted with all the right SEO modules. 


When you use Contentful as is, there aren’t as many SEO privileges to enjoy. For instance, a media page would only have a title and a description. That’s not to say that Contentful doesn’t provide for SEO. 

It does, however, for that you would need to provide more information. This means you would need to create a dedicated content type for the media files you will have. 

Once that is done, you Contentful will enable you to; 

  • Take command of the SEO; 
  • Put in the right tags (which are only used for organising and searching content, sadly); 
  • And add alt text for your accessibility. 

The change in the content type helps you to create whatever suits your needs and preferences, which is a good thing. There is one thing to remember that the extended metadata for these media files would be stored in the content tab, rather than the media tab, where the actual file would be located. This can be a little confusing. 

The bottom line

In the end, I wouldn’t say one is definitely better than the other. There are aspects wherein Drupal prevails over Contentful, like security and performance; however, there were also areas, wherein Contentful gave Drupal a run for its money, like accessibility and responsiveness. I’d say that both are great at what they do and saying one is entirely better than the other wouldn’t be appropriate. So, I’ll leave it to you. 

Feb 22 2021
Feb 22

If you manage a Drupal site that has constantly changing content, you may have concerns about the size and contents of the /sites/default/files/ directory. For most Drupal site maintainers, this can often be a source of anxiety, not ever really knowing what it contains and what, if any of the uploaded files are obsolete. 

Any method you utilize to solve potential issues is going to be tedious, but the Audit Files module can help make it a little less painful. This module provides several reports (generated using some user-configurable parameters) that can help you wrangle things:

Audit files module screenshot.

As an example, the "Not in database" report will show you a list of files that exist in /sites/default/files/, but are not managed (have not been uploaded via a file field) in Drupal. This list might include files directly uploaded via SFTP or some other method, so be careful what you delete, but it will definitely give you a head-start on identifying files that might be safely deleted.

If you feel that your site's files directory is a bit out-of-control, this module may be a good first step in cleaning things up.

Feb 22 2021
Feb 22

Through our decade long history in building nonprofit digital experience we've identified a unique set of challenges that almost all nonprofits and NGOs suffer from - and how Drupal was uniquely and strategically positioned as the ideal technology to transform those weaknesses into strengths.

Let's take a look at those challenges and how choosing the right CMS features address them:


10 Must-Have Features in a Nonprofit Website CMS

1. Tailored Flexibility

Challenge: Your current CMS limits your team's ability to create dynamic digital experiences for your website visitors.

First, filter the list of CMS options you are looking into by listing your strategic objectives and aligning them with the technical capabilities that will support your nonprofit's ability to deliver results.

Typically, a nonprofit's digital strategy objectives include:

  • Community-centric digital presence
  • Scalable expansion
  • Enhanced outreach
  • Easy, simple, yet rich UX/UI
  • Mobile responsiveness
  • Secure donations
  • GDPR, W3A, and WCAG 2.0 compliance
  • Safe data migration

For nonprofits who need a site builder with maximum flexibility tailored to the needs of complex nonprofit digital experiences, Varbase (Drupal 9 CMS) is an ideal choice as it comes with hundreds of pre-built modules, customizable themes, and multiple content types.

Need assistance in aligning your business and technical requirements? Book a call for with our team of consultants for a free consultation today!

2. Enterprise Security Measures

Challenge: Threats are evolving and your nonprofit lacks the resources to hire full-time DevOps to manage, update, and upgrade your IT infrastructure security.

If you cannot demonstrate your ability to keep your website visitors information and transactions secure - your nonprofit's digital presence is practically non-existent.

Cybersecurity threats are evolving all the time and it only makes sense that the CMS you choose is supported by enterprise-grade security modules constantly updated by the CMS vendor.

Make sure to ask potential vendors and service providers to demonstrate their security credentials.

Ask questions such as:

  • How often do you upgrade security modules?
  • How do you monitor projects built on your CMS?
  • What is the response rate when it comes to risk assessment and management?
  • Do you have in-house DevOps?
  • Are your information security management systems certified by ISO? Learn more about ISMS ISO certification.

3. User-Friendly Backend

Challenge: You have a diverse staff with varying to non-existent levels of technical expertise.

Your nonprofit organization is comprised of non dedicated part-timers and volunteers with diverse backgrounds - but this shouldn't hinder your ability to deliver results efficiently.

Everyone involved in content publishing, site building, and marketing should be able to use your website CMS in full collaboration with the rest of the organization based on user-specific roles regardless of their technical knowledge or first language.

Be sure to select a CMS that is supported by:

  • A multilingual backend for all users
  • Help and "How-to" guides
  • Technical documentation
  • Built-in support features in the CMS for each user role and activities
  • 24/7 support for complex technical issues
  • Open-source - wider community of developers to provide solutions if needed

For example, global nonprofits that employ diverse teams from around the world such as MSF, ICARDA, and UNHCR needed a multilingual Drupal 9 CMS like Varbase to build complex, custom, and engaging digital experiences.

4. Multisite Functionalities

Challenge: Lack of funds to build localized microsites or websites for your nonprofit's global missions and initiatives.

Rather than struggle with different standards and skill sets required to manage different websites; enterprises have realized that Drupal's multi-site functionality enables them to have a focused IT team with fewer burdens and distractions due to the fact that all websites under their umbrella are built using a single CMS installation and framework.

The same benefits extend to marketing departments who will find that publishing content from the same CMS is easier and more efficient.

Instead of spending money and hiring teams to manage expensive numerous website development projects - invest in a CMS that provides multisite functionalities:

  • Centralized management: Build multiple sites and domains managed by the same CMS and team.
  • Faster to market: Launch those projects quicker because they share all critical modules, themes, and branding of your nonprofit.
  • Efficient upgrades: All websites will be upgraded and updated through the same CMS.
  • Lower total cost of ownership: Save resources hiring teams to build and manage new digital projects.

If you are a nonprofit with missions across various regions around the world - localizing your digital experience and messaging to those locations and beneficiaries will be a massive boon to your digital strategy.

Identify the Right Multisite Solution Architecture for Your Enterprise

5. Mission Critical Integrations

Challenge: Not all CMSs can integrate with tools and tech you currently rely on (or will need to in the future).

The modern-day digital experience relies on an interconnected web of channels, systems, tools, and technologies that support your nonprofit's digital experience.

From built-in performance dashboards to custom complex integrations - those technologies must be integrated into your website and each serves a specific purpose.

Such as:

  • Analytics and reporting (i.e. Google Marketing Studio)
  • Omni-channel marketing automation (i.e. Campaign Studio)
  • Email marketing (i.e. MailChimp)
  • Social media tracking (i.e. Facebook Pixel)
  • Engagement (i.e. Disqus)
  • Customer relationship management (CRMs such as Eloqua and Hubspot)
  • Communities (i.e. OpenSocial)
  • Video publishing (i.e. Vimeo and Brightcove)
  • ... and much more.

Drupal has quickly become a strategic asset to nonprofits and NGOs around the world due to its ability to scale and integrate with almost anything out there in the market - and more importantly, custom-tailored integrations.


6. SEO Friendly Content Structures

Challenge: Lack of technical SEO knowledge harming website ranking on search engines.

Content structure is key to being rewarded by search engines like Google with higher exposure and ranking on their search engine results pages.

The IASLC, a US-based global nonprofit, is a content-heavy digital experience and struggled with content structure and information architecture-related challenges that negatively impacted their UX score.

When their new digital experience launched on Drupal 9 CMS Varbase - the simple transformation of their legacy menu and navigation to a user-centric structured menu provided the following benefits:

  • Categorized and clear content structure
  • Enhanced indexing when crawled by Google’s bots
  • Clear website visitor paths
  • Mobile-first UX design

7. Enhanced Content Publishing and Outreach

Challenge: Your target audiences speak different languages and have different preferences when it comes to content.

Content structure and user-centric UX/UI design will definitely help you maintain high page performance scores and core web vitals for search engine crawlers, but what about your human visitors?

Not all of them can read the same language - in fact, most would rather watch a video than read.

Does that mean you have to hire a translator? More marketers? Rebuild duplicate pages for each language?


With a push of a button, CMSs like Varbase enable your team to translate, review, and publish content created across your website and other relevant domains and websites built on the same CMS.

That's right, with a push of a button you can speak your target audience's various languages and create multilingual content enhanced for search engines in each language!

Casting a wider reach isn't enough if your communication doesn't support your efforts to convert visitors into members and donors.

8. High Conversion Donations Page

Challenge: You need to optimize conversion rates but your CMS doesn't provide the flexibility to create dynamic and rich landing pages easily.

Getting people to support your cause via donations requires a high conversion landing page. But what are the on-page features and UX elements necessary?

They can vary.

But these UX factors must be present on your donations landing page:

  • Credibility - Give potential donors clear information about where their money will be going. Support your credibility with hi-res images, stats, and testimonials from other donors in your NGO's community.
  • Accessibility - Make sure that anyone can clearly understand and access your donations page through a seamless journey regardless of the browser, device, or screen size they access your website from.
  • Security - Do you have SSL certificates? Let them know that their transactions are secure.

Using the Layout Builder module in Varbase - your marketing team can personalize and optimize landing pages on your website in a matter of minutes rather than days. 

Check out those stats about personalization real quick:

  • 80% of website visitors are more likely to convert thanks to personalized user experiences. (Epsilon)
  • Personalization can reduce acquisition costs by as much as 50%, lift revenues by 5 to 15%, and increase the efficiency of marketing spend by 10 to 30%. (McKinsey)
  • 89% of digital businesses are investing in personalization. (Forrester)

Evidently, personalization is key towards retaining and engaging your website visitors. Utilizing powerful UX personalization tools such as Layout Builder; your brand as a nonprofit will sustain a strong relationship with each visitor based on relevant communication, content, and user experience.

Streamline your donations with those pro tips:

A/B Testing: Create a separate donation landing page for each of your traffic sources (email, social media, organic search, etc.) This helps you identify which messaging and sources are converting higher than others.

Track Events: Set up event tracking in Google Analytics to identify which elements on your donations landing page are working and which are negatively impacting conversion.


9. Ongoing Support and Maintenance

Challenge: Outdated UX, buggy performance and website suffer frequent downtimes leading visitors to abandon site.

Prior to the pandemic, many enterprises underestimated the importance of ongoing support and maintenance is to their growth, and matter of fact survival as a business.

Not anymore.

As more enterprises are accelerating their digital transformation plans they are realizing how much website maintenance and 24/7 support, monitoring, tracking, and upgrading is to their digital strategy success:

  • Risk assessment, tracking, and aversion
  • Security module updates
  • Continuous delivery of UX feature upgrades
  • Server performance optimization
  • Search engine optimization
  • Uninterrupted website service regardless of traffic load

Drupal 9 and open-source-based CMS are ideal for nonprofits who are constantly growing and evolving, which means that you won’t have to change CMS solutions or purchase upgrades every time you need to add a new page to your site or implement new functionality.

Choose a CMS provided by vendors who have an in-house DevOps department with a proven and strong record of frequently keeping their CMS up-to-date with key upgrades and proactive reporting to guarantee that your websites are always at optimal performance.

Bridge the Gap Between You and Your Clients' Experience

Bridge The Performance Gap

Explore your website's post-launch opportunities to help your NPO realize it's mission.

10. Reliable Hosting

Challenge: Downtime and server performance is poor due to a lack of dedicated IT staff to monitor and manage performance.

Still in support, maintenance, and growth territory here.

Implementing best practices in web design and development is not enough. To sustain uninterrupted availability and performance for your users, you must find a reliable hosting service provider.

An ideal solution for budget-strapped nonprofits is to go on the cloud - as it reduces your IT staff overhead by using cost-effective cloud-based services.

Interested in discussing or auditing the performance of your technical infrastructure?

We'd be happy to help out. Get in touch for a free consultation and audit!

Feb 21 2021
Feb 21

The past couple of months have been very eventful in the Drupal Association, I can say I've been on boarded and I'm ready to participate in several committees and the general board meetings. The next being this upcoming Tuesday the 23rd at around lunchtime.

I'd like to start with a couple of updates I want to mention:

First board meeting

On December 15th 2020 I attended the first board meeting, and although minutes for this one or the October 2020 one are not available yet, I'll try to sum up a little bit. Both myself and Tiffany were presented (again) to the board. We got a quite extensive introduction by Heather, the DA Executive Director, regarding staff updates and current teams and what they do. There was a surprising amount of sales focus on this update, including a special mention to the #DrupalCares fundraising campaign</a> which has been fundamental to the continuity of the organization during the pandemic. The new merge requests and issue forks feature on Drupal.org also was part of the update. This is supported by GitLab and it is one giant step forward for contributions. We also discussed a little bit about the Drupal steward program, a mashup between the Drupal Security Team and the Drupal Association that provides a WAF service and has the aim to explore this area where the DA can facilitate these kinds of services and be less economically dependent of DrupalCon. The program is still very new for definitive conclusions but the update was a positive one. There were other topics on the table such as the Drupal 9 update roadmap for Drupal.org, core initiatives and financials.

Additionally there was a DrupalCon Europe update, which had around 800 participants and some suggestions were mentioned for this year's but it is quite early to know what DrupalCon Europe 2021 is going to look.

I was assigned to two committees, the Community and Governance one, which I am very happy to participate in and then the Finance committee, which I was very reluctant as I don't know if I can add much value there but after two meetings of the committee I am very happy to have been included in those discussions.

Finally, I was able to include a discussion for next board meeting (23rd of February) about the voting eligibility issue. I've prepared a couple of proposals and I hope to give an update next week about next steps.

Community and Governance committee

You can check who's on what committee in this page. Leslie chairs this one and we're discussing quite a bit on how to communicate effectively to the broader community. There's going to be a survey to get suggestions and I will promote it as soon as it is ready.

Since my last update, this committee has met twice (some committees meet monthly), and I think the second one went way better than the first one, I am really looking forward to work more on these initiatives.

One of the main focus of this committee I think is to identify opportunities of early communication regarding the DA programs so information is clearer and more adequate for the larger community.

This committee has discussed regarding the voting eligibility issue and I have been given the opportunity to present some of my ideas and proposals previous to the board meeting.

Interestingly enough, Rachel Lawson brought the topic of community cultivation grants and whether we have the chance to restart the program, which I think if the budget allows, it's an excellent initiative.

Finance committee

This committee meets also monthly and Angie gives a thorough update through the finances, how the year is progressing and things such as audits and reality vs projections. Baddý chairs this committee. As mentioned, I was reluctant about being part of this one, but I think I can give some valuable input despite not being my specialty at all.

Really good news came out of this committee last month. The upcoming DrupalCon was originally set in Boston and it is going to be celebrated online due to the pandemic, the DA was still accountable for cancellation fees with the venue but the staff has been able to get a waiver for that!

I also had the opportunity to meet with the Community Working Group a few weeks ago, they are really nice folk who have a huge impact in our community and the nature of the chair I have in the DA board puts me in a position where I overlook the group and if there's an escalation issue, me and Leslie would be responsible of dealing with that. This is something that has never happened so the less I see this very fine group of people, the better :). We will meet annually for a quick check in.

There was something very interesting to mention, ever since we don't have in person events, they are less busy. I think this is something for us, as in the whole community to reflect on.

For this upcoming meeting, there's a big agenda, but the voting eligibility issue will be in it. I will make my case and hope we can get to a resolution that can bring some closure and sense of reparation to the community.

Anything you want to ask me or if you want to share concerns and comments, please do get in touch with me.

Note: This blog has the comments disabled, please feel free to send me a message through my contact page if you need to discuss anything related to the community and the Drupal Association. You can also tweet at me or find me in Drupal Slack or the distributed matrix network as pcambra.


Feb 19 2021
Feb 19

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

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

Feb 19 2021
Feb 19

We had a custom user registration form for use in our Commerce checkout account registration workflow that allows users to register during the checkout process. We wanted to add additional fields to the custom registration form but adding the fields to the standard user entity would not display the fields in our custom form as its fields are all created manually in the custom form.

In Drupal 7 we would use the field_attach_form() function but it is removed in Drupal 8. Below is how we achieved this in Drupal 8/9.

Feb 19 2021
Feb 19

The Drupal Community Working Group is pleased to announce that nominations for the 2021 Aaron Winborn Award are now open. 

This annual award recognizes an individual who demonstrates personal integrity, kindness, and above-and-beyond commitment to the Drupal community. It includes a scholarship and stipend for the winner to attend DrupalCon and recognition in a plenary session at the event.

Nominations are open to not only well-known Drupal contributors, but also people who have made a big impact in their local or regional community. If you know of someone who has made a big difference to any number of people in our community, we want to hear about it. 

This award was created in honor of long-time Drupal contributor Aaron Winborn, whose battle with Amyotrophic lateral sclerosis, or  ALS (also referred to as Lou Gehrig's Disease)  came to an end on March 24, 2015. Based on a suggestion by Hans Riemenschneider, the Community Working Group, with the support of the Drupal Association, launched the Aaron Winborn Award.

Nominations are open until Friday, March 19, 2021. A committee consisting of the Community Working Group members as well as past award winners will select a winner from the nominations. Current members of the CWG and previous winners are exempt from winning the award.

Previous winners of the award are:

Now is your chance to show, support and recognise an amazing community member!

If you know someone amazing who should benefit from this award please submit a nomination.

Feb 19 2021
Feb 19

A whole lot of mental, physical and monetary investments later, your website is finally moving on the track. You have a good traction, and keep up with the trends with updated content and regular revisions. When you have eventually got the hang of managing a full fledged online presence on your website, the first thought that is likely to show up on your mind is to extend it even further. 

Blue background with light blue arrows, addition sign and light blue drop

For reaching a wider audience, optimising mobile experience, and building an alternative marketing solution, mobile app development is perhaps the best way to move forward with one’s business plans. 

What is Flutter?

blue arrows on white background with the text flutter

Flutter is a cross-platform mobile application development framework, more like a software development kit, that was created by Google in 2018. It is used to build applications for several operating systems, both mobile and desktop, and the web, from a single codebase. It is written with Dart programming language. In addition to this, Flutter is an open source platform and invites community contributions into their code repository. 

Ever since its launch and subsequent expansion into development for desktop and web, Flutter has seen widespread adoption and expansion. According to Stack Overflow Trends, Flutter has surpassed both React native and Xamarin in terms of the questions asked about their respective technologies. Google Trends display an increasing  interest of users in Flutter, with searches about the framework soaring since the past two years as well, while Google also claims that Flutter has been adapted by over 500,000 developers for app development.

white graph with blue red and yellow lines mapping the number of questions asked about flutter, xamarin and react yearlySource : Stack Overflow

Why use Flutter?

There are plenty of options available for mobile application development. Despite the presence of other similar frameworks and Flutter being relatively new in the market, in terms of popularity Flutter continues to be one of the most successful app development models among developers. This can be attributed to the following reasons  -


Flutter makes the job of development easy with the use of widgets. Widgets are building blocks - each facilitating a part of User Interaction and Experience (UI and UX). Stateless widgets are static frameworks that don’t store any data and exist for the purpose of streamlining your inputs. For example, the Text widget lets you create stylised text and the Row and Column widgets let the user create layouts in vertical and horizontal directions. Similarly, the Container widget creates a rectangular, contained layout visual with margins and padding. Box decoration can be used to customize the rectangle. On the contrary, if the widget in question performs a function when activated, it is called a stateful widget. Examples of such widgets in Flutter are InkWell, Checkbox, etc. Thus, everything doesn’t need to be formulated from scratch, with various pre made layout builder widgets available for the developer.

Open source

What makes Flutter stand out from the rest of its competitors is that it is an open source platform. There are various ways in which an open source model builds its progress over proprietary models in software development. When the cause is community driven, there is always a certain proactiveness both from the users and the owners for driving towards betterment and growth. With no proprietary limitations, the developer community is free to indulge in knowledge sharing, code alterations, and discussing associated challenges with one another leading to better bug resolution in terms of analysis and frequency. Hence, choosing Flutter for application development means having a flexible framework that is open to customisations along with having a community to discuss and also solve your resulting issues with. To know more about the power of open source, read how open source communities work together, how much contributions are valued, why large companies believe in open source, why open source is recession-proof, and last but not least how open source has been impactful during Covid-19 pandemic.

Single codebase and Cross Platform

Although Flutter launched as a mobile application development framework for Android and iOS in 2017, it was quick to expand into the arenas of mobile, desktop and web in the following year, becoming multiple device compatible. A major pro of Flutter over other similar app development frameworks is that it has a single codebase to compile applications, ie, there isn’t a need to code separately for different operating systems and devices, enabling seamless simultaneous app creation even when you’re dealing with multiple platforms and gadgets at the same time. This makes Flutter both developer and user friendly, as the content needs to be formulated only once and is compatible with most of the devices one would want to access it from.


Flutter uses a programming language called Dart, which is a relatively simple language with a small learning curve. Its features are a little similar to other languages, but are fitted into a unique syntax and infrastructure. Therefore, developers using Flutter don’t need to invest a lot of time and effort into the process of learning the basics and starting to build applications, which makes the framework ideal for users of almost all experience standings. Due to this, Flutter is suitable even for a small business or a startup that cannot afford experienced developers in their team due to the simplicity of the programming language. 

Integrated Tools

The codebase being integrated at a single place also accelerates the speed and convenience of coding, as the Hot Reload feature updates every change in the source code - allowing developers to see the changes made in the code real time. The work culture in such a case becomes transparent and hurdle free. Tools for developer convenience also include a package called DevTools, a compilation of performance and debugging tools meant to be used for both Flutter and Dart. DevTools is in the beta release at present and is undergoing alterations.

Drupal for Mobile App Development

White background with a blue drop

While we talk of application development, an important player in the market remains our good old CMS (Content Management System), Drupal. The range of mobile apps Drupal can deliver is impressive. The constant evolution and adaptation of Drupal is what has manifested into the huge user base of the CMS, which is currently hosting over 600,000 websites

The usage statistics for Drupal throughout the years are mapped on this graph -

white graph with red and blue lines mapping drupal's growthSource : BuiltWith

Drupal also has a domineering presence across several industry verticals.

red, blue, yellow pie chart showing the presence of drupal throughout various industriesSource : SimilarTech

Accordingly, in the arena of mobile app development, Drupal has seen significant advancements over the years.

  • As an API-first CMS, Drupal makes it easy to communicate smoothly with any application. It is these APIs that link Drupal to the mobile application.
  • Drupal provides plenty of development kits, libraries, modules and sample apps to make application development easier. This simplifies the job of a Drupal developer who might be well versed in PHP, MySQL and HTML but not so much in device-specific native mobile app programming languages like Java or Swift. Elements in Drupal like Waterwheel Swift and OneDrupal Android help manifold in bridging the gap. 
  • Application development is made even easier in Drupal by seamless compatibility with app development frameworks like Vue, React, Angular and Flutter. Drupal pairs well with all of these frameworks to create fast and responsive applications both for the web and mobile. 

The primary reason for which a business wants to build a mobile app is to reach a wider audience and expand marketing avenues. With both Drupal and Flutter occupying large parts of the commercial spectrum, let’s dig in a little deeper into how these can be used together. 

Case Study : Drupal with Flutter 

Drupal’s greatest strength is its ability to mould into any customisation, and in case a customisation does not exist, creating an API for your requirement is always an option. Drupal allows for decoupling and connecting with Flutter through its web services like REST API. Recently, Opensense Labs had the opportunity to take up a project from a leading media and publishing company in Malaysia. 

The primary agendas were - 

  • Refurbishing an already existing but poorly maintained website.

The website was previously built on WordPress, but the organisation wanted to shift to Drupal CMS for improved management of the ever renewing, large volume of content and efficient multi channel delivery. 

  • Developing a mobile app containing the same data as the website, from scratch.

To reach a wider audience and improve UX, an app was to be created to reach the readers faster. This is where Flutter came in.

Processes and solutions -

To start off with, the major work to be done was migration from Wordpress to Drupal and connecting Drupal with Flutter:

  • Since the website dealt in news and media with numerous reports published daily, the number of articles to be migrated were over 30,000. Content migration to Drupal was achieved by following processes like writing custom Drush commands among others
  • Rest API was used to connect Drupal and Flutter. While Drupal acted as the powerful backend managing content, Flutter helped in building a native mobile app.

Along the way, some major hurdles with performance and scalability were addressed:

  • Being a news website, the traffic was pretty inconsistent which led to a few malfunctioning issues. To tackle this, the entire infrastructure was built on AWS which allowed for auto scaling and scheduled scaling to be used. This made sure that the number of instances were increased and decreased as and when traffic saw a spike or a decline respectively.
  • Even though the APIs were created, there were some performance issues due to the large amount of content on the site, with numerous news articles being published daily. Right use of cache tags helped improve the performance eventually.

To make the website and the application function optimally and in sync with the company’s agendas,

  • Firebase was used for enabling Push Notifications, and manual permission was given to the admins for sending notifications leaving no room for error.
  • For ads, the DFP (DoubleClick For Publishers) module was used to serve ads from Google. Interstitial ads were placed between the length of the articles for maximum clicks. A basic level of ad optimisation was also done by the team to ensure better revenue. 
  • Upvote and downvote feature for the news articles was enabled using the Voting API module.


Drupal and Flutter are both significant players in the software arena. We are likely to see plenty more use cases where the efficacy of both Drupal and Flutter is utilised to formulate seamless mobile applications.

Feb 19 2021
Feb 19

When creating websites, you often need to quickly backup the data that isn’t in your code repository. In the case of Drupal, it’s possible to generate copies via the "Backup and Migrate" module.

This module offers options for both beginners and advanced users. In this article, I’ll present its functionalities in detail.


The module was released at the end of 2007 for Drupal 5. It’s been extensively updated since then. The 8.x-3.x branch appeared in 2015, along with Drupal 8, however it didn’t have a stable release. It took another three years for the stable 8.x-4.0 version to see the light of day.

Module's popularity

The popularity of the module is confirmed by the number of installations - according to the official statistics, it’s used by over 220 thousand pages, including approx. 40 thousand based on Drupal 8.


Module's creators

Four developers are responsible for maintaining the module:

There are 822 commits in the code repository, created by over 70 people.

What is the module used for?

Backup and Migrate is an advanced tool for creating backup copies. It operates on the database, as well as public and private files. It integrates with Drupal CRON, thus ensuring the possibility of making regular backups to various destinations.


The module is available at https://www.drupal.org/project/backup_migrate. You can install it from a .zip file or run the command composer require drupal/backup_migrate in the console.

You can find the settings administration panel in the Configuration → Development → Backup and Migrate menu.

Module's use

The module was designed with both beginners and advanced users in mind. The former don’t have to delve into the configuration of data export, they just need to use the quick backup option:


Clicking "Backup now" will download the database (or public/private files as selected in the "Backup Source" field). What’s more, the database backup will be devoid of cache and log entries, so it’ll take up much less space.

Some more settings are available in the "Advanced" tab. I’ll describe these later in the article.

Backup sources

By clicking Settings → Sources you’ll access the list of available backup sources.


By default, the sources can be:

  • databases,
  • public files,
  • private files,
  • whole page code along with a database.

This set can be extended slightly with external MySQL databases and any directories on the server. It can be done using the "Add Backup Source" option.

It’s possible to define own sources via the "Backup and Migrate" module's API.

Backup destinations

A backup destination is the place where it is to be put. This can be, for example, a server directory or a web browser. The available destinations are listed in Settings → Destinations.


As with sources, you can define your own destinations via the "Add Backup Destination" button and a corresponding hook. At the end of the article, I present some destination-adding modules like SFTP Server and S3 Cloud.


Remember that backups contain sensitive data and access to them should be strictly limited. Drupal is one of the most secure CMSs available, so it’s worth using its private file system. In addition, the possibility of encrypting files with backups comes in handy. To use it, add the Defuse library to the project using the command:

composer require defuse/php-encryption

After clearing the cache, the "Encrypt File" option will appear in the module configuration panel with the field for entering a password. It’ll be used to encrypt the generated archives.

Advanced backup

I’ve already covered how to create a quick backup. It’s time for its slightly more advanced version, which you can find in the "Backup" → "Advanced Backup" tab.

Here’s a quick overview of the options available:

  • Source - used to select a predefined source.
  • Backup file - allows you to configure the name and format of the backup file.
  • Backup encryption - enables archive encryption.
  • Take site offline - turns off the website while creating its backup.
  • Exclude database tables - allows you to exclude selected tables in the database (or only their contents) from the backup.
  • Exclude files - used to exclude selected files when creating a directory copy.
  • Destination - allows you to select the backup destination.

If you want to save such a set of advanced options for the future, take a look at the profiles in the "Settings" → "Settings profiles" tab.

Backup list

All backups on the server are listed in the "Saved Backups" list.


Interestingly, this list also works when saving backups to SFTP and S3 servers.

Backup restoration

Less often needed, but still an extremely interesting option, is to restore the website from a backup. For this purpose, you can use either one of the copies from the list presented above or upload any file via the form.


The last important functionality of the Backup and Migrate module is the ability to create backup schedules.


Here you have everything you need to build an efficient backup mechanism. These actions are performed using Drupal CRON functionalities. Therefore, no additional server configuration is needed.

Hooks and integrations

Backup and Migrate provides one basic hook hook_backup_migrate_service_object_alter(), allowing you to change practically the entire engine of the module. This is where additional plugins and filters are defined. You can define the following elements:

  • Backup sources - by default it is the database, public/private files and the entire website along with the source code.
  • Backup destinations - such as cloud storage or local directory storage.
  • Filters modifying the archives being generated - e.g. encryption.

On the basis of the above mechanism, many auxiliary modules that offer integration with external providers of disk space were created. Unfortunately, most of them run only under Drupal 7 control. These include:


In the face of new technologies, the Backup and Migrate module is sometimes considered redundant. However, we use it in our Drupal agency as it offers the easiest way to download a database and files from a Drupal-based website. It’s easy to set up and works almost immediately.

In the case of smaller websites, the module can be useful as a supplement to a standard backup. Especially when the code is on a shared server where you don't have full control of the system.

Feb 18 2021
Feb 18

MidCamp 2021 is just over a month away, and we’re excited about our new scheduleTickets are on sale now, sponsorships are going fast, and we’re excited to see the community gather today for Florida Drupal Camp.


This year we’re embracing the virtual format and working to create spaces that encourage community building, connection, and mentorship.

  • Wednesday, March 24: Community Onboarding — Audience-based discussions focused on welcoming people into the Drupal community and letting experts share their knowledge.
  • Thursday, March 25: Building Community — Attendees will enjoy a day of lightly structured activities to decompress, talk shop, and have some human time.
  • Friday, March 26: Unconference — Instead of formal sessions, we’ll discuss Drupally things in a one-day Unconference format.
  • Saturday, March 27: Contribution Day — Our traditional day to give back to the Drupal project. All experience levels are welcome.


This year’s tickets are all flexible:


Our sponsorship packages are designed to showcase your organization as a supporter of the Drupal community and provide opportunities to:

  • grow your brand,
  • promote the health of the Drupal community,
  • and connect with new leads or Drupal talent.

More information is available on our sponsorships page. Sponsors get full access to our job board, targeting our audience of experienced web professionals from Chicagoland and beyond.

Help Us Spread the Word

The first day of this event is geared towards newcomers to Drupal. Now is a great time for you to invite your co-workers and colleagues to our community. Newcomers will find a welcoming format to learn more about open-source, network with other professionals, and get excited with hands-on learning. MidCamp is a great place to get started and no technical knowledge is required!

Thanks for sticking around. We’re excited for what 2021 has in store. Join the conversation on Slacklisten in on Twitter, or subscribe to the email list.

Feb 18 2021
Feb 18

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

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

Feb 17 2021
Feb 17

Seeking to ultimately create a globally centralized, online presence for all of its commercial customers, Lenovo reached out to Promet Source for a range of initiatives that included a performance audit, a Drupal 8 migration, integration with the Lenovo Martech stack, consolidation of 15 separate websites from 60 markets and 87 different languages into its Lenovo Tech Today site, and ongoing support. 

The result: a cohesive brand and online presence that enables Lenovo’s commercial customers worldwide to easily explore all of Lenovo’s commercial technology solutions that include workstations, servers, storage solutions, IT management software, smart TVs, tablets, smartphones, and apps.  

The success of this massive consolidation project was due in part to Promet’s development of a component-based, drag-and-drop page-building capability leverages Drupal Paragraphs.

Read more about how we helped Lenovo drive efficiencies with a cohesive global web presence.

Promet also established clear processes for enabling content editors and site managers within multiple markets worldwide to log in and easily update content or add pages. Site updates and revisions that would have otherwise taken a week’s time and required the help of an in-house IT support team or a local agency, can now be completed by non-technical site managers within a few hours. For Lenovo’s global commercial customer base, the consolidated Lenovo Tech Today site has provided the advantage of a consistent brand presence and user experience, along with significant operational efficiencies and massive cost savings.

Commenting on the impact of Lenovo's global website consolidation initiatives and engagement with Promet, Roman Olney, Head of WW Digital Marketing, PCSD Marketing, for Lenovo said,

Over the last few years, Promet has helped us navigate some complex technology needs that have driven significant efficiencies for our global marketing organization. With their support, Tech Today continues to grow and meet the needs of our customers in new and exciting ways.

Interested in consultation and support in managing complexities, while improving user experience? Let us know how we can help!

Feb 17 2021
Feb 17

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

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

Feb 16 2021
Feb 16

Every morning we get up and something big has happened somewhere in the world. Sitting in the capital of India, we get to know how the inaugural ball went on in the capital of the United States. And how are we able to get this knowledge?

It is the media and publishing industry that constantly reports all the national and international happenings to our households. From getting to know about election results to knowing the extent of natural calamities and political unrest, we know it all. 

The role of the media is all the more important today, it has essentially become the voice of the voiceless all over the world. With such a magnitude of responsibility, the media and publishing businesses need to be at their A-game all the time. 

Today, we’ll try to understand how they can enhance their online presence for a rich user experience with the help of Drupal. Before doing that, let’s shed some light on the changes in this industry and understand the consequent change in their web needs. 

What changed over the years?

Time changes everything and everyone. People change their appearances, their style and their thought processes over time. Something that may be important for them is highly likely to become trivial in the distant future. This is what happened to people’s perspective towards the media and publishing industry and the change in point of view led to a substantial change in the running and management of this industry. 

Think of a decade ago, were we as dependent on smartphones and other mobile devices as we are now? The answer is no. However today, from teenagers to the elderly, everyone is glued to their third limb, being the smartphone or smart devices in general. Look at the usage in the graph below to get a clearer idea.  

A bar graph shows the global monthly data consumption on various smart devices .Source: Deloitte.com

Once reading a news article on a smart gadget was a novel thought. However, today it is an everyday occurrence. And that is the pivotal shift that the media and publishing has had to take. The readers are more inclined to reading news updates on their phones. And that is why, this sector has had to transcend from print and paper and provide their audience with digital platforms that are easy to access anytime, anywhere and on any gadget.

What the change comes down to is the delivery mechanism. The media and publishing outlets are performing their duties much in the same way. They are reporting much in the same way. The stories that need to be told are being told and the questions that need to be raised are being raised. However, all of this is happening on digital platforms and it happened in four phases. 

A circular diagram is showing the four waves witnessed by the media and publishing industry.The four waves of the media and publishing industry. Source: Weforum.org

I wouldn’t say that the physical medium of media has become antiquated, not by any means. I still see my dad having his morning tea with a side of the front page news of The Times. However, he also gets constant updates on his phone about the world happening without having to wait for the next day’s paper. 

And that is the change that has happened, that is how the evolution of the media and publishing industry took place, with the core values still remaining the same. 

Look at this report by Statista to understand the emergence of digital media platforms. With such a substantial amount of revenue, I’d say it has come out with a bang.

Revenue statistics for digital media and publishing industry are shown in the US.Source: Statista 

What do media and publishing houses seek today for digital presence?

Like we just discussed above, the media and publishing houses have transformed a great deal in the way they relay information to their audience. Today, there isn’t just one kind of audience and you can’t just build your entire persona around that one category. From young people perusing news on their smartphones to the minority population fluent in their own regional language, the media and publishing industry has to be able to provide for the diversity they have in their audience.

With the move towards digitalisation, we are going to take a look at the needs and requirements of this sector as they are in the present day.

Ease of publishing 

The primary purpose of a media and publishing business is to provide its audience the content that they need. This purpose mandates that the site has an enhanced ease in editing and publishing content, be it blogs, articles or press releases. These content pieces should not be limited to text, images, audios and videos are as equally important as the powerful words of a news writer, and that is the first requirement of this sector today. Faster production and publication of content across multifarious channels is key. 

Friendliness towards the search engines

Now that we have published the article with ease, the next major requirement is to ensure that it reaches the audience it was intended for. If I talk about myself, I always end up at Google whenever I want to read about a major or even minor happening in the world. This is true for most of the readers out there. That is why, Search Engine Optimisation is essential today. 

Producing SEO friendly content would help your content become all the more visible to a wider audience and garner organic traffic for your site. With over 3.5 billion searches everyday on Google, I’d say there isn’t any harm in taking advantage of SEO by adding the necessary words and phrases to your articles. Everything about SEO and its implementation can be accessed here.

Amiability to social media 

Social media is a game changer for the media and publishing industry, allowing it to take its content across the globe in mere seconds. Therefore, social media integration is key, with Facebook becoming the front runner, being that it is the largest platform. 

Having a social media handle, providing sharing options on your articles and creating custom posts of your social media handles, all three of these would lead to a streamlined integration with social media channels. With over half the world population using these platforms, it is only wise.

Responsiveness of design

Next major requirement for the media and publishing industry in going digital is the need to be responsive. Websites that can only be browsed efficiently through a desktop are essentially doomed for failure. Being responsive to all sorts of mobile devices, especially the smart phones, is integral to media outlets. Accelerated Mobile Pages are a trend that more and more websites are following. These help in delivering a smooth experience of browsing for all your users across all the touchpoints. Here is your complete guide to web design.

Warmth of personalised experiences

Coming to the final requirement, which is personalisation. Every web user today is treated differently, since they have different taste. We, as web developers, become aware of these tastes through web cookies. Therefore, as a media and publishing site, you have to become aware of your audience’s likes and dislikes and provide a personalised experience for them that they end of loving. Informational noise and never-changing ads need to be left in the previous decade. Your complete guide to web personalisation is available here.

Why is Drupal great for the media and publishing industry?

Sports, FMCG, Food, FinTech, Elearning, Government, healthcare, nonprofit, travel, or whatever website you need to build and whichever industry segment you belong to, Drupal has just the right ingredients to build your digital presence. Media and publishing industry is no different.

Drupal is an open source Content Management Software that has a worldwide presence and is renowned for its efficiency in managing content. It has clientele from multitudinous trades and businesses. And with a community of over a million, it is indeed a force. It is a force that is equipped to provide digital experiences that enable you to connect with your audience no matter where they are.

I would not get in every minute aspect of Drupal, because that’ll make this blog quite lengthy and nobody wants that. Rather I would only talk about those aspects of Drupal that make it extremely compatible with the media and publishing industry. So, here goes.

Drupal eases content management and distribution 

The thing about media sites is that they are not limited to just one, they have a huge family with many subsidiary sites. The higher number of co-dependent sites means that you would have to have a lot of content to deal with. Drupal comes quite handy here, as it acts as a single home for all the sites. 

And the amount of content that results in would not be bother as well.  Be it photos, videos, audios, podcasts or graphs and analysis. Everything would be seamless in terms of production, management and distribution with Drupal. Have a look at an example of how content authoring can be performed at ease with modern solutions like Layout Builder module in Drupal core.

Drupal eases the mobile transition 

I believe I am going to be mentioning this one for a third time now, but mobile responsiveness is pretty high on the priority list so it deserves another mention. When we talk about user engagement, a modular design is key and when that design is flexible to respond to any device the engagement soars. Drupal provides a number of modules to achieve the same.  To know more, read about mobile-first approach and Drupal’s provisions for building mobile solutions at scale.

Drupal eases multilingualism

With media sites catering to a large number of audience worldwide, language can become a problem. Drupal provides multilingual support that makes publishing the same content in different languages an ease. Drupal offers translations in as many as 94 languages. More on Drupal’s multilingual capabilities here.

Drupal eases profits and lessens costs  

Drupal is equipped to make you money as well. Advertisements, promotions, subscriptions and one-purchases, all are inclusive in Drupal modules that result in media outlets being more profitable. 

Then is the fact that Drupal is open source, which means it is free of cost. There isn’t any licensing fee required to be paid. All you need to do is install and configure it and you’ll be ready to go. Learn more about the perks of contributing to an open source CMS like Drupal and being a part of a growing open source community here.

Drupal eases the security concerns   

Drupal security is one of the best in the market. With modules for authentication, password protection and encryption, your data is always going to be safe. Open Source security isn’t anything to be taken lightly and Drupal has proven that. Here is a survey to prove that. 

There is a pie chart depicting the percentage of security issues in various CMSs, Drupal being one of least of them all.Percentage of security issues in a sample group. Source: Acunetix

With this level of ease, you can become relaxed and bask in the efficiency of Drupal and become free of the burdens of running a media site that you might have to endure otherwise. However, you would have to write stellar pieces that are able to resonate with the audience and accomplish what they were set out for. That is a burden you would have to bear, Drupal wouldn’t be able to do so.

Here is a glimpse of Drupal at work with digital media houses

Drupal has indeed proven to be one of the best CMSs for the media and publishing industry. I don’t just say it for the sake of it, I come bearing proof. OpenSense Labs has worked with many media and publishing houses to build impressive experiences for their web portals with Drupal and here are some of these sites. 

Men's Health 

Men’s Health magazine is a global brand, which publishes in close to 60 countries. It required a software that would provide an ease of management for the content authors, with an adaptable content architecture that would be responsive and browser agnostic. It also required to balance the performance and images conundrum without trading off on either of these. And Drupal was able to fulfil all of these requirements and an impressive digital experience was created. 

Read the complete case study of Men’s health to know more.

Earth Journalism 

Earth Journalism Network is a leading non-profit environmental new network that aims to improve the quality and quantity of environmental reporting. With such crucial work, it required the best. Drupal provided ease in publishing and managing varying categories of content types with a heightened flexibility. Drupal also had the right kind of core and contributed features that allowed for better design scope and ability to handle enormous amounts of content. 

Here is the detailed case study of Earth Journalism Network.

Farm Journal 

Farm Journal is a leading US publication site for agricultural news with a host of subsidiary sites serving varying sectors of this industry. With such a magnitude of services, its content needs were becoming a challenge. Drupal was able to overcome this challenge with ease. Customer sites were enhanced, upgrades were made faster and convenient, the architecture was made scalable and modular in nature and most importantly, the content journey, from the editors hitting save to the consumer clicking read, was reduced to mere seconds.

To know about everything that went on in the Farm Journal project, read this case study


A part of the Farm Journal brand, AgWeb was able to improve its brand identity as well as user engagement with Drupal’s help. Being an agricultural news site, AgWeb needed to improve its web performance, at the same time the site’s SEO needed to be kept intact, while improving the site’s web SERP rankings. ReactJS was also implemented as part of progressive decoupling for a better frontend experience.

Take a look at the AgWeb case study to understand the project better.  

All of these are a blatant proof of Drupal’s efficiency in this constantly evolving domain of publishing and you would be wise to choose it.


The news, newspaper and article sites are growing at an impressive pace. Therefore, having a CMS in your corner that is powerful enough to let you scale in accordance to the growth rate is ideal. Drupal is just that, it can do and achieve things for a media site that other CMSs may not be able to. And we at OpenSense Labs have actually witnessed that with all media projects. So, trust me when I say that you cannot go wrong with Drupal. For any doubts you may still please feel free to contact us.

Feb 16 2021
Feb 16

A good content management system should not only focus on the way your content is presented to the user. It should give you the flexibility to manage the content publishing workflow smoothly and effectively. Many times, teams must work together with the content teams to churn out content regularly. Without a structured editorial workflow, where content moves from one state to the other, managing a publication process becomes tedious and chaotic. Enter the Content Moderation module for Drupal 9.

The Drupal 9 Content Moderation module gives complete flexibility to content editors and marketing teams to manage their editorial workflows effortlessly. The module works in conjunction with the Workflows module to manage and create different workflow states and transitions. The Content Moderation module was first introduced to Drupal 8 as an experimental module in Drupal 8.2. It was based on the contributed “Workbench Moderation” module. With Drupal 8.5, a stable version was released and is now a Drupal core module! On a sidenote, did you know that 88% of the top 1000 Drupal projects are now Drupal 9 compatible? If you’re still on Drupal 8 (or 7), what are you waiting for? Migrate to Drupal 9 today!

Content Moderation

What can you do with the Drupal Content Moderation Module?

Here’s why you should be implementing this amazing module for all your content workflow needs:

You can have different states for your content workflow – Draft, Published, Archived (much improved from the previously Published and Unpublished states).
Create and add your own state to the list! It could be a Needs Work, a Ready to publish, or any state that is required by your business process and editorial workflow.
When you create your own state (or edit an existing one), you can choose if you want to publish the content soon after entering that particular state. Or/and you could also choose to make it as the default revision.
You can create a transition to define what to do when the content moves from one state to another. 
It allows for granular permission control for every state and transition.
You can select the content types that you want to apply the workflow to (Article or Basic page by default).
In addition to the default editorial workflow, you can create your own customized workflow too!

Implementing the Content Moderation Module

As previously discussed, the Drupal Content Moderation module is available in core (since Drupal 8.5). However, you will need to enable the module by navigating to /admin/modules. Next, click on Install. 

Content Moderation

Enabling the Content Moderation Module

Once the module has been enabled, go to Configuration -> Workflow -> Workflows. Here you will be able to see a default workflow called “Editorial”. Or if you have added multiple workflows, you can see a list of them in this page. Click on Edit to make changes to the existing workflow.

Default Workflow

Editing the default Workflow

Label: You can add or modify the name of the workflow.
States: By default, there are three states - Draft, Published and Archived. You can click on the “Add a new state” button to create your own state like “Needs Work” or “Needs a Second Review”.

Adding a New State

Adding a new state - Needs Work

Transitions: Transitions tell the content editors what to do after a change of state. In addition to the pre-existing transitions like “Create New Draft”, “Publish”, “Archive”, etc., you can also create your own transition to handle more complex workflows. For example, if you have just created a new state for “Needs Work”, you could support this state by adding a transition called “Move to Needs Work” from a “Draft” state to “Needs Work” state.

Adding a New Transition

Adding a new Transition

This Workflow Applies To: You can choose to apply this workflow to your custom block types (Basic blocks) and content types (Article and Basic page).

Custom Block Types            Content Types

Workflow Settings: When you create new content, you can choose to default a state in the form. By default, the state is always “Draft”.

Track it with Content Revisions

Now with all of this information, you know that your marketing and/or content team can create and move content from one state to another effectively with the Content Moderation module. But how would you know who made that change, when did they make it or was it even made? Yes, content revisions to the rescue! With the revisions feature in the content moderation Drupal 9 module, you can not only see who made the changes and why, you can also revert to the previous changes (if there are more than one revision).

Content Revisions

Content Revisions

Access Control with Permissions

Having a content workflow and moderation system for a one-person team or a team where each member has admin privileges, is never a great idea. The permissions and access control feature for the Drupal 9 content moderation module gives granular control to a team of multiple content authors and editors. For example, you would want only a content author and editor to be able to use the Create New Draft transition. While a content editor can be the only one to be permitted to use the Publish transition.

To setup permissions for different users, navigate to People -> Permissions.

Feb 16 2021
Feb 16
Drupal 8 will be released on November 19 | Wunderkraut


We're ready to celebrate and build (even more) amazing Drupal 8 websites. 
On November 19 we'll put our Drupal 8 websites in the spotlight...be sure to come back and check out our website.


Michèle Weisz


Want to know more?

Contact us today

or call us +32 (0)3 298 69 98

© 2015 Wunderkraut Benelux

Feb 16 2021
Feb 16
77 of us are going | Wunderkraut

Drupalcon 2015

People from across the globe who use, develop, design and support the Drupal platform will be brought together during a full week dedicated to networking, Drupal 8 and sharing and growing Drupal skills.

As we have active hiring plans we’ve decided that this year’s approach should have a focus on meeting people who might want to work for Wunderkraut and getting Drupal 8 out into the world.
As Signature Supporting Partner we wanted as much people as possible to attend the event. We managed to get 77 Wunderkrauts on the plane to Barcelona!  From Belgium alone we have an attendance of 17 people.
The majority of our developers will be participating in sprints (a get-together for focused development work on a Drupal project) giving all they got together with all other contributors at DrupalCon.

We look forward to an active DrupalCon week.  
If you're at DrupalCon and feel like talking to us. Just look for the folks with Wunderkraut carrot t-shirts or give Jo a call at his cell phone +32 476 945 176.


Related Blog Posts

Want to know more?

Contact us today

or call us +32 (0)3 298 69 98

© 2015 Wunderkraut Benelux


About Drupal Sun

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

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

See the blog post at Evolving Web

Evolving Web