Dec 04 2019
Dec 04

In the first days of December, the great news makes our hearts feel warm! We are happy to see the sparkling fresh release — and to show all our readers what’s new in Drupal 8.8.0.

This is, in fact, the last minor release of Drupal 8 before another big day — June 3, 2020. This is when Drupal 8.9 and Drupal 9 should arrive together. All D8 sites that are regularly updated and free from deprecated code will be instantly ready for Drupal 9.

However, an even bigger reason why you should update to Drupal 8.8.0 right now is its absolutely irresistible features. It looks like the Drupal creators have put their hearts into this release. Our Drupal support team is ready to help you with the update — now let’s take a closer look at all the secrets of D8.8.0.

What's new in Drupal 8.8

Stable Media Library & integration with CKEditor

One of the most anticipated new features of D8.8 is the Media Library and WYSIWYG integration. Content editors will be especially happy with the new handy Media Library icon that can be easily added to the active CKEditor toolbar. This allows you to use the images, videos, and other multimedia assets that you keep in the Media Library and embed them into content with a few clicks.

And, as the community is focused on website accessibility for all users, the whole media embedding process has been made available via the keyboard only!

Other improvements include Media Library’s integration with the Content Moderation module, its better support for multilingual sites, UI updates, and more. After all the amazing work, the Media Library is officially stable in Drupal 8.8 core and absolutely ready to be used on live sites. Hurray!

Media Library in Drupal 8.8Media Library and CKEditor integration in Drupal 8.8Media Library stable in Drupal 8.8

The new and user-friendly admin theme Claro

The Drupal admin UI needed a good brush-up, decided the community. No sooner said than done, and a fresh, clean, concise, and modern experimental theme has arrived in the D8.8 core.

The new Drupal admin theme Claro is responsive and has a big focus on readability and accessibility. It will make the admin dashboard more convenient and enjoyable to work with, and Drupal itself more competitive among CMSs. This is another reason why you should update to Drupal 8.8 (you will definitely want to!).

According to Dries Buytaert’s feedback in his “State of Drupal” presentation, Drupal has never looked better or been more accessible as it is with the new Claro theme.

New experimental admin theme Claro

Native Composer support in Drupal core

Updating and installing Drupal has become easier than ever. Composer, the famous PHP dependency management tool, helps developers do it with one command, and takes care of the right third-party libraries.

Thanks to the Composer Support in Core Initiative, Composer is now officially supported by Drupal out-of-box. There is also an easy transition path for sites that have not used Composer before.

The helpful Help Topics experimental module

In order to make Drupal easier for all users, a new experimental module called Help Topics has just arrived in Drupal core. Module and theme developers can now provide helpful instructions in Twig files. They will be listed on every website’s admin/help page.

The topics can be single or grouped, according to the complexity and the number of tasks needed to work with a particular module. An additional contributed module should allow adding help topics from the browser.

New Help Topic experimental module in Drupal 8.8New Help Topics experimental module in Drupal 8.8

Great JSON:API module improvements

One of the greatest sensations in Drupal 8.7 was the arrival of the new JSON:API module in the core even without any experimental phase. It created an even better API-first future for Drupal websites and enhanced their capabilities to share data with third-party apps.

In Drupal 8.8, JSON:APi module has received a number of improvements to make it work more efficiently. This is related to resource normalization, omission links, HTTP error codes, security hardening, and more.

The ecosystem of contributed modules also grows — for example, there is the new JSON:API Explorer module that is an interactive web app to help developers explore their JSON:API server.

Final end of PHP 5.5 and 5.6 support

While the PHP 5.5 and PHP 5.6 were officially removed in D8.7, websites were still allowed to perform security updates.

D8.8 finally puts an end to this. These actions will fail unless servers are updated at least to PHP 7.0.8. However, PHP 7.0 and 7.1 will no longer receive security support from the PHP team, so it’s better to choose the newer PHP 7.2 or 7.3. You can contact our support experts with checking your PHP version and performing the update.

Significant Workspaces module improvements

We have all admired two new and amazing core modules that handle content workflows — Content Moderation (D8.3) and Workspaces (D8.6).

  • Content Moderation in a duet with Workflows provides convenient content workflows out-of-box, as well as allowing you to create custom ones.
Content Moderation in Drupal 8
  • Workspaces allows editors to quickly deploy tons of content from the “Stage” to the “Live” environment.
Experimental module Workpaces in Drupal 8

However, the two could not work together on the same website. This is solved in the new Drupal 8.8 release! In addition, the creators of the Workspaces module have rolled out the interesting capability to create hierarchical workspaces (i.e. sub-workspaces and parent workspaces).

Hierarchical workspaces in Drupal 8.8

More Drupal 9 readiness with the new core versioning

Indeed, Drupal 9 is coming! Developers are getting their modules and themes ready by cleaning up the deprecated code.

Now they can declare their project compatibility with multiple Drupal versions — D8 and D9. They just need to add the new core version requirement key to the project’s info.yml file.

This new core versioning system landed yet in 8.7.7 this September. It allows great precision so compatibility with minor and patch versions can also be declared.

Goodbye to jQuery UI

jQuery UI, the famous collection of widgets and effects for user interfaces, has reached its end-of-life. Most of its libraries are deprecated from Drupal 8.8 core and will be removed in the 9th version. “The big drop” is moving in the direction of using pure JavaScript in this area.

The modules and themes that depend on the jQuery UI libraries can find them in the replacement contributed projects, but it is better to find a more future-proof solution.

Multiple dependency updates

To support newer PHP and achieve better website efficiency, D8.8 uses new versions of multiple third-party dependencies. Among them:

  • D8.8 requires version 6.3 or newer of the HTTP client library for PHP — Guzzle.
  • It no longer supports version 4 of the PHPUnit unit testing framework. D8.8 can support PHPUnit 6.5+ and PHPUnit 7, while using version 6 by default.
  • Components of the Symfony framework have been updated to 3.4.5.
  • Drupal 8’s default content editor, CKEditor, has been updated to 4.13.0.
  • The Diactoros PHP package is up to 1.8.7.
  • The Twig template engine is up to 1.42.3.

Changes to browser support

Websites can only work well with modern browsers that support CSS and JavaScript. Some browsers are getting outdated. So the new Drupal 8.8 is changing the browser support policy.

It supports the latest release of the two latest supported major versions of these desktop and mobile browsers:

  • Firefox
  • Google Chrome
  • Opera
  • Safari
  • Microsoft Edge
  • Safari for iOS

As well as the latest supported release of the latest major version of these desktop and mobile browsers:

  • DFirefox ESR
  • Internet Explorer
  • Chrome for iOS
  • Chrome for Android
  • Samsung Internet
  • UC Browser
  • Opera Mini

And more

D8.8 also features improvements to configuration management, multilingual migrations, the work of Views, and so on. Developers should pay special attention to considerable changes to path alias handling and a critical note about using the latest version of the Pathauto module — more about this can be found in the technical release notes.

Update to Drupal 8.8 with us!

This has been a brief overview of what’s new in Drupal 8.8 released today. All of these and many more improvements can arrive on your website right now if you update to Drupal 8.8

All you need is to contact the Drudesk Drupal support team — we are ready to:

  • perform a smooth update to Drupal 8.8
  • configure the new modules
  • help you prepare for Drupal 9
  • update your PHP

Upgrade from Drupal 7 to Drupal 8

You see Drupal 8 offers more and more amazing features. To use them all, upgrade from Drupal 7 to Drupal 8 now if you haven't yet. And, of course, this, will be your best preparation for Drupal 9!

Stay up-to-date with the latest and greatest!

Dec 04 2019
Dec 04

Your browser does not support the audio element. TEN7-Podcast-Ep-077-Jeff-Geerling-Developer-Author.mp3


If this was a certain 90s show, this episode would be called, “The One About The Raspberry Pis.” Jeff Geerling, software developer, author, and lover of all things open source is our guest. It's fun to listen to Jeff and Ivan geek out.


Jeff Geerling, software developer, author and creator of the Pi Dramble


  • Here’s the part where Ivan and Jeff geek out over their love of Raspberry Pis
  • Living in flyover country (Missouri)
  • How philosophy relates to programming
  • Crohn’s disease and its treatments (and the benefit of living in St. Louis!)
  • Remote work lessens the impact of Crohn’s disease on Jeff
  • Brambles, Drambles and Druplelets, oh my!
  • Evolution of Jeff’s Dramble
  • The upside of cloud storage systems (load balancing)
  • Kubernetes: complicated to start, then smooth sailing
  • Running slower systems lets you find problems you’d never notice on faster setups
  • Putting Kubernetes on ARM
  • Can you run Flight Deck-powered Kubernetes on a Pi cluster?
  • The Drupal file system problem (and Jeff’s solution on Raspberry Pi)
  • How to keep your Raspberry Pis cool
  • When your brother writes a book
  • Writing on Leanpub
  • Jeff’s Ansible books



IVAN STEGIC: Hey everyone! You’re listening to the TEN7 podcast, where we get together every fortnight, and sometimes more often, to talk about technology, business and the humans in it. I’m your host Ivan Stegic. My guest today is Jeff Geerling, author and software developer, who is deeply involved in numerous open source development communities. He describes himself as a creative person who builds great software. I first saw his name in the Drupal community, but he’s really active in Ansible and is also the creator of Drupal VM for local Drupal development, as well as the Raspberry Pi Dramble. Hey Jeff, welcome. It’s a great pleasure to have you on the podcast.

JEFF GEERLING: Thank you very much. I’ve been looking forward to talking to you guys on TEN7’s podcast.

IVAN: I’ve been looking forward to talking to you as well. I absolutely love Raspberry Pis. I have, I think, at least 10 of them over here. So I don’t know if that’s catching up to how many you have, [laughing] but it’s definitely something I have tinkered with for the last number of years. And so getting an opportunity to talk to you is very exciting for me.

JEFF: Ten is a good start. You’re going to have to up your game a little bit though [laughing].

IVAN: [laughing] How many do you have Jeff? Come on, let’s be honest.

JEFF: Just looking over in my parts bin I have seven that are not in any active use. I have four in my cluster. I have five hot spares for other purposes and three that are running household projects right now.

IVAN: So, close to 20, if not more.

JEFF: Yeah.

IVAN: That’s a lot of Raspberry Pis.

JEFF: It fluctuates depending on what projects I’m working on.

IVAN: That’s awesome. I want to spend the whole interview talking about Raspberry Pis and the Raspberry Pi Dramble that you have and that you’ve been working on recently, and that’s been going for over four years now, I think. But before we dive deep into that, I’d like to get an understanding just a little bit, about Jeff Geerling, the man. Where do you live in the world? Where did you go to school? What do you do in life? You’re not just playing with Raspberry Pis all the time.

JEFF: [laughing] No. I live in St. Louis, Missouri, which is pretty near the geographical center of the United States. Some people call it flyover country, but because of that we actually now have a Drupal Camp named Flyover Camp.

IVAN: Yes, we do. [laughing] It’s awesome.

JEFF: I got to meet one of TEN7’s employees, Tess Flynn there. She had a really good talk on Kubernetes. But I love living in the Midwest. One of the best advantages is I have a lot of family here. The cost of living is lower than coastal cities, and I get to still do a lot of remote work. The coolest thing is, any flight anywhere in the U.S. is only about two, two and a half hours, whereas a lot of times I get somewhere and they’re like, "Oh, I just got off a six or seven hour flight from the other coast,” so it’s nice to be able to get around anywhere in the U.S. and still have family and all those benefits.

I actually studied philosophy, which you could say it has nothing to do with programming or nothing to do with tech, but really, a lot of the philosophy I studied was logic and reason—which, if you’re a programmer—that’s pretty much all you deal with on a day-to-day basis.

Actually, if you’re dealing with Kubernetes, logic is out the window.

IVAN: [laughing] Yes, it is. It’s a different kind of logic, right?

JEFF: [laughing] Yeah, deep down, there’s ones and zeros somewhere underneath, and you have to understand that. So, I studied philosophy. I actually went to a seminary to be a priest for a few years.


JEFF: I ended up finding out that was not what I was meant to do. I wanted to get married. So, I ended up leaving the seminary, getting married, having three kids and a wife, and I'm happy to be here in St. Louis. One of the things other than that in my life that’s really affected a lot, especially how I work and the jobs I’ve worked, is my Crohn’s Disease. It’s a chronic illness that I have that has required a few surgeries. It’s required a lot of time in the hospital. In fact, I was just in the hospital a couple weeks ago for it, but because of that I’ve always been extremely grateful to have the skills that I have in tech because I can work. There’s been many times where I’ve been in the hospital, but nobody would even know it because I’m still doing my work, since I can do everything I need to on a computer or an iPad or whatever and work remote.

So, I’m extremely happy and feel very blessed to be able to do that kind of work. In open source everything is asynchronous, so that benefits me, because if I had to do a job where I had to be at a desk or be at a place doing manual labor of certain hours in a day and I had to miss a lot of work, I wouldn’t be a very good employee. But I could be a good employee doing remote work and open source work, even though I have Crohn’s Disease, which impacts my life and a lot of my friends’ lives pretty deeply.

IVAN: I don’t know very much about Crohn’s Disease. I know it’s related to your digestive system and I think to your intestines.

JEFF: Yep.

IVAN: Is it something that either you’re genetically predisposed to have? Is it something that’s hereditary? How did you find out?

JEFF: It’s something that’s still under investigation. One of the difficult things is that Crohn’s is in a family of immune-related diseases and for pretty much all of them, it’s hard to say right now with the research we have, if it’s more genetic or more environmental. There’s a lot of theories, and one other interesting thing—and a good reason why I stay in St. Louis—is we have one of probably the top five or 10 Crohn’s research facilities at our local Washington University Hospital and Medical School.

I’ve been able to talk to some of the best Crohn’s doctors in the world, and all of them have theories, and there’s a lot of research but not a lot of concrete facts other than, throw these medicines at it and hope for the best. Unfortunately, in my life, I’ve tried literally every medicine. I’m not joking. Every medicine that’s ever been made for Crohn’s, I’ve been on it. One of them paralyzed me from the waist down, so I got off that medicine.

IVAN: Oh my God.

JEFF: So, I'm not paralyzed anymore, so that's good. Another one caused anaphylaxis so I’m like, Okay, I’m not going to take that one. So, all these drugs, some of them are life changing, but a lot of them don’t last very long because the way that they operate, your body starts reacting to them no matter what. So, once you hit that, you start doing surgeries—that’s the stage I’m in right now—but the good thing is, in my mind, if you have a positive outlook on it, if you could find ways to work with it, you can bounce back. I’m generally a very optimistic person. I think that’s also how I can survive in the open source world where things can get a little bit dicey sometimes.

IVAN: [laughing] They certainly can. Well, I’m glad that you’re able to talk about Crohn’s so openly, and I hope that your last bout wasn’t a terrible one, a bad one, and I hope you’re on the upswing.

JEFF: I was only in the ICU for one day. That’s a good thing. [laughing]

IVAN: Oh my gosh. Well, I’m glad to be talking to you about it. So, you’re in the Midwest. Working remotely is amazing. You might know we became remote in 2017, and we’re not looking back. It’s definitely opened up so many different avenues for us. So, I’m glad that you have that as well to be able to do what you do at home.

The site—I want to start at the end and then kind of work back to how you are hosting in your basement on a cluster of Raspberry Pis. And they run Ansible and Kubernetes and Drupal and NGINX and all kinds of things, and to someone who heard a whole bunch of jargon right now, and doesn’t understand why this isn’t a really cool thing, can you describe what is?

JEFF: So, most of us who have a Drupal site or WordPress or whatever kind of website we’re running, most of us have a cloud hosting provider, and you never have to worry about things like servers and power and networking and all that kind of stuff, you just go online, buy a service, and you update a Drupal site to it and log in and edit your stuff. I’ve always wanted to have as much control as I can over my hosting and my sites and my performance and all that. So, a few years back when the Raspberry Pi came out, it was interesting.

The first couple versions of the Raspberry Pi were super underpowered, and if you installed Drupal—6 or 7 was the current version at the time—even that version, you’d install Drupal on it, it would take a minute or two for a page to load. They were super slow, and didn’t have much memory or anything. But as time when on, the Raspberry Pi foundation kept introducing newer, faster models, and somewhere around 2014—I think, I don’t remember exactly—they introduced the Raspberry Pi 2, and that model had enough memory to actually run Drupal pretty well. So, I bought a few of those to see if I could set up a Drupal cluster and run my own Drupal website in my own house using a cluster of them. 

You could do it on Raspberry Pi, but because of the fact they use micro SD cards which are not as fast or as good as hard drives for longevity, much less SSDs that most of us have nowadays. Because of that, if you just run it on one Raspberry Pi, it’s kind of flaky and it might just blow up and die one day, and then you have to reinstall it and stuff. So, I wanted to see if I could make a robust little cluster of computers to run a Drupal site. And, there was a secondary thing that I was trying to do too, to make a little cluster of computers to demonstrate running Drupal or other applications like it in high availability with multiple servers and have it be able to be in a little box that I could bring with me somewhere.

So, I started doing that. I brought it to Drupal Camp St. Louis, I brought it to DrupalCon. I think the first one was Austin that I brought it to, and Dries [Buytaert] actually took a picture of it. This was before I worked for Acquia—and actually I was hired by Acquia soon after DrupalCon, completely unrelated but it was just an interesting aside. Dries came up and he’s like, “Oh, what is that?” I was like, “Oh, it’s my Raspberry Pi cluster.” He’s like, “Oh, that’s really cool. I gotta take a picture.” So, he and I now have shared more stories about pictures and things. He’s actually a pretty decent photographer.

IVAN: Photographer, right?

JEFF: Yeah. And, I’ve always loved photography. I used to do it semi-professionally with some photojournalism, but don’t get to do it as much nowadays. However, some of my other Raspberry Pi projects do have to do with cameras. 

But, getting back to the Pi Dramble, over the years I’ve made it more robust, I’ve done some more work to automate the setup process, I’ve documented everything in excruciating detail. There’s videos on the website of how to do the first version of the cluster. I haven’t set up videos for the current version.

But in 2017 when Kubernetes was getting to be a lot more popular and I was starting to use it for some things, I thought, Maybe it could run on the Pi. It ran, but it just barely ran. I had a lot of trouble because the Raspberry Pi only had one gigabyte of memory, and that was the absolute minimum you could run Kubernetes on. So, I got it working. It was kind of janky and kind of fell apart sometimes, and I was getting really frustrated. But in 2018 the Raspberry Pi—no, was it 2018 or 2019?—was that this year that the Pi 4 came out?

IVAN: Pi 4 came out this year, I believe it was in June. I think they were talking about it for months, but no one ever knew when it would come out.

JEFF: That was a lot more recent that I remembered. But the day it comes out, it’s really hard to get Raspberry Pis right after they’re released, because they are very popular for makers and hackers and people who have fun with computers. And so I placed an order from a company in the UK for one, because most of them have limits on the orders for the first few weeks. So, I did one from the UK, one from a place in the U.S., I got two from Micro Center, they’re usually the best place to get them in the U.S.

IVAN: Yes, they are.

JEFF: So, I got those four together, and I got the 2 gigabyte models, and with 2 gigabytes of RAM, Kubernetes actually ran pretty well. So, that’s the current state of my cluster. I have Kubernetes running, I have Drupal running on Kubernetes, I have the 2 gigabyte Raspberry Pi 4s and I power them using power over ethernet, which means I only have one cable I have to plug into each Pi. If you go to, the picture there shows you how they look and what they do.

IVAN: Now, what the heck is a Dramble? I know what a bramble bush is, but let’s take it down. What’s a Dramble?

JEFF: A Dramble, is, I guess it’s called a portmanteau, when you put together different words. A bramble is a bush of raspberries. So, when you see a raspberry bush, I usually call it a raspberry bush, but a lot of people call it a bramble.

IVAN: I knew that was the case. Bramble is something I knew. [laughing]

JEFF: Yeah. [laughing] So, traditionally from the beginning of the Raspberry Pi, people who made clusters of them called them brambles. That’s not as much the case anymore since Raspberry Pi has gotten super popular. But early on everybody would say, “I have a bramble of Pis.” But my bramble of Pis was running Drupal, and so I took Drupal and bramble and put them together and it came up with "Dramble." Little did I know at the time, that was also when I registered the domain for it, that the word Dramble, if you looked it up and found it on certain urban dictionary-type sites, it had a very different definition. But I think now if you search on Google, my Pi Dramble site might have a higher ranking for it.

IVAN: I just did that. [laughing] I typed in "dramble" because I want to know what it means on urban dictionary, and the first hit was

JEFF: Drupal SEO is so good after all these years.

IVAN: Anybody listening out there needs Drupal SEO, Jeff is the guy. [laughing]

JEFF: Yeah. So, that was the original reasoning, but somebody asked me more about it one time and I was like, I’ll look up a little more information, and I found out that the generic term, so, Raspberry is our bramble, that’s their type of bush, but all the different types of berries that are like it like raspberries, blackberries, blueberries, all those things, actually grow in clusters, they call them aggregates of drupelets.

IVAN: What!

JEFF: This is like providence, drupelets? So, it’s a Dramble of drupelets. It’s spelled d-r-u-p-e-l-e-t-s, but that is the official, biological term, I guess.

IVAN: You’re making that up. That can’t be possible. Drupelet. That’s basically Drupal.

JEFF: [laughing] Go to Wikipedia and search for "drupe." It has a whole article about drupelets.

IVAN: Oh my gosh, look at that. A stone fruit.

JEFF: Yeah. I don’t think I would want to eat a stone fruit, that doesn’t sound very tasty.

IVAN: No. That does not sound tasty. How interesting. So, what a great name for this little cluster of Drupal technology. Right?

JEFF: Yeah.

IVAN: So, you talked about creating the cluster. Can we go back to the first version of the Raspberry Pi cluster, the Dramble that you created? What were the versions? Was it Raspberry Pi 2 or 2+ or something like that? I’d like to hear about the stack. I think the stack of technology has changed over the years.

JEFF: Yeah. The first version was a very traditional cluster of web server technology. It was based on LAMP, and actually the first ever version which I never actually put up on GitHub, the first version that I had locally was running Linux, Apache, MySQL and PHP. The way I had it set up was, the top server was running Apache, and Apache was set up to redirect web requests to the two PHP servers, server number two and three. Then I had two database servers, there was the database primary or master server, and the secondary server that was set up to replicate the master in case the master goes down.

There’s still a lot of people that run those kind of setups where there is a server for each one of those purposes. You might be in Amazon or somewhere else, or if you’re using a cloud hosting provider for Drupal, some of them still set up their service that way where you have dedicated servers for a database and all that. The cool thing about it is I used Ansible to do everything, and I actually used almost the same kind of Ansible playbook that I use for Drupal VM to manage all those individual servers and get them set up. I timed it one time. In about 35 minutes it took from the time that you have the hardware plugged in to the time it was serving up a Drupal website with a fully redundant, highly available, relatively high performance, because we’re talking about Raspberry Pis, a cluster of computers.

So, that was the first version way, way back. Then soon after that I switched to using NGINX, just because it was a little easier to configure NGINX to be that load balance earlier, and also NGINX has built-in caching. So, instead of having a Varnish server I could use NGINX for that purpose, because it had the basic caching I needed. Varnish is way better for some things, but I switched to NGINX mostly because you just change a couple settings, and it caches images more easily.

IVAN: How many total versions have there been now if we fast forward to the Raspberry Pi for the cluster that you have now? How many versions have there been, and what are the biggest lessons you’ve learned in the evolution of this cluster?

JEFF: There've been four major versions. It hasn’t been like each Pi miles a new version, it’s more like each technological shift has been a new version. The first version had that first two database servers setup and all that. The second version I actually ditched the replica MySQL server for two reasons. One is, it’s not that easy to maintain a replica setup like that with MySQL, especially for people who are newer to the whole LAMP stack and management and things. And even with automation it can be a little difficult.

So, I ditched that just because that was never a problem in the real world for me, and the most important thing was just to have a backup of the primary server, so I have a nightly backup that it does. The second thing was just streamlining things, making it a little simpler, and the first versions I had had a lot of configurability and things, but really you want the server to be easy to set up and easy to manage, And the more complexity you add to a project like this, especially if it’s a hobby project and I’m not earning tons of income from it—in fact, I’ve never earned a dime from it.

IVAN: Not yet.

JEFF: I have gotten to go to a couple Drupal camps and things, and it’s been great to learn from it, but making it simpler is better. So I think version 2 is just simplifying the architecture, making it so that you could use four or five Raspberry Pis instead of requiring 6, things like that. Version 3, might’ve been the first Kubernetes version. I could be wrong there. That was about a year ago that I came out with 3, and I started working on getting everything into Kubernetes which makes it easier to scale up or scale down if you want to.

You could have 100 Raspberry Pis or two Raspberry Pis or four, depending on how redundant you want everything, how scalable, because Kubernetes lets you say, instead of this server is MySQL and this server is PHP, you could say, I want to have three PHP things and two of MySQL things and one load balancer thing and it just puts them on servers. For MySQL I don’t want the two MySQLs to be on the same server because that would be bad for performance.

So, Kubernetes sorts all that out for you and you just say, Hey, Kubernetes, I have these five things I want to run, and I have these four servers, go do your thing. And Kubernetes manages that for you. That’s the cool thing about Kubernetes. It’s more complicated than that in the real world, but it’s getting easier as time goes on. Kubernetes is one technology that started out crazy complicated and has gotten a lot easier over the years as they refine it, as they make things more robust and a little easier to get started with, and as people understand it more.

IVAN: Is everything in the cluster now orchestrated with Ansible, and is everything virtualized as containers inside Kubernetes, or do you still have an ingress that’s a NGINX or on a separate Raspberry Pi, for example?

JEFF: Almost everything. Right now, the ingress is actually running inside of Kubernetes and the way that I have it set up is you just point your DNS at one of the Raspberry Pis. That’s obviously not wonderful. If that one Raspberry Pi goes down, you've got to point your DNS at another Raspberry Pi. So, that’s one slight weakness of the architecture, but as an alternative you could have another Raspberry Pi being in the ingress and be a load balancer, but if that Raspberry Pi goes down you have a problem. That’s one case where having a cloud hosting provider, like Amazon or Google, is really nice because you can have their cloud load balancers. They take care of all the really complicated stuff in terms of when you get a request for your website. What happens if one of the servers that is routing those requests goes down?

All those cloud systems, they kind of self-heal automatically with DNS and with all their different things. When you’re running a website in your basement, you have one IP address and it’s not very reliable usually, especially if you’re using most ISPs in the U.S.A., and you don’t get any more IP addresses. And if that route goes bad and one server goes down, you can have a lot of issues. So, that’s one area. One of the main reasons why I would say if you have a website that sells things or you generate a lot of revenue off your website, you probably don’t want to run it inside your house like the Pi Dramble website, because it does have 10-20 minutes every few days of downtime, when my ISP is like, yeah, You guys aren’t getting internet for right now. Too bad. [laughing] That happens a lot.

IVAN: What do you think the biggest lesson is that you’ve learned going from your first version to the latest one that you have?

