Modules of Interest

This is meant to be a collection of modules I find interesting. Some may be created by me, and where's that's true you should see them tagged with mandclu. Is there any particular value for the outside world to be able to browse this collection? Probably not, I just wanted a place to collect and categorize modules. And here you are.

The Moderation Note module empowers you to annotate and review moderated Entities. Installing the module, view a moderated entity, and select text on your moderated content.

Guardr is a Drupal distribution with a combination of modules and settings to enhance a Drupal application's security and availability to meet enterprise security requirements.


The Viewer module is a simple and yet powerful module to import and process structured or unstructured file types such as CSV, XLSX/XLS, PDF and present them in Drupal via Viewer reference field or a Block. The module comes with multiple plugin support for various data. Some of the plugins include integration with Chart.js, ApexCharts, Datatables and many more.

On a timed basis this module will save the current entity form state into browser storage. If an editor returns to a form that has a saved state, they will be given an option to restore that state. When the form is saved normally, any autosaved states will be automatically purged.

This module provides a system for users to gain or lose points for performing certain actions on your site, providing an incentive for users to participate in the site and be more active.

When working in a configuration or entity form, overrides the browser's default behaviour for command-s or control-s key combinations, to submit the form instead. The Javascript triggers a click on the submit button, so any validation or submit handlers should function normally.

This module allows fields to be required only when the piece of content is being published or is already published. This can be used when you have fields such as tags or SEO information on your piece of content that editors really don't need to fill in until the content is going live.

Leverages the Field API to add registrations to any entity. Also leverages workflows to control processing registrations, and has Commerce integration for paid registration requirements.

This module uses a visitor's IP address to identify their geographical location (longitude/latitude), country, region, city and postal code, and stores these in a session variable. The module is able to automatically pull updated copies of free, flat-file lookup tables.

This module provides a rich set of tools for planning and reporting on your site's content. It includes a dashboard, interactive calendar, and kanban board.


The Security Review module automates testing for many of the easy-to-make mistakes that render your site insecure. Checks include file and directory permissions, text formats, error reporting, and more.


Allows a headless application to retrieve extra information for a page or path, that isn't included by default in the JSON:API representation of the content object: breadcrumbs, metatags, redirects, etc.


Token Content Access allows you to restrict access to individual nodes using URL tokens. In order to view protected nodes, users must provide a unique token via the URL. This allows nodes to be published and viewable to anonymous users (for instance with a special link from an email campaign) but not visible to the public at large.


This module provides to create menu items on a Taxonomy term page in Drupal 9/10. This functionality is similar to creating menu items for nodes. This module enables the "Available Menus" options on the Taxonomy vocabulary page. Then on the Taxonomy term add/edit form you can set the menu item for that term, just as you can do on the node add/edit form.

Simple Feedback Survey is simple customer initiated survey used primarily to collect customer experience data from users visiting your site. The survey stores data in its own database table, however it can send data to BigQuery which can be used with Datastudio.

Creates a bundle-specific view mode to use for creating a comparison table, with permissions to use the comparison, a link field to add entities to the comparison, and a block to show a link to the comparison.

This module provides an additional display option for a views summary attachment to display its values as tabs. If using the Olivero theme, that theme's library to style tabs will also be attached.

A collection of useful UI tools for working with fields.

Field tools is developed as and when I have need of the features. If this module is useful to you, please consider investing back some of the time you save by adding to the module's functionality. Check the issue queue and TODOs in the code for suggestions where to start.

The Autofill module makes it possible to autofill the values from one textfield to another while typing. Once your field input was customized the autofill functionality will be detached.

Helps to manage toolbar items. You can do following actions.

  • Change order of items
  • Change label
  • Change CSS class names (so you may set different icons)
  • Enable/Disable

Views Flag Refresh allows site administrators to configure which views are refreshed automatically via AJAX when certain flags are selected. This is useful when you have a view that filters by flagged content and you want the view to be refreshed automatically when content is flagged or unflagged elsewhere on the page.

