Drupal Module Finder
Use the
CLI to find the right Drupal contributed module for a
need, learn about it, and get the composer command to install it.
A copy of the command is bundled in this skill directory. Run it as
from here, or just
if it is on your
PATH. All output is raw Markdown. Target a different site with
(default:
http://module-finder.ddev.site).
Always check what is already available first
Before searching for or recommending a new module to download, prefer what the
project already has:
- Drupal core modules — if core already provides the capability, recommend
enabling the core module rather than installing a contributed one.
- Already-downloaded modules — modules already present in the codebase (e.g.
under and , or listed in the
project's ) but not yet enabled. Recommend enabling one of
those before adding a new dependency.
Only fall through to the search workflow below when neither Drupal core nor an
already-downloaded module covers the need.
Workflow
1. Search by describing the problem
Describe WHAT needs to be solved. Do not put the word "module" in the query —
that is implied.
drupal-module-finder semantic-search "send private messages between users"
One focused need per search. Each search must target a single capability —
never a whole product or a broad goal. If the user asks for something large like
"I want to build Facebook", split it into individual needs and run a separate
search for each, one at a time:
drupal-module-finder semantic-search "send private messages between users"
drupal-module-finder semantic-search "poke or react to other people's profiles"
drupal-module-finder semantic-search "news feed of friends' activity"
Run them sequentially (one request at a time) and evaluate each result set on its
own. A broad, multi-feature query returns poor matches; a single, specific need
returns good ones.
- Returns up to 10 candidate modules ranked by semantic relevance.
- Each candidate shows: title and data name (in parentheses), a summary, the
relevance score, and meta data (data name, project URL, development status,
security coverage, stars, project usage, latest release, agentic skills, and
Drupal version coverage).
- Add to also show the best-matching text excerpt per candidate.
- If nothing fits, rephrase the problem and search again.
2. Investigate the candidates
For any promising candidate, use its
data name (the value in parentheses, e.g.
->
) to get the full details:
drupal-module-finder module-info privatemsg
Add
for every field, or
--fields=stars,project_usage
to focus on a few.
3. Get the install / composer command
Once a module looks right, get its releases and composer commands:
drupal-module-finder release-info privatemsg
Then give the composer command to the user (e.g.
composer require 'drupal/privatemsg:^4.0'
).
All commands
| Command | What it gives you |
|---|
semantic-search "<problem>" [--chunk=true]
| Ranked candidate modules for a described need. Start here. Never cached. |
module-info <data_name> [--all] [--fields=...]
| A module's summary + meta data. = every field; = only the listed fields (drop the prefix, e.g. , ; is allowed). |
| Releases with their composer commands. Use this to install. |
documentation-info <data_name>
| Link to the module's external documentation (or "No documentation found"). |
| The module's README (or "No readme found"). |
file-structure <data_name>
| The module's file/folder structure. |
Fields
module-info <data_name> --fields=...
accepts these names (comma-separated, no
prefix). The same names are the labels you will see in the output.
| Field | Label | Notes |
|---|
| Module Name | The node title. |
| Data Name | Drupal.org machine name (used in every command). |
| Module Summary | Short human summary. |
| Module Description | Longer description. |
| Module Readme Text | Full README (see also ). |
| Documentation | Documentation text. |
| External Information | External docs link (see also ). |
| Link to Module | Project URL. |
| Module Categories | e.g. Access Control, AI, Automation. |
module_development_status
| Module Development Status | e.g. Actively Maintained, Unsupported. |
| Development Status | e.g. Under Active Development, Obsolete. |
| Security Covered | Covered / Not Covered. |
| Drupal Version Coverage | e.g. Drupal 10, Drupal 11. |
| Has Agentic Skills | Whether the module ships agentic skills. |
| Stars | Star count. |
| Project Usage | Number of sites reporting use. |
| Latest Release Date | Date of the latest release. |
| Latest Update | Last update date. |
| Latest Module Releases | Release titles (full detail via ). |
| Module Maintainers | Maintainer names. |
| Supporting Organizations | Backing organizations. |
| Module Affordances | What the module lets you do. |
| File Structure | File/folder layout (see also ). |
| Full Vector Search | Aggregated text used for semantic search (large). |
Example:
drupal-module-finder module-info privatemsg --fields=stars,project_usage,security_covered,drupal_version_coverage
Use
to dump every field at once (releases expanded).
How they help an evaluation
- semantic-search narrows the field fast from a plain-language description.
- module-info confirms fit: maintenance and security status, Drupal version
coverage, plus usage and stars as trust signals.
- release-info gives the exact composer command and version constraints.
- readme and documentation-info explain setup and configuration.
- file-structure reveals submodules and what ships in the package.
Options
- — point at a different Module Finder site.
- — (semantic-search) include the best-matching excerpt.
- , — (module-info) control which fields are shown.
Shell completion (bash)
Enable TAB completion for subcommands, options,
values,
values, and any module data names you have already cached:
source <(drupal-module-finder completion bash)
Add that line to your
to make it permanent. Completion is registered
for the
name on your PATH; running it as
will not auto-complete.
Tips
- Always search with a problem description — never a module name, and never the
word "module".
- Carry the data name from the search results into every follow-up command.
- Prefer modules that are actively maintained, security-covered, and cover the
user's Drupal version.