JEFF: I think the biggest thing is that managing Kubernetes is difficult, it’s still not easy, but managing a cluster of application stuff with Kubernetes is a lot easier than it was when it was just individual servers. Because you used to have to manage each application on each server and it would take a lot of time to get things set up and to tweak things and make sure all the backups were good. When you standardize in Kubernetes and have everything run in a container, it is more complicated at the start when you’re learning it, because containers mean that you have to build the container and you have to have a place to store the container and all that. But once you have that set up, everything is automated, like out of the box. You don’t have to spend time worrying about, How do I get this to go here and how do I change the configuration? You just say, Deploy this version, and it’s there and it’s happy. And Kubernetes does it all for you.

That was the biggest lesson; sometimes the complexity does save a lot of hassle if you need it. Obviously, there are a lot of people listening to this probably thinking You might not need to be doing your own hosting stuff. I don’t technically need to, but I do like to because a lot of the work that I do does have to be more complex. So, doing these fun side projects for me teaches me things. Another cool lesson was, when you’re running on a server that’s slower, there’s a lot of things you learn to worry about that will save your skin when you run something on even faster servers when they’re under heavy load.

One of the biggest instances of that is, when you have really slow hard drive access, when it takes a long time to write files on the Raspberry Pi—which it does a lot—you start bumping into weird issues that you never see if you only ran your tests on your local computer that has an Intel Core 2 Duo or whatever, the last i9 chip or something. If you’re doing that with an SSD all the time, you’re not going to run into these weird issues. But when you’re on a cloud hosting provider—which most companies do use those—most sites are on cloud hosting now, disk access can sometimes go crazy, and the error message you see and the behaviors you see can get confusing, because you never really notice that and you can’t replicate it locally. But I’ve been able to replicate some of those weird things on a Raspberry Pi, just because it’s so slow, the disk access.

I actually found a bug in Twig, with the way that Twig renders files. If you have multiple computers writing to an NFS storage device and that device is writing slowly, I found in Drupal 8.0, the first version, right around the beta timeframe was when I found the issue and the issue was still there in 8.0, but they fixed it. It was a race condition, when you have multiple servers writing to slow shared storage, and this was good because other people—it’s not just Raspberry Pis—if you’re using cloud storage, a lot of cloud storage providers have throttling, and you can run into this throttling sometimes, so instead of the site going down, it might just be slow. It’s not all for naught and for fun. There was that issue I found that was an actual bug in Drupal that we fixed.

IVAN: It’s amazing the kinds of things you learn when you try to scale down hardware or scale up requests and scale up bandwidth. You just don’t see things in general unless you do something. So, that’s always interesting to me as well. One of the things that I just realized as you were talking was that you actually had to come up with a way to install Kubernetes on Raspbian, and that means that you had to basically either compile Kubernetes for ARM or they’re already precompiled packages, and that never actually dawned on me. So, how hard was it to put Kubernetes on ARM infrastructure?

JEFF: So, it was perfect timing for me to be getting into Kubernetes on Pi around 2017. There was, I think it was a teenager, I don’t remember the guy's name, but there was somebody who just loved Raspberry Pis and loved Kubernetes, and he spent all this time making sure that the Kubernetes build system built and tested ARM architecture stuff for all the Kubernetes releases. And it just got into Kubernetes 1.8 or 1.9, or something like that, right before I got started. So, when I was looking into it, it’s like, Oh, you just install Kubernetes, just like everything else.

However, Kubernetes is one part of the equation when you’re talking about running a cluster that runs Kubernetes, because you also need something to run the containers, and that’s usually Docker, and Docker for ARM is a little bit different. You have to install it differently and there are some things you manage differently. The versions are sometimes older and there’s weird specific version things that cause trouble. So, I ran into some issues there, and I actually created a separate Ansible role for Docker ARM from my normal Docker one, because the ARM one is more complicated and convoluted. But it’s running pretty well now.

Then another thing that you find out if you’re using Raspberry Pis. Since the chip is an ARM processor, it’s not this typical processor in most of our laptops and servers, which is AMD64 or X86. Since it’s a different architecture, everything has to be compiled for that architecture and container images often have to have a specific version of the image built for it.

So, a lot of times you’ll be like, Oh, I want to deploy this to the Raspberry Pi, you needed to play it in the Raspberry Pi, and Kubernetes is like, I’m not going to deploy that. You’re like, Why aren’t you going to do that? So, I was like, Yeah, it’s not for ARM. Then you have to figure out, is it important enough for me to rebuild this image for ARM? So, I actually build and maintain a set of PHP and Apache base images for the Raspberry Pi, and they’re on my Docker Hub account under geerlingguy. Those are the ones that I use on the Raspberry Pi and build on top of. And a lot of images now are supporting ARM because you can get ARM servers from Amazon and from other companies.

IVAN: But it’s also a little more complex than just ARM though, if I’m not mistaken. There are different versions of ARM. Some are 32-bit, and some are 64-bit, and you can say ARM but it’s even harder because you have to know what architecture you’re building for to make sure that when you build it, it actually runs on that ARM processor. So, my guess is, you actually had to update your images when you went from two to three to four.

JEFF: Yeah, so, Raspberry Pi has its own OS that’s kind of the official one, called Raspbian, and it’s based on Debian, but it’s a 32-bit OS. And there’s some initiatives to upgrade to 64 bit, especially now that the Raspberry Pi 4 has more RAM and can use more of that 64-bit power. But, a lot of the things are either ARM V6, ARM V7, or ARM 64, and you have to always figure out which one is which. And I think, the ones that I’m building right now are ARM V7 because that’s what works on Raspbian.

But if you run a different OS on the Pis which you can, there’s a Ubuntu and actual Debian, and Fedora, and some other versions that you can run on Raspberry Pis, you might have to get a different version of a container which may not exist again. It’s not for the faint of heart to get things running on the Pi all the time. Every year it gets easier, because more and more people support Raspberry Pi stuff.

It’s an interesting thing since I do write a lot about Pis, I found out about a lot of companies who you wouldn’t even think about it, who do remote control systems, they do signage, they do radio frequency stuff, logging systems, all kinds of things that are industrial and commercial applications that use Raspberry Pis for everything. So, there’s a lot more support for it nowadays than there was five or 10 years ago when it was only a bunch of people playing around with stuff in their houses. Nowadays the Raspberry Pi is a more serious computing platform.

IVAN: What a great success story, isn’t it?

JEFF: Yeah.

IVAN: That’s cool. So, you mentioned that you had seen Tess’s talk at Flyover Camp, and so you’re probably familiar with Flight Deck and the hosting that we’ve been talking about, hosting live sites using Drupal on Kubernetes. She’s done some great work in developing that for us, and as you know we’ve open sourced all of it. But one of the things it requires is a S3 block storage like the ones from Spaces from Digital Ocean, for example. I wanted to talk to you about two ideas. One, how hard would it be to get Flight Deck-powered Kubernetes hosting onto your cluster? And two, since it requires S3 block storage, have you thought about implementing block storage on your Dramble?

JEFF: That’s an interesting question, because probably of all the issues there are in hosting Drupal on Kubernetes, or any kind of, what we call now cloud-native hosting environments, one of the main issues is always, how do you store files for Drupal? It’s complicated, because in WordPress or a lot of other systems, usually when you ask that question, you’re just talking about media uploads like, I’m creating a blog post and I upload a picture to put in the blog post, where do I put the picture? That’s part of Drupal’s problem.

That one is very perfectly solved by block storage and works great with that, and you can integrate with CDNs and things, there’s a lot of different solutions for that. What I do on the Raspberry Pi right now is I use NFS, which is not block storage, but it’s just a networked file system that is shared among all the servers, and Kubernetes mounts it into Drupal so Drupal can write to it. But when you’re talking about Drupal, you’re also talking about things like the Twig cache files. Every time that you load up a Drupal 8 website it has to write a bunch of Twig cache files that are like compiled PHP, and that currently writes them by default into your public file system. That’s a lot of files that are read, at least once per server. And so having a slow storage solution can cause problems with that and having slow writes can cause problems with that.

Then you also are talking about CSS compilation and JavaScript compilation. So, there are more complicated things with Drupal. And so, I’ve seen some people do S3 block storage, and as you say as long as you have a provider that is compatible with the Amazon S3 kind of API for writing files, it works so you can do it on Digital Ocean. There are open source block storage software that you can do, and if I were to put it on a Raspberry Pi, I’d probably use one of those open source packages and install it on the Pi. Or, if it’s an internet site, available through the internet, you can even use Digital Ocean Spaces or Amazon S3 even though you’re hosting it locally. So, those are options for it. I think you guys might even use Flysystem or something like that to make Drupal integrate with it?

There’s some PHP level stuff that you can do to write files in different places, but that is probably the number one thing that people ask about and debate about, and I’ve gone a hundred which ways. I think I built it five or ten different ways in the real-world clusters that I built that aren’t on Raspberry Pis. So, that is the million-dollar question right now. There’s even a couple issues on exploring how can we make it easier to use a file system in Drupal that’s shared but doesn’t have to make it so complicated.

IVAN: You’re actually right about Flysystem. That’s exactly how Tess implemented the file storage in the solution we have for hosting Drupal on Kubernetes with Flight Deck, and it’s possible to do if you set up the infrastructure so that you have enough caching, those first-time hits don’t seem as bad. And we run our own live sites and other clients sites live, in production with Flight Deck and with block storage. So, we use Flysystem in Drupal 8, and then we’ve also got Drupal 7 sites that we’re running on the Kubernetes infrastructure. But I don’t recall the name of the module that we’re using. It’s not Flysystem because it came along only in Drupal 8.

JEFF: I know I’ve used in the past s3fs as well.

IVAN: Oh, yeah, that’s it. I think that’s what it is.

JEFF: It’s one of those things where for most sites it’ll work perfectly fine, but there’s always going to be some site that’s doing some weird thing and you’re like, you know. 

IVAN: There’s nothing like beta storage.

JEFF: There’s no good answer. When you have control over the sites that’s the best. I have control over the Pi Dramble site. So, if you look at it, you’ll see I intentionally kept that thing super simple, because even under load the Raspberry Pis can handle that. If I had commenting in accounts, and all kinds of crazy things going on, and real-time chat and who knows what else that I’ve seen on peoples’ sites, it’s going to fall over. 

IVAN: [laughing] Yeah. Well, how taxed do those Raspberry Pi 4s end up being? I’ve seen that you’re writing about the Ice Tower, the need for active cooling on the processors now. How is the cluster handling traffic? And tell me a little about Ice Tower, it sounds so cool?

JEFF: It’s funny to ask about that. Right now, I’m looking at my Mac in front of me, just doing this podcast, the CPU’s at 80% and it’s dying, and the fans are on. And it’s funny because the Pi is sitting over there, the fan's not even on because it’s not hot enough. The Raspberry Pi generally speaking, if you’re not mining bitcoin or something on it, it’s not going to use a whole lot of CPU, and it’s not going to need a whole lot of cooling power. However, when I do these projects I always try to go the extra mile and then an extra ten miles after that, and I always tax them until I can break them, basically. So, I do a lot of performance benchmarking on them, and I found that the Raspberry Pi 3B+ and the Raspberry Pi 4 both, they are not quite as good at keeping their cool.

The Raspberry Pi 4 was even worse than the Raspberry Pi 3, and it was found pretty early on that the reason for that was they had a little flaw in the way that they implemented USB. They added a new USB controller that makes it USB 3, which is awesome. It’s way faster than the old Raspberry Pis with USB 2. You can get an external hard drive and things are a lot faster connection, has gigabit ethernet, that’s awesome, because the old Pis were also constrained to 200 megabits or 100 megabits, way slower. So, it’s really awesome, but the first version of the Pi for ROM or Bootloader, it had a flaw in it that would keep the USB chip in high power mode all the time. So the Raspberry Pi 4, even if you just turned it on and left it sitting there, it would just get hotter and hotter.

If you left it out in the open—which is a bad idea for dust and things like that—if you drop something on it and you short out a circuit or something, so everybody should have a Pi in a case if you’re going to have it running for any period of time. If you have it in a case, it just sits there and turns into a little oven and it cooks itself, and it starts throttling the CPU because it gets so hot. I did an early article about this months ago right after it was released on how it gets super hot, and it’s really bad because if you put it in a case it’ll just cook itself, and that’s without much load. If you put load on it, it just starts throttling right away.

So, I said you basically have to have a fan on the thing. I still recommend having a fan on the new Pi. But they released a firmware update a few week ago that sets the USB chip into the correct mode. It very slightly reduced the performance of USB, but not really in any huge meaningful way for most peoples' usage. But it makes the Pi 8° Celsius cooler, which is hugely significant. That’s a huge difference. I posted one blog post a week or so ago on this, and I’m going to be doing another one because I tested with a couple more cases how that affects the Pi's cooling. Basically, the general thing that I’d say now is, you still need to have some method of cooling the Pis.

So, for my cluster, I have the Raspberry Pi HAT, the power over ethernet HAT that has a fan built into it, and all that fan does is blows a little bit of air onto the processor. That’s enough to keep it cool. You just need some convection over that processor. If you put it in a case, there’s no convection because the case is just going to hold that air inside of it and heat it up. If you have it open air or if you have a fan blowing on it, it will make some convection, it’ll take the air and move it over the processor and take that heat away.

So that’s all that’s really needed. But, a company called Seeed Studio, S2 Pi, they sent me this colossus heat sink, it’s not colossus when you compare it to—I don’t know if anyone ever built a Pentium 2 rig back in the day—you have those giant coolers that are the size of a computer nowadays, and a giant fan or two fans on either side of it, blowing air through it, or If you ever saw the Power Mac G5 quad core. I saw one of those one time, and the cooling system is bigger than everything else on the computer.

It’s kind of the equivalent of that for Raspberry Pi, because Raspberry Pi is a size of a credit card, and this Ice Tower is the size of the whole board, but super tall as well. If you use it, you can’t put it in a case, but it does do an unbelievably good job at cooling Raspberry Pi. It cools the Raspberry Pi so cool that it’s almost like you don’t even have it running when you have the fan on the thing. It does what it says it does, it keeps it ice cold, but at a bit of an expense you can’t use Pi HATs with it, if you use that cooler, you can’t fit it in most conventional cases.

IVAN: You can’t put it in a cluster.

JEFF: Yeah, if you were doing web hosting it wouldn’t be a bad idea to build a custom little case for these things, because that would keep the CPU so cold that it would operate a little better. It would make the Pi operate a little better.

IVAN: Does it have contact with the CPU?

JEFF: Yeah. It comes with a little thermal pad. It’s like a little piece of rubber but it’s thermal rubber and yet you just wedge it between the CPU and the cooler. It has one copper heat pipe that goes up and down, and that copper attaches to cooling fins. The cooling fins distribute the heat. And even if you run it without the fan, it’s going to keep it way cooler than just blowing the fan over a processor. It does a really good job at cooling and the fan makes it do even a better job. The difference was without the Ice Tower it was 60° Celsius, with the Ice Tower it was 30° Celsius. It was a huge, huge difference.

IVAN: Wow. That’s a giant difference. Well, it’s unfortunate you can’t use it in your whole cluster, because that little compact package you have, I would assume the Ice Tower just doesn’t allow for it.

JEFF: Yeah, luckily with the Tower since I switched to the Pi HAT, the power ethernet HAT for it, since it has those built-in fans that’s just enough to keep it from overheating. With Kubernetes running, Kubernetes does take up some CPU constantly, so it does get hotter over time, but it stays under the throttling threshold.

Another option, I actually bought one because I kept having people tell me, “You should try the Flirc case.” I’m like, Ok, whatever. I’ll buy one. So, I bought one this week and I tested it and it doesn’t do as good a job as the Ice Tower. It’s basically a giant aluminum heat sink case for the Pi. The case actually attaches to the CPU, and it does do a pretty good job cooling it. It keeps it down at 40-45° Celsius, which is still way better than just having an open air, having a little fan blowing on it. But, having a cluster of these, they’d probably still get super hot. [laughing] You got to have some sort of fan blowing the heat out otherwise it’s just going to turn into a little oven.

IVAN: Now, in addition to all the hobbies you have, side projects, and so on, you are also an author, and I would love to hear about your latest book and the book that you’ve written on Kubernetes. What are you working on right now?

JEFF: I love writing. I don’t know how many million words I’ve written in my life, on my blog and on other blogs and things, but I love writing. In 2013 or so, I think that’s when I started, I’ve always wanted to write a book my whole life, I want to write a book sometime. I think part of that was jealousy because my brother, when he was a kid, wrote a book and his book, you know, the 15 minutes of fame, his book caught fire and was a local very popular book. He sold maybe 15,000 copies or something. It was pretty cool being the little brother to the brother who wrote that cool book.

But I was also a little jealous, like, I want to do that too. But I also just love writing. I’ve always loved English and literature growing up, and I love reading and I love writing. So I put that together with the fact that Ansible didn’t have a book in 2014. I started in 2013 but in 2014 I’m like, There’s still no book for Ansible and it’s really popular.

So I decided to start writing it with a goal that I would write 100 pages and sell 200 copies. And it was funny because I started writing it on a platform called Leanpub where you can publish it while you’re writing it and sell it while you’re writing it. And by the time I had written about 40 pages I already had sold 200 copies [laughing]. And then fast forward these many years later, it’s 2019, so it’s been in print for five years now, and I now sell it on Amazon and other places and it’s called Ansible for DevOps. And that book has sold over 22,000 copies and it’s now 480 pages, including a chapter on Kubernetes and a chapter on Docker and a couple examples that do Drupal.

One of them was inspired by the Raspberry Pi Dramble cluster. So, that was my first book effort, and it went incredibly well, and I was floored. There’s no word to describe, when you’re like, I want to do this thing my whole life, and this is my goal. And then your goal is surpassed by 50 times over, and you get to meet awesome people because of it. It’s just so many cool things happened because of that book. It also helped my family.

We've wanted to remodel our kitchen and after writing the book and making some profit off of it, I was able to remodel the kitchen four years earlier than we thought we might be able to. That’s a huge change for our life, because our old kitchen was kind of hard with three kids and the way that we live our life and stuff at home, especially since I work remote. And I’m at home all the time. We had an old cramped little kitchen, and we were able to get it better.

So, the book was just awesome. I don’t expect to have the same level of success, but who knows. You never know where it’s going to lead. But I’m working on another book. I actually just finished the first chapter a few nights ago, and I have a structure for the rest of it, and I’m working on examples and chapters.

The next book is going to be called Ansible for Kubernetes, and maybe if Ansible is around in five years and there’s another game-changing cloud infrastructure thing, it’ll be Ansible for that and I’ll have a whole series out. But I’m working on that book. I haven’t published it yet. I probably will pretty soon. Even though it’s not finished, I’ll publish in progress updates on Leanpub, but both of those books, if you go to or, those are the book sites. I love writing them. And one of the best things about writing them in progress is for both books I’ve had a lot of interaction with the people who read it, and they can help me. If they’re interested in something, I can write about that. Or if they are like, "Your example didn’t work on my computer," I can improve it before I actually make a published printed version that people will buy.

IVAN: I very much appreciate knowing about Ansible for Kubernetes. I didn’t know that was what you were working on. I think we actually bought Ansible for DevOps if I’m not mistaken.

JEFF: Thank you.

IVAN: When Tess first started working for us, we wanted to make a big change to how we were doing things at TEN7 and the custom scripts we had, and we wanted more automation. And Tess was very interested in Ansible being the thing, and we had to learn it. So, you’ve certainly provided a great deal of information and helped TEN7 in that manner as well. We wish you all the best for your new book Ansible for Kubernetes, and we’ll be linking to it from the show notes on the podcast episode as well.

JEFF: That’s great. Thank you.

IVAN: You’re very welcome. Well, I think that’s a wrap. We should say goodbye, and thank you so much for being on the show, it’s been a great pleasure talking to you. I hope to talk to you again soon. And I’m going to go to Micro Center right now on a number of different visits, because you can’t buy more than one at a time and buy some more Raspberry Pis, so I have more than you do. [laughing] I don’t know what I’m going to do with them thought. [laughing]

JEFF: You can always get a bunch of Raspberry Pi Zeros and stick them in peoples stocking stuffers, that kind of thing.

IVAN: Oh, that’s a good idea. Stocking stuffer. Five-dollar Raspberry Pi Zero. Awesome. Thank you so much for spending your time with me today. It’s been great.

Author and software developer Jeff Geerling was my guest today, and you can find him across the web using the handle @geerlingguy. You can also find him online at and of course the Raspberry Pi Dramble is at If you’re interested in either of those books you should go to or

You’ve been listening to the TEN7 podcast. Find us online at And if you have a second, do send us a message. We love hearing from you. Our email address is [email protected]. Until next time, this is Ivan Stegic. Thank you for listening.

Dec 04 2019
Dec 04

We need to start somewhere, though, and there is perhaps no more important topic in automation than standardization.

