Drupal Feeds

Attention to web accessibility (a11y) is one of the most important tasks developers have to ensure an internet that is diverse and inclusive.

This month’s A11y Talk featured Damien McKenna from Mediacurrent. First he discussed the significance of open source contributions and the importance of contributing back to Drupal, then he led us through a live demo of the patch process on Drupal.org.

If you’ve ever implemented a WYSIWYG editor in Drupal, one thing that becomes apparent quickly is that the term (What You See Is What You Get) is a complete lie. None of the default theme styles appear in the editor, because the editor shows up in the admin theme. This obviously diminishes its value, and makes custom element styles useless. The good news is that it’s fairly simple to fix - once you know how.

Drupal 8’s default WYSIWYG is CKEditor, and it’s included as a core module with its own API. This is great, because they also added a way to get that default theme front-end code into the admin theme CKEditor. The description of how to manage this leaves a bit to be desired, as all they mention is ‘specifying a ckeditor_stylesheets key in the *.info.yml file’.

Let’s start from the beginning. Say you’ve been working on a D8 site and the intro has an H2, some text, and a call to action button:

That’s great! What does CKEditor show us?

Oh. What I see is certainly not what I get. Let’s start by showing the basic styles in CKEditor. Go to your current default theme (ours is in /web/themes/custom/) and find your THEMENAME.info.yml. Open it in your favorite editor and you’ll see something like this:

name: My Theme Name type: theme description: A base theme for My Site package: Other core: 8.x base theme: classy regions, etc...

Now add the ckeditor_stylesheets: key and the target file right below the core: 8.x line, like so:

... package: Other core: 8.x ckeditor_stylesheets: - css/ckeditor.css

If there’s something already under core: 8.x just put the CKEditor lines below it.

Next you have to actually add a file there! Go to your theme’s /css/ directory and add an empty ckeditor.css file next to the site’s style.css.

Now, you could just tell CKEditor to load all of the site CSS - but that would be overkill for the poor little iframe. It’s better to just find the vanilla CSS styles you need in your style.css file and copy them over. In our case it’s only about 160 lines of CSS - the default styles for the site, plus some rendered Sass mixins for the button. How does our WYSIWYG look now?

Bazinga! What a difference.

Hmm, but our button is missing its styles because we haven’t configured the CKEditor for that yet.

Go into the Drupal configs to set that up at /admin/config/content/formats and click ‘configure’ for the CKEditor text format you want (Full HTML, etc).

If you don’t have ‘Styles’ in the ‘Active Toolbar’, add it by dragging it in. It looks good next to ‘Format’, and has a similar behavior:

Then scroll down to the ‘Styles dropdown’ tab and add the appropriate markup and class for the button.

In our case we want to turn an anchor link (a) into a button by adding a .button class, so we use a.button. The text after the pipe (|) is what will appear in the ‘Styles’ dropdown.

Finally, make sure you’ve added that markup to the ‘allowed HTML tags’ section if you’re adding it to a restricted markup configuration:

Important Note: style options won’t show up in the Styles dropdown unless you have clicked/selected an eligible piece of markup - in our case the a tag - in the CKEditor window. So in our example, we’d have to click on ‘read more’ before we click on the Styles dropdown.

As long as you have a.button styles in ckeditor.css, it should work right away. (Well, after a cache clear. It’s Drupal.)

And that’s it! From here you can continue to add styles to ckeditor.css, and to the Styles dropdown in the Drupal ‘Text formats and editors’ admin.

The WYSIWYG is no longer a lie!

In a recent Drupal 8 project, we dealed with a multilingual translation issue: we need to translate the usual "View more" text on the Content: Link to Content field in Views.

After doing some research, we found a workaround like this:

1. Instead of using Content: Link to content, let's add two fields: Content: Path and Global: Custom text.

read more

Do you know what is your website main weakness? Do you know how many broken links it has? How many users actually find your CTA-buttons? Does your content attract or appall website visitors?


Although Drupal is a mature CMS and developers take care of it 24/7, we have to keep an eye on our websites’ well-being, too. We created a check-list on web auditing so that you can find vulnerabilities and eliminate them.


We will examine how it’s going with your website’s design, SEO. content, and few more things.


Get a website’s audit check-list.



