Skip to main content


A black and white photograph of an elephant's head.

Always run the desired PHP version when your hosting solution has multiple versions available

At Agaric, we perform a lot of Drupal upgrades. These very often involve transitioning away from older versions of PHP. Even when your hosting service provides multiple versions of PHP, you can still run into issues activating the appropriate one for each site: whether that's within the web server, at the command line, or via drush (or other tools). In this blog post, we'll be providing remedies for all of these cases. Most content applies to any PHP application.

A spiderweb covered in dew drops.

How to filter a view by content that references the current node in modern Drupal

A basic step-by-step guide on configuring relationships and contextual filters in a Drupal view.

A red onion sitting on a plate.

The development of Therapy Fidelity

We developed a React.js therapy application that supports evidence based therapy by helping therapists and their clients stay accountable to a standard protocol. This post covers some of the architectural decisions that we made to facilitate a fast time-to-market for this feature rich and carefully secured therapy dashboard.

Painting of a fancy peacock.

Recommendations for social media as Twitter melts down: Host your own community

As Elon Musk destroys Twitter, a lot of clients have asked about alternative social media, especially 'Mastodon'— meaning the federated network that includes thousands of servers, running that software and many other FLOSS applications, all providing interconnecting hubs for distributed social media. Agaric has some experience in those parts, so we are sharing our thoughts on the opportunity in this crisis.

A white cassette tape laying in the grass.

How to add an audio player to a content node in Drupal 9

Getting an audio player to show on your content nodes only takes a few steps. However, like many things in Drupal, knowing what those few steps are can be a bit of a challenge. This short guide will provide a basic introduction for anyone looking to use this core functionality on their site.

Old-fashioned half-used colorful red and blue fireworks box, labeled 'Thunder Bomb' with the warning Caution-Explosive in large capitalized letters.

Drupal 9 Component Plugin ContextException "not a valid context" after CTools, Symfony update

Upgrading to CTools 3.10.0 and/or various Symfony upgrades can break the simple task of adding content on your Drupal site.

A cartoon dinosaur trying to plug two cords together but their arms are too short.

Drupal 9.4 installation with existing configuration fails because "unable to uninstall the MySQL module"!?

How to deal with the error "Unable to uninstall the MySQL module because: The module 'MySQL' is providing the database driver 'mysql'.."

Silhouettes of a people on soapboxes shouting through bullhorns at a crowd, demonstrating stand / deliver, a portable dueling free speech unit, a mobile box equipped with two platforms and megaphones.

Uniting Visions: Kicking off Thursday 3pm ET planning & building sessions for democratic conversation scaling platform, Visions Unite

Hi friends and collaborators, join us today at 3pm ET (or any subsequent Thursday at 3) as we kick off a series of research, planning, discussion, and building sessions for Visions Unite.

Good discussion here with a great takeaway. Meet your fellow workers!

This is a tweet. No summary needed...

Indieweb Drupal logo consisting of the top of the Drupal drop and a stylized i and w.

Here is a social media microblog-sized post just to say we are syndicating to Mastodon and Twitter thanks to the Indieweb module!

It's great to be here, and there, and there.

Laptop with lock icon.

Create and use a custom permission in your module

You can define your own permissions for the Drupal permissions page (/admin/people/permissions in modern Drupal, Drupal 8, 9, 10, and beyond) and then add conditional options to your code to do different things based on the role of the user and the permissions configured by a site administrator.  See how!

BigBlueButton screenshot.

Why we resist Zoom and choose BigBlueButton for video chat

We can look at the recent popularity of some widely used platforms like Zoom and ask ourselves some questions as to why we still use them when we know a lot of terrible things about them. Agaric prefers to use a free/libre video chat software called BigBlueButton for many reasons, the first one being the licensing, but there are many reasons.

A drawing of a laptop with open tabs extending outside of the laptop as horizontally tiled windows.

Drupal toolbar not working in dev environments in Firefox? Here's why.

Drupal's toolbar not showing due to Uncaught DOMException quota has been exceeded may be due to sites sharing a top-level domain (default for some local development environments like DDEV) combined with a Firefox bug.


Upgrade from Drupal 6 or 7 when it is right for you: In the era of modern Drupal, release cycles of major versions have only minor importance

Drupal 7 has a much longer lifespan than the (already pushed back) official date, and Drupal 8 has an essentially infinite lifespan because it can update in-place to Drupal 9 easily and the same will be true of Drupal 10, 11, ∞. There's no reason to rush an upgrade— but there's no reason to wait either.

Community-managed categories

A long-held goal, this functionality still hasn't been built.  But if you're interested, please contact us!  Community-managed taxonomy opens categorization of content to the site's community. Users can influence both what terms nodes are tagged with and how these terms are themselves organized.

A plain two-edged razor blade (for a pun on double-edged raiser).

Double-edged Raiser: Past time to ditch Blackbaud

I have watched in sadness and sometimes anger as large non-profit after large non-profit collectively poured enough money into Raiser's Edge and other Blackbaud licenses and consulting services to fund massive feature enhancements for the main FLOSS alternative, CiviCRM— improvements which would then be free for everyone, forever.

A chart showing children's health outcomes.

Are you building communities of practice for community health in this time of public recognition of injustice?

The struggle to take seriously the impact of racism on public health during the covid-19 crisis spotlights the importance of health communities of practice and their need to have high-quality, data-driven discussions. How do we have and expand these conversations well?

List of configuration options for destination plugins

Drupal migrations reference: List of configuration options for destination plugins

In the previous article we provided a reference of available configuration options for migrate source plugins. In today’s article we are doing something similar for destination plugins. We will present a reference of available configuration options for migrate destination plugins provided by Drupal core and some contributed modules. Knowing which options are available might require some Drupal development knowledge. By providing this reference it should make the process of writing migrations easier.