This module implements a new cache context, based on the value of a reference field on the current user. To use this new cache context in your own module, after installing this module add a cache content like user.ref_field:field_foo where field_foo is the machine name of the reference field (e.g.

This module is a Configuration Kit that provides a system for managing user-specific tasks. On first install the system is simple by design, but the tasks are stored as Storage Entities so you're free to modify and add fields as needed to suit the specific needs of your site: due dates, ticket IDs, a "task type" taxonomy reference, and so on.

A new entity type for managing data that should be stored in the database, but only displayed within or associated with other content. If you're using a solution like Rabbit Hole to prevent direct access to an entire content type, that content might be better stored as storage entities.

This module provides a method for users with the necessary permissions to manually override the results being returned by Search API Solr. They will be able to choose a specific search term, and pick which nodes should be at the top, and also choose to exclude nodes so they will not be shown in the results.

Enables the recording and presentation of statistics for the Search API module. There are plans to implement usage and performance statistics in the near future. For now this module gives your Drupal site a top search phrases block for all the Search API indices on your site.

This module allows a site to boost Solr query results where the content has a taxonomy term reference that matches a selection in a field on the current user. For example, if your site had a taxonomy for animals, and a user had set their favourite animal as "elephant" in their user profile, the module would cause content tagged with "elephant" to appear higher in the search results.

This is a configuration-only module that creates a system for managing links with SVG icons, designed to be shown in a block on the home page. They are saved as Storage Entities to reduce clutter in the content system, and can be managed directly from the home page, within the settings tray (see screen captures).

This module provides a ready-to-use set of configuration for displaying Person nodes on your website, for example in a staff directory, faculty list, or list of physicians. The Auto Entity Label module is leveraged so editors only need to provide first and last names, and will be combined into a title for the node.

The Multiselect module defines a field widget to be used with the following fields types: List fields (text, float, or integer) or entity reference fields. It allows the user to select multiple items in an easy way. It consists of two lists, one of all available items, the other of selected items. The user can select an item by moving it from the unselected list to the selected list.

This module allows you to add a target to link fields. You can configure the link target per link if you select the appropriate field widget in the field settings.

Provides a new layout to use as a section within layout builder. Any block added will have its title shown as a tab in the tab set, and clicking a tab will reveal the content for the appropriate block.

Significant work has gone into making sure the generated tabs markup will be accessible.

In Drupal 8 and newer, you can create form modes which control how the fields are displayed in the edit form of content such as nodes and taxonomy terms.

The "issue" is that you can't actually make use of those form modes from config except for user register and edit forms.

This module allows you:

A more configurable version of the navigation block provided by the Book module in core. The options provided include:

  • Choose to show only a single book (or default to show all, as in core)
  • Choose a maximum depth to create the menu
  • Force the menu to be expanded

When installed this module now creates a new content type (Alert), a related taxonomy vocabulary (Alert Severity), and a view for display the alerts. The module will automatically create three severity levels.

This module improves on core's "Empty Node Frontpage behavior" area plugin (used in headers and footers) when used on views that show a restrictive set of content types (e.g. one or two) by allowing a site builder to add links that point directly to one or more forms to add content, of a specific content type. You can also specify a class, for example to format as a button.

When using media to add images to content, having media view modes defined by aspect ratio, combined with a bunch of different image styles for the images in that specific aspect ratio seems to solve the responsive images problem in a pretty easy way.

Provides options for adding a link to your date output. An example use would be linking to your group's meetup page to RSVP, or directing users to a registration webform. By default links will only be added to upcoming events, but this module can be configured to add its links to all events.

Proof of concept for using Smart Date with Drupal Commerce to allow registration. This module will define a product type for listing events. If only using this system for free events, you can update the form display to remove the price and potentially the sku fields, and you will likely want to implement a simplified checkout process.

This module allows multiple methods to simplify the use case of needing to add multiple content entries of the same type. In the same way that the taxonomy term creation interface loads the form to create a new term by default when a new term is created, this module provides a button to allow a content creator to immediately see a new form once the content they're working on is saved.


A former boss used to say, "The surest way to starve a dog is to put two people in charge of feeding it." If people aren't individually accountable, they often assume someone else will take care of a given task. A potential challenge with the powerful workflow capabilities in Drupal core is that they don't make anyone individually accountable.


Another module that checks for unique values, but this one optionally can run an AJAX validation on blur, so the editor can see any problems before trying to submit the form. Also has support for link fields.

I love the concept of this module. For your content types you can define rules for checking that content is unique, each rule checking a field or a combination of fields.

Provides a flexible system for users to rate content. A single piece of content can have multiple widgets, and a number of different widgets are available out of the box. Offers a customizable results summary, and can use the Charts module for reporting.


Being able to send email notifications from a Drupal site is great, but sometime the result can be a lot of noise in an administrator or editor's inbox. Message Digest allows for notifications to be sent on a fixed cadence (e.g. daily or weekly) compiling together all the notifications for the period.

Performs static site analysis to generate a detailed report with actionable best practice recommendations across a variety of concerns, including security, performance, database size and complexity, and more.

Provides a personalization toolset that can do some simple conditional display of content, primarily using Smart Blocks. Also has integrations for a variety data handling capabilities including dataLayer objects, UTM code handling, and integration with subscription-based services that can inject more sophisticated algorithms, like Demandbase or 6sense.

Collaboration tool for SEO on blog posts, social posts, and multichannel distribution. Sounds promising, but requires a subscription to the StoryChief web app.


Allows administrators to inject CSS and JS into the page output based on configurable rules. Useful if site admins want a way to add a front end library to one or more specific pages, without having to deploy code changes to the theme.


Machine Learning is something I've been interested in for a while, especially since seeing a presentation about it at DrupalCon Baltimore. This module, and its capability-specific companion modules give us a hint at the sophisticated ways advanced computing can help reduce the load on content authors in increasingly sophisticated content delivery workflows.

This module is designed to help Drupal sites share content entities: nodes, taxonomy terms, media entities, and more. Sounds like a budget version of Acquia Content Hub, would be interesting to try.

By default Drupal provides "created on" and "last updated" dates for any content, but this module provides a third date, for when a piece of content was published. Often this is the date that should be displayed on news, press releases, etc.


Sometimes your site needs a more complex workflow than the linear state-to-state options possible using the Content Moderation built into Drupal core. This module allows for conditional logic and a variety of different actions that can be triggered, including the ability to add custom ones to meet your needs.

Sometimes the revision log message can be very useful in the Drupal edit interface, but sometimes you want to keep things as simple as possible. This module provides a variety of potential approaches for either hiding the field completely, or making it available selectively. A nice way to make Drupal's edit interface more intuitive.

If your editors regularly run into issues where multiple users are trying to edit the same piece of content, this module allows for a content item to be "checked out", preventing other users from working on it at the same time. There's also a discrete permission to break the lock on content, in case a high priority update needs to get published.


If I had found this module sooner, it would have saved me significant effort on a number of site builds. I've written custom modules specifically to create custom blocks that could be managed as config, which is exactly the problem that module solves.

Traditionally headless sites have to use a specialized search service like Algolia. This module allows a headless application to query your Solr index through Drupal using JSON:API.

I also looked at SolREST, but I'm not sure I like the idea of bypassing Search API, or the fact that it only has a dev release as of this writing.

Designed to prevent the creation of duplicate content, Allow Only One allows a site builder to specify criteria, using one or multiple fields, that will be used to validate that a piece of content is unique.

Sometimes, as part of the publishing workflow, you want to get feedback from people who don't need to access the backend of your website often enough that it makes sense for them to have their own user account. For these kinds of scenarios, where you need "one off" access to unpublished content, the Access Unpublished module is a terrific solution.