School year vary from country to country. Some have already started going to school, in contrast to others, which are still enjoying the holidays. In Slovenia, from where our company comes from, students are catching the last holiday action, because the first day of the school is scheduled for this Friday, 1th September. The same applies to Hungary, while Croatia's first school day is the first Monday in September. On the other hand, in Austria and in Italy, our two remaining neighbours, the first day of school varies between states and it is usually between the 10th September and 20th… READ MORE

I’ve been involved with open source software (mainly Drupal) for the last 10+ years. There has been unquestionable growth when it comes to Drupal adoption. I’ll spare you the war stories, but the decision paradigm has shifted from executives asking, “why should we consider Drupal?” to “why would we want to look at a proprietary, licensed based option and pay seven-figures in just licensing fees alone for ‘closed-code’?”

It’s no secret that we’re passionate about open source at Deeson. We’ve written before about why we think businesses should pay their developers to work on open source projects and of course we practice what we preach.

Developers at Deeson get paid time to contribute to open source, and are building some really cool stuff as a result.

Open source estate management

In previous posts we introduced you to Warden, our open source solution for managing multiple Drupal websites. Warden provides a central dashboard for reviewing the status of your sites, and highlights those with issues that need resolving.

As an agency, Deeson works with a broad range of clients and each of their websites or platforms has unique hosting requirements. We needed a central place to maintain oversight of the current status of all the sites we manage.

Upon discovering that none of the existing SaaS options did exactly what we needed, we decided to develop our own solution and give it back to the community.

We’re continuing to develop and support Warden, and we’re pleased to say the first stable release (1.0.0) became available at the end of June! A major new feature included in this release is the ability to report on the third party libraries (e.g. JavaScript and PHP) a site is using.

Know which sites need updating

Warden already reports versions of your Drupal modules and this new feature allows you to identify which sites are using which versions of various add-on libraries, including jQuery, Backbone.js, and AngularJS. This means you can discover which sites you will need to update if there are any security announcements for those libraries.

Setting the library versions

As well as the Warden server upgrade, there is a new release of the Drupal Warden module available for both Drupal 7 and 8 to enable the reporting of third party libraries. 

There are multiple ways to add libraries to a Drupal site – you can do it manually, or use composer, drush make, or the Drupal libraries module. For simplicity’s sake we opted for a manual approach to setting the configuration.

In order for your site to report the specific libraries (JavaScript and PHP) that are being used, you will need to manually specify them in the site’s settings.php file.

For further details about how to configure Warden to report on library versions, check out the module’s README file.

Library security announcements

At present, there unfortunately isn’t a central library of all security announcements for JavaScript or PHP libraries, so Warden can’t report on whether or not a current library version has a security issue.

It’s therefore up to the user to be aware of the various libraries your sites are using in order to know if there have been any security announcements for them. The advantage of using Warden is that you have one central place to look.

There are several online databases which detail security announcements for JavaScript and PHP libraries, though these aren’t complete and many libraries aren’t covered.

Here is a list of resources where you can view security advisories:

In conclusion

Warden allows in-house development teams and agencies to keep track of security releases and version numbers across an estate of Drupal websites stored on different hosting environments, and can save time when managing security rollouts.

The new features in Warden extend to include third party library versions, for which there has never previously been a solid mechanism in place for centrally storing and reporting on.

Are you using Warden successfully? What else does the tool need? Come and let us know on our GitHub issues listing page.

Interested in joining our team? Deeson is hiring!

In Drupal 7, we had menu_get_object() to get the object in code for whichever node, term, or whatever entity makes up the current page. But in Drupal 8, that has been replaced, and entities can usually be operated on in a generic way. If you know the type of entity you want, it's pretty simple. But I keep running into different suggestions of how to get the entity object when you don't know its type. Given that D8 allows us to deal with entities in a unified way, I thought there must be a good way! The code of core itself is usually the best place to look for examples of how to do common things.

How to skip row if parent entity does not exist during a Drupal 8 migration Richard Papp Tue, 08/29/2017 - 18:23 Drupal 8 lets you perform incremental migrations and update records that have changed since their last migration. If you meanwhile delete such records in Drupal 8 a migration update may break.
Drupal Modules: The One Percent — Display Machine Name (video tutorial) NonProfit Tue, 08/29/2017 - 12:10 Episode 33

Here is where we seek to bring awareness to Drupal modules running on less than 1% of reporting sites. Today we'll investigate Display Machine Name, a module which conveniently displays a field's machine name on view/form displays.