In the Amazee Labs Global Maintenance (ALGM) team we provide long term support for Drupal sites. This includes things like monitoring, updating modules and core, applying security patches, etc. ( Each ALGM team member will typically work on two or three sites during their day, and over the course of a month we may do work across several dozen different projects.

Modules and core - standardizing structure and versions

Let’s first consider the question of updating, patching, etc. The real bread and butter of maintenance. Here, effectively standardizing what is potentially invariant between sites is crucial.

One of the first major items of work that we do when a project comes into ALGM is to spend time getting the overall structure of the site looking like every other project we have in ALGM. We move themes and modules into standard directories, we make sure that the configuration details are stored where we expect them to be, and so on.

This does a couple of things - firstly, it reduces the cognitive overhead of working with the project. This is a major theme, and I’ll discuss it in more detail later, but if you just know where everything will be in any of the 30 projects you’re going to be working with during the course of a month, you’re going to be saving yourself a lot of time.

Secondly, we know that if we write a script for one of our sites (to, say, pull metrics about the files on disk) we know that anything we do for one site will automatically apply to any of our others, since their structure is normalized.

The other big task in onboarding is assessing the state of the project, what kinds of modules have been installed, are there any alpha modules? Are there any patches being applied to contrib modules or to core?

Bleeding edge modules and ad-hoc patches might be okay if you’re looking after one or two sites, but when you scale to any reasonable number, they can spell disaster.

Consider alpha modules, for example - they may provide precisely the functionality you’re after, but there are no guarantees that the module is going to provide a working upgrade path between versions. When it comes to upgrading the system, say, to patch a security vulnerability, you may not be able to automatically upgrade because of the lack of upgrade path.

This is, of course, your bad, since using experimental and early-stage developed modules are bad practice.

Considered from a maintenance perspective, choosing to use modules with no guaranteed upgrade path is a problem because for each of these modules, upgrading may require human intervention. And when you’re patching 80 sites to deal with, for example, a major security vulnerability, human intervention translates directly into the amount of time our sites will be down until they’re patched.

A similar argument applies to patches and forking modules (but these cases aren’t as clear cut).

The take-away here, though, is, try every other solution before using patched, forked, or unstable modules. It’s not just about getting the project over the line, it’s about making sure that it can thrive after it has been launched.

Standardizing workflow

In ALGM we work on sites developed at all different times over the last decade. In that time we’ve seen massive changes to the way sites are built – everything from how dependencies are managed (the whole site checked into Git, submodules, composer), to how the frontend is built. Again, if you’re only working on a handful of sites, you may get away with a README to remind you how to get the site working locally, or how to compile your SASS. But for any reasonably large set of sites, this kind of ad hoc work becomes unmanageable.

Part of our standardization process addresses exactly this. Where there is variation in the build process, we try and abstract these differences away.

Say you have two sites, one whose frontend is built in SASS and Babel, the other built with LESS and uglify. From the maintenance developer working on updating the site’s modules, for instance, the difference between these two frontend builds is irrelevant. And yet, if she wanted to test the site locally, she’d need to build the frontend out to CSS and JS.

How we abstract these is by having a single command, across all sites, that builds the frontend. That way, the developer knows that to build any of our sites, she just has to run a command like “ahoy build-fe” and the front-end assets will be built.

Beyond the convenience of this, there’s another upshot. The code wrapped inside these commands is really the only documentation you need about your site’s front-end build. It’s often said about comments in code that they are lies waiting to happen. For the most part, this will also be true of any documentation you write about your build process. The code that actually builds the process can be trusted to not tell you any lies since it’ll never be out of date, and you know it works because, well, it actually does the job it says it does.

There are a few ways of doing this kind of wrapping. Bash scripts work, as does the trusty Makefile. My own preference is to use Ahoy (

Let what’s unique shine bright

I remember reading a story about one of the modern Zen masters (for the life of me, I can’t recall who it was, possibly Seung Sahn) that always struck me as pretty insightful. A student came to the master to ask why, when they meditated, they all wore uniforms. Surely, the student asked, when we all wear these kinds of drab sitting robes, we lose our individuality? The master said that, in fact, the opposite is true - by standardizing all the irrelevant details, it is what is truly individual in the student that is allowed to shine through.

The same is true for maintenance. By normalizing, standardizing, flattening out all the irrelevant and invariant details of our sites, we can better see and attend to the differences that really make a difference to our sites.

Want to know more about how our dedicated maintenance teams can keep your site secure, updated, and relevant? Check out our services page or get in touch today!

Dec 04 2019
Dec 04
Start:  2019-12-04 (All day) UTC Organizers:  mcdruid Fabianx Event type:  Online meeting (eg. IRC meeting)

Per the D7 release schedule we aim to release Drupal 7.68 on 2019-12-04.

Details of what will be in the release can be seen here:

The final patches for 7.68 have been committed and the code is frozen (excluding documentation fixes and fixes for any regressions).

Relevant Change Record(s) for the release (this is not the full list of changes, rather only a list of notable API additions and other changes that might affect a number of other modules, so it's a good place to start looking for any problems):

If you do find any regressions, please report them in the issue queue. Thanks!

Dec 04 2019
Dec 04

What’s new in Drupal 8.8.0?

The last normal feature release of Drupal 8 includes a stable Media Library as well as several improvements to workspaces and migrations. The new experimental Claro administration theme brings a fresh look to site management. This is also the first release to come with native Composer support.

Download Drupal 8.8.0

Stable Media Library

The Media Library module allows easy reuse of images, documents, videos, and other assets across the site. It is integrated into content forms and seamlessly fits into CKEditor. You can upload media right from the library and even reuse a combination of uploaded and existing media. Media Library was previously included with Drupal core as a beta experimental module.

New experimental administration theme

The Claro administration theme was added to Drupal core with beta experimental stability. The new theme is clean, accessible, and powerful. Administration pages are more touch-friendly, and color combinations and contrasts are more accessible.

Significant improvements to Workspaces

It is now possible to define hierarchical workspaces (such as preparing a "New Year's" issue for a magazine under the "winter issue", while both receive changes to be deployed). Workspaces can now work with Content Moderation, and path alias changes can also be staged.

Native Composer support included

Drupal 8.8.0 is the first release to include native Composer support without reliance on third-party projects to set up Drupal with its dependencies. New sites can be created using a one-line command.

Migration improvements

The multilingual migration path is still experimental, but has received various updates. This includes handling of vocabulary language settings, term language information, and localization. Modules can now specify whether migrations provided by them are finished or not finished to help audit completeness of available migrations.

New experimental Help Topics module

The existing help system is module based, whereas users intend to complete tasks, not use modules. A new task-based Help Topics beta experimental module has been added to bring in-Drupal help to the next level.

The way to Drupal 9

Drupal 8.8 is the last minor release of Drupal 8 to include significant new features or deprecations prior to 9.0.0. The next (and final) minor release, 8.9, is planned to be a long-term support release that will include all the same changes as Drupal 9.0. It will not contain significant new features compared to 8.8.0, although existing experimental modules may become stable, and small API and UX improvements can still be added.

Drupal 8.9.0's planned release date is June 3, 2020, and our target release date for Drupal 9.0.0 is the same day. Most Drupal 9 preparation steps can be done on your Drupal 8 site, custom code and contributed modules now.

What does this mean for me?

Drupal 8 site owners

Update to 8.8.0 to continue receiving bug fixes and prepare for 9.0.0 (or 8.9.0). The next bug-fix release (8.8.1) is scheduled for January 8, 2020. (See the release schedule overview for more information.) As of this release, sites on Drupal 8.6 will no longer receive security coverage. (Drupal 8.7 will continue receiving security fixes until June 3, 2020.)

Note that all Drupal 8.8.0 sites (new installs and updates) now require at least PHP 7.0.8.

Updating your site from 8.7.10 to 8.8.0 with update.php is exactly the same as updating from 8.7.8 to 8.7.9. Drupal 8.8.0 also has updates to several dependencies. Modules, themes, and translations may need updates for these and other changes in this minor release, so test the update carefully before updating your production site. Read the 8.8.0 release notes for a full list of changes that may affect your site.

Drupal 7 site owners

Drupal 7 is fully supported by the community until November 2021, and will continue to receive bug and security fixes throughout this time. From November 2021 until at least November 2024, the Drupal 7 Vendor Extended Support program will be offered by vendors.

The migration path for monolingual Drupal 7 sites is stable, as is the built-in migrationuser interface. For multilingual sites, most outstanding issues have been resolved. Please keep testing and reporting any issues you may find.

Translation, module, and theme contributors

Minor releases like Drupal 8.8.0 include backwards-compatible API additions for developers as well as new features.

Since minor releases are backwards-compatible, modules, themes, and translations that supported Drupal 8.7.x and earlier will be compatible with 8.8.x as well. However, the new version does include some changes to strings, user interfaces, internal APIs and API deprecations. This means that some small updates may be required for your translations, modules, and themes. Read the 8.8.0 release notes for a full list of changes that may affect your modules and themes.

This release has advanced the Drupal project significantly and represents the efforts of hundreds of volunteers and contributors from various organizations, as well as testers from the Minor release beta testing program. Thank you to everyone who contributed to Drupal 8.8.0!

Dec 03 2019
Dec 03

Drupal 8 offers considerable functionality for managing fielded content. Unexpected business needs, however, can result in less-than-ideal workarounds, such as rich text, when time, budget, or data constraints prevent more Drupal-specific solutions, such as Views.

Maintainability can be impacted when rich text is used for unintended purposes, such as alternative page layouts. This is among the reasons why it's essential for developers to guide clients toward better solutions, while carefully curating tools available in the rich text editor.

The Drupal Paragraphs module provides a solution for breaking up, reducing, and managing rich text at the content level.

What are Paragraphs?

Paragraphs are fielded entities that are specific to a single piece of content. Adding Paragraphs to a node is like adding blocks to a region. For example, if a blog post needs a data table inserted into its rich text, rather than embedding something or hard-coding it, the following Paragraphs could be added in place of a single rich text field:

  • Paragraph type: "Basic Content" - This would contain the first part of the rich text in this example. This Paragraph's type would consist of a single rich text field.
  • Paragraph type: "View Content" - This Paragraph's type would have a single "Views Reference" field.
  • Paragraph type "Basic Content" - The remaining rich text content would be placed into this paragraph, following the view block containing the data table.

In addition to Paragraphs, it is worth noting that the "Entity Embed" module can allow entities to be embedded inline within rich text content. This can be helpful in reducing complexity of rich text and it is convenient to be able to set the embedded content's view mode.

Additional Usage

Paragraphs can also supply settings fields on the content edit form for customizing a page's output. For instance, a "Recent Blogs" paragraph type that displays a view block could have custom settings to control the number of results, teaser to display, and could provide some template-specific logic, such as "title position." This approach provides the flexibility of content-specific customization managed at the content level.

Given that Paragraphs are entities, Paragraphs can also have child paragraphs. For example, a parent Paragraph could act as a general container for different kinds of content, similar to a queue. An example of this might be a grid of media, blog posts, and taxonomy terms, with associated theme-level templates and styles to support this presentation. Although other solutions can do this, this approach is content-specific and takes place on the content edit form.

Tips for Implementing Paragraphs

  • Survey site pages to identify repeated use of similar or duplicate content within each page's "content area" where page-specific content is displayed. Then, consider moving those repeated instances of content into blocks or views so that paragraphs can reference that content in the appropriate locations.
  • Add a "rich text" Paragraph type as a tool for breaking up rich text when some of its content can be displayed using non-rich text paragraphs.
  • If block content is being added above or below the content area for multiple pages via block visibility path settings, consider adding those blocks to those pages via "block reference" paragraphs instead.
  • Be sure to review and set permissions when adding new Paragraph types.

Paragraphs is a powerful Drupal module that provides a wide range of possibilities concerning content creation and presentation. Interested in exploring the possibilities for Paragraphs and optimizing the experience of your Drupal site? Contact us today.

Dec 03 2019
Dec 03

PHP 7.4.0 running on Drupal VM with Drupal 8's status report page

Drupal VM 5.1.0 was just released (release name Recognizer), and the main feature is PHP 7.4 support; you can now begin running and testing your Drupal sites under PHP 7.4 to check for any incompatibilities.

PHP 7.4 includes some new features like typed properties, arrow functions, and opcache preloading which could help with certain types of code or site deployments (I'm interested to see if opcache preloading could help the startup time of Drupal inside container environments like Kubernetes!).

And with the release of PHP 7.4, PHP 7.1 support was dropped—thus Drupal VM 5.1 is the first version to completely drop support for PHP 5.6, 7.0, and 7.1. In the past, it was possible (though not recommended or supported) to install these older PHP versions. As of Drupal VM 5.1 it is no longer possible. So if you need to still migrate some code from an ancient codebase running on PHP 5.6 or some other unsupported version of PHP, stick with Drupal VM 5.0 until that's done.

There are a few other small bugfixes and compatibility updates in Drupal VM 5.1 (see the CHANGELOG for details), but the headline feature is PHP 7.4 support. Go check it out at!

Dec 03 2019
Dec 03

About the Webform module

The Webform module is a form builder and submission manager for Drupal. The Webform module allows site builders to customize forms and route submissions to multiple systems, including email, remote servers, and spreadsheets.

About the Group module

The Group module allows site builders to create arbitrary collections of content and users on a site and then grant users access to these collections. The Group module allows sites to build communities and manage their organization by creating groups of users with various levels of membership.

The Webform module for Drupal 8 does not fully integrate with the Group module. In Drupal 8, webforms are configuration entities, however, the Group module currently only supports content entities. To learn more about this issue, see Issue #2856333: Webform as group content.

Webforms can be attached to nodes, which are content entities which are supported by the Group module. This approach only provides access controls to determine which group members can simply view and submit a webform. It does not provide webform submission and element level access controls.

For example, a group could have a dedicated event registration system with a dedicated registration webform. A group administrator can control who has access to the event registration webform but there is no mechanism to allow group-specific roles to view, manage, and delete event registrations.

Provide webform submission and element level access controls to webforms attached to nodes.

Existing access controls

The Webform module already provides roles, user, and permission level access controls to webforms, submissions, and elements. There is even a dedicated Webform Access module that provides webform node-specific access controls using webform specific groups. The Webform Access module is a lightweight group-based access control system for sites that don't need a full-blown Group module implementation.

Learn more about the Webform module existing access controls.

Extending access controls

The Group module includes support from group-specific roles known as 'Group roles'. 'Group roles' are similar to Drupal's out-of-box user, roles, and permissions that allow administrators to select which roles with permissions are applicable to a user. 'Group roles' are specific to members of the group. Since the Webform module already provides 'user role' access controls, it makes sense to extend this solution to support 'Group role' access controls. In other words, anywhere you can select 'user role' level access, you can now set 'Group role' level access.

'Group roles' have been added to the webform access controls and element-specific access controls.

Webform access controls

Once the Webform Group module is enabled, when you navigate to a webform's access form, you will see the 'Group (node) roles' select menu appended to every operation/permission except for configuration access. Every group type role is listed and general roles are also supported. For example, you can select the 'Member' role and all members of the current group will be automatically assigned this permission. For example, members of the current group can be allowed to edit their 'own' submissions.

The current group is determined by the currently loaded webform node's parent group relationship. Since webform submission stores the webform node as the source entity, a webform submission is also able to load the current group based on the source entity relationship. In other words, as soon as a webform node is associated with a group, the 'Group role' access controls will start being applied to the Webform node and its submissions.

Below is a screenshot of 'Group (node) roles' on the webform access form.

'Group (node) roles' on the webform access form

'Group (node) roles' on the webform access form

Element access controls

To allow groups to fully administer a webform node's submissions, it helps to provide administrative elements on a webform. Administrative elements are just webform elements with access controls. Now, you can apply 'Group role' access control and allow certain group roles to view and update administrative elements. The most common use case for administrative elements is to permit certain users/roles to add notes and reviews to a submission.

Below is a screenshot of 'Group roles' on the element edit form.

'Group roles' on the element edit form

'Group roles' on the element edit form

Email handler tokens

Webform email handlers now also include the ability to send emails to all members of a group role. For example, an email notification can be sent to all members of a group or just a few people who are assigned the 'Manager' group role. In the backend, the email handler's group roles are defined as tokens that return a comma-delimited list of email addresses.

To allow group roles to receive emails, site builders must explicitly allow each group role to be enabled and available to receive an email. This ensures that site builders understand that all group role member's email addresses will be exposed to anyone building and configuring a webform.

Email handler tokens

Email handler tokens

Some limitations and provisos

Webform Group integration is limited to webform node submission management. The recommended workflow would be for a site builder to create a shared webform that is reused by multiple groups. Each group has a dedicated webform node instance for the shared webform. The new webform group roles access controls are then used to decide which group roles (aka members) can create, update, and delete their own submission or any submissions.

To allow a group to create one-off, group-specific webforms, site builders would have to use the existing webform permission system, possibly combined with some custom code to make it easier for a created webform to be associated with a specific group.

Webform Group Demo module

Besides telling someone how a feature or module is supposed to work, it also helps to show them how the feature or module works. The Group module is a very powerful and flexible solution that requires a site builder to understand the concept of group types, roles, members, and content. Sometimes the best way to understand a module is to build out a demo that shows the baseline functionality required to address a common or specific use case.

The Webform module now includes the Webform Group Demo module, which shows how to implement webform group role access controls for a webform referenced by multiple group-specific webform nodes. The Webform Group Demo installs configuration for two group types, which are called A and B, with some group roles including member, reviewer, manager, and administrator. An install hook creates two group instances for each group type with related user accounts, members and finally webform node instances.

Webform Group Demo module

Webform Group Demo module

New access control related hooks

The Webform module includes a lot of submodules, which are all optional. Packaging and maintaining these submodules makes it easier to ensure API changes do not break any integrations. A byproduct of using submodules is occasionally we’ll find the need to improve existing APIs and add new APIs or hooks.

To improve the extendability of webform access controls the below hooks were added.

Element access hook



array &$element,

\Drupal\Core\Session\AccountInterface $account = NULL


This hook makes it possible for modules to decide when a webform element should be visible or hidden to create, update, and view operations. It is important to note that a module can also use form and element alter hooks to set an element's #access property to FALSE to hide an element.

Submission query access alter hook


\Drupal\Core\Database\Query\AlterableInterface $query,

array $webform_submission_tables


This hook allows modules to decide which submissions are visible on the results page and in a webform submission view. Altering the submission query prevents submission data from being unintentionally displayed when creating a list of submissions. Currently, only the Webform Node, Webform Access, and Webform Group implement this hook.

It is worth noting for webform and webform submission level access controls, developers should use hook_ENTITY_TYPE_access() API via hook_webform_access() and hook_webform_submsision_access().

Sponsoring a feature

The Webform Group integration was sponsored by Lutheran Church of Bavaria. The Lutheran Church of Bavaria is using Drupal 8 to build out its intranet. They are using the Groups module to build out their organization's internal subdivision workspaces, and the Webform module is being used to handle internal human resources and general requests.

If you want to sponsor a feature, please read my blog post and create a ticket in the Webform module's issue queue.

Backing the Webform module

Open Collective is providing us, Drupal, and Open Source, with a platform to experiment and improve Open Source sustainability. If you appreciate and value what you are getting from the Webform module, please consider becoming a backer of the Webform module's Open Collective.

Almost done…

We just sent you an email. Please click the link in the email to confirm your subscription!


Dec 03 2019
Dec 03

With our Drupal SEO guide, you don’t have to go too far in search of SEO modules, features and tips to boost your Drupal website ranking. Read and bookmark this for future reference!

We all know Drupal as this robust, flexible and dependable CMS platform but not many realize its abilities when it comes to SEO. SEO can be one of the most influential factors for the success of an organization or a business. Did you know that 93% of online experiences start with search engines and 51% of all website traffic is attributed to organic searches (source)?! 

When people from around the globe search for your product or services, you want to appear as high as possible on the search engine ranking. Improving your SERP (Search Engine Results Page) ranking is now more important than any other marketing strategy. Ideally, Drupal SEO is about making your website easy for both your visitors and the search engine crawlers to understand. Thus, your SEO strategy begins long before your Drupal website is built. With an effective long-term perspective, its amazing collection of modules, its flexibility and customization options and not to forget, the loyal community working towards the betterment of the open source platform, Drupal 8 tops the CMS chart. Drupal 8 offers some exemplary SEO modules that can boost your Drupal 8 SEO and SERP ranking.

Lay your Foundation

With Drupal 8, most of the required SEO best practices are already embedded into the core of the platform and with a little knowledge of SEO and some must-have configurations, anybody can possibly boost their website’s SEO to drive more traffic. But before you jump right into the tools and other configurations on Drupal 8, sit back and think about the basics which you need to get right for your website's success.

Things to remember -

  • With your website goals in sight and your visitors' interests in mind, sit down and form a proper pre-SEO strategy to begin with. 
  • Know your audience before you begin with your Drupal 8 SEO strategy. Once your audience set is established, shooting targeted content will be easier.
  • Pay attention to every detail that goes into your On-page SEO (content, improve keyword ranking), Off-page SEO (backlinks) and Technical SEO (site architecture, UX, clean code). 
  • Website performance and site speed directly contribute to a website’s SEO ranking factor. This is not just true because of Google’s algorithm update for speed but also because a slow loading website hampers user experience.
  • Yes, come 2019 and Google has changed the way SEO used to work previously. The focus is more now on the value you bring to your users – mainly through content. Hence, getting your Content strategy right is very crucial for a good website ranking.
  • Google favors websites that make it easy for users to navigate and access irrespective of the device. With Drupal 8, you can be assured of a responsive website because of its Mobile-first approach. 
  • Remember that SEO works differently for different businesses. There is no one-size-fits-all when it comes to crafting an SEO strategy for your Drupal website.

Top 5 Drupal SEO Modules to Optimize your Website

With Drupal 8 and the continuous innovation approach, it has adopted some of the best-in-class technologies thus making it more future-proof. More importantly, it has made content authoring more powerful and easier at the same time. One of the great things about Drupal 8 is that it is "SEO ready" right out of the box. To begin with, let us talk about some top Drupal SEO modules that help enhance your SEO efforts on your Drupal website.

1. Drupal SEO Checklist Module

If you are a ‘To-do-list’ person who is in love with organizing things, this Drupal SEO module is for you. This is an important SEO module which does not directly affect your Drupal SEO and improve the SERP but will provide critical information on the changes to be made on the site. The Drupal SEO Checklist module checks your entire Drupal website for proper search engine optimization against SEO best practices and tells you what to do. It provides a detailed report on what needs to be done to improve the performance of your Drupal website.

          Drupal SEO Checklist

The Drupal SEO checklist module keeps a track of how tasks have been taken care of, what has already been done (with timestamps) and what needs to be attended to. If a task needs you to install a module, it provides with a link to download it as well. This data provides a report that can be used for further monitoring.

2. Pathauto Module

Using clean URLs that indicate what content it represents is extremely important for SEO. One of the most important and useful modules for Drupal SEO, Pathautho module plays a major role in creating SEO-friendly URLs on your website. The usual "example[dot]com/node/1" can be replaced with more SEO specific URL aliases such as "example[dot]com/page/keyword". Based on the category of your website page or based on the page title, with Pathauto SEO module you can build URLs which are SEO friendly. These intuitive URLs are easy for the visitors on your site to understand what they are looking at and where they are, which helps in improving your site ranking on search engines.

         Pathauto Module

3. Google Analytics Module

In our recent post, we discussed how you can add Google Analytics module to your Drupal website and also create custom reports for better performance of your website. Though the Google Analytics Drupal SEO module does not have any direct effect on your Drupal SEO or does not improve your search engine ranking, it plays a major role in providing the necessary information that can amplify your Drupal 8 website's SEO success. By tracking your visitors, their behavior and interests within your site, you can change or add new strategies to drive more traffic and increase conversions. You can also use the GA Reports module that can provide you with a graphical representation and details reports about your Drupal website.

drupal google
        Google Analytics Module

4. Global Redirect Module

Google certainly does not like spammy duplicate content on a web page. Such content can have a negative impact on your SEO efforts and as a result, can harm your rankings on the search engine. On Drupal, while you are happy creating clean URLs with the alias system, you should note that there is a small problem arising. With the creation of new URLs, the default URL still exists and the search engines do not see it as a good sign.


         Global Redirect module

The Global redirect module helps in rectifying this problem by verifying the existence of an alias for a URL and redirecting it to the same. The Global redirect module also plays a role in checking the URL implementation and permission or the access required to the nodes and URLs. However, this module has been deprecated for Drupal 8 and the functionalities are now merged into the Redirect module.

5. SEO Compliance Checker Module

A module which is of great help to Drupal SEO beginners and webmasters, SEO Compliance Checker module performs a complete check when a node is created or modified on your Drupal website. The execution includes checking if the titles and meta tags are optimized, no alt tags are missing, optimized keywords usage and other important factors for better SEO and to improve keyword ranking.

           SEO Compliance Checker Module

While the core module - seo_checker does not perform any of these checks, it is the submodules that come along (basic_seo_rules.module and keyword_rules.module) which execute these checks for the implementation of some basic SEO rules. The core Drupal module, on the other hand, gathers the required information about the checks to be performed and applies them to collect the results.
In addition to these modules, there are many other Drupal 8 SEO modules such as the Page Title module which allows the page title to be set, the Meta tag module which equips you with complete control of meta tags on your Drupal website, and the XML Sitemap module to create a search engine readable, dynamic sitemaps.

Some Additional Tips to Improve your Drupal site's Ranking

Just to let you know, in the time you took to read the blog until this point,

  • More than a million Google searches were made.
  • Close to 20,000 Facebook posts were posted.
  • More than 1000 blogs were posted on the internet.

The internet is noisier than ever now, and it doesn't seem like it is going to stop anytime soon. SEO at its beginning stages was all about cramming your website with keywords and let the crawlers do their magic. But over time, SEO has blossomed with Google introducing some amazing algorithms and updates to curb the black hat SEO practices.
Right now, for a successful Drupal 8 SEO campaign, you need to study your visitors, their behavior and interests on your website and curate the content accordingly to stay ahead of the curve. You don't want to be in the midst of a content gap which can create problems for your website's conversions. With this study, you have a real opportunity in hand to develop fresh content for your Drupal website and optimize it for the searches on the search engine.

Dec 02 2019
Dec 02

If you’ve been thinking to create an e-commerce website, the best moment is now. Don’t allow your competitors to grab the low-hanging fruit of online commerce!

Hit the link if you are ready to ask us to create an online store for you. We can also advise you on choosing the right e-commerce platform. Let us explain in this post why we think it’s best to create an e-commerce website with Drupal.

Choosing the right e-commerce platform

Not all e-commerce platforms are created equal. Some are better suited to your business needs than others. They either have the necessary features out-of-box, or offer better, easier, and more native options for their creation.

Yes, it’s usually possible for developers to build any missing functionality from scratch on any platform — but in some cases it might take more time, cost, and effort. So it’s better to not “expect the fish to climb a tree” and instead choose the right e-commerce platform from the start.

Why use Drupal for e-commerce: 10+ convincing reasons

Drupal is a free and open-source CMS that suits every website type. Among the most popular uses of Drupal website development is e-commerce. Drupal’s integrated e-commerce platform, Drupal Commerce, is extremely powerful and follows the latest trends.

So while describing the benefits of Drupal for e-commerce, we will focus primarily on Drupal Commerce 2 development for Drupal 8 online stores. Let’s go!

Content-driven e-commerce

Content marketing is one of the surest ways to get better SEO results — this is how modern Google algorithms works. And, of course, good content is able to convince your customers, keep them navigating your website, and drive sales. This kind of content could include blog posts, user guides, reviews, etc. properly interlinked with product pages.

That’s what makes content-driven commerce so popular. To use this approach, you should have your e-commerce platform deeply integrated into a content management system. If its not out-of-box, you will need a lot of effort to get the two systems to work together effectively.

Even if this functionality is added by a development team, it will be far from the seamless and natural integration that Drupal Commerce has with Drupal. This is one of the big reasons to create an e-commerce website with Drupal rather than with “isolated” e-commerce platforms like Magento or Prestashop.

Content-driven e-commerce in Drupal

Unlimited extensibility

If you choose to create an e-commerce website with Drupal, you will see there is literally no limits to what it can be equipped with. You will also appreciate the devoted community of contributors who create hundreds of free extensions:

SShop Drupal e-commerce themeCommerce Kickstart Drupal e-commerce distribution

Integration with payment gateways & other systems

An online store often largely depends on third-party systems such as payment gateways, CRMs, analytics services, marketing automation, and more.

Choose to create an e-commerce website with Drupal Commerce, and you’ll see D8 is a third-party integration paradise. Thanks to the API-first initiative, it gets connected via a REST API to any software.

And, of course, we should mention the numerous free modules for your e-commerce website’s smooth integration with particular services. When it comes to payment gateways alone, Commerce has 80+ of them connecting you to PayPal,, Amazon Pay, Realex Payments, Stripe, SagePay, and more. Let your customers choose their preferred method of payment!

Drupal Commerce Stripe module

Mobile e-commerce due to mobile-first design

The share of mobile retail commerce sales is forecast to reach 53.9% in 2021. Compared to just 34.5% in 2017, this movement looks like an avalanche, doesn’t it? Add to this the fact that shoppers from mobile phones have a higher buyer intent.

Your Commerce store will have all the benefits of Drupal 8, including the mobile-first architecture. It will be easy to make it display conveniently on all devices and in all browsers. The size and positioning of images, buttons, forms, etc. will make it easy to browse the products, put them in the shopping cart, and proceed to checkout from a mobile phone.

Mobile e-commerce in Drupal

Cross-country reach in different languages

Speak your customer’s language with multilingual online store on D8. It’s a way to multiply your sales with just a few clicks and settings. Undoubtedly, Drupal 8 is the best choice for multilingual sites. It supports almost 100 languages out-of-box, including ones with RTL text direction.

The majority of interface text is already translated by volunteers — you can just use it or adapt to your liking. All content (including products, of course) can be easily made translatable. Your store editors will enjoy handy dashboards. Alternatively, you could also integrate automated translation software, for which Drupal also has free and helpful modules.

Selling physical or digital products

One of the reasons to use Drupal e-commerce in 2020 is that it is not only suited to physical products. Drupal Commerce includes useful functionality that also lets you sell digital products (tickets, subscriptions, educational courses, and so on) on your e-commerce website.

Products convenient to manage

The same product may come in different colors, sizes, etc. How can you make this easier to manage? The system of SKUs in Commerce is very helpful for this.

Every combination of attributes like color, size, or others, is considered a product variation and assigned its own machine-readable ID called SKU. For example, the same red sweater in size S and size M will have different SKUs.

Among other things, this system helps you keep track of purchased products and the ones remaining in stock. We have described product customization in Drupal 8 online stores in more detail.

Granular roles & permissions

Who can be able to manage orders, edit products, and do other things on your online store website? Often, different levels of access are needed so you can achieve better security and convenience.

Drupal lets you create any roles and assign permissions to them. This will help you foresee the smallest detail of who is authorized to do what on your e-commerce website.

Ultra speed and dynamic UX

Customers love to achieve goals quickly and easily, which is reflected in your conversion rate. It’s possible to provide your e-commerce website with an unprecedented speed and create dynamic user experiences. For example, shopping real-time cart updates, flyout cart, and so on.

Here is where the decoupled Drupal Commerce architecture comes in. At the heart of it lies a hot combination of Drupal and one of JavaScript frameworks. They communicate via a REST API thanks to the above-mentioned API-first Drupal nature.

Dynamic UIs in Drupal e-commerce

Multichannel reach

There is an amazing “Create once, publish everywhere” principle. What about creating a mobile app that pulls data in real time from the main e-commerce website? Easy! It’s even possible to have a whole ecosystem of interrelated websites and apps for your brand. Imagine how it can increase your reach while saving your staff time!

And much more!

The list of reasons why you should use Drupal for e-commerce could continue endlessly. We haven’t even mentioned:

  • flexible shipping methods
  • multiple currency management
  • automatic tax calculation
  • easy discount handing
  • advanced search options
  • PCI compliance
  • high security
  • and so on

Let us create an e-commerce website with Drupal for you

Well, are you inspired, or still hesitant to create an e-commerce website? Either way, contact our web development experts and let’s talk about what your future e-commerce store could look like. The only thing we know for sure is that it will look great!

Our Drupal team has extensive experience with e-commerce, with one of the most famous global stores, JYSK, in the portfolio. Take the first step to creating a store that will reach this level or higher!

Dec 02 2019
Dec 02
A Step-by-step guide to integrating your BigCommerce store with the Drupal CMS

The BigCommerce for Drupal module, created by Acro Media in partnership with BigCommerce, was released early this year and brings together two different platforms – BigCommerce, the open SaaS ecommerce platform, and Drupal, the open source content management system. The result provides a wonderful new way for retailers to implement an innovative and content rich headless ecommerce strategy. If you use one and would like to have the capabilities of the other, the BigCommerce for Drupal module is the bridge you need. With this module, you can use Drupal as the powerful front-end CMS with BigCommerce as the easy-to-use and scalable ecommerce backend.

This post is a step-by-step guide for people who want to know how to install the BigCommerce for Drupal module and get started with both platforms. If you just want to know more about the BigCommerce and Drupal together as ecommerce solution, check out this post instead.

How this module works

Here’s a quick overview of how this all works. The BigCommerce for Drupal module integrates BigCommerce and Drupal together, but each platform is still used for different tasks.

In BigCommerce, you configure products, categories, shipping, taxes and everything else for the ecommerce side of your site. BigCommerce is also where you go to manage orders as they come in.

Drupal is then used for the website frontend and theming. Product and category information from BigCommerce are synced to Drupal, importing them as Drupal Commerce products so that they can be displayed and used like any other Drupal-based content. Any non-commerce content is also managed within Drupal. When a customer goes to checkout, a BigCommerce checkout pane is embedded in the Drupal site to securely process payment and save customer and order information.

Setup BigCommerce and Drupal

On to the guide! Follow these steps and you’ll have your BigCommerce and Drupal store configured in no time!


This guide already assumes that you have the following ready.

  1. A BigCommerce account and store created
    You will need to create a BigCommerce account with at least one product, shipping method and payment method configured in your BigCommerce store. Do this here, not in Drupal.

    NOTE: BigCommerce currently offers a 14-day trial period, so any one can go and create and configure a store easily for free. For this demo, I signed up for that and created some random products to use for testing.

  2. A working Drupal 8 site
    You should have a Drupal 8 site with the Commerce module enabled and a default store added (via Commerce > Configuration > Store > Stores). You don’t need to do any other setup here yet or enable any of the other Commerce modules like checkout or payment. BigCommerce is going to handle all of this for you.
  3. An SSL certificate for your Drupal site
    Your Drupal website needs to have an SSL certificate active for the BigCommerce checkout form to render. This is required because it ensures security for your customers at checkout, so make sure you install one.

BigCommerce for Drupal setup guide

With the prerequisites done, here’s what you need to do to the the BigCommerce for Drupal connection made.

Step 1: Create a BigCommerce API account

  1. Go to your BigCommerce store admin page and navigate to Advanced Settings > API Accounts.
  2. Click on “Create API Account” button and select “Create V3/V2 API Token”.

    BigCommerce Store API Accounts page
    Fig: BigCommerce Store API Accounts page

  3. Provide a name (i.e. Product Sync) and select the scope for each features (i.e. if you don’t want the ability for the Drupal admin to modify product information, you can set the scope for “Products” as “read-only”).

    API configuration in BigCommerce
    Fig: API configuration in BigCommerce

  4. Click “Save” to save your changes. Once saved, you will see a summary and a prompt to download a file. Download it and keep it safe. Once you create an API account, you can’t modify the keys (but you can always make a new one).

    BigCommerce API Credentials dialog box
    Fig: BigCommerce API Credentials dialog box

Step 2: Download and configure the BigCommerce for Drupal module

  1. Get and install the BigCommerce for Drupal module.TIP: This module requires a bunch of other modules to work. To get the BigCommerce for Drupal module and all of its dependencies at the same time it’s recommended to use Composer instead of manually downloading it. Running the following command within your Composer based Drupal project will get everything you need.
    composer require drupal/bigcommerce
  2. In Drupal, navigate to module configuration page at Commerce > Configuration > BigCommerce > BigCommerce Settings.
    1. Fill in the API Path, Client ID, Secret Key, and Access Token that you received when creating the BigCommerce API.
    2. Hit “Save”. If everything is correct, you will see a message saying “Connected Successfully”.

      BigCommerce Configuration page in Drupal
      Fig: BigCommerce Configuration page in Drupal site

  3. Next we configure the Channel Settings. This will create a storefront url for you in BigCommerce which will match the one that is generated on the Drupal side.
    1. Select “Add new channel” from the select channel list.
    2. Provide a channel name.
    3. Click the “Create new BigCommerce channel” button. You will then see a Site ID and Site URL on the setting page.

      BigCommerce configuration page in Drupal - Channel settings
      Fig: BigCommerce configuration page in Drupal

  4. Now in the same Channel Settings area, click on the “Update BigCommerce Site URL” button. This lets you confirm that the url generated is actually sent to the BigCommerce, otherwise the checkout form will not be loaded on your Drupal site.

    You can also confirm the channel connection in from within the BigCommerce admin dashboard by visiting the Channel Manager admin page.

    Channel Manager storefront confirmation in BigCommerce
    Fig: Channel Manager storefront confirmation in BigCommerce

Step 3 : Sync products, variations and taxonomies from BigCommerce

  1. In Drupal, navigate to the product synchronization page at at Commerce > Configuration > BigCommerce > BigCommerce Product Synchronization.
  2. Click the “Sync Products from BigCommerce” button and ta-da, all the products, variations, and categories will be synced to your Drupal site in an instant.

    Alternately, you can also synchronize via the following Drush command. Advanced Drupal users can use this command on cron to do automatic syncing.

    drush migrate:import --group bigcommerce
    Product Synchronization page
    Fig: Product Synchronization page

    Fig: Syncing from BigCommerce in progress

    NOTE: If you run into errors when syncing products, it probably because you don’t have a store added in the Drupal Commerce module yet. Add one at Commerce > Configuration > Store > Stores.

    TIP: Any time you make changes to the products in BigCommerce, visit this page or use the Drush command to synchronize the changes. Before syncing, you’ll also see a message telling you that updates are available.

  3. Confirm the products have synced by visiting the Product page for Drupal Commerce at Commerce > Products. A list of all of the products brought in from BigCommerce will appear here.

Step 4 : See the BigCommerce checkout in action

  1. Now that everything is set up, go to a product page, and it to your cart and proceed to checkout.

    If everything was done correctly, you will be able to see the BigCommerce checkout form embedded in to your Drupal site! Hurray! All of the shipping methods, payment methods, tax calculations, and other BigCommerce store configurations will be seen in the embedded form here.

    If you don’t see the checkout form make sure that your channels settings are correct and that you have an SSL certificate installed.

    Drupal’s checkout page with embedded BigCommerce checkout form
    Fig: Drupal’s checkout page with embedded BigCommerce checkout form

    Drupal’s checkout page after order complete
    Fig: Drupal’s checkout page after order complete

  2. Once an order has been placed, the order information will be stored in Drupal (at Commerce > Orders) and will also be sent to BigCommerce (at Orders > View).

    BigCommerce backend View Orders page
    Fig: BigCommerce backend View Orders page

Additional notes

The BigCommerce for Drupal module is ready for production and available for all to use. When writing this guide, there were some additional notes that I wanted to share.

  • At this time, product management should always be handled within BigCommerce and then synced to Drupal. Currently there is no option to bring back a product if you delete it in the Drupal side, so be careful.
  • A development roadmap for the module can be found here. It outlines future features and plans.
  • If you use the module and find any bugs or want specific features, please add them to the module issue queue here.

Acro Media is a BigCommerce Elite Partner

Acro Media is the development team partnered with BigCommerce that made the BigCommerce for Drupal module a reality. We have many, many years of ecommerce consulting and development experience available to support your team too. If you’re interested in exploring Drupal, BigCommerce or both for your online store, we’d love to talk.

View our BigCommerce for Drupal services

Dec 02 2019
Dec 02

Well, now that I’m finally back from DrupalSouth, I thought I would write down a bit of a post-mortem of the conference.

And most importantly, I’m proud to say that my previous blog post about Conference Stereotypes is still as accurate as ever. I ran into every single one during my time in Hobart.

The first day of the conference started with a talk that was given at the last GovCMS mega meetup, which I had missed due to not being in country at the time.  Margery Tongway gave an in-depth look at how she and her team consolidated 14 sites into a single website on the GovCMS SaaS platform.

It was amazing to hear how the multi-year project was delivered on time and on budget, just in time to have to redevelop it into Drupal 8 for the upcoming switch over to Drupal 9.

Up next was a talk on ‘Deploying Drupal on Kubernetes’.  Kubernetes seems to be here to stay as a server platform, and Nick Schuch gave a presentation on the many API’s that Kubernetes has.  There was supposed to be a demonstration, but I think due to running time it was pushed back into a BoF talk that I didn’t attend. 

It was interesting to learn about the many different levels of API’s, and how they all interact with each other.

And then before lunch it was time to brush up on Accessibility and WCAG 2.1 in relation to Drupal 8.  While it wasn’t a technical talk, it was great to learn some new tips and tricks to help make an accessible website.

Morgan Strong talked about the underused ARIA roles, as well as some tools to help troubleshoot issues.  But most importantly, how developers should start with an ‘accessible mindset’ because as we all know, it’s easier to make something accessible from the start then to try and shoehorn it in later.

I asked Morgan what was one modern design feature that he would love to ban from all future websites, and his suggestion was fixed backgrounds.  And how fixed (or even parallax) images can cause motion sickness, when multiple elements are moving at different speeds.  I had never thought about that before… I was really hoping he would say carousels… I hate carousels… 

After lunch I caught a talk by a previous co-worker of mine, Melissa Stubbings, along with Joshua Graham from the War Memorial.

They discussed their implementation of the React360 library into Drupal in order to deliver rich and interesting content to their visitors.

I was blown away with the fact that they had standard content editors able to embed points of interest into the 3d space using the Drupal interface.  This approach of extremely complex content being able to be managed by a low-technical-level content editor is amazing and goes to show how clever development with an eye towards the end user can deliver amazing results.

I can’t wait until they open source their work next year… just need to find a client it will fit with…

Ivan Zugec gave a really interesting presentation about writing blog posts, and how you don’t need to write code to contribute to an open source project.  By writing blog posts and posting tutorials you help not help educate other users, but you’re also raising the profile and building the community.  

As someone who doesn’t think their coding level is up to the level of submitting patches, it was a great feeling to have when Ivan pointed out that writing blogs and tutorials is just as important as patching a bug.  After all, what do you call an open source project with no community… abandoned.

On Friday I went to see Dane Cavanagh talk about the CCAMLR (pronounced Camilla) website, which is the Commission for the Conservation of Antarctic Marine Living Resources.  A multi-national organisation, managed from an office in Tasmania, who has four official languages. 

Meaning that the entire website needs to be available in English, French, Russian and Spanish.

And this isn’t just a case of running the site through Google Translate.  Each node has 4 body fields, one for each language, which is translated by a team of full time translators, two for each language, and they built their own workflow to ensure they could track which languages had been completed, and which were still in progress.

It was interesting to learn how they didn’t leverage any automatic translation systems, and how everything is manually translated to ensure everything makes sense in context and isn’t just a word by word replacement.

Bevan Wishart ran a panel called Drupal Confessions, which was very cool as it allowed the audience to ask anonymous questions and have the panel respond.  It was very heartening to hear that even long time top level developers still Google ‘simple’ problems.

I really wish this talk could have gone on for at least another three or four hours.

After that I decided to check out the DrupalSouth Steering Committee panel presented by Chris Skene on behalf of the entire committee.  It was interesting to see what it is they do, and their plans going forward.  I plan on providing them some feedback on the event and some thoughts on the future.

Lastly was the keynote presentation by Jess of the Core release management team for Drupal.

I never knew how complicated it was to coordinate a security release, and gained some insights into some of the previous releases that have made me go “wtf, why are they making us do that!”

It also felt good to know I’m not the only one who thinks “why do we have 15,000 dependencies!!!!”

All in all, it was a good conference.  The food was amazing, the location was great, and the running of the sessions and the organisation itself was top notch.  Congratulations to the entire organisation crew and volunteers, you all did a fantastic job.

If only you guys were organising QANTAS, maybe people could have gotten home :)

For the full list of videos from the Conference, check them out on YouTube.

Dec 02 2019
Dec 02

With the Views module, it is possible to fetch pieces of data from a Drupal entity and display them according to a specific format. The Views module acts as a query builder, which generates the SQL code, in charge of retrieving the data from the database.

T191128 drupal relationships he first setting when creating a view allows you to choose the base table from which the aforementioned data will be recovered.

When you choose Content as the base table, you also have to specify the Content type, so it will not be possible to retrieve data from other content types and present it within the view unless you set a Relationship between those content types.

This tutorial will explain the concept of Relationships in Views with a basic example. 

Let’s start!

Step #1. The Content Types

For this exampĺe, the content types we will be using are:

  • Author
  • Book

The fields for each one of them are detailed in the tables below:

Content type: Author


Field type


Allowed values

Author image




Date of Birth




Date of Death





Text (formatted, long, with summary)



Content type: Book


Field type


Allowed values

Cover image




Year of publication

Number (integer)




Content (Reference)




Text (formatted, long, with summary)



Notice that the Author field in the Book Content type references the Author Content type. This is how Drupal knows that these nodes are related. It is set to receive unlimited values since a book can have one or many authors.

191128 drupal relationships 001 

After creating the content types, create some dummy content. Make sure that you create the Authors first, and then the Books. That way, you will always select an existing node to reference to.

191128 drupal relationships 002

 Step #2. - Create the View

  • Click Structure > Views > Add view
  • Name the view Book listing
  • Show Content of type Book
  • Choose to Create a page
  • Select Table as the Display format
  • Uncheck Use a pager
  • Click Save and Edit

191128 drupal relationships 003

  • Add the following fields in the FIELDS section:
    • Cover image
    • Author image
    • Body
  • Click Add and configure fields

191128 drupal relationships 004

  • Set the Image style to Thumbnail on both image fields
  • Link the Image to the Content on both image fields
  • Set the Body Formatter to Trimmed with a limit of 200
  • Click Apply three times

191128 drupal relationships 005

191128 drupal relationships 006 

  • Rearrange the fields in the following order:
    • Title
    • Cover image
    • Body
    • Author image

If you scroll down to see the preview, you will notice that the Author’s image is not displaying. That’s because it belongs to another content type. We need to set a Relationship to the image field on the Author Content type.  

Step #3. - Add a Relationship

  • Click the ADVANCED link on the right of the Interface.
  • Click Add in the RELATIONSHIPS option.

Feel free to take a look at all the fields from other tables to which is possible to relate the view to. 

  • Select Content referenced from field_book_author
  • Click Add and configure relationships
  • Check Require this relationship
  • Click Apply

  191128 drupal relationships 007

  • Click Content: Author image (Author image) in the FIELDS section

You will see a new dropdown option on top called Relationship. 

  • Select (field_book_author: Content)
  • Click Apply

191128 drupal relationships 008

  • Save the view and take a look at the created page.

191128 drupal relationships 009

Relationships in Drupal help the site-builder to create complex views, by using data from different tables and presenting them in a logical manner. 

I hope you liked this tutorial. Thanks for reading!

Check out our Drupal 8 video courses here.

About the author

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

At NEDCamp I had the pleasure of seeing many wonderful people and sessions, but, as you may know, my favorite track at most events is the "Hallway Track". If you're not familiar, the Hallway Track is the time in-between sessions where some real magic happens. You have a chance to talk with some of the most amazing minds in the world about topics you're passionate about. You can share knowledge, bounce ideas, have epiphanies, and realize that your current problems (code-wise) are things that other people have run into. One such conversation happened that inspired me to think outside the box to solve a problem.

In my last post we went over how to create a related content section with references to entities that may have empty fields. Today, we're going to take that one step further and create landing pages for content types.

In Drupal, we would ordinarily build these by attaching a view to a content type based on contextual filters or similar in order to get a collection of all content of that content type. Since we don't have Views in GatsbyJS, we need another solution. There are a couple of options out there, including the recently released JSON:API Cross Bundles module, compliments of Centarro and Matt Glaman. However, at the time of this writing there is an issue with the JSON:API Cross Bundles conflicting with JSON:API Extras. So, if you're relying on JSON:API Extras, you'll need another solution.

The problem:

Out of the box, JSON:API does not create a route to retrieve all nodes with any ease. However, there's no need to fear. This post is here!

Now if you're not using JSON:API Extras, I strongly recommend looking into JSON:API Cross Bundles. It creates a route to all content and will simplify your life. If you are using JSON:API Extras, have I got something for you.

Let's dive in.


You're building a decoupled Drupal site and you want to have a reusable template for landing pages that display all content of a content type. This is easy enough to do in Drupal using Views, but we lose Views when going decoupled so we need another way. How do we accomplish this in a decoupled application using GatsbyJS as the front-end?


Strap in folks, this one gets a little bumpy.

Drupal side:

We need to do some work on both sides of the application for this to work. First, we will setup a content type in Drupal to use for our Content Landing Pages. This is kind of a choose your own adventure scenario, but one thing that you absolutely must have is an Entity Reference field that references the Config Entity: Content Type with a cardinality of 1. 

Select this field type:

Dropdown select with Reference: Other selected

 And this is the entity type to reference:

Dropdown select with Configuration: Content Type selected

Now that we have our field created, select any content type that will require a content landing page as an available option.

Whatever else you want to put on this page is up to you. Go wild. Want a hero image? Add a hero image. Want a dancing baby gif? That's your choice and I respect it. Once you've finished making the greatest landing page content type ever™ we can move on to the fun part in GatsbyJS.

GatsbyJS side:

JSON:API gives us something that can help us out a bit. It goes by the name allNodeTypeNodeType and it will let us workaround the lack of a base all-content route. If we explore this in GraphiQL we'll see that we can drill down a bit and get exactly what we need.

  allNodeTypeNodeType {
    nodes {
      relationships {

NOTE: I didn't drill down too far, but all fields are available here.

Let's first create our landing page template in Gatsby.

First, let's just create a simple, empty component for our Landing Page with a basic graphql query.

// src/components/templates/LandingPage/index.js
import React from 'react'
import { graphql } from 'gatsby'

function LandingPage({ data }) {
  return (

export default LandingPage

export const query = graphql`
  query($LandingPageID: String!){
    nodeLandingPage(id: { eq: $LandingPageID }) {

Nothing too fancy here, right? Just a template that we can use to build our pages out without Gatsby yelling at us on build.

Next, we're going to add this template to gatsby-node.js so that we create our pages dynamically.

// gatsby-node.js

exports.createPages = async ({ graphql, actions }) => {
  const { createPage } = actions

  const LandingPageTemplate = require.resolve(`./src/components/templates/LandingPage/index.js`)

  const LandingPage = await graphql(`{
    allNodeLandingPage {
      nodes {
        path {
  `) => {
      path: node.path.alias
      component: LandingPageTemplate,
      context: {

This is pretty straightforward so far, right? Let's think about what we're going to need in order for this to work the way we want it to and pull all of a single content type into our landing page.

We're going to need:

  • The content type we want to build a landing page for.
  • A query to fetch all content a content type.
  • The landing page template with logic to display the content type.
  • Probably some other things, but we'll sort that out along the way. We're in this together, remember?

How are we going to get these things? Let's go down the list.

The content type we want to build a landing page from:

We have this from our Drupal side. Remember, we created the Content Type field on our Landing Page content type? This can be placed in our gatsby-node.js and passed to our query via the context option.

Let's add it in.  First we need to update our graphql query to pull it in:

// gatsby-node.js
  const LandingPage = await graphql(`{
    allNodeLandingPage {
      nodes {
        relationships { // <---- add from this line
          field_content_type {
        } // <---- to this line

What we're doing here is looking at GraphiQL and exploring our data to see what we have available. If we drill down into allNodeLandingPage.nodes we can see that in relationships we have field_content_type with some useful things. Specifically, our drupal_internal__type and name values. Also, notice that we removed nodes.path.alias from the query.

By adding these to our query we can now pass the info through to our created pages. We're going to do a bit of data manipulation here to create our paths dynamically as well. I follow the convention that a landing page's path should reflect the content type that it's a landing page for. So, if we were making a landing page for "Articles" the path would be and articles would have that as a base path to However, you can follow whatever convention you see fit.

To do this, we're going to manipulate the name from the content type into a URL-friendly string by using the JavaScript .replace() function and then pass that to the path option. Since we also want to query for the content type on our landing page, we're going to pass the drupal_internal__type through the context option.

Let's do that:

// gatsby-node.js => {
    const pathName = /g, '-') // <---- New line
      path: pathName, // <--- Changed line
      component: LandingPageTemplate,
      context: { 
        ContentType: node.relationships.field_content_type.drupal_internal__type, // <---- New line

What does the the context option do? It passes data to our component as props. GraphQL already pulls the context data for the queries, which you can see in any query that has a variable for the filter. Usually this is the content ID so that it can build a page for a specific piece of content from Drupal, but we can leverage this to add more variables and more filtering however we see fit.

Our next step is going to be to actually USE this additional info to do something amazing with.

A query to fetch all content a content type:

Let's look back at our src/components/templates/LandingPage/index.js and see what we need to query. We know we want to get all nodes of a certain content type, and we know that we want to reuse this template for any landing pages with content listing. Since we've established that allNodeTypeNodeType gives us access to all content on available to Gatsby, let's query on that.

// src/components/templates/LandingPage/index.js

export const query = graphql`
  query($LandingPageID: String!, $ContentType: String!){
    nodeLandingPage(id: { eq: $LandingPageID }) {
    allNodeTypeNodeType(filter: { drupal_internal__type: { eq: $ContentType }}) { // <---- New section
      nodes {
        relationships {
          node__article {
            path {
          node__page {
            path {

What we're doing here is using that variable we passed via the context option in gatsby-node.js and filtering to only return the content type we're wanting to see. One 'gotcha' here is that this query will also return the landing page that references the content type. However, if you're not creating a landing page of landing pages then you should be alright.

Since we're only creating landing pages for two content types, this is fine, although we're not getting a lot back. Most projects that I've worked on have had some kind of "teaser" display for these kinds of pages. I'm not going to cover the specifics of creating a teaser template here, but the TL;DR is: start with your full display and take out everything but what you want on the teaser. For this post, we're going to create the list of links using the titles.

Now, if the content types that we're creating landing pages for don't have any content, then you're going to have a bad time. In this case, go back to my previous post about empty entity reference fields and see if you can use that to create some default fields and prevent errors or just create some content of the missing type.

Next, let's flesh out our landing page template a bit.

The landing page template with logic to display the content type:

So far, our template, minus the query, is pretty empty and not doing a lot. Let's add in the title of this landing page.

// src/components/templates/LandingPage/index.js
function LandingPage({ data }) {

  const landingPage = data.nodeLandingPage

  return (
      <div className='content-list'></div>

I like to clean up the variables a bit and rename data.nodeLandingPage to landingPage. It's a bit cleaner to me, but do what you want.

Alright, we have the title of this content, but what about the list of content we want to show on this page? Well, we're going to need to do some logic for that. First off, we need to know which content type we're looking for. Second, we need a way find it. Third, we need to clean this data into something usable. Finally, we need to display it.

We could just display everything returned from our allNodeTypeNodeType query, but there would be a lot of nulls and issues parsing the arrays. Here's an example of what that query returns before we massage the data, using the Drupal internal type article:

  "data": {
    "allNodeTypeNodeType": {
      "nodes": [
          "drupal_internal__type": "article",
          "relationships": {
            "node__article": [
                "id": "0e68ac03-8ff2-54c1-9747-3082a565bba6",
                "title": "Article Template",
                "path": {
                  "alias": "/article/article-template"
            "node__basic_page": null

Now, to get the content this way we could do some complex mapping and sorting and filtering, but I tried that and it wasn't fun. Fortunately, Gatsby is here to rescue us and make life easier. Our context option gets passed into our page component as props. If you're unfamiliar with the concept of Props in React, and therefore Gatsby, props are properties that are passed into components. The line 

function LandingPage({ data }) {

could be rewritten as

function LandingPage(props) {
  const data =

but we're using a concept called Destructuring to only pass in the prop that we need. This allows us to create variables from object keys without having to take the extra steps. Our page component props object also contains the key pageContext which is where anything in the context option gets stored to give the page template access to.

Let's bring that in:

// src/components/templates/LandingPage/index.js
function LandingPage({ data, pageContext }) {

  const landingPage = data.nodeLandingPage
  const nodeType = data.allNodeTypeNodeType
  const contentType = 'node__' + pageContext.ContentType

Since we set our ContentType in gatsby-node.js we're able to use that here. Note that we're concatenating the string node__ with our pageContext.ContentType. We're doing this because everything in Gatsby is a node, including content types. This allows us to do the next steps.

Next, we want to clear out all of the non-content type data from the allNodeTypeNodeType query. This is what it looks like if we were to console.log(nodeType.nodes):

      node__article: Array(1)
        0: {id: "0e68ac03-8ff2-54c1-9747-3082a565bba6", title: "Article Template", path: {…}, …}
        length: 1
        __proto__: Array(0)
      node__page: null

We only want the node__article array, so how do we get that? Well, we need to use .map() and a concept called currying. This is essentially creating a function that allows us to use a variable from outside of the .map() scope inside of the .map() callback. It allows us to break down a function into more functions so that we have more control over it, which is what we need here.

// src/components/templates/LandingPage/index.js
function LandingPage({ data, pageContext }) {

  const landingPage = data.nodeLandingPage
  const nodeType = data.allNodeTypeNodeType
  const contentType = 'node__' + pageContext.ContentType

  const getContentArray = (contentType) => { // <---- Curry function, but not as delicious
    return (node) => (node.relationships[contentType])

  const contentArray =

We created our curry function that takes our contentType as an argument. From within there, it completes the mapping and returns our desired array... almost.

Here's what we get back if we console.log(contentArray):

  0: Array(1)
    0: {id: "0e68ac03-8ff2-54c1-9747-3082a565bba6", id: 1, title: "Article Template", …}
    length: 1
    __proto__: Array(0)
  length: 1
  __proto__: Array(0)

We're almost there, but now we have an array of our content within another array. If only there were a function to help us out here...

Just kidding, there is! For this, we're going to use .flat(). The .flat() function flattens out a nested array into a single level. However, there's a gotcha with it, as mentioned in this Stack/Overflow question. We can get around this by using the array-flat-polyfill polyfill.

Add gatsby-plugin-polyfill-io to your project by installing with yarn or npm

npm install array-flat-polyfill
// or
yarn add array-flat-polyfill

and in your component file add the following within

import 'array-flat-polyfill'

So, let's flatten that array!

function LandingPage({ data, pageContext }) {

  const landingPage = data.nodeLandingPage
  const nodeType = data.allNodeTypeNodeType
  const contentType = 'node__' + pageContext.ContentType

  const getContentArray = (contentType) => {
    return (node) => (node.relationships[contentType])

  const contentArray =
  const contentArrayFlat = contentArray.flat()

And the resulting console.log(contentArrayFlat):

  id: "0e68ac03-8ff2-54c1-9747-3082a565bba6"
  path: {alias: "/article/article-template"}
  title: "Article Template"
  length: 1
__proto__: Array(0)

Now we've got exactly what we wanted! The final step is to put this to work. We'll do that by creating a list of titles that link to the content. Your finished component should look like:

// src/components/templates/LandingPage/index.js
import React from 'react'
import { graphql, Link } from 'gatsby' // <--- added 'Link' here to use the link component
import 'array-flat-polyfill'

function LandingPage({ data, pageContext }) {

  const landingPage = data.nodeLandingPage
  const nodeType = data.allNodeTypeNodeType
  const contentType = 'node__' + pageContext.ContentType

  const getContentArray = (contentType) => {
    return (node) => (node.relationships[contentType])

  const contentArray =
  const contentArrayFlat = contentArray.flat()

  return (
      <div className='content-list'>
          // One-liner to create the list of items.
          {, i) => <li key={i}><Link to={item.path.alias}>{item.title}</Link></li>)}

export default LandingPage

export const query = graphql`
  query($LandingPageID: String!, $ContentType: String!){
    nodeLandingPage(id: { eq: $LandingPageID }) {
    allNodeTypeNodeType(filter: { drupal_internal__type: { eq: $ContentType }}) {
      nodes {
        relationships {
          node__article {
            path {
          node__page {
            path {

And that's all there is to it. Hopefully you find this useful and it helps speed up your development with Gatsby a little bit.  If I missed anything on here, please don't hesitate to let me know in the comments. Always feel free to reach out to me on Twitter or Slack or any way you want to.

Credit where credit is due: Shane Thomas (AKA @codekarate) and Brian Perry (AKA @bricomedy) helped me work through this issue at NEDCamp.

Patron thanks:

Thank you to my Patreon Supporters

  • David Needham
  • Tara King
  • Lullabot

For helping make this post. If you'd like to help support me on Patreon, check out my page

Nov 30 2019
Nov 30

Given the facts and figures in this study, there are more than 58 percent of people who prefer their smartphones over desktop or laptop to browse information on the internet. And when those responsible for the development (at the backend) decide to go ahead without any changes for the mobile, the users start getting annoyed. So much so, that 39% of them stop engaging if images don’t load or take too long to load.

In this blog, we will explore some of the awesome Drupal 8 modules for image optimization and how they can help websites reach their desired user experience. 

Drupal 8 Modules For Image Optimization 

Fortunately, Drupal 8 has many useful and out-of-the-box image optimization modules that makes it most appealing among website owners also who look forward to upgrading to Drupal 8.

Read on to find out about those modules that can help you in image optimization-

Responsive Image Module

The Responsive Image module in Drupal 8 encompasses an image formatter and breakpoint mappings to deliver responsive images using the HTML 5 picture tag. It comprises of fallback support for Internet Explorer 8. To get images in IE8 that are not tweaked for a mobile interface, you’ll need to configure the fallback in your display to use your desktop image size rather than “automatic”.

How to Set Up Responsive Images in Drupal 8

Following steps will help you in easy setup of responsive image module-

Step 1: Enable the responsive image module

One of the major changes in building responsive images in Drupal 8 from Drupal 7 is the responsive image module being part of Drupal’s core - there is no need to download an extra module. However, this feature is not enabled by default.

  1. To enable the responsive image module, go to "Admin" > "Configuration" (/admin/config).

  2. Click the checkbox next to "responsive Image".
  3. Click "Install".

Step 2: Setup breakpoints

If you are using a default theme like Bartik, there is no need to create a breakpoints.yml file. Default themes already have this file.

If you have a custom theme, go to your editor. In the root of your theme directory, create a file called "yourthemename.breakpoints.yml".

Your theme directory is usually found at "/themes/custom/yourthemename".

Step 3: Setup the image styles for responsive images

We need to create several image sizes for different breakpoints. Add one image style for each breakpoint you create at your_theme_name.breakpoints.yml.

Step 4: Responsive image styles

We will now assign the image styles with the breakpoints, to create the Responsive Image styles.

Go to ‘Home > Administration > Configuration > Media’ (/admin/config/media/responsive-image-style) and click on ‘Add responsive image’.

Below mentioned is the result of how a responsive image style, once set up,  can turn the tables.


Without the Responsive Image  Module 

With the Responsive Image Module 


1-526074867869569249next 1




last secondlasttttt


ImageMagick Module

Drupal by default comes with the GD2 image manipulation toolkit which helps the image cache module to create different sized alternatives of the same images. While GD does most of the work, it lacks some important features like converting/supporting gif with image style, & supporting of some extra image formats like TIFF. At this point, we need to use ImageMagick to extend support for gif format with an image style.

Follow the given steps to start with ImageMagick-

1) Install the module by running the following command 

Composer require 'drupal/imagemagick'

2) Enable the module with following path  ‘yoursite/admin/config/media/image-toolkit’

3) Select the ImageMagick image toolkit and configure the image quality to 100%.

By implementing the module, the following improvements can be observed:

1) The gif image format support is now enabled when used with an image style.

2) 20-40% decrease in image size

Please refer to below table for detailed output-

Image Format/ Toolkit

GD2 Toolkit

ImageMagick Toolkit








Note: ImageMagick is preferable over the GD toolkit due to the functionalities it provides.

WebP Module

WebP format is one of the image formats developed by Google, capable of reducing the image size by 20-50%. Some of the dependencies which WebP module had before being used in Drupal are as below:

1) At least one image library (GD2, ImageMagick.). In our case, we are using ImageMagick.

2) Images to be rendered using a responsive image style as the WebP module works with <picture> tag only. Any image which is not rendered using picture tag is not converted to WebP form and remains in its original format.

Note: In some browsers, WebP format is still in testing mode. WebP module detects the unsupported browser and renders the original format image instead of WebP format.

Use the below steps to get started with WebP - 

1) Install the module by running the following command

composer require  'drupal/webp'

2) Enable the module and go to path ‘yoursite/admin/config/media/webp/settings’

3) Configure the image quality to 100%.

Below are the improvements that can be noticed on the site alongside a decrease in image size by 20-25% - 

Please refer to below table for detailed output-

Image Format / Configuration

With ImageMagick and without WebP

With ImageMagic and WebP



White second


new brown 2brown fina;



Note: Please note that the size of the gif image remains the same in both cases - with and without WebP. The reason is that WebP does not support gif images on some browsers. Hence, we have excluded the gif by applying a patch on the WebP module.

Summing up:

The bounty you get against the efforts you put in is the website images that look vibrant and crisp on all touchpoints, while still downloading efficiently. Users won’t leave your sites disgruntled anymore as images won’t take forever to download; making a huge difference to your engagement ratio, conversions, and other sales activities.

Drupal is a powerful, robust, and scalable website content management system that ensures every element on the website functions well to deliver a seamless digital experience to users. Using its modules, you can surely manage the images efficiently witnessing the boost in site performance.

(Co-authored by Sumit Kumar)

Nov 29 2019
Nov 29

There’s no denying the fact that our developers are the key to Agiledrop’s success, and accordingly they make up the bulk of our team. It’s only natural, then, that we need to empower them and enable them to grow if we want to sustain this success.

In this blog post, we’ll take a look at what a typical month looks like for a developer working at Agiledrop: what their daily and weekly tasks are, what fun activities we organize to keep each month diverse and exciting beyond new work challenges, and how we just generally maintain a pleasant office vibe where everyone is welcomed and accepted.

We kick each week off with a short weekly meeting, timed strategically to accommodate even those who are used to arriving later, whether that be due to calls with a client in the evening, or just due to it being Monday. 

During the weekly (as we call it), we do an overview of the previous week’s work, then touch base on what the plans are for the current week, if anyone is on vacation, and if there are any new projects, clients or team members. 

The first week of the month we also hold a longer monthly meeting, which again serves as an overview of the past month’s work, as well as any newly acquired projects and/or new hires. 

More importantly, though, the monthly meetings are a chance to recognize and thank those employees who go the extra mile, either by working overtime to keep a project afloat, or by organizing or helping out at an event. 

Finally, we also do an overview of all of the past month’s events, both in-house events as well as larger Drupal events that we attend or sponsor. The former are especially important to a great team spirit and hence to our team’s efficiency and productivity.

These in-house events vary from month to month, but generally try to follow a predefined course. Each month, we have at least 2 employee-centric events, which we typically hold on a Thursday, the same as the aforementioned monthly meeting. 

The first one is the AgileTalk, where developers can present a topic they find interesting - and receive a hefty financial reward as encouragement for taking the time to share their knowledge and excitement with the rest of the team.

The second one alternates between the AgileSport and the AgileFood, which are both intended as a way to get the whole office together and spend some time without focusing exclusively on work. 

In addition to that, we also support the Slovenian developer community by hosting PHP meetups and other events. This year, we’ve hosted two of these in collaboration with the Slovenian PHP community; and our developer Peter Kokot, one of the release managers of PHP 7.4 which was released just yesterday, was actually one of the speakers at one of them.

But, of course, the bulk of our time at the office is dedicated to working on our projects. We spend our days coding and also helping each other out, with lengthy discussions pervading our development channel on Slack. 

This collaboration is also the reason why we work predominantly in the offices - it’s much easier to share knowledge and help someone out with a particularly challenging task if you’re there physically. 

And it’s something every developer participates in, freshly acquired juniors and veteran engineers alike; our strong company culture enables us to accept and appreciate any kind of input, without viewing it as an attempt of undermining someone.

Because we’re frequently in contact with our clients and their own dev teams, we have soundproof booths and several conference rooms in each of our offices, which allows us to accommodate several developers having calls at the same time. 

In the case of a client with a large time zone difference, and consequently less convenient hours for calls, our developers can finish work early and then do the call from home, which allows them to maintain a healthy work-life balance. 


A month in the life of a developer at Agiledrop contains a healthy mix of challenges and team activities. Since employee experience is critical to business success, we strive to make their day-to-day as pleasant as possible and give them abundant opportunities for growth. 

While it’s largely the same as a typical month at most development agencies, we believe our unique set of activities definitely spices things up and helps boost team spirit and forge new friendships. 

Besides these activities, different offices also have different perks - the Maribor team often face off in table football, for example, while our team in Ljubljana can quench our nostalgia by playing some legendary arcade games on our RetroPie.

All of this adds up to each month spent working on interesting and challenging projects, constantly learning and growing, and, most importantly, hanging out and developing new ideas with amazing people. 

Nov 27 2019
Nov 27

Giving Tuesday icon logo globe with heartGiving Tuesday (known online as #GivingTuesday) is the Tuesday after the Thanksgiving holiday in the United States, held on December 3, 2019. What began in the States has grown over the years into an international day dedicated to charitable giving at the beginning of the holiday season, whereby hundreds of millions of people give, collaborate and celebrate generosity.

Coincidentally, is built using Drupal! 

At the Drupal Association, we’ve decided to participate for the first time this year. Knowing the Drupal Community likes to have fun and delve into challenges — such as the ever-popular Trivia Night held during DrupalCons — our staff collaborated to create a trivia challenge never before seen, with Drupal project and product questions, Association facts and more. 

We challenge you to take the quiz on #GivingTuesday December 3rd, and to share with friends to see who can crack this code! Note: Not a literal code! Visit on Tuesday for the link.

We’ll update the leaderboard and congratulate players throughout the day on December 3! 

Thanks in advance for playing, and we encourage you to post your trivia score on social media; this may be our most challenging trivia game yet! 

We hope you'll take a minute to support the Drupal Association and join/renew membership or donate on this international day of giving. At the end of Giving Tuesday, we’ll announce three leaderboard winners: who has won the trivia, who donated the most, and who referred the most new members. The top 10 winners shown on each leaderboard will be entered to win a handcrafted Drupal prize (hint: it might be pictured in this photo)! 


Opening reception with dasjo and lizzjoy in DrupalCon Seattle. photo by hussainweb
photo from DrupalCon Seattle opening reception by Hussain Abbas (hussainweb)

Nov 27 2019
Nov 27

Emerging from test-driven development practices, Behavior-Driven Development is an Agile software development process that supports collaboration among developers and non-technical and business contributors to help formulate and standardize a concrete understanding of how the application should operate.

In our latest webinar, we demonstrated how to use Cypress (and the respective integration module for Drupal) for Behaviour Driven Development (BDD) to elevate the quality of your code and project.
The webinar covered a brief introduction to BDD and testing in general, an introduction to Cypress, how to install and use the Cypress module for Drupal, adding E2E tests to a custom module, and testing a full Drupal project. 

If you’re curious about how Behavior-Driven Development and Test-Driven Development with Drupal & could improve your next project, watch the full Webinar below.

[embedded content]

Nov 27 2019
Nov 27

When is it time to panic?

“God help us, we're in the hands of engineers.” – Jeff Goldblum as Dr. Ian Malcolm in Jurassic Park

With support for Drupal 7 soon to be extinct, many Drupal 7 website owners are anxious to migrate quickly to the next generation of the CMS, Drupal 8. With phrases like “end of life” and “sunsetting” now almost ubiquitously attached to Drupal 7, some are feeling chills of terror sweep over, as if the surface of the water in the glass resting on the dashboard has begun to ripple from the impact tremors.

If you have recently invested in a Drupal 7 website, you may be feeling a strong desire to “simply” upgrade. Some refer to this as a “lift-and-shift” or a “basic 1:1 migration” — the idea being to reproduce the same Drupal 7 website on Drupal 8. Much like visiting the dentist, the defining interests here are to do it as quickly and painlessly as possible. But rather than view it as a necessary evil, we kindly proffer that migrating to Drupal 8 is a fantastic opportunity to improve your Drupal platform.

With the promise of a cleaner upgrade path to future versions of Drupal, moving to Drupal 8 is a big evolutionary step for those leveraging the CMS. It represents a pivotal opportunity to solidify the foundational structure of your Drupal site. In other words, this isn’t the time to go rushing into a migration simply because the end is nigh. As in any replatforming, we should be thoughtful in our planning and approach.

From the Drupal 7 website owners we have spoken to recently, their hopes and dreams for Drupal 8 are paired with a familiar set of questions and anxieties about migrating from Drupal 7. How does it work? What level of effort is required? Have we budgeted enough for this migration? What should we be thinking about as we look at a migration?

Looking around the web, we’ve found excellent articles about the logistics of migration to Drupal 8, but less discussion of the risks and rewards that should inform how you plan a migration that is appropriate for your site. So, we’ve tried to capture some common topics from our conversations with clients for the benefit of all.

Jeff Goldblum looking serious in a leather jacket and sunglasses, silhouetted from behind.

There Is No Such Thing as a Simple Migration (TINSTAASM)

“The kind of control you're attempting simply is... it's not possible. If there is one thing the history of evolution has taught us it's that life will not be contained.” – Jeff Goldblum as Dr. Ian Malcolm in Jurassic Park

Migrations come in many flavors. Migrations can be automated (we configure an existing software or service to manage the migration of code, configuration, and/or data). Migrations can be programmatic (we write a migration script to manage the transfer). Migrations can be manual (some poor individual must painstakingly copy/paste code, configuration, and content from one system to the other). Most likely, a migration from one web platform to another includes several of these types of migration. In the case of moving to Drupal 8, a migration likely encapsulates all of them. 

The reality is that moving from Drupal 7 to Drupal 8 is not as straightforward as most of us would like. Yes, Drupal 8 comes with some excellent new migration tools, but those tools are limited to certain parts of a Drupal website and come with some caveats based on how your site has been configured and customized. One of Drupal’s greatest powers is how extensible it is, allowing Drupal to be a platform for an unlimited array possible web applications. However, this strength can be a weakness when trying to automate migration tooling because each highly-customized Drupal application becomes a fairly unique animal.

What this means for most site owners looking at a migration is that, while there are clear migration paths for some parts of a Drupal 7 site, others will require manual effort. For example, you will find no automated migration paths for your theme(s) or your views, which are significant parts of nearly every Drupal website. Both will almost certainly require some level of manual migration of the code and configuration from a developer. Specifically, PHP template files from your Drupal 7 theme will need to be rebuilt using Twig, so sites with a lot of different content types and/or templates will have a heavier lift migrating to Drupal 8.

Further, the quality of the build of your Drupal 7 site will have a big impact on the effort required in a migration to Drupal 8. Poor choices in the development of the Drupal 7 site can make a migration more complex. For example, themes packed with custom functionality and logic will require greater effort to detangle layout from function. Similarly, the use of custom modules or an over-reliance on modules that have no upgrade path to Drupal 8 can significantly slow down the process and impact the cost of a migration.

Careful planning for these exceptions is required. In most cases, that will include a combination of automated, scripted, and manual migration of various parts of your Drupal website.

Jeff Goldblum with a look of astonishment on his face

Don’t recreate what is better left extinct

“Your scientists were so preoccupied with whether or not they could, they didn't stop to think if they should.”  – Jeff Goldblum as Dr. Ian Malcolm in Jurassic Park

Before we even arrive at how we can migrate a Drupal 7 site to Drupal 8, perhaps we may benefit by first asking whether we should directly migrate the site.

Moving from D7 to D8 is more akin to replatforming to Drupal than, say, upgrading a version of software. As with any replatforming, it is an optimal time to address any issues or problems you’ve experienced with the current website. The reason being that if there are architectural or data model changes to be made, it will be most efficient to make those changes during the replatforming. It makes little sense to undertake the expense of a migration project, if part of what is migrated are the same problems and irritations the old site caused.

So, the first question to ask when considering a migration may be, “How happy are you with how the current site works?” If you’re totally happy, no complaints, then maybe a direct migration from old site to new site is appropriate. If there are some issues you’d like to address, as is common, it’s worth determining if it’s more cost-effective in the long-term to address those during the migration process.

Examine content entry, editing, and management. In particular, ask your content editors what is painful. Are they spending too much time entering or editing content that could be handled more efficiently? Are there data sources that could be better leveraged? Or better normalized and consistent? Or combined to greater effect? Do different types of content have the necessary relationships to other types of content to display those connections in the frontend?

Ask about edge cases and situations where the content model built in Drupal doesn’t always align with the realities of the actual content. Listen for circumstances where X is normally the case, but when Y happens, content editors have to do Z as a work-around. Ask about where the Drupal CMS feels rigid and needs to be more flexible, or where its too flexible and needs to be more constrained (that does happen!).

These are all areas where improvements to the content model begin to emerge. Having these conversations will bring to light whether your Drupal 7 foundation is sufficiently solid to continue as the basis for a new Drupal 8 platform, or whether some restructuring is needed to ensure the longevity of your new Drupal 8 website.

Scene from Jurassic Park when the baby raptor emerges from it's egg

What’s at risk?

“If The Pirates of the Caribbean breaks down, the pirates don't eat the tourists.” – Jeff Goldblum as Dr. Ian Malcolm in Jurassic Park

What’s at risk if you make no improvements to the website when you migrate to Drupal 8? 

In a word, disappointment. Any migration to Drupal 8 is going to be an investment of resources. If no tangible improvements come with the expense, it will feel like a disappointment to many. We’ve seen this happen to clients. While there are inherent benefits to Drupal 8, improvements may not feel tangible enough to stakeholders or site editors/administrators. And if no functionality, usability, or design enhancements accompany the change, it will offer no discernable improvements for site visitors. Taking a minimalist approach of migrating a site “as is” onto Drupal 8 often feels like a heavy lift without any gain. 

Or worse, it may even feel like a step backward if bugs arise during or post-migration. There is always a risk that functionality will degrade in a replatforming project designed to simply replicate the old website. If the only improvements are experienced in the backend of the CMS, major stakeholders may view the project as an investment that simply made things worse.

Additionally, if you decide to address structural issues after migrating to Drupal 8, you risk paying twice for the re-architecture and reconfiguration work. In effect, you pay for some of the costs again because the new architecture and configuration required for the enhancements are “rework” of what the developers performed during the migration. In short, it’s an inefficient use of resources and degrades from the return on the investment in the website.

Lastly, given that future Drupal upgrades will resemble software updates more than replatforming efforts, getting your data and architecture ironed out on Drupal 8 will likely have the ongoing benefit of smoother transitions to Drupal 9, Drupal 10, etc. Without improving your website’s foundational structures, you risk re-introducing your legacy pain points into each new version of Drupal.

Jeff Goldblum's character holds Laura Dern's hands and smiles reassuringly

Mitigate the uncertainties

“See, here I'm now sitting by myself, uh, er, talking to myself. That's, that's chaos theory.” – Jeff Goldblum as Dr. Ian Malcolm in Jurassic Park

You can get answers to a lot of questions about the feasibility and cost of a migration by having a qualified, experienced Drupal 8 engineer perform a technical audit of your existing Drupal 7 website. It’s a small investment (relative to a migration) with a high return in insight and greater certainty. Such an audit should document and analyze:

  • Contributed modules (specifically is there an upgrade path to Drupal 8?)
  • Custom modules / integrations (specifically noting their function, whether there are better approaches or contrib modules, and can the code be ported to a custom Drupal 8 module?)
  • Theme (specifically is there any logic or functionality embedded in the theme which should be pulled out into a custom module, and how many templates does the theme use?)
  • Views (specifically are any views overridden or enhanced by custom code/modules?)
  • Content types (specifically are there any duplicative or unnecessary content types that could be consolidated?)
  • Taxonomies
  • Menus
  • Media
  • User roles and permissions

An audit from a qualified developer will give you a much clearer idea where the risks and opportunities exist in a migration to Drupal 8. It will surface the cost-drivers in a migration, pinpointing areas that will require special attention, effort, and time to migrate. This is valuable information because it can help you shape your migration plan strategically. For example, you may realize there are legacy modules, content types, views, menus, etc. that aren’t of value to migrate. The older the site, the more likely there is cruft to be excised. You may also determine that some parts of the site are critical for relaunch of a migrated site, whereas other parts can be migrated later.

Even more helpful than a technical audit alone is to pair it with a strategic discovery aimed at identifying pain points for site users, stakeholders, and administrators. Such a strategic discovery could include a functional audit to define both the site’s functional capabilities (actual and intended) and the business goals those functionalities are designed to achieve. A functional audit provides useful context for understanding if the architectures described in the technical audit are optimal for your desired outcomes.

Further, a UX audit including review of site analytics, and possibly even user-testing, would demonstrate the effectiveness of the site’s functionalities and architectures in achieving the your business goals. Such audits and analyses can be focused on both external users of the site (visitors) and internal users of the site (administrators and editors). Improving the editorial experience of a CMS can unleash massive productivity gains, especially with poorly architected content management systems.

This information will provide a valuable frame for understanding the opportunities for improving your website during a migration. With such insights, a migration plan may include several changes to the content architecture or site configuration that have meaningful impact and improvement for functionality or administrative efficiency. For example, as mentioned earlier, consider all of the template files that will need to be converted manually from PHP to Twig. Are all of those templates necessary? Are there layout changes that may be highly desirable and valuable that would make a lot of sense to adjust now? While it may cost more upfront to make such changes now, the efficiencies from consolidating these improvements to a single development window may yield a lower cost of ownership in the long-term.

Finally, another benefit of the technical audit, especially if paired with a strategic discovery, is that it should provide a clearer picture of costs for both a direct “as is” migration of the existing site to Drupal 8, as well as an upgrade in the functionality of a new Drupal 8 platform. The audits are relatively low-cost engagements that arm your decision-making with greater insight and cost-certainty. They are almost always worth doing.

Jeff Goldblum reclines with his shirt unbuttoned and his sweaty chest exposed

So, what does a Drupal 8 migration cost?

“Boy, do I hate being right all the time!” – Jeff Goldblum as Dr. Ian Malcolm in Jurassic Park

Without the benefit of knowing the specifics of the Drupal 7 site to be migrated, it’s impossible to say what the cost could be, but it is possible to say with some certainty what the cost-drivers will be:

  • Quality of the Drupal 7 build, architecture, configuration, theming, etc.
  • High numbers of content types and templates
  • Use of contributed and custom modules + upgrade states of those modules
  • The Drupal 7 site’s ability to meet users needs currently
  • Desired improvements to be made to your site during migration

If you are uncertain of the quality of your Drupal 7 site, if you rely heavily on custom modules or contributed modules without a Drupal 8 version, and/or if you have significant issues with the site you’d like to resolve, you have the most to gain from a technical audit. Without that insight, estimates for migration from Drupal 7 to Drupal 8 could be woefully off the mark.

The good news is extinction for Drupal 7 is still far enough in the future that you have time to do a proper and appropriate migration to Drupal 8. Get a good evaluation of your existing situation and make a solid plan before heading blindly into replicating old mistakes.

Jeff Goldblum stares at a giant mound of dinosaur droppings

Don’t trip stampeding to the exit doors

“That is one big pile of shit.” – Jeff Goldblum as Dr. Ian Malcolm in Jurassic Park

At this point, you may be wondering why you use Drupal at all, perhaps thinking now is the time to move to WordPress, but don’t despair. The truth is Drupal and WordPress are not inherently superior or inferior to one another in any generalized way. Most often, we find that site owners feel frustrated with their Drupal website because it is poorly architected for their needs. WordPress sites can be just as poorly architected and painful. Regardless of the platform, it needs to be implemented well in order for you to draw maximum utility from your website. And to note, migrating your Drupal 7 site to WordPress will also be a replatforming of significant effort and cost.

As we’ve said, migration from Drupal 7 to Drupal 8 is the perfect opportunity to make your Drupal site work better for you and provide more value for the investments you’ve made in it. There is a lot to love about Drupal 8. To get the most out of it, it’s worth architecting it right since your website will rest on that foundation for all of the future Drupal versions to come.

Nov 27 2019
Nov 27

For some purposes it may be necessary to have content, or content elements, that may vary according to a certain time period, and therefore require a cache invalidation according to a certain duration. This is for example the typical case of a list of future and/or past events, which must invariably change over time.

Drupal 8 has three cache systems:

  • Cache Tag: which allow us to invalidate pages, or page elements, according to specific tags collected and automatically uploaded to each page
  • Cache context: which allow us to vary the cache according to different contexts (by URL, language, cookie, permissions, etc.)
  • Cache max-age cache: which allows us to specify a fixed duration for the validity of the cache set up

The max-age cache seems to meet all our needs, namely to define a fixed duration at the end of which the cache will be automatically invalidated. Unfortunately, this cache system does not yet work perfectly in all situations, and some max-age caches may not be collected and put back into the page headers in some situations. An issue is open on this subject, Bubbling of elements' max-age to the page's headers and the page cache, and also mentions the use of a contributed module Cache control override to fix this issue for certain situations.

Nevertheless, until these difficulties are resolved, we can have an already operational and remarkably effective solution, namely cache tags. Indeed, if Drupal automatically provides their tag caches for any entity, whether configuration or content, and takes care of collecting and invalidating them automatically, nothing prevents us from providing our own tag caches, reusable at will.

So, for example, instead of specifying a max-age cache of 3600 (to stipulate a cache validity period of 1 hour) for some content elements or pages of our project, we can very well add our own cache tag [time:hourly], or even [time:daily] or [time:weekly] to the cache tags. Anyway, I think you must have understood the concept.

Of course, adding these custom tag caches will have absolutely no effect on the invalidation of your project's cache, as long as you do not set up the logic of invalidation of these tag caches. This can be done in a few lines by implementing hook_cron().

use Drupal\Core\Cache\Cache;

 * Implements hook_cron().
function my_module_cron() {
  $request_time = \Drupal::time()->getCurrentTime();
  $state_service = \Drupal::state();
  $next_hourly_cron = $state_service->get('my_module.cache_cron_hourly', 0);
  if($next_hourly_cron < $request_time){
    $next_hour = strtotime(date('H') . ":59");
  $next_daily_cron = $state_service->get('my_module.cache_cron_daily', 0);
  if ($next_daily_cron < $request_time) {
    $tomorrow = strtotime('tomorrow 0:59:00');
    $state_service->set('my_module.cache_cron_daily', $tomorrow);
  $next_weekly_cron = $state_service->get('my_module.cache_cron_weekly', 0);
  if($next_weekly_cron < $request_time){
    $next_week = strtotime('next monday 0:59:00');

And so, of course, with a scheduled task (cron) that you have previously configured on your server (recommended) or at the project level (with the help of a Drupal freelancer of course) to be launched every hour (or less if necessary), you have a cache invalidation system remarkably effective based on a duration, whether for static cache of anonymous visitors or dynamic cache. Of course, all the variations (over time periods, or any other criteria finally) can be imagined here.

Nov 27 2019
Nov 27

We recently wrote a post about the benefits of creative agencies partnering with a development agency rather than doing all their dev work in-house.

That post was aimed at creative - marketing and design - agencies. This one, however, adopts the other perspective - the perspective of the development agency that aims to position itself as an industry leader and attract clients with which it’ll forge long-term partnerships. 

But, with so many development agencies from all over the world catering to the mass need for digital transformation and digital experience, showing your value and attracting big clients can often prove quite a challenge.

So, with this in mind, what can development agencies do to attract and retain clients? This is exactly what we’re going to tackle in this blog post - read on to learn about five proven ways for positioning yourself as a top development agency. 

1. Make employee experience the top priority

In the “future of work” (which we’re in fact already experiencing), a talented and satisfied workforce is immensely important. This is why a good employee experience should be the number one priority of a successful business.

Feeling motivated at work and feeling at ease with the people you work with are some of the most important factors contributing to effective, quality work (thanks to Voranc Kutnik for providing the great article).

Another vital factor to employee well-being is a clearly defined career path. Knowing that they won’t have to be stuck in the same position for years and what their options for promotion are will have a profound positive impact on your employees. 

You should base your business around certain fundamental values - employee-centric, of course. Learning, collaboration and a great work-life balance are, for example, some of our core values at Agiledrop - and, believe us, it truly pays dividends. 

The bottom line is: make sure your employees are happy. A good workplace and employee experience translate into a good customer (or, in this case, client) experience. 

2. Dedicate time to learning & growth

Part of a good employee experience is enabling your employees to grow, to learn new skills and technologies, to work on projects that interest them with tools they’re excited about. 

You never know when a new trend will emerge, or something existing will become the new trend, and your client will want to make use of it for their next big project as the most cutting-edge solution.

By constantly investing in the learning and personal development of your team, you’ll stay on top of competition and always be ready to deliver.

As already mentioned in the previous point, learning is one of Agiledrop’s core values. We frequently hold AgileTalks, where developers can give sessions about the technologies that excite them most lately - and they often also infect their colleagues with this excitement. 

This allows us to always be prepared beforehand when a client is looking for a specific solution - “you want exactly so-and-so JavaScript framework for a feature on your front end? Hey, one of our developers was actually working on a similar project a few months back, so we can definitely emulate the process we used there and make use of our in-house skillset to deliver exactly what you need!”

3. Become a partner, not just a contractor

A contractor is someone that does a certain job on behalf of and under instruction by someone else. A partner, on the other hand, is someone that looks to the mutual benefits of all sides involved and strives to make this relationship a healthy one. 

You need to show your clients that they can trust you - both your development expertise and your business ethics. Communicate frequently, clearly and effectively. Be consistent in your offers and values. Document everything, and ensure your developers do so too. 

Essentially - cultivate the relationship and bring value to it. Your goal is to provide a solution to the partner’s pain, yes - but it shouldn’t be so much a business-centric approach as an ethical one. Think of it as wanting to solve the pain of a good friend - the gain you get out of it is of a more altruistic rather than a self-serving nature. 

If you become a partner in the true sense of the word, by valuing the relationship and producing quality work for the client, it makes it that much more likely that the client will think of you again when they need a similar solution in the future - and, voilà, you’ve potentially earned yourself a long-term partnership!

4. Ensure your developers align with the client’s team

This is something that will probably come naturally when you’re already following points 1, 2 and 3. A well-defined, strong company culture that prioritizes employees will ensure that your developers can assimilate seamlessly into any kind of team they become a part of. 

Moreover, if your aim is to be a partner to your client rather than just a contractor, you’ll want to make sure that the partnership is as frictionless as possible. 

Since your developers will be the ones most in contact with the client’s team, you’ll need to guarantee beforehand that they are familiar with the requirements outlined in the documentation, as well as with all the tools and processes that the client’s team are using. 

A great way to ensure this is by having an internal document with clearly defined guidelines as to communicating with clients and working on their projects. At Agiledrop, we have this sort of “playbook” - you can read more about it in this blog post

The goal is to have your own developers essentially become teammates to your client’s team in every practical aspect of the word. In this way you extend the value from its business side to all layers of the working arrangement. 

5. Be transparent in your offer and communication

One of the most frustrating things in an agency partnership are unexpected issues that arise out of miscommunication. In order to prevent these from happening, or at least keep them to a minimum, you need to be transparent in your offer and all communication right from the get-go. 

Tell it how it is, without trying to sweep certain unpleasant details under the rug in the hope of securing that partnership while ignoring the potential problems this may cause down the line. Your future client should always know what they’re getting themselves into.

Exhibit your trustworthiness by addressing and appeasing your potential client’s possible concerns before they even think of them. This shows both dedication and meticulousness, and is a true testament to your expertise not just on the technology, but also on the business side. 

Ultimately, this ties back to point number three - clear communication and a consistent offer are key to a successful partnership, and these practices should be implemented from the very first contact with the potential client. If you resolve potential challenges beforehand, you’ll guarantee a much smoother execution of the project and greatly increase the chances of it turning into a long-term partnership. 


We were happy to share with you these five approaches which in our experience have proved effective in securing and retaining clients. In the super competitive digital landscape, winning over clients is hard enough, let alone forging long-term partnerships with them. 

Hopefully, we’ve helped simplify this endeavor for up-and-coming development agencies. The practices outlined in this blog post are very effective without being costly or difficult to implement, so they can serve as a great starting point to optimize all your present and future agency partnerships. 

Nov 26 2019
Nov 26

It’s easy to love nonprofits. They bridge the gap that exists between government and business, where the needs of our most vulnerable citizens are often met. They do the things that business and government cannot, or will not do. They’re a critical part of the infrastructure that meets our most pressing challenges and provide a home where our better angels can take action. 

Kalamuna team members Kristin Sartain and Sean Quigley took a moment to consider how nonprofits have impacted them personally:

Western Youth Services Logo

When you learn that you’re going to be a parent you imagine graduations and birthday parties. You imagine Christmases and Halloweens. What you don’t imagine are the challenges that come to some parents with a special needs child. I never imagined the phone calls from school, the hundreds of appointments with doctors and agencies, the never-ending and ongoing need to advocate for my child’s care and rights. You never imagine these things when you first learn you are to be a parent.

When that became the reality for my family we struggled and persevered but became so exhausted with the ongoing day-to-day, 24-hr care and advocacy for our amazing daughter, that we didn’t know how to move forward. My wife and I would have to continually take time off work to deal with an emergency or to attend appointments and frankly we needed help. Fortunately we did eventually get that help through a local agency called the Western Area Youth Services, or WAYS. 

WAYS provided us with the one thing we needed so desperately. Time. Through WAYS we gained respite services in the form of gifted young youth workers who would pick up our child from school, be with her as we finished our work day, spend time with our beautiful daughter during the summer holidays, and most importantly develop deep and lasting friendships with her over the course of a decade of service.

My wife and I often say that if it were not for the respite services we received from WAYS we don’t know how we would have survived as a family. It is agencies like WAYS that serve families like our so that we can grow and prosper, and in the end see our talented daughter go on to be the unbelievable success she is today. I am grateful for WAYS, and for others who have lifted our family up like CPRI, so much so that I can never repay the debt we owe them for a chance at the normal life we have enjoyed. Thank you WAYS for giving us the time to live and grow as a family. We are deeply and eternally grateful.

the Girl Scouts logo

I can remember watching my older sister go to her Girl Scout meetings and wishing I was old enough to join in the fun. Fast forward a few years, and I was happily a Daisy Girl Scout, excited to learn what scouting was about for myself. I continued with scouting throughout elementary school and enjoyed earning badges, going camping, and gaining great leadership skills along the way. 

When my family moved to Virginia in fifth grade, I wasn’t sure if I wanted to continue scouting. My mom convinced me to stick with it and, even though my dad took me to the wrong building for my first troop meeting, I met a group of girls that would become lifelong friends. We grew up throughout middle and high school and helped each other earn our Silver and Gold Awards. Our troop leader gifted us with lifetime memberships upon our high school graduation. 

Kristin and fellow Girl Scouts as 5th graders, and again as young adultsLife Long Friendships: Kristin posing with fellow Girl Scouts in middle school, and again after high school.

One of those friends became my college roommate and we volunteered to lead a Daisy troop during our Junior year of college. Scouting had given us so much in our youth, we were excited to give back to girls in our college town. 

I am so grateful for the wide range of skills that I gained from being a Girl Scout for so many years - courage, confidence, and character. The relationships I’ve made are precious to me. Thank you, Girl Scouts for all that you do to support our youth!  

At Kalamuna, our livelihood thrives on the exercise of our values, and our ability to uplift orgs that support the most vulnerable and marginalized among us. We get to do what we’re good at on behalf of organizations actively improving the world we live in, and the rewards are manifold. It’s important to us that our work has a positive impact on our non-profit clients, because they have already positively impacted our lives and the lives of so many others.

“There is no such thing as a single-issue struggle because we do not live single-issue lives.”
– Audre Lorde

Nov 26 2019
Nov 26

I realized I haven't posted about my DrupalCon Seattle 2019 session titled Everything I know about Kubernetes I learned from a cluster of Raspberry Pis, so I thought I'd remedy that. First, here's a video of the recorded session:

[embedded content]

The original Raspberry Pi Dramble Cluster
The original Pi Dramble 6-node cluster, running the LAMP stack.

I started running the Raspberry Pi Dramble in 2014, after I realized I could automate the setup of everything in a LAMP stack on a set of Raspberry Pi 2s using Ansible (one Pi for an HTTP load balancer/reverse proxy, two for PHP app backends, and two for MySQL redundancy. Kubernetes was the logical next step, so I moved things towards Kubernetes in 2017, but running Kubernetes was a lesson in pain due to the Pi's limited memory (1 GB maximum) at the time.

When the Raspberry Pi 4 came around, I acquired some 2 GB models as quickly as I could, and redeployed onto them. Gone were the restrictions that were causing Kubernetes' API to be flaky with the older Pis, and now the Pi 4 cluster is extremely reliable. Early on, cooling was an issue, but the recent firmware update has made that less problematic. I now power the cluster using the official PoE HAT, which means I only have one plug for each Pi, and everything fits nicely into a small travel case (if I want to bring the cluster with me anywhere).

Raspberry Pi Dramble 4 Kubernetes edition cluster
The current Pi Dramble, running Kubernetes and sporting BlinkStick Nanos.

I even got it all to run off a 10,000 mAh battery pack with a bunch of USB splitters... but it did not stay powered long, and kept giving low power warnings—so I'll have to consider other options for a highly-mobile four-node Kubernetes bare-metal cluster.

I've continually updated the cluster so it is tested in a Docker-based Kubernetes environment, a Vagrant-based Kubernetes local development environment, and of course, the Pi environment. The latter environment causes much consternation, as many common container images are not maintained in an armv6 or linux/arm format, which is required when running on the 32-bit ARM OS the Pi uses, Raspbian. But the Pi Dramble abides, and it quietly goes on, serving up traffic for through the years.

The official Pi Dramble Wiki has all the instructions for building your own Pi Kubernetes cluster, with links to buy all the parts I have, along with every step to get it running using open source Ansible roles to install Kubernetes and Docker for ARM, then configure a new four-node cluster.

Nov 26 2019
Nov 26

Striking Chicago teachers marching in the street, carrying a banner "A Nurse in Every School, Every Day." Chicago teachers were one example of the hundreds of thousands of workers who went on strike this year winning higher wages, improved working conditions and better services for their communities. Credit: Scott Heins / Getty Images

In 2018, workers rediscovered the power of the strike with nearly 500,000 people walking off the job, compared to just 25,000 in 2017. This year has proven even more of the same, with 442,700 stopping work through September.

Portside is an independent news outlet of labor activists who volunteer their time to scour the web for thoughtful, authentic coverage and analysis of worker power. In June they won the "Labor Communicator of the Year" as a result of their efforts.

Getting meaningful information on strikes is difficult. Just six corporations own 90% of media in the US. Executives like Jeff Bezos and Rupert Murdoch have a vested interest in downplaying worker power. That coupled with sophisticated misinformation campaigns and obscure social media algorithms, it's hard to cut to what's happening on the ground.

We work with Portside to help them reach as many people as possible. In 2018 we upgraded the site from Drupal 7 to Drupal 8, optimizing the website for mobile devices and adding moderation tools to make editors' lives easier.

This year we sent out a survey to readers to learn what else would be helpful to provide the coverage so many are seeking in these politically charged moments.

Nearly 500 people responded, and the feedback was overwhelmingly positive. That said, there's always room for improvement.

In 2019, we hope to roll out the following features to help us all follow and support the labor movement and left in general.

* Improved "Related News" functionality - Right now the articles suggested are a bit hit or miss. We need time to adjust and improve our algorithm for this.
* Create "Issue" pages - the Bolivia coup, the Rojava Revolution, the Chicago Teachers' Strike... the number of progressive, transformative, and often revolutionary movements gaining traction is dizzying. Portside provides excellent coverage, but not in a long-term, coherent way. Issue pages will help us follow breaking news, with the broader context we need to be in meaningful solidarity. Editors are already hard at work cleaning up the tagging system for articles. We just need the time to design and build out these issue pages to better serve readers.
Just these two improvements will make a real difference to how well we can stay informed of what our fellow workers are up to and how we can support them.

All Improvements Are Shared Freely as Free Software

Everything we do at Agaric uses software that is free as in freedom - free to install, use and repurpose for your own needs.

Our work with Portside has already translated into improving and even creating the following Drupal modules:

* Give - on-site donation forms and reporting
* Social Post Twitter - Re-post content from your website to your Twitter account
* Social Share Facebook - Re-post contnt from your website to your Facebook page
* Minimal HTML - A text format handy for short text fields

So, when you donate to Portside's fundraising campaign, you are both supporting independent journalism and the open-source software that benefits other independent outlets and websites.

Donate to Portside

Nov 26 2019
Nov 26

You can run. But you can’t hide… When you’re listed on an XML Sitemap.
Back in 2005, around the time when one of my favorite shows – The Office (US version), premiered on NBC, Google was busy introducing Sitemaps to the world. When the world wide web started getting loaded with websites that consisted of multiple webpages, search engine spider bots like Googlebot found it excruciating to understand which of those pages need to be indexed (listed). Enter Sitemaps. They help in relieving some stress off of search engines. Sitemaps also let you control the priorities of your pages, frequency of page changes and modified dates. Setting up XML sitemaps with Drupal 8 is easy and you can choose from Drupal sitemap modules like the Simple XML Sitemap module or the XML Sitemap module.

What is a Sitemap?

Sitemaps are XML (Extensible Markup Language) files that contain a list of all your webpages and their locations. Listing out all your URLs in a single Sitemap file ensures that search engines like Google, Yahoo, MSN, etc., ‘indexes’ your content that is ready to be seen by the world. Here is an example of our Sitemap -  

Sample sitemap           
               Figure 1- A Sample Sitemap 

The <priority> element tells the crawlers how important that page is to your website with regards to all the other pages. You can set a priority that ranges between 0.0 to 1.0 with 1 being of highest importance. So how important sitemaps are for SEO? This question is often debatable but having a sitemap has proven to improve the time taken to crawl a website by Google/Yahoo bots. Admittedly, the faster your website is crawled the better chance it has at SERP ranking.
Having said that, not all websites need a sitemap. Especially not if your website is small, not very complex and is well referenced through internal links. Here’s what Google has to say about this –

google announcement about sitemap         
             Figure 2 - Google announcement

Drupal Sitemap Modules

SEO has always been priority for Drupal and the community has created tons of modules dedicated to SEO only. With Sitemaps playing a significant role in improving the SEO ranking of a website, Drupal comes with some easy-to-use modules like the Simple XML Sitemap module and the XML Sitemap module. Both Drupal sitemap modules aim to generate XML sitemaps that meet the latest standards and specifications.

 Simple XML Sitemap Module

The Simple XML Sitemap module for Drupal 8 is an easy-to-use XML sitemap generator. This Drupal XML sitemap module has been made specifically for Drupal 8. Needless to say, the codebase complies by the OOP and Drupal 8 standards. Which makes it more futuristic and flexible. It generates XML sitemaps that adhere to Google’s latest standards and even supports multilingual content. The module also provides an API that will allow you to customize links and configurations, making it truly extendible.

Setting up the Simple XML Sitemap Module         
            Figure 3- Setting up the Simple XML Sitemap Module Simple XML Sitemap Module - Advanced Settings         
           Figure 4 - Setting up the Simple XML Sitemap Module - Advanced Settings Setting up the Simple XML Sitemap Module - Priority Settings          
                 Figure 5- Setting up the Simple XML Sitemap Module - Priority Settings

XML Sitemap Module

This robust old-timer has been around since Drupal 5 and continues to support Drupal 8 websites as well. The Drupal XML Sitemap module lets you create xml sitemaps that adheres to the guidelines. Sitemaps generated can be automatically submitted to search engines like Google, Ask, Bing, etc. The module is also flexible and comes with submodules that allow site admins to customize links and the output.

Setting up the XML Sitemap Module           Figure 6- Setting up the XML Sitemap Module Setting up the XML Sitemap Module - Sitemap Content Settings         
            Figure 7- Setting up the XML Sitemap Module - Sitemap Content Settings Setting up the XML Sitemap Module           
              Figure 8 - Setting up the XML Sitemap Module
Nov 26 2019
Nov 26


NGOs and Drupal Digital Marketing

NGOs are noble companies that are aiming to make the world a better place. Without them, more children would be starving in Africa, more women would be disempowered and tigers would face extinction sooner. With this burden on their shoulders NGOs have to be sure that they can spread awareness to a wide range of people and fast. Thanks to the internet they can do this faster and more effectively than ever. In order to be successful in their mission, NGOs have to have the best digital marketing practices to ensure that the message is getting across. But how can NGOs do this? What are their digital marketing needs? Well, in this blog post, I will present you with a couple of digital marketing needs that NGOs are having and I’m going to tell you how to meet those needs with the help of Drupal digital marketing and Sooperthemes.


Drupal Digital Marketing Security

Having a secure website is one of the most important criteria in order for a business to be trusted by its customers. When a customer entrusts a company with their data, they expect it to be kept safe from bad actors. This is also the case for NGOs. Especially because people who are willing to donate for a cause have to fill in private information. If this information lands in the wrong hands, this can result in credit card fraud and identity fraud. With this in mind, Drupal is one of the best choices when it comes to website security. Drupal is open-source, meaning that an entire community of more than 70.000 thousand people is discovering and reporting security issues. On top of that, issues are fixed relatively fast, since Drupal has a dedicated security team that makes sure to secure any vulnerability that might come up. So, if you’re an NGO that is conscious about the safety of your clients' data, then you can migrate your website over to Drupal and never have to worry that you might be the victim of a cybernetic attack. 


NGOs have a need for website scalability due to the nature of their work. This is partly because NGOs have usually a lot of content to manage. In other words, NGOs have to manage content that is translated into other languages and adapted to other cultures. Drupal digital marketing makes the issue of scalability easy. Drupal was specifically engineered to be able to handle a huge load of data. At the same, it doesn't compromise on performance. Your website's performance can be further improved by adding a CDN (Content Deliver Network) that takes a lot of the load off your server and puts in on the cloud. 

Author Effective Content Visually 

[embedded content]

Customization is also an important aspect when running an NGO website. Drupal enables your organization to customize your website to your own preferences. It offers a high number of modules, that gives you the option to choose the amount of functionality that you give to your website. Couple this with Glazed Builder on top of your Drupal website and now you have the creative choice to aesthetically customize your website however you want. With this freedom, you can create expressive homepages, powerful campaigns and converting landing pages.


Drupal Digital Marketing Cost

Having to create or maintain a website can be a huge drain on precious resources that your NGO could use to solve the problems of the world. Costs are usually determined by the price of the skilled labor that is hired to do the job, as well as how complex and how many functionalities the website actually has. The good news is that with Drupal you can get a powerful CMS (Content Management System) for free that scales and is ready to host a more complex website for free. However, Drupal is known for its steep learning curve and for the fact that the interface is not necessarily user-friendly. So, if you don’t have any idea how to actually use Drupal for your website, then you still are going to have to hire people that know how to use it. Sooperthemes has somewhat mitigated that issue for you. Glazed Builder is our revolutionary visual page builder, that will provide a user-friendly interface for editing your Drupal website, essentially lowering the steep learning curve, while driving up your efficiency. Seriously, it’s so simple to use and yet it delivers results that are exceeding the expectations. Glazed Builder manages to dramatically reduce the traditional costs associated with the creation and maintenance of a website. The power is in your hands, you just have to take it.

Flexible content management

Content management is an important aspect of every NGO's website. The basic premise behind this is that NGOs are required to have that ability when it comes to website flexibility. The reason behind this is that many NGOs have to make quick adjustments to their websites in order to improve and stay relevant to their campaigns. Drupal digital marketing makes these tasks easy with their CMS. However, our Drupal-based visual page builder Glazed Builder is taking this a notch further. Glazed Builder is essentially drastically shortening the learning curve required to learn and use Drupal as a CMS. The best part about Glazed Builder is that it makes it easy for your marketing department to create and edit the website, without having to involve the IT department, in other words, you can leave the coding to Sooperthemes and you can focus on creating eye-catching webpages. 

Mobile Friendly

Mobile responsiveness is more important today than ever before. Part of it is because the Google SEO ranking takes into account how well a website is optimized for a smartphone environment. In order to have success in the digital world, your website has to offer lightning speed page loads. Studies show that a webpage that has a fast loading speed will the visitor less likely to actually leave the page. This is exactly what Drupal digital marketing offers. Pages made in Drupal are smartphone-optimized from the get-go. With this in mind, you can make sure that your Google ranking will not have to suffer because of such trivial factors. It’s a pretty sweet deal.

SEO (Search Engine Optimization)

Drupal Digital Marketing SEO

Good SEO ranking is an important factor to the success of your NGO. If people are not able to find out about your NGO, then you will have a hard time reaching your audience. Without reaching the audience, then there are no funds to be gained and to donate to the cause at hand. Drupal is one of the most search-engine friendly systems out of the box. Modules like Metatag and Real-time SEO let you take your search engine optimization to the next level.

Easy creation of campaigns and landing pages

On top of that, NGOs also have to create landing pages for their visitors. A powerful landing page and campaign are more likely to persuade a visitor to become a contributing member to the cause. This is where Glazed Builder comes into play. With Glazed Builder and Drupal digital marketing, you can easily create powerful campaigns that are sure to make your visitor empathize with your cause. On top of that, landing page creation is also a piece of cake with Glazed Builder. Why would you want to struggle with the creation of a landing page in the back-end and run the risk of it turning out not as you had envisioned, when you can use the power of WYSIWYG (What You Is What You Get) to make sure that the result you desire turns outright. Now, instead of worrying, you can focus on improving the design of your website to be able to finally end the extinction of those big cats.

Form Creation

By the nature of their work, NGOs have to gather information about the people that are donating and supporting the campaign. In order to do this, NGOs use forms where donors can fill in their information when donating. However, coding a form is complicated. Fortunately, Drupal digital marketing provides modules that let you integrate forms into your website. Webform is an example of a module that lets you create said forms. You just have to install it and then enable to module and you are all set. Now, it’s easier than ever.


Now that you know what digital marketing needs an NGO might have, you are better prepared to face and meet them. With Drupal digital marketing and Sooperthemes, you can decrease cost, while increasing the effectiveness and the reach of your homepage, campaigns and landing pages. With this in mind, you can focus your resources to causes that are worth fighting for. Now, go out there and make the world a better place!

Nov 26 2019
Nov 26

While a country may have the best infrastructure and the best doctors, what pulls back the healthcare industry is the technical lag when it comes to web technology.

Drupal is considered one of the most extensible and secure content management system (CMS) in the healthcare sector.

But, what is it about Drupal that leading health organizations choose this platform? How has Drupal evolved to help healthcare? Let’s find out in this blog post!


Customizable and personalized

Being an open and free source CMS, Drupal comes with thousands of modules and themes. This gives you the flexibility to customize it according to your business requirements. It also has the capability to deliver personalized data to patients and physicians online.

Integration with third-party apps

Drupal is a real powerhouse when it comes to third-party integrations.

Integrating Drupal with the Electronic Health Record (EHR) system, can prove to be beneficial as it protects data and prevents duplicacy of content.

It helps share information with patients in a secure manner that helps efficiently reduce errors and diagnose patients.

Multilingual capabilities

With medical tourism getting popular, your website needs to be able to deliver multilingual content targeted to specific geographic locales.

Drupal provides healthcare websites with a better scope of communication with the patients. It offers 4 easy modules to translate the website into more than 94 languages and also helps you develop custom languages that are not available in Drupal.

Did you know? Drupal 8 is packed with multiple features! To know how it is beneficial for your business, read our blog.

Drupal is secure

According to HIPAA Journal, the industry experienced about 2,181 healthcare data breaches (2009-2017) involving more than 500 records.

Hospitals store humongous amounts of data and digital assets. Since Drupal is known to be popular for its secure and robust performance, it proves to be the chosen platform for the healthcare industry.

Mobile-first design

With 61.2% of the population involved in using mobiles and tablets in the US, it is important for your business to have a medical-based website with all the relevant information.

Drupal, when incorporated with mobile-friendly themes, works well for almost all devices to provide a better mobile experience. It enables healthcare organizations to maintain records, set up online profiles, and more.

Changes in workflow

Since Drupal is a highly flexible platform, it can conform to any workflow with minimal configurations. It supports a configurable workflow system that can be programmed and administratively overwritten.

To sum up

Drupal is an open-source CMS, flexible, and robust. Given its wide array of features, it is the right choice for the healthcare sector.

Want more information about Drupal Services?

At Grazitti Interactive, we offer best-in-class website development services using the latest CMS like Drupal, WordPress, Joomla, and more with advanced technologies such as PHP,, AJAX, JavaScript, jQuery, AngularJS, etc. To know more, send us an email at [email protected].
Nov 25 2019
Nov 25

Membership websites in various forms are popular on the web. They can give their owners a stable source of revenue, enhance website security, and do other useful things.

Drupal offers great modules for membership website features. It is one of the numerous reasons why customers choose educational website development on Drupal. But education is just one example — membership websites can be successful in literally any industry.

In this post, we expand on possible membership website features and show you how to create them with the Role Expire Drupal module. We also have a video about the module’s setup. Let’s go!

What is a membership website?

A membership website is one that has particular opportunities available to members only. They may include:

  • viewing premium content (virtual conferences, e-courses, e-books, webinars, podcasts, etc.)
  • participating in a community (being a member of a club, posting in a forum, adding comments without moderation, etc.)
  • using various premium functionality

and much more.

Membership website example

Membership website features can be:

  • Paid. Paid membership makes something accessible only after the payment.
  • Free. Free membership is often used to grant permissions to users after a sign-up or if they prove to be trustworthy.
  • A mix of both. Probably the best idea is to include both free and paid options in order to show the users the examples of what you are offering.
Membership website features example

Membership can be:

  • granted once and last forever
  • extensible (one that needs to be prolonged after a certain period of time)

The Role Expire module for membership websites in Drupal

There are many options to create a membership website on Drupal. In our example, we review a Drupal module that is particularly useful for extensible membership website features — the Role Expire module.

As it is known, Drupal allows you to create absolutely any roles and assign granular permissions to them. So the Role Expire Drupal module allows admins to set and control expiry dates for any Drupal roles.

With the module, you can do all this and much more:

  • Setting expiry dates (12 hours, 3 days, 4 weeks, 3 months, 1 year, etc.) to roles on the People — Roles tab. Expiry dates can be assigned to existing roles or to new ones directly during their creation.
Adding role expiration time with Role Expire Drupal module
  • Adding an expiry date to a role directly in a particular user profile — there will be a text field for this.
  • Having the role expiry information visible in the user profile (to this user, or to admins with the proper permissions).
Role expiration time on user page with Role Expire module
  • Setting permissions on who can administer the expiration.
  • Entrusting automatic removal of expired roles to Cron.
  • Managing per-role expiry dates in Drupal Views.
  • Configuring switching users to a default role when a particular role expires.
Switching to a default role with Role Expire Drupal module

The membership functionality creation can be finalized by giving the right permissions to expirable roles. For example, you can:

  • configure access to view particular content using the Content Access, Node View Permissions, or similar modules
  • configure access to a block using just Drupal core
  • configure permissions to post comments
  • and so on without any limitations, according to your particular scenarios.

Using the Role Expire module in Drupal (video)

A video is worth a thousand words, so we have created a brief video for you about the Role Expire module’s work.

[embedded content]

Let us help you with membership website features

Consider adding membership website features to your existing Drupal site or designing a membership website from scratch.

You are always welcome to share your ideas with our Drupal development team. We will select (or create) the optimal modules for your case, be it Role Expire or any other, and do the setup seamlessly.

Contact our web development team — and it’s time to benefit from membership website features!

Nov 25 2019
Nov 25

Why don’t wait for Drupal 9 and migrate from Drupal 6 to Drupal 8

So why it’s worth migration to Drupal 8?

The Drupal 6 core

Drupal 6 Core is no longer supported by the Drupal Security Team, only by 2 vendors. Now one of those vendors promises that this LTS (Long-Term Support) will last up to 2022.

Drupal 6 will live for a while, that’s true. But the overall update process in Drupal 6 is much harder in comparison to the supported versions: the vendors and website owners have to manually patch the modules and the core if they pursue security.

The PHP versions compatible with Drupal

There’s the possibility that some Drupal 6 websites run on PHP 5.x that is no longer supported since January 1, 2019. Consequently, no more security fixes for PHP 5.x.

In spite of the fact that Drupal 6 LTS vendors support PHP 7.1+, it’s still red tape to run Drupal 6 with these PHP versions. 

Also, a number of Drupal 6 contributed modules working with PHP 7.1+ is strictly limited.

Drupal 6 security

Sometimes Drupal 6 gets the security updates with a delay. In many cases, it happens due to the backport issue. In a nutshell, when one detects a problem with supported versions of Drupal Core (Drupal 7 and Drupal 8 at the moment) or its modules, a solution usually requires the backport to Drupal 6.

But to tell the truth, it’s not only that all Drupal 6 fixes should be backported. Sometimes it’s just Drupal 6 only problem.

Drupal 6 limited functionality

We can recall just few cases when Drupal 6 got bug fixes; mainly the support is about security fixes.

Also, no new features are expected for the Drupal 6 core and modules.

Drupal 8 is the feature-rich version

It’s no secret that Drupal changes from version to version. Drupal 8 offers things that Drupal 6 and Drupal 7 don’t have: RESTful Web Services and JSON API out-of-the-box allow implementing the Decoupled approach, it’s mobile-friendly out-of-the-box and has better accessibility, there’s a better solution for multilingual websites.

Due to the new release cycle, new featured are added to the Drupal core much faster than ever before.

For those who love and dig tech things: there are new features like the WYSIWYG editor, new field types, and besides, Drupal 8 has a better technical stack. Symfony components, Twig, OOP, Composer. 

Drupal 6 is not about convenient workflow anymore

Drupal developers get worried about working with unsupported versions. It’s both a waste of time and money since there is a lot of overheads connected with Drupal 6 development. We mentioned some of them above.

Drupal 6 support is not cheap

One more reason why we consider the Drupal 6 upgrade to 8 - money matters.

The annual support of a Drupal 6 website is somewhat costly (that’s relevant for rather big business websites like corporate websites with lots of lead-catching features, e-commerce and enterprise ones). Check how much you spend on your Drupal 6 site: probably you’re spending too much on it.

If you’re interested, we did some math here: check Why migrate your website to Drupal page.

For all the other questions - fill out our contact form and we will revert to you within a business day.

Nov 22 2019
Nov 22

Accept it, your inbox is infested with Spam and you cannot do anything about it. They’ll just crawl into your website and send you those annoying emails through your contact forms or comments section or just about anywhere they can sneak in through. Sure, you can "Mark" them as Spam. But is that really going to help in keeping all those creepy crawlies at bay?

There are two types of spam – Spambots, which are basically scripts designed to collect email addresses and then spam them , and Human Spammers, who are actually sitting on computers just to spam you. We can protect ourselves from Spambots to a certain level but getting around Human spammers is extremely tricky.

Thankfully, Drupal 8 provides you with plenty of solutions and Drupal modules to protect your website from Spambots. Let us take a look at some of them and see which Drupal 8 modules suit your needs the best.

Capture them with CAPTCHA

We have all come across a CAPTCHA test at some point or the other and though it may seem annoying as a visitor, this can be a very useful tool to a site administrator. It is that fuzzy image of some text that you have to fill in a web form and if you’re a legitimate user you can go ahead with submitting your details. This challenge-response test is a decent way to keep some Drupal spam away, but it isn’t too difficult for them to find a way out either. Thus, using it as a stand-alone solution is not a very good idea. Installing the Drupal 8 Captcha module is as simple as configuring it. 


Taking it up a notch in Drupal spam prevention with the use of CAPTCHA  is another Drupal module that  provides an alternative CAPTCHA security. CAPTCHA Keypad increases the complexity of a CAPTCHA , making it really difficult for the spammers. This module allows the users to make use of a keypad (which can be configured to shuffle the keys, as required) to enter the CAPTCHA. 

Complicate it with ReCAPTCHA

Drupal reCAPTCHA module makes it more complex for the spambots by using the reCAPTCHA services offered from Google. Built for the sole purpose of security, Drupal  reCAPTCHA module also aims at improving the user experience by allowing the users to complete the test with a single click or a tick mark. 

The Drupal reCAPTCHA module offers a choice to provide checkbox, asking the users if they are a robot or not. Despite the fact that this module makes it easier for the users, it still is a hard nut to crack when it comes to Drupal spam prevention. 

Lure them spammers with Honeypot

Honeypot, as the name suggests, acts as a trap to deter spam bots from posting harmful data into your website. Drupal 8 Honeypot module basically adds a hidden field to your web form which is seen only by spambots. So if the hidden field in your form is filled, then you know it’s a spambot and discard the form. Drupal Honeypot also allows you to set a timer for filling the form since if it is a spambot, they can fill those forms in no time! Let’s say, if you set a timer of 5 seconds to fill your contact form, you will know when a spambot is doing so as us humans would most definitely take longer.

AntiSpam by CleanTalk

Developed by CleanTalk, Drupal Antispam module is another module that tests the user in such a way that the users see no tasks that are required to be solved from their end. Drupal Antispam module does a great job if you have your own list of spam email addresses and IP-addresses that you have detected. 

Using a series of tests that filter the spambot registration & the spams in the comments section, Drupal Antispam module ensures that the spam checks are not visible to any of the website users. This ensures a better and more comfortable engagement with the site, eliminating the extra time spent on completing additional registration forms. 


Another Drupal module that boasts of a "NO end user interaction" is Antibot. This light weight module aims to prevent robotic submissions on a Drupal website, with minimal user interactions and zero involvement of API keys and other third party integrations. 

Implementing two major criteria, the Antibot module includes a Javascript interaction test and an analysis for the usage of keyboard and mouse. Also, it also enables caching of the forms, which makes it a lot quicker than other modules like Honeypot. 


Developed by Dries Buytaert, the founder of Drupal, Mollom was an intelligent web service that identified potential spam content and decide if the post is legit or not. Using machine learning techniques to block spammers from posting malicious content, Mallom was one of the most used modules for Drupal spam protection. However, on April 2, 2018, Mallom officially announced its end of life. If you are using the Mollom module, it is advised to disable the same and switch to an alternative.

Nov 22 2019
Nov 22

Drupal 8 is on the edge of transformation and it’s just a couple of months before Drupal 9 will take over. However, the version update will not eliminate the workings of Drupal 8 and instead deprecate gradually. 

This brings a lot of new attention to the software and many look forward to being a part of the Drupal Community. In case you are one of them, then these are some advice for novices in the world of Drupal by our very own experts at OpenSense Labs. 

a man checking boxes on a list with a pen

#1 Git and Version System in Drupal Projects

As a seeking Drupal developer, Git is your starting point. You got to commit and train yourself with git in order to brush your Drupal skills. You have to understand how branches and tags help you in finding the correct module/theme you have to use on your website. 

#2 PHP Language

The programming language, PHP, is a basic one to acquire before getting into Drupal. However, with Drupal 8 being built on Symfony, a developer should be familiar with the PHP frameworks, too. The existing Drupal core and modules help you implement changes without needing to code. 

#3 Drupal Security Guard

Security is one of the strongest suits of Drupal. However, in order to maintain it, you require the highest level of expertise that tirelessly keeps up with the threats. You should be able to contribute to the maintenance of the Drupal site along with the updates that help in keeping the website secure. 

#4 Package Managers

Making work easier for developers, package managers are useful in the installation of external libraries and frameworks. Composer is one of the package managers that can be installed for tools like Drush. 

#5 Command Line interfaces (CLIs)

Knowing how to manage CLIs helps in administering repetitive tasks. With Drush, Drupal’s own CLI tool, your implementation becomes better and efficient. Another important CLI tool is Drupal Console. 

#6 Twig Templating Engine

Since Drupal 8 moved to the Symfony framework, Twig became a necessity for development. The knowledge of templating with Twig engine will give you an edge over others. 

#7 Drupal Modules Bank

One of the primary points of Drupal is the abundance of modules. For each and every website needs, there are multiple modules that can assist you. With different versions and maintenance requirements, the knowledge of modules becomes an asset. As a Drupal developer, you should be aware of all aspects of how the modules can be optimized and the website can be enhanced in the best way possible. There are 2,816 number of themes and 44,291 active modules on for you to try your hands on.  

#8 Theming Ninja

An interesting concept in itself, Drupal theming is a vital part of the web development process. You should be well aware of its working. Given the customization clients seek these days, theming is your go-to friend to tailor the needs. 

#9 Debugging Pro

Debugging is a skill to master for Drupal developers. With a lot of breaking and fixing requirements that do come your way during the process, knowing how to debug helps in avoiding the friction within the team and also with the client. 

#10 Core Functioning Fun

For a developer to enter the open source space, the core functionality of the CMS should be a strong case. As Drupal has a different CMS functioning, the flow is an important thing that you should be comfortable with. 

#11 Contribution Cases

Not a skill, but it is advisable for the budding drupal developers of today. Drupal community is a fantastic place to learn and grow your expertise. You also get to meet other developers in the industry and gives an opportunity to directly gain exposure from the experts across the globe. 

#12 A Style Guide Expert

After theming and modules, the style guide is the next thing to pick up. To achieve an excellent user experience and comfort, the design has to take the center seat in web development. But as a Drupal developer, you have to build the style guide and pattern libraries which has a basic typography and color palette. Keep in mind, there are a lot of minute details that define how your style guide will come out to be. 

#13 Utilize Configuration System

A configuration system aligns the development process in a seamless fashion. The workflow adopted by the developer via the conf system helps other team members to update and test configuration locally. However, the key is to make the entire team understand it and have them participating in the process. 

#14 Core and Non-core Stuff

Once you still Drupal, there are two folders titled ‘modules’ and ‘themes’. One might get confused that they can put the contributed modules and themes in them. However, do not make that mistake. There are separate folders of the same name in the ‘sites’ folder. The former folders are the core Drupal installation which needs timely updating. Do not mix the core and non-core folders o code that can pose to be an issue later.

#15 Maintenance Mode 

You should keep your site hidden in case you are planning to put it into maintenance mode and it’s still developing. However, do not log out of the site or you will not be able to access it either. 

And that’s a wrap of advice from our end. Now it’s your turn to deep dive into the world of Drupal and try it first hand. Witness it, enrich it and share your experience with us at [email protected]

Also, connect with us on our social media channels: FacebookLinkedIn, and Twitter for more such insights. 

Nov 22 2019
Nov 22

This article was originally posted on and is reposted here with the permission from Community Manager Julia Pradel. 

Not everyone has the necessary resources to engage their own design team. Our Certified Thunder Integrator (CTI) Ramsalt has recognized this need and developed a generic theme that will be available to other Thunder users as an open-source product.

The idea for the theme emerged a few years ago: “We wanted to develop a generic design which newspapers could easily customize to their individual needs” explains Ramsalt’s CEO Yngve Bergheim. “We had a starter kit in mind which could either be used as is, or easily tweaked by a designer.”

The first task was to gather all of the requirements for a design. We arranged focus groups with digital editors from several newspapers to understand their needs. “We also drew upon our own pool of experience,” says tech lead Stephan Zeidler. Ramsalt has made numerous magazines and newspapers since 2011. The analytic process ended up in a 51 pages design requirement specification and corresponding wireframes.

[embedded content]Example of Longform/featured articles

Art director Evgeny Pugachev led the design process while Stephan Zeidler was tech lead. The CTI Ramsalt Lab has offices in several countries among them Sweden, Norway, the Netherlands and Russia, and the Thunder development is directed from the German office in Berlin. According to Stephan, the greatest challenge with the theme’s development was ensuring that everything would be reusable - and at the same also be customizable. Stephan, therefore, relied on a component-based approach: “It is certainly significantly more complicated and takes longer at the beginning of the project but the risk of regressions is much reduced”.

Simple to adjust

The component-based approach also enables Stephan to capture updates from the numerous Drupal modules. “Since we use our own HTML templates rather than the standard Drupal templates, adjustments are much simpler than they would otherwise be.” Another advantage in his view is the lean markup which makes the site significantly quicker and also delivers plus points in terms of SEO aspects. The theme has also been put to the test and further optimized in order to achieve the best possible results in Google’s Pagespeed. It was a project by itself and led to the publication of a series of articles on Planet Drupal, under the heading The ultimate guide for faster Drupal.

The theme was conceptualized over a period of six months with two designers, challenged with the help of several customers and continuously developed along the way - and it is still a work in progress. The three-person development team working with Stephan, also wants to examine whether Drupal’s Color Module can be integrated and how the design could also be used as a demo theme by other CTIs.


Get the new design now!

For company chief, Yngve Bergheim, there is no question about whether the Ramsalt design will be made available to Thunder users: “Anyone that wants to try out the new design can drop us an email on [email protected]. - We want to use the theme as a showcase for publishers evaluating Thunder. Publishers already have the best technology in place in the Thunder distro, the best and biggest community. What is lacking now is a good looking design on the bodywork that fits the top-notch “Porsche” engineering we have in Thunder”, says Bergheim.


The design is aimed to be released as an open-source module on as soon as the integration with Thunder works seamlessly. There is still some work left: “The design currently makes many assumptions, like how the menu and various article variants look, that there is a search bar or that authors are shown with their names, pictures and even job titles” explains Stephan. The fields for these points did not exist in a standard Thunder. “And that is also a good thing, Thunder should remain as generic as possible” stresses Stephan. This does, however, pose him and his team the question of how the theme can, together with its Thunder installation, show its full effectiveness out of the box. Which is our goal, to have the theme in the Thunder distro eventually.

Nov 22 2019
Nov 22

What types of sessions are we looking for?

Just like last year, we’d like to put together a program that appeals to a wide audience of Drupal community members. Details on session tracks can be found on our site

If public speaking is not your thing, but you’re looking forward to seeing some sessions, please fill out our topics survey so we can curate a program with a little something for everyone!

How do I submit?

You’ll need to create an account in order to submit a session proposal. If you’ve previously submitted a session to MidCamp, the login you created previously should still work. 

Who should submit a session?

Experienced speakers are always welcome, but MidCamp is also a great place to start for first-time speakers. From the opening of session submission through the beginning of camp, we'll have communication to assist speakers (new and old) in creating engaging and informative sessions.

Call for papers closes on Wednesday, December 11, so submit your session soon.

Nov 21 2019
Nov 21

November 21, 2019 - 9:30am


Rebecca Kellogg

Account Management and Drupal An Account Manager Girl in a Web Developer World

A few weeks ago I had the privilege of attending Texas Camp with the web team here at Texas Creative. Texas Camp is a day of curated sessions and panel conversations, and is hosted by volunteers from the regional Drupal community. I know what you’re thinking, why would an Account Manager go to a day-long session about web development? Well, 1. Websites are secretly (probably not-so secret to some of my co-workers) my favorite projects to work on and 2. I personally think that it benefits everyone (both clients and agency employees) to learn as much as possible in the ever-changing digital space.

I went to six sessions throughout the day and learned about topics ranging from crafting the perfect case study, to SEO and content creation, accessibility, and even a little bit about Salesforce integration. For all of my Account Managers and clients out there, here are a few of the things I learned at Texas Camp, and why I think even you should go next year if you have the chance. 

The first session was about writing case studies, which was great because I have to write case studies frequently for new businesses and it wasn’t something I expected to get out of my day at Texas Camp. In this session, we discussed how to frame up your case study in order to clearly sell the business value of your work, as well as the right tone and length to put together a successful case study. I’ve actually been able to use the tips I learned in this session multiple times in the last few weeks and it has made the process of writing case studies much easier. 

One of the other sessions I went to was all about website accessibility, which is a very big topic in the advertising world right now. During this session we walked through tools that can help make the process of building an accessible website easier. While the actual technicals of how these things work was a bit over my head, it was helpful to hear what I, as an Account Manager, should be looking out for throughout  the design and development process on a website, and how we as an agency can help educate our clients on how to improve their site’s accessibility. 

The last session I sat in was all about SEO content strategy. This session walked through the subject of topic clusters, what they are and how they work, and how to reorganize the content on your site into these topic clusters to help boost your site’s SEO. In other words, how to improve your search engine ranking, without paying to play! Who doesn’t want to know how to do that? 

Overall, I really enjoyed my Texas Camp experience and would definitely go back next year. I would encourage anyone who has the opportunity to go to Texas Camp to go, even if you think it’s “not for you”, because you never know what you might learn! Did you go to Texas Camp 2019? If so, feel free to share what you learned in some of your favorite sessions!

Nov 21 2019
Nov 21

Gone are those days when traditional inbound marketing practices worked wonders. Today, the one-size-fits-all approach does not prove effective for companies trying to appeal to well-heeled clients and companies. 

Perhaps, this approach has served B2B marketers well for so long but now this digital era has taken over and led to the battle already where everyone is going head over heels to grow traffic and generate more leads. 

One inverted triangle and one normal with text written                                                            Source: Acquia

What is the solution then?

It is account-based marketing (ABM) indeed! An action-plan approved by both large and SMBs to help them aim at high-value accounts with customizing or rather personalizing campaigns and raising awareness.

The illusion of (some) control over what visitors are engaging with is powerful, and has a positive effect on visitor psyche. Perhaps, that why personalization works so well. 

Drupal 8’s API-first architecture makes integration easy to implement account-based marketing

This blog will give you deep insights on how Drupal and ABM can benefit enterprises in increasing customer engagement, and what all the tools are there for the same.

Benefits Of Account-based Marketing

Here are some of the ABM benefits listed-

1.  Clearer Path To ROI

Account-based marketing is accurate, focuses on personalized targeting, and is measurable too

Account-based marketing is accurate, focuses on personalized targeting, and is measurable too. Considered as appropriate in B2B marketing tactics and strategies for the highest ROI, it is the one that ensures less waste and so the risk.

This practice makes it easier to streamline sales and marketing for consistent marketing that grows accounts.

  1. Faster Sales Process

Due to the involvement of several stakeholders in making a final purchase decision, the whole process gets stretched. As a result, this slows down your typical sales and marketing process. However, ABM provides you the opportunity to nurture your primary decision maker particularly, along with all relevant potential customers, to facilitate and hasten the sales process.

  1. Efficient Use Of Marketing Resources

ABM redefines your marketing efforts on the major accounts to drive the most revenue

ABM redefines your marketing efforts on the major accounts to drive the most revenue. These initiatives let you optimize your most valuable resources: time and money. The integration of sales and marketing efforts can let you focus your marketing team directly with sales to target and produce content for key accounts and build a successful communication with sales.

  1. Right Targets to Get Right Leads

As per this report, there are almost more than 45% of the bad leads that are of no use to marketers even after additional cleaning,  and hence leads to wastage of resources, money, time, and effort.

ABM is a breakthrough marketing practice that helps in hitting on the right lead instead of low-profit or low-level clients 

ABM is a breakthrough marketing practice that helps in hitting on the right lead instead of low-profit or low-level clients that might give you only a small percentage of revenue. ABM has the unique ability to target the right accounts, i.e, large accounts that have the possibility of closing down soon; resulting in right leads and more revenue than those hundreds of the wrong leads combined!

Quick look on the basics of ABM. 

[embedded content]

Getting Started With ABM? Tools You Can Consider

Getting rid of age-old marketing tools to embrace the ABM personalization tools, or simply finding a way to seamlessly integrate them into your workflow can be one of the best decisions you can make for better customer engagement.

With tools such as Engagio that help account-based marketers to initiate lead-based marketing strategies for reviewing performances, there are also tools like Terminus that emphasize personalized account targeting, engagement insights for the sales team & ROI tracking. 

Integrate is also one such useful tool that lets you combine and manage several lead generation platforms in one place and save your time and effort of moving back and forth from one platform to another. Uberflip is no less and focuses on delivering the right content to the right audience at the right time. It uses an AI component that acts as a recommendation engine for content delivery to enhance customer experiences. 

How Integrating ABM and Drupal Can Result In Increased Lead Generation, Retention, and New Market Growth?

In this era of “the customer is the king”, it has become extremely difficult for the companies to get noticed and break through the noise.

However, when Drupal 8’s API-first initiative is combined with ABM, enterprises get access to a whole new line of solutions to deal with the problems that have been surfacing for so long, such as relevant lead generation, retention of customers, and new market opportunities.

ABM requires sales & marketing teams to work closely together in pinpointing and selecting individual companies to target and treat each of these accounts as its very own market to see stronger results.

ABM and Drupal collectively understand that audience identification is the key to the personalization and unmatched experience

Drupal is an ultimate martech stack based on open-source and has been built in such a way that it integrates well with all other tools seamlessly. The use of API structure in Drupal allows the use of the latest javascript to create wonderful apps and deliver exceptional digital experiences in real-time.

ABM and Drupal collectively understand that audience identification is the key to the personalization and unmatched experience and therefore, ensures focus & flexibility to target only those accounts which are well-suited as per organizations’ competency. Ideally, Drupal manages content and the ABM platform ensures identification and recommendation.

Today with ABM, any company that has been using marketing automation technology and CRM software can automate much of the tedious work required for mining potential customer data and personalizing the marketing messages to meet the specific needs of the targeted accounts. In addition to this, an ABM strategy makes it smooth and efficient for enterprises to see how much of the money the company is spending on marketing is directly converting into closed sales and revenue or not.

Modules That Fuel Personalization Through ABM & Drupal Integration

Here are some Drupal modules and tools that support ABM for refined digital experiences-

1. Acquia Lift

Amalgamation of the potential of Lift and the capabilities of Drupal allows marketers to select the level of sophistication that fits their needs and budgets

Web Personalization is the key to successful customer experience. An effective personalization pulls and analyzes customer data, and accordingly suggest content to deliver the right experience to the right customers. For similar reasons, Acquia Lift provides the three-step approach, i.e., crawl, walk, and run approach for web personalization. 

Have a look at these three approaches-

Crawl personalizations can be started instantly from a content and data perspective. These are considered as low effort (means general, easily gathered data and personalization that can be ongoing), of varying impact, and with fast results.

Walk personalizations need additional content and more data collection for further defined segments. Considered as a medium to the high effort ( data that requires multiple visits and additional content creation), delivers results with moderate impact. 

Run personalizations demands more content, more personalization activities, and more data for further defining segments. They require high effort ( requiring data collection and integration from other systems, moderate to large-scale content generation, and more analysis and resources to build and implement rules) with high impact during an extended period.Multiple colored boxes with text insideSource: Acquia                                      

Doing it the right way, with the right technology, can only deliver results that will drive customer experience and your business forward. So, Acquia Lift when combined with powerful solutions, like Drupal, results in a powerful yet easy-to-use platform that augments real business results. Acquia Lift facilitates enterprises in understanding their customers and improving engagement with relevant content for unmatched contextual digital experiences.

The amalgamation of the potential of Lift and the capabilities of Drupal allows marketers to select the level of sophistication that fits their needs and budgets to build unified customer personas, based on data like device type, geolocation, and browser history. Following this, Lift delivers personalized content to relevant customer segments through drag and drop Drupal interface.

Acquia Lift offers following features-

1. Simple campaign creation

Marketers can easily create personalized campaigns in just three steps

2. No coding for testing and targeting

Fueling the creation and launch of personalization without any technical skills.

3. Well-defined personalization campaign types

Enterprises can set a/b tests, target personalizations to specific crowd or suggest content across a series of sessions to deliver the best possible experience.

4. Enhanced scheduling

Assists marketing teams aligning personalizations to events, promotions, sales, and press-related activities.

5. Multi-lingual personalization

Personalize in multiple languages by automatically localizing content as per the detected location.

6. Real-time operation and insights

Caters a dashboard from where activities can be reviewed in real-time for both optimizing and validating marketing investment.

  1. Smart Content Demandbase

The Smart Content Demandbase is a targeting and personalization platform to deliver a personalized experience to each visitor on the website in real-time

The Smart Content Demandbase is a targeting and personalization platform to deliver a personalized experience to each visitor on the website in real-time.

It gives enterprises insights on buyers’ persona and so the ability to optimize your ABM at scale.

With Demandbase, marketers can target website content to companies that fit pre-defined criteria based on attributes and metrics like industry, revenue, customer status, or products purchased. Following are its features-

A. Coordination among different channels

Creating and managing target account lists in the Demandbase ABM platform can be done via enabling the third-party system to ingest these lists. This way, they can be used in a coordinated fashion across virtually any channel (email, direct mail, content syndication, etc).

B. Monitor and fragment target account audiences

Audience lists can be easily managed by fragmenting the data brought into the Demandbase Platform through these integrations. This way, opportunities through CRM can be pulled in for increasing the ROI of ABM programs and at the same time use it for boosting account profiles with contact data and both online and offline engagement data, to provide a comprehensive framework of target accounts.

C. Innovation through collaboration

Collaboration with other hundreds of smart, innovative companies who are building capabilities to benefit ABM marketers will grow only in the coming times. The Demandbase ABM Ecosystem will facilitate clients to benefit from such innovations alongside future capabilities that Demandbase delivers.

D. Seamless data integration

In a world where martech stacks are overflowing, siloed data comes up as a huge challenge for every CMO in achieving the desired ROI. With the enablement of complementary solutions to pass data between systems, the Demandbase ABM Ecosystem can eliminate the risk of buying decisions and enable the marketer to get to value quickly.

  1. Smart Content Module

Marketers can leverage browser conditions, cookies, or third-party APIs to display various content for anonymous and authenticated users

The Smart Content module builds for Drupal 8, can be easily integrated with any data source to facilitate enterprises deliver segmented content- via Drupal admin, as per industry, buyer stage, location or other crucial segments.

It is a toolset that enables the personalization of an anonymous website in real-time. Marketers can leverage browser conditions, cookies, or third-party APIs to display various content for anonymous and authenticated users.

However, it has limited functionality on its own as it is designed to work in conjunction with other modules to boost the power of personalization.

Two of its components are-

1. Smart Content Blocks

Smart content block lets you insert a smart content block on any page to hide/show/swap content within that block, as per the conditions defined by a content administrator. These blocks can be added anywhere, and even in multiple regions on a single page.

2. Smart Content Segments 

You can create, save, and manage a set of conditions, knowns as segments with it. These blocks can use any segment(s) to display the corresponding content.

Smart content lets an API with available data be used as conditions to boost your personalization strategy and better leverage the tools you already have.

Final Words

Drupal and ABM take personalization to the next level collectively and also empower sales and marketing teams. The results obtained are - increase in customer engagement, relevant leads and prospects, enhanced customer retention, and hence sky-rocketing ROI. 

If your enterprise is looking for inculcating Drupal and ABM platforms, then you are in the right place! Srijan has helped its clientele in maximizing their ROI and it can help you too. Contact us now!

Nov 21 2019
Nov 21

This year, Amsterdam, Netherlands celebrated its third time as a home city for the biggest European Drupal conference - DrupalCon. My overall experience was great and I am going to provide you with more insights in the next paragraphs below.

Group picture Hearts - DrupalCon Amsterdam 2019

Monday mornings on DrupalCons are usually reserved for travelling to the host city, meeting Drupalers and visiting training opportunities. This time it was no exception. I spent the morning travelling to Amsterdam. After 2 hours of pleasant flight, I headed to the venue for check-in and straight to the Mentoring Orientation session. Since my main goal for this DrupalCon was to contribute by mentoring others, this was a first must-see session. We spent a good hour meeting other mentors and outlining plans for the week. The idea was to discuss how we can assist people who are interested in contributions. Mentoring process is one of key Drupal values & principles that we as a community strive to. Its goal is to encourage others to get involved and to help our community.

The other part of the day was reserved to catch up with people from the community and meet newcomers. In the evening, attendees could join the International Splash Awards 2019 event which announced the best Drupal projects in Europe in 2019 or participate in “Dinner with a stranger” organized by the Dutch Drupal community in a local karaoke bar.

State of Drupal

On Tuesday morning, attendees gathered in a big auditorium to see the first keynote at the conference. Drupal founder, Dries Buytaert held a talk about the State of Drupal. The presentation started by outlining the new features in the upcoming Drupal 8.8 release. This is one of the richest minor Drupal releases feature-wise. Here are some of the highlights of the upcoming Drupal 8.8 release:

  • Media Library module became stable in Core, it adds CKEditor integration

  • New modern looking experimental administration theme (Claro) with better accessibility features

  • Official support for creating Composer-based Drupal projects

  • Experimental support for Automatic updates

  • Improved JSON:API support, JSON:API Explorer, auto-generated documentation, performance improvements

The Drupal 8.8 release was built with various contributions coming from 641 individuals and 243 organizations with MD Systems as always being among the top contributors.

Drupal 8.8 contributors

Contributing organizations to Drupal 8.8 release

As the next major Drupal release (Drupal 9) is going to be released in June 2020, this was a perfect time to start thinking about new initiatives. Dries has proposed 4 tracks as possible directions where the contributions should go:

Track 1 - Do More with Less; The focus is on reducing costs and efforts when using Drupal. Effective tool support allows us to reduce operation costs with better automation. Some of the suggestions were to improve Configuration management, advance Automatic Updates, improve Composer support and better integrate with Symfony components.

Track 2 - Ease of Use; the session presented a Content Management System User Experience study which compares Drupal, Wordpress, SiteCore, Adobe Experience Manager by five criteria. The criteria were Modern/Outdated, Premium/Basic, Empowering/Constraining, Clear/Confusing, Would recommend/Would not recommend. The study shows that beginner users evaluate Drupal as a confusing and not recommendable CMS while the same metric drastically changes with advanced users. In relation to the results of the study, Dries has proposed to prioritize improving the beginners' experience with Drupal. Besides improving the current system, one of the interesting new ideas was to introduce the paid marketplace of themes similar to Wordpress Marketplace. It is important to mention that our company has been focusing on this topic for the past 3 years with many contributions that went into Drupal Core and Paragraphs.

Track 3 - The Open Web; Taking into account that there are 1 in 40 websites on the Internet running with Drupal and 4 billion people joining the Internet in the coming years, the proposed idea of the track 3 was to make Drupal more accessible and interoperable.

Track 4 - The explosion content + data; Improving Drupal to be a better data engine. The ideas covered introducing GraphQL support, Native DAM, Privacy, better content creation experience etc.

Despite Drupal 8 not yet being ready out of the box, our product is removing those barriers already with a modular design, better content creation experience, default accessibility support and structured data. Check out Primer in case you are looking into solutions for building the fastest prototype for your next project.

I spent the rest of the day on visiting sessions I have already outlined before.

Robin held a session about Drupal Commerce - Under the hood. He presented an overview of Drupal Commerce with a focus on its plugins that cover orders, adjustments, prices and gave insights and best practices on how to customize already feature-rich Drupal Commerce. The majority of the presentation was spent with showing useful practical examples and doing the live demo.

The similar presentation was held at Zurich Drupal Meetup October 2019 by Sascha Grossenbacher. If you are interested in this topic checkout his slides too.

Mentoring is fun - DrupalCon Amsterdam 2019

Contribution Day

The Contribution day traditionally happens on the closing day of the conference where people meet with a common goal - to contribute. We had two contribution areas: General contribution area where people were working on things they were already familiar with and Mentored contribution area where mentors tried to help newcomers how contribution process works.

On Thursday morning, around 30 mentors showed up at the beginning of the Contribution day. We split up into several roles with people volunteering at the booth, greeting newcomers and letting mentors introduce them with the tools and processes.

Together with Kevin Wenger from the Swiss Drupal community, I mentored around 10 people during the whole day. In the beginning, we spent time getting everybody’s local environments ready and afterwards started the real work. Our work consisted of multiple phases that are part of the Drupal contribution process. We started with the issue triage in order to pick up the most appropriate issue for our mentees which guaranteed a good start. The first thing was to discuss the issue, describe the problem and outline our goals. We used the pair programming technique to kick off the implementation phase. The process covered patch creation, understanding the issue metadata options and describing the next steps. That resulted in the express fixing of the core issue Fix usage of unsupported !title placeholder in Translation.php we were working on.

As an outcome, 115 people received a credit on their profiles because they decided to spend hours working with mentors on their first contributions! The contribution day took a lot of energy but since we had more than 300 people in total contributing to various areas, it was well worth it!

All in all, DrupalCon Amsterdam fulfilled my expectations which were set high since last year’s Drupal Europe. The DrupalAssociation has already confirmed DrupalCon will happen in Europe in 2020 while the host city will be announced later.

I hope you enjoyed reading my report from the conference and look forward to seeing you in the next Drupal event!

Nov 21 2019
Nov 21

You might notice something different with MidCamp’s tickets this year. At MidCamp we’ve long had an underlying Alice in Wonderland theme, from our Drupal-hatter, to Alice coloring books, to maddening our logo. This year, we’ve Alice’ed our tickets. Here’s your guide to this strange new world...

Every ticket offers the same experience:

  • 50+ high-quality sessions over two days,
  • coffee, lunch, and maybe even snacks, 
  • conversations with 200+ awesome Drupal-folks, and
  • three evening socials that are as accessible and inclusive as we can make them.

With that said, we know many folks come to camp from different places, and we want to make sure MidCamp is accessible to anyone who wants to join us.

The Worm ($50) is what the early bird gets. We’re keeping our legacy pricing for those who take the first steps down the rabbit hole. Act fast, because this pricing ends Jan 1, 2020.

Alice ($100) is our standard ticket. The price is based on what it has cost us in the past to provide you with all the things that are listed above. In order for us to be able to make catering orders as accurately as possible, this pricing ends three weeks before camp, on Feb 28, 2020.

The Rabbit ($200) is always late for their important date, but also leads Alice down the rabbit hole. As such, attendees at this level will be helping to give others the MidCamp experience. It’s priced for attendees whose companies have the ability to fund their attendance or individuals who are able to contribute more. Additionally, it makes up for the impact to our catering costs for folks who buy at the last minute. 

Students ($25) whether you’re in college, in a bootcamp, or otherwise furthering your education, we want you to join us and learn about the magic that is the Drupal community. We welcome you at this price-point, no questions asked.

Sponsored ($0) tickets are available for those who don’t fit in any of the labels above. MidCamp is committed to being accessible to anyone and everyone who is interested in learning and participating in our community. We’ll teach you, we’ll feed you, and we’ll welcome you with open arms. Get your sponsored ticket here.

Whomever you are, wherever you come from, we look forward to seeing you in March 2020.

Nov 20 2019
Nov 20

Evolving Web team at Acquia Engage The Evolving Web team at Acquia Engage.

Evolving Web attended Acquia Engage in New Orleans last week, an exciting and informative three-day conference where we learned a lot about how different companies are thriving in an evolving digital landscape. We were also sponsors of the event and presented a session on how to create more effective personalization by combining UX research and a strong content strategy. Aside from the fact that New Orleans has great food, music, and people, here are other takeaways from our time in the Big Easy.

Everyone wants personalization, but not everyone knows what it means.

Personalization was a recurring topic throughout the conference. Awareness isn’t the issue. The real challenge is in defining what personalization means. Personalization, at the end of the day, means something different to everyone.

Acquia Engage Keynote on Acquia LiftAcquia Lift keynote. 

As Mark Grannan, Senior Analyst at Forrester remarked at his “The State of DX” keynote, it’s important to define what personalization means to your organization. For example, does personalization mean having the right hero image on your website? Or does it mean launching better omnichannel marketing campaigns? And which components, such as your key navigation or anchor content, should stay consistent regardless of who’s on your page?
Getting clear about what personalization means for your organization will allow you to improve your existing marketing strategies and select the right KPIs to measure success.

Always start with humans.

Drupal is a complex and robust CMS that allow you to create truly novel digital experiences. With all the attention on maximizing its technical capabilities, it can get easy to lose touch with the main purpose of your website, which is to help your users achieve their goals.

Eric Williamson of Acquia introducing Suzanne's session.Eric Williamson of Acquia introducing Suzanne's session.

Leah Sand, Founder and Practice Lead of the Content Studio Department at VMLY&R, shared this important reminder in a keynote on what she learned about design from architecture: “Technology exists to make our lives better. Start with humans first.” In her talk, Leah explained how all values for technology stem from human needs and goals, and how the best architects approach every design by asking, “What do we want to do with this building as a human being?”
Keep your focus on the user. Consider the problems they’re trying to solve by engaging with your online touchpoints and use this understanding to build digital experiences that satisfy their needs.

Focus on an integrated strategy, not tactics.

Everything, from your website, apps, social media channels, and print content, should feel like a continuous experience. Just like how personalization has become a consumer expectation, users expect you to know where they are on their journey and to guide them to the services and products they want. While many companies are doing some piece of digital marketing—like a newsletter, Twitter feed, or paid campaigns—these tactics aren’t effective unless they are united under a clear strategy that takes into account how each piece helps your organization achieve key goals.

Acquia Engage party at the Fillmore. The Acquia Engage party at the Fillmore. 

Community Health Network, an Indianapolis-based health system that provides access to healthcare services across hospitals, workplaces, homes and more, discussed in their session how they blended technical, content, and marketing skills to create an integrated system that helped them meet their KPIs. They used consumer data, industry reports, and in-person interviews to create user personas, then created personalized content across online and offline channels to satisfy the needs of these personas, such as information on insurance costs and where to get screenings. Using Acquia Lift, they experimented with personalized hero images, descriptions, and content slots, and tracked the effectiveness of CTAs to improve their messaging and reach their goal of increasing mammogram screenings by 3%.
When creating your strategy, consider the entire user experience and think about how every channel can meet the user where they are.

Design for the present and improve for the future.

Any technology solution you implement in the present should be deployed based on what you can do today, with the goal of scaling in the future.

Marching band in New Orleans. Marching band in New Orleans. 

Shaun McDougall from Leidos, a multi-billion dollar aviation, IT, research and defense company with over 30,000 employees worldwide, talked in a session about how improving their content management and lead generation was a complex challenge given the scope of the company and the quick pace of change in their industry. The company spent months identifying the best platforms to use, performing internal audits, and planning for long-term growth. They worked with R2integrated and Acquia to modernize their backend, improve their digital and user experiences, and centralize their content and operations. To adjust their teams to a more centralized system, they invested in re-education, documented the process, and reassured all stakeholders that although innovating was gradual, it was eventual.
While the team was able to leverage many Acquia tools (Acquia SiteFactory, Edge Protect, and Lift, to name a few) to quickly build pages and improve their marketing efforts, Shaun admitted that they tried too much too soon. For example, instead of launching a new website while deploying Lift at the same time, Leidos should’ve done segment launches, which would’ve allowed them to better prioritize their goals and tasks. And although the reinvention of the company was a success, Leidos is still improving their processes and scalability every day.
When the scope of your website or online presence is large, consider which goals are short-term and which are long-term, and prioritize accordingly. While there are many tools available from Acquia that can help you speed up change, they will only be effective if your time frames are right.  

Suzanne, Dries and Brad at Acquia EngageSuzanne, Dries, and Brad.

We had a great time at Acquia Engage and hope to see you next year!

Nov 20 2019
Nov 20

This blog has been re-posted and edited with permission from OneShoe's blog. The following are results from the 2019 Drupal Business Survey conducted by One Shoe and Exove, in partnership with the Drupal Association.

The annual Drupal Business Survey is an initiative of Drupal agencies One Shoe and Exove, and was published in 2016 for the first time. The survey aims to gather valuable insights from Drupal business leaders to identify opportunities and challenges for the Drupal market. This year, the survey asked Drupal business leaders from all over the world about their experiences with selling Drupal projects, their vision on community contributions and their expectations toward Drupal 9.

In total, 118 C-level Drupal agency leaders participated in the 2019 edition of the Drupal Business Survey. These leaders have a total of 118 offices, of which the majority (72 offices) are located in Europe and 36 in the United States.

World map showing locations of survey respondents with green and red dots

43% of the respondents are CEOs and 35.6% of the respondents are founders of Drupal businesses, mostly working at mid-size Drupal agencies with between 11 and 50 employees (33.9%). The majority of the companies have been in business for more than four years (89.8%).

How is Drupal business doing?

The news is positive for business – the Drupal project pipeline has grown or stayed at the same level as the previous year whilst the average deal size has increased. Drupal project win rates have stayed roughly at the same level and future of Drupal project pipeline is predicted steady based on this year’s responses.

Each year the respondents are asked about their Drupal project pipeline, average deal size and project win rate, as well as their expectations for next year. Half of the respondents said that their Drupal project pipeline grew and when compared to last years results, even more than expected. One third of the business leaders responded that their pipeline has stayed approximately the same and only 16.9% stated that their project pipeline shrank.

Average deal size has also grown, according to majority of the respondents (65%), and only about 7% answered that their deal size shrunk in 2018.

Drupal Project Pipeline pie chart - 17% shrank, 33% stayed the same, 50% grew

Popular industries for Drupal projects

Drupal is used for endless types of digital solutions: from easy-to-manage sites to large-scale portals and platforms. As a result, you can find Drupal projects in all kinds of industries. Each year the respondents of the Drupal Business Survey are asked about the type of projects they completed in the past year, and industries in which they use Drupal to create digital experiences.

Interestingly, this year the category 'Education' is added for the first time after respondents in the previous edition indicated they missed this category. Education is the most popular industry in which Drupal projects are implemented this year.

Top 5 industries in which Drupal clients operate - 66,1% education, 65,3% charities & non-profit, 54,2% government & public administration, 49,2% healthcare & medicine, 47,5% arts & culture

We asked this question also in previous years and when comparing results, we see some differences. Travel & Tourism became a more popular industry in Drupal project implementation with 330% growth when compared to the 2018 Drupal Business Survey results. Furthermore, Telecom, Sports and Logistics & Support grew their popularity whilst Consumer Electronics, Consultancy and Construction decreased popularity in Drupal projects implementation according to the survey data.

Top 3 industries which became more popular compared to 2018:

  • Travel & Tourism (+330%)
  • Telecom (+77.78%)
  • Sports (+77.78%)
  • Logistics & Support (+72.73%)

Top 3 industries with fewer Drupal projects compared to 2018:

  • Consumer Electronics (-59.09%)
  • Consultancy (-37.74%)
  • Construction (-37.50%)

‘Contributing to Drupal should be a no-brainer’

One of the distinguishing factors and forces behind Drupal's success is the large and active community. For a long time, the slogan for Drupal has been "Come for the software, stay for the community.” Dries Buytaert each year publishes the ‘Who sponsors Drupal development?’ report. According to the 2018–2019 edition, small-to-medium-sized Drupal businesses (fewer than 100 employees) contribute frequently, while larger full-service agencies are not actively contributing to Drupal.

According to the Drupal Business Survey, 111 out of the 118 businesses contribute to Drupal and only 7 businesses don’t. What’s the vision of Drupal’s agency leaders about the subject of contributing to Drupal? How do they contribute, and why (not)?

 93 - development (contributing modules, patches, documentation or file bug reports), 64 - sponsoring events, 62 - organising events, 55 - marketing (helping get the word out about Drupal), 54 - user support (sharing what you know with other users), 48 - donations, 35 - improivng Drupal's documentation, 26 - translations, 21 - testing, 17 - design & usability (contributing feedback to Drupal's usability), 10 - themes

The Drupal businesses from the survey contribute in many different ways. It varies from non-technical contributions, like sponsoring events and organising events such as MeetUps and DrupalCamps, to improving Drupal’s documentation or development (contributing modules and patches). Reasons for contributing are, among others, because it feels like ‘the right thing to do’, because of branding and marketing reasons, or in order to give the developers a sense of the community:

“Drupal has given a lot to our company, so it is only fair to give back. Also, we see that the Drupal business community is not that well served, so it is an easy choice for us to contribute to (besides technical stuff).”

“Without contributions, the Drupal project wouldn't exist. It should be a no-brainer.”,

“ I wouldn't have made a career in Drupal if others wouldn't have contributed before; it's a give and take and everyone should do so.”

I believe in supporting the community that supports me and provides the basis for my income. Also, there are side-benefits to contributing. My contributions have helped me win clients.”

Limited time and resources

Even though the vast majority of agencies are aware of the importance of contributing to Drupal, they also face difficulties combining the pro-bono contributions with their day-to-day business. The analysis shows that those who don’t contribute are either sole entrepreneurs or are working at a Drupal company with more than 100 employees. Almost all respondents saying that their business doesn’t contribute, explain that the reason is that they don’t have the time and resources to do so: “In a resource limited business, contribution is difficult to balance with the bottom line. We do what we can. However, the teams are all encouraged to be vocal advocates of Drupal on all Social Media platforms, challenging misconceptions wherever they occur.” Someone else suggests: “Maybe introduce paid development for updating, testing and maintaining core and most used contributed modules.”

Does size matter?

When we compare the size of the Drupal companies with the kind of Drupal contributions, we see that:

  • The larger the Drupal business is in terms of employees, the more often they financially support the Drupal project by – for example – sponsoring an event and/or making donations.
  • Also, larger Drupal businesses tend to contribute to developing (contributing modules, patches, documentation or bug reports) more than smaller ones.
  • The smaller the business, the more often they share knowledge with other users (User Support).
  • Except that, there is no significant difference between the size of the Drupal companies and other types of contributions they make to the Drupal project. All different sizes of organisations contribute in the form of translations, marketing, testing, and contributing to design & usability.

Line chart with how companies contribute by company size.

Businesses expect easier Drupal upgrades starting with D9

Drupal 9 is targeted for release in June 2020. We asked the Drupal business leaders what their expectations are toward Drupal 9. The general trend among companies is ‘Finally no hard upgrade path anymore!’ One respondent says: ‘We hope the upgrade path will be smooth, and it will be easier to justify the investment of upgrading.’

“[I expect] it will become easier to do the operation things, as update core, modules etc. Better media handling and user interface, that it doesn't have this large jumps on functionality changes from one version to another - so the upgrades from 8 to 9, 9 to 10 and so on can go much much smoother than before.”

“[I expect] that we don’t have to reimplement all our customers solutions the way we had to from earlier solutions. I expect that when we have upgraded all our solutions to the latest version of Drupal 8.X, the upgrade to Drupal 9 needs to be smooth and without any major rewriting of code. When upgrading our ecommerce solutions from D6 -> D7 and D7 -> D8, it almost killed our business. We had to basically reimplement the solutions (not upgrade them) and the clients were not willing to pay the actual cost. So we had to invest a lot of money into those upgraded. We are not willing to do the same for D8 -> D9.”

Business leaders also express their desire for a better interface and a UX enhancements: ‘I hope that D8 will provide a better admin UI and UX, and an improved preview mode.’ Another one says: ‘I hope for focus on the end user experience.’

The Drupal community has noted the user experience needs and there is a specific Admin UI modernisation strategic initiative going on – for more information, see

 32% easier upgrades, 12% better UX/UI, 10% no expectations, 9% other, 8% neutral/negative, 6% more/better functionalities, 4% good business opportunities, 4% increase in popularity, 4% better integrations, 2% losing business, 2% increased stability, 2% ignorance of the market, 2% headless opportunities, 2% just excited

However, a number of owners also express their doubts. One respondent states:

“Many clients are still on Drupal 7 without a plan (or desire) for Drupal 8, there is some surprise that Drupal 9 is already on the way. Some may be waiting for Drupal 9 before moving anyway. The D7-D8 move is seen as such a big one that projects may come to a natural end or move away from Drupal before clients ever get to D8 or D9.”

“We think it will be hard to convince people to migrate from Drupal7 to Drupal9. On the other hand we think that project size will continue to grow.”

The comments about Drupal 7 show that the system is still in wide use and there is a threshold for the clients to upgrade to later versions. The updates have been laborious projects in the past, and now businesses expect this issue will be mitigated with the new release cycle and the release of Drupal 9.

More ease of use of Drupal

We asked the Drupal business leaders what developments they hope to see in the coming years regarding Drupal in general.

 26% improved dev/editor/user experience, 10% more/better features, 9% other, 7% ease of updates, 7% more visibility of Drupal, 6% easier development, 6% integration with other services, 5% increased stability, 4% I am happy, 4% suitable for small/mid-budget projects, 4% personalization, 2% easier to contribute, 2% growing the community, 2% headless opportunities, 2% marketing automation capabilities, 2% e-commerce capabilities

The answers given by the respondents were varied, ranging from making Drupal development easier to making Drupal more suitable (again) for small and mid-size projects. However, most of the answers were about the user-friendliness of Drupal: 26% of all the answers had to do with Drupal’s user experience for developers as well as administrators, editors, content managers and end users. Or, as one respondent stated it: “Continued ease-of-use for both semi-technicals/semi-professionals as well as professional developers and UX and UI designers.”

“A better out-of-the box user experience (in terms of design, media handling & editing, for example). Improved admin experience - e.g. react-based admin interface.”

“I hope that Drupal is going to have a better and more modern UI/UX for the clients, ease to integrate Drupal as API first/headless, from a DX perspective continue to use OOP and modern methods. Ease to do functional tests. Ease to update modules/core with automatic process.”

The Drupal Business Survey results indicate that businesses are eagerly waiting for the first versions with a radically improved admin user interface. This is something that has already been taken into account; see the Drupal community’s strategic initiative.

The second thing that the respondents mention is that they hope the features and capabilities of Drupal will continue to improve or expand (10% of the answers):

“Continue to develop more content-friendly toolkits/features, expand upon configuration management processes/workflows”

“We see more out of the box features in the platform and more tools suited for enterprises.”

“Closer to a microservices CMS, allowing me to pick the bits I need/want.”


The survey shows that Drupal business is doing well, with slight growth in project pipeline and more substantial growth in average deal size. Drupal is used for various types of digital solutions. However the most popular industry for Drupal project implementation is Education based on this year’s survey results. Other top industries include Charities & Non-profit and Government & Public Administration. The fastest growing industry in terms of the number of Drupal implementations this year is Travel & Tourism, with a growth of 330%, followed by Telecom (+77,78%), Sports (+77,78%) and Logistics & Support (+72,73%).

Contributions to Drupal have remained active, as 111 out of the 118 businesses taking part in the survey report that they contribute to Drupal. The most common ways of contributing include development as well as sponsoring and organising events. The report shows that those who cannot contribute to Drupal are either sole entrepreneurs or are working at a company with over 100 employees, facing challenges in combining pro bono work with day-to-day business.

Drupal business leaders share various hopes on the development of Drupal. The most common ones include improved dev/editor/user experience, more/better features and ease of updates. Expectations towards the upgrade to Drupal 9 are mostly optimistic, the only thing that businesses shared was their concerns that customers may want to move away from Drupal because of the difficult upgrade from 7 to 8.

As one of the business leaders states: “Agency leaders play a key role in growing the Drupal community. This survey provides a great way for us to start working together. Next, we need to take the results and come up with strategies for growth!” The findings of this survey – and possible strategies for growth – were discussed at the Drupal CEO Dinner during DrupalCon Amsterdam 2019, where more than 60 Drupal Business leaders from all over the world came together.


See the 2018 survey results.

For more information, please contact Janne Kalliola (jannekalliola) or Michel van Velde (michel-van-velde).

About Exove

Exove delivers digital growth. We help our clients to grow their digital business by designing and building solutions with agile manner, service design methodologies, and open technologies. Our clients include Sanoma, Fiskars, Neste, Informa, Trimble, and Finnlines. We serve also start-up companies, unions and public sector. Exove has offices in Helsinki, Oulu and Tampere, Finland; Tallinn, Estonia; and London, United Kingdom. For more information, please visit

About One Shoe

One Shoe is an integrated advertising and digital agency with more than 10 years experience in Drupal. With more than 40 specialists, One Shoe combines strategy, UX, design, advertising, web and mobile development to deliver unique results for international clients like DHL, Shell, Sanofi, LeasePlan, MedaPharma and many more. For more information, please visit

About the Drupal Association

The Drupal Association is the not-for-profit organization dedicated to fostering and supporting the Drupal project, the community and its growth. The Drupal Association helps the global Drupal community with funding, infrastructure, education, promotion, distribution and online collaboration at For more information, please visit

Nov 20 2019
Nov 20

Gábor Hojtsy

An avid open source enthusiast and contributor. I am a Drupal 8 core product manager and initiative coordinator coordinator working with and on the open source project itself at Acquia. I am a regular Drupal event speaker and organizer, do communication and social media for various initiatives.

I used to be the Drupal 8 multilingual initiative lead and initiator. Also I am the former release manager of Drupal 6.

You can also find me passionate about singing, music and amateur acting, especially when these are all combined, however I have little time for that alongside my two adorable kids.

Head to the contact page to send a mail.


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