From drupal-core
Loads Drupal conventions for translations (t(), PO files, Twig), CSS (BEM, libraries.yml, attach_library), and error handling (exceptions). Use for theming, i18n, or exceptions in Drupal 10+.
npx claudepluginhub ajv009/drupal-devkitThis skill uses the workspace's default tool permissions.
Load these conventions only when relevant to the current task.
Loads Drupal conventions for translations (t(), PO files, Twig), CSS (BEM, libraries.yml, attach_library), and error handling (exceptions). Use for theming, i18n, or exceptions in Drupal 10+.
Navigates to online dev guides for Drupal APIs, theming, Next.js, design systems, Tailwind tokens, CSS, and practices like SOLID/DRY/TDD/security. Fetches/matches raw Markdown proactively before design or coding.
Validates Drupal PHP, CSS, and JS against coding standards, SOLID/DRY principles, security practices before commits. Enforces Gate 1 quality gates using checklists and git diff.
Share bugs, ideas, or general feedback.
Load these conventions only when relevant to the current task.
t() or TranslatableMarkup./translations/*.po files with msgctxt.|t filter for strings, {% trans %} blocks for placeholders.msgctxt "my_module" / msgid "English" / msgstr "Translated"..parent .child), not parent containers.block__element--modifier strictly for custom classes.{{ attach_library('my_theme/component') }} for all assets.*.libraries.yml entry.NULL/FALSE returns.\Exception — catch the narrowest exception you can handle.// Good: specific exception, early return.
if (!$entity) {
throw new EntityNotFoundException("Entity $id not found.");
}
// Bad: silently swallowing errors.
try {
$result = $service->process();
} catch (\Exception $e) {
// Never do this.
}