We know you’re going to be very busy learning and sprinting, but we hope you take some time and enjoy the incredible history and entertainment Vienna has to offer.

DrupalCon is located near the Prater, and is easily walkable to many incredible attractions. There are a lot of things to do in this city of music, art, culture.

Here are our top picks for things to see in Vienna:

Drupal has changed many lives for the best and we want to show newcomers how. Share your story with us!

Record a short video with a hashtag #Drupalchanges and tell what positive changes Drupal brought to your life. Did you change your career? Cool! Met new friends, moved a bigger city? It's huge! 

Post the video on Twitter and/or Facebook until the 7th of September and we will compose your stories altogether so everybody can use the video!

Let's inspire together!

30 Aug 2017 One way to find out what’s happening in Drupal

Many channels, but the weekly meetings some teams have are a great way to get started.

It’s a big project, Drupal is. Many different areas that people are working in. The project is it’s own stack of technologies and skills, from low level framework considerations to the last bit of people-facing interface. Composer, Documentation, Accessibility. Each layer in the stack comes with shared considerations about goals, priorities, standards, documentation and getting code written, reviewed, committed.

There are whole teams working on specific feature sets. Media, Workflow, Migrate. But how to find out what’s happening inside each of these areas? PHPUnit, Out of the Box, API-first.

These links all go to long, dense outlines of plans and issues where current state of things and what to work on next is not super obvious. But there is a predictable and reliable way to see and hear people discuss their projects and initiatives. Outside-In, Admin Information Architecture, Progressive Web Apps. Many of the larger initiatives have weekly meetings to discuss progress, status and next steps. Mentoring, Multilingual, Diversity.

Here’s a calendar with all the core meetings on it.

Where and how these meetings are held differs per team. IRC, Google Hangouts, Slack. Many interesting channels on Slack lately, check those out.

These meetings are an easy way to start listening in and getting up to speed. The timing is predictable and you can be sure it’s the experts talking about what is happening and important now. Layout, Security, Frontend components. Don’t let that hold you back to ask questions or share your thoughts. They are nice people and always looking for more people to help out. You are welcome.

Tags meetings drupalplanet drupal

The Drupal Association Board is responsible for the Drupal Association’s financial health and as part of their duty, they vote to approve monthly financial statements. The board met on June 28, 2017 at the open board meeting held online. Summit CPA, the Drupal Association’s financial advisors, reviewed the Q1 2017 financial statements, which the board voted to approve afterwards.

For those who could not attend this session, this blog will provide more details about the Q1 2017 Financials, and how we performed against the KPIs that Megan Sanicki, Executive Director laid out in her blog post of June 22, 2017.

As mentioned in previous posts, the Drupal Association has two financial KPIs that we measure against each month:

  • Have a cash balance of 15-30% of Revenue

  • End 2017 with a net income profit of 10%

Below is a summary of how we performed against our KPIs each month in the first quarter of 2017. Overall, we are pleased with our financial progress in this quarter. It shows that we are becoming more sustainable since we made hard choices in 2016 to address our cost structure issues. Cash reserves increased due to DrupalCon Baltimore ticket sales and by selling new programs like the Drupal.org industry page sponsorships and the Charter Customer Supporting Partner Program.






Cash Reserve





Net Income Margin %





This chart below shows how our cash reserves were building in Q1, primarily due to DrupalCon ticket sales. You can see the cash reserves were still low at the start of 2017, as we were still in recovery. Additionally, November through January are our low cash months due to being between DrupalCons.

Net Income Margin will move up and down based on the month’s activities. Overall with the strong January, and the less solid February and March, we are still tracking to our cash forecast.

Monthly Updates

January cash reserves ended at 14% of the recommended cash reserve of 30%.  January’s net income margin finished at 10%.  Revenue had a nice percentage bump due to some unanticipated sales in the digital and industry pages sponsorships.  Additionally, we received a 28k travel grant from Travel Ireland. Thanks Travel Ireland!

February’s cash balance reserve closed in at 22%, due to a strong collections effort on accounts receivables (A/R) by our staff.  The net income margin for February was reduced due to some reclassification of deferred income.  These reclassifications made Febuary come in lower against the cash forecast.  However, with the strong performance of January, the YTD income goal is still on track against our cash forecast.

The cash balance for March exceeded the goal of 30%.  Why? Based on the 2017 forecasted revenue a 30% cash reserve goal is around $1.4M. The March balance of $1.8M was higher than this goal. The jump in cash is due to the strong collections in A/R and timing variances for payments in our A/P. You can see from our A/R tracking that we generally perform better than industry counterparts when it comes to payment on our accounts receivable; as at the end of March we were at 20 days to collect payments.  Additionally, ticket sales from DrupalCon added to the cash balance.

The board meets again on 23/24 September, 2017 at DrupalCon Vienna where they will approve Q2 financials. We will share a similar update to the community after that meeting takes place.

We would not be able to do our mission-driven work without the support and contributions of our community. Contributions come in many forms, through purchase of DrupalCon tickets and event sponsorships, through our Supporters and Members, Drupal.org sponsors, recruiters who post jobs on Drupal Jobs and many other fantastic ways our community supports the Drupal eco-system. We are deeply grateful for everyone who contributes their time, talent, and treasure to move Drupal forward.

Thank you!

File attachments:  AR march.jpeg closing cash march.jpeg

A recent project involved a large number of nodes, each with a menu item. The menu was hierarchical with three levels. Each node page needed a link to the previous and next item.

To generate previous and next links for the current page, I had first looked at loading the menu and traversing it. However, these objects are not easy to navigate. Even the render array is not in order. One would have to resort it by weight. Instead most of what we need is in the database. And ultimately, any classes that load menu items get them from the database anyway. In the simplest case, the previous and next items are simply the previous and next sibling menu items. However, previous could be the parent of the current menu item. If the current menu item is a parent, the previous item could be the last child of the previous sibling. Similar situations exist for the next item. Finally, one also has to account for there not being either a previous or next item. The below image better illustrates this relationship.

The links are generated in a block defined in code. To do this we extend Drupal’s BlockBase in a php file of the same name as the class.

class BookNavigation extends BlockBase implements ContainerFactoryPluginInterface {  

This should go in a custom module’s src/Plugin/Block/ directory.

To get this data and be able to traverse it, we start with the MenuActiveTrail class. Remember to include the necessary use statement:

use Drupal\Core\Menu\MenuActiveTrailInterface; $active_trail_ids = $this->menuActiveTrail ->getActiveTrailIds('MENU-MACHINE-NAME');

This gives us an array of menu item UUIDs starting with the current page at the first item on through to the top level menu item.

We need to break this up into current item and any parents.

$current_menu_id = $this->getMenuId($current_menu_uuid);   $parent_menu_uuid = array_shift($active_trail_ids); if ($parent_menu_uuid != '') { $parent_menu_id = $this->getMenuId($parent_menu_uuid); }   $grandparent_menu_uuid = array_shift($active_trail_ids);

While a menu could have more layers, for this purpose we only ever need to consider two levels “up” from the current item.

Using these menu UUIDs we can load all the child items from the database.

$this->menuStorage = $this->entityTypeManager ->getStorage('menu_link_content');   $siblings = $this->menuStorage->getQuery() ->condition('menu_name', 'menu-table-of-contents'); if ($parent_menu_uuid == '') { $siblings->condition('parent', NULL, 'IS'); } else { $siblings->condition('parent', $parent_menu_uuid); } $siblings = $siblings->sort('weight', 'ASC')->sort('title', 'ASC') ->execute();

This query gets all sibling menu items. It returns entity ids, not UUIDs. However, the parent is identified as a UUID. An extra query gets the entity id for a given UUID:

protected function getMenuId($menu_uuid) { $parts = explode(':', $menu_uuid); $entity_id = $this->menuStorage->getQuery() ->condition('uuid', $parts[1]) ->execute(); return array_shift($entity_id); }

The query also has entity_ids as the array indexes. The following will simply things:

$siblings_ordered = array_values($siblings);

We’ll similarly need all parent menu items, where the grandparent is used in the query.

Then to find the previous and next items:

$sibling_index = array_search($current_menu_id, $siblings_ordered); if ($sibling_index !== FALSE) { $prev_index = $sibling_index - 1; $next_index = $sibling_index + 1; }

This is for that simplest case. It gets slightly more complicated when the previous or next item could be a parent or the sibling of the previous or next parent.

if ($has_children && $prev_index > -1) { $prev_sibling_entity = $this->menuStorage ->load($siblings_ordered[$prev_index]);

Once you’ve determined the previous and next URL, populate a renderable array.

if ($prev_url) { $prev_url->setOption('attributes', [ 'class' => [ 'pager__link', 'pager__link--prev', ], ]); $items['prev'] = Link::fromTextAndUrl($prev_title, $prev_url)->toRenderable(); } else { $items['prev']['#markup'] = $prev_title; }   // Generate next content. if ($next_url) { $next_url->setOption('attributes', [ 'class' => [ 'pager__link', 'pager__link--next', ], ]); $items['next'] = Link::fromTextAndUrl($next_title, $next_url)->toRenderable(); } else { $items['next']['#markup'] = $next_title; } $build['nav_links] = $items;

Finally, to make sure the block is cached properly and cleared when needed, a cache context of 'url' is needed. This ensures the block is cached separately for each page, or url. A cache tag that corresponds to the menu name will ensure these items are cleared from cache whenever the menu is updated. That tag would take the format of 'config:system.menu.MENU-MACHINE-NAME'.

$build['#cache'] = ['max-age' => -1]; $build['#cache']['contexts'][] = 'url'; $build['#cache']['tags'][] = 'config:system.menu.menu-table-of-contents';

While this is a small amount of code, it handles menu systems of varying complexity, and the code is only run once per url after the menu is saved or all cache is cleared.

This one is dedicated to all my fellow Drupalers. There’s no better exercise for a brain than reading ancient chinese poetry taming Drupal 8. When I’m bored, I turn to Drupal!

Recently I got my Drupal 8 Address module updated and it turned out that from now on street address ...

Read now

The Drupal Association is honored to be the stewards of DrupalCon - a program created by the community for the community. It serves many goals ranging from uniting, growing, and strengthening the community to leveling up Drupal skills to accelerating contribution.

This year the Drupal Association has been focusing on DrupalCon Europe, so we can better serve the European community. While we certainly hear good things about the event from attendees, we also hear many comments like “it is too much of a US event” or “content isn’t appealing enough” or ”it is too expensive” or “there isn’t enough business value for sponsors” or “it’s not rock and roll enough”.

We see this play out in the attendance numbers, which decreased 14% on average each year since DrupalCon Amsterdam in 2014. Sponsor revenue decreased as well. And thanks to a more accurate financial reporting approach launched last year, we can see that DrupalCon Europe lost over €200,000 per event for the last several events.

This isn’t a sign of Drupal’s health. It is simply a sign that this event is not meeting the community’s needs. We can tell because European Drupal events grew in number, attendance, and type over the last few years. The community clearly wants a different kind of experience.

Drupal Association staff like Amanda Gonser, Program Manager, and Rachel Friesen, Director of Events, come to work each day simply to serve the community and create a DrupalCon experience that delights and helps people feel empowered to move Drupal forward. It pains us knowing that DrupalCon is not hitting the mark for the European community. And, it also pains us that we aren’t able to host DrupalCon in other regions like Asia or South America because they’re not possible with our current operational model for hosting events.

For staff, producing  a special DrupalCon experience is more than a job, it’s a personal mission. So, we are putingt a lot of care into figuring out how to make DrupalCon Europe better.

To come up with an event concept that is sustainable and loved (or provides unique value in business speak), we met with many European community members over a period of 10 months and even put out a community survey to gather input. Together, we worked through a process to find a better path forward.

It’s time to open this discovery process up to the greater community so you can understand at a deeper level the problems we are trying to solve and the process we’re using to solve them. Then, we want to discuss the options that we have identified so we can find the best path forward for DrupalCon Europe. I know that together, we can create a sustainable event that strikes at the needs of the European community.

To share the information we’ve gathered and to foster discussion, I am launching a blog series. Starting with this post, it will cover the following topics:

  1. The problem we need to solve for financial sustainability

  2. The problem we need to solve to create unique value

  3. Results from a proposal based on community input

  4. A new path forward for DrupalCon Europe

I encourage discussion in the comment section during the blog series and I will host BOFs at DrupalCon Vienna so we can talk through a path forward. We encourage members to read this blog series so you have as much background information as possible to help inform these discussions.

Thank you for caring about this important community event and giving input into what it looks like in the future.

Entertainment Tonight is the number one entertainment news magazine in the world, and has been on the air for over 30 years. Fans around the world rely on Entertainment Tonight to receive news and updates on their favorite celebrities and stars. I recently discovered that the newest star featured on Entertainment Tonight was Drupal 8!

Entertainment Tonight's new Drupal 8 website, ETOnline.com, receives 19 million monthly unique visitors, making it the second most visited entertainment news website. Check it out at http://www.etonline.com!

In July, we were quite active in the field of modules. We have looked at the most popular ones and the best for Drupal 8. But as promised that was not our last stop. Namely, this time we will explore Drupal 8 modules we use at Agiledrop.   Our company has completed more than 200 projects. After the release of Drupal 8, many projects were dealt with in the newest version of this open-source platform. Some modules from Drupal 7 were moved to the core in Drupal 8. Moreover, there were also modules that we not converted properly to the Drupal 8. That all resulted in a fact that from around 12… READ MORE
What Is Decoupled Drupal and Why Is It Important? David Hernandez Thu, 08/31/2017 - 13:40

The web has no shortage of digital trends that will pop up on your radar, and one whose momentum has increased over the last couple years is decoupling. In simple terms, the concept of decoupling means separating the frontend of your website from the backend. This means the components of a site that a visitor sees and interacts with (menus, page content, widgets) are built and displayed by software running in the web browser. The backend software, running on the server, accepts requests from the frontend for these different page components and returns them as essentially raw data.

With this full separation of concerns, each half of the website can focus on what it does best; the backend focusing on business logic and retrieval of data, the frontend focusing on display and user experience.

How Do We Achieve This?

This is where JavaScript frontend frameworks come into play. Popular ones include Angular, which we at FFW have used quite successfully on projects, or React, Ember, and many others too numerous to count. These frameworks enable a skilled developer to build a complex and highly interactive frontend without constant page refreshes that require the full attention of the backend.

To do this, it helps to have a powerful and flexible content management system, which doesn’t require lots of custom programming and reinvention of the wheel. This is where Drupal comes in. We’ve done this quite successfully with Drupal due to its robust and flexible API. Drupal 8 pushes this even further with its API first approach, and superior set of APIs.

Things like the built-in RESTful web services and superior content modeling tools do most of the work of building that backend system. Eventually the backend will communicate effortlessly with frontend systems and other applications and third-party service. This makes Drupal an effective content hub for distributing your content to any application that needs it.

Pros and Cons

When introducing anything new there are various factors to consider. A decoupled fronted can improve perceived performance and enhance interactivity. It can also do something very difficult with a fully baked content management system, where all rendering is handled by the backend. It enables developers and development teams to design and build a frontend almost completely independently from how the backend is developed. Your templating system, how CSS is built and managed, preferred methods for design components, all this can be treated like a separate project. Your designers and frontend developers don’t even have to have skills specific to the CMS you are using.

Life, of course, is never perfect. The main drawbacks become apparent when really thinking about how all this affects the way your site is built and managed. When using a CMS like Drupal, you start losing a lot of the key features that make it the tool it is. Can you use Drupal’s site building tools to, for example, change the order of fields displayed on a page? Things like that are now being hard-coded into the frontend. We also start losing some of the multilingual features, it plays less nice with metatags and other SEO features, and potentially increases the amount of work and skills needed to build your website. Those aren’t all unsolvable problems, but you’ll need to consider them when deciding where you are willing to devote the development time to building a decoupled site.

Two Approaches

If you understand the concept of separating your frontend and backend, you’ll start seeing two approaches while doing your research. “Headless” Drupal, which just means a fully decoupled frontend. The other is “progressive” decoupling. “What the heck is that?” you might say. Progressive decoupling blurs the line between what the frontend and backend are doing, rather than fully decoupling the two.

Progressive decoupling starts with a traditional website approach, with no decoupling, and the backend doing most of the work to produce the web page. Then, individual components that are deemed more interactive or take longer to produce are handled by the frontend. This approach plays a little more nicely with tools already present in your CMS, and is easier to implement on any existing website.

New Hotness Can Burn

Decoupling a website is a great way to solve some problems of the traditional website module. We certainly advocate it for projects suffering from those problems. But, as with all technology, make sure your use case has the need before forcing technology onto it. The decoupling approach can revolutionize your site visitor’s experience, but if forced to fit it can create new problems, increase development time, and inflate your costs.

A simple site, with few frontend performance problems, largely static content, and little need for things like user- or region-specific content, is not likely to need something like a decoupled frontend. My advice: Let your requirements always inform your solution. Technology is great at solving problems, but don’t let it create them by misapplying it to your project. If you want to talk about whether decoupled Drupal might be right for you, please contact us.

Tagged with Comments