This skill should be used when the user asks to "create RHDH backend plugin", "bootstrap backend dynamic plugin", "create backstage backend plugin for RHDH", "new backend plugin for Red Hat Developer Hub", "create dynamic backend plugin", "scaffold RHDH backend plugin", "new scaffolder action", "create catalog processor", or mentions creating a new backend plugin, backend module, or server-side functionality for Red Hat Developer Hub or RHDH. This skill is specifically for backend plugins - for frontend plugins, use the separate frontend plugin skill.
Bootstraps backend dynamic plugins for Red Hat Developer Hub using the new backend system.
/plugin marketplace add durandom/rhdh-skill/plugin install rhdh-plugin@rhdhThis skill inherits all available tools. When active, it can use any tool Claude has access to.
examples/dynamic-plugins.yamlBootstrap a new backend dynamic plugin for Red Hat Developer Hub (RHDH). RHDH is the enterprise-ready Backstage applicationthat supports dynamic plugins - plugins that can be installed or uninstalled without rebuilding the application.
Note: This skill covers backend plugins only. Frontend dynamic plugins have different requirements (Scalprum configuration, mount points, dynamic routes) and are covered in a separate skill.
Use this skill when creating a new backend plugin intended for RHDH dynamic plugin deployment. This includes:
catalog-backend-module-*)Do NOT use this skill for:
Before starting, ensure the following are available:
podman or docker)Check the target RHDH version and find the compatible Backstage version. Consult ../rhdh/references/versions.md file for the version compatibility matrix and available RHDH versions.
Ask the user which RHDH version they are targeting if not specified.
Create a new Backstage application in the current directory using the version-appropriate create-app:
# For RHDH 1.8 (adjust version as needed)
echo "backstage" | npx @backstage/create-app@0.7.3 --path .
After creation, install dependencies:
yarn install
The only purpose this serves is to ensure you can later create the plugin using the correct version of the Backstage CLI. All development and testing will be done in the plugin directory.
Generate a new backend plugin using the Backstage CLI:
yarn new
When prompted:
my-plugin)plugins/<plugin-id>-backend/The generated plugin structure:
plugins/<plugin-id>-backend/
├── src/
│ ├── index.ts # Main entry point
│ ├── plugin.ts # Plugin definition (new backend system)
│ └── service/
│ └── router.ts # Express router
├── package.json
└── README.md
Backend plugins must use the new backend system for dynamic plugin compatibility. The plugin entry point should export a default using createBackendPlugin() or createBackendModule().
Example plugin structure (src/plugin.ts):
import {
coreServices,
createBackendPlugin,
} from '@backstage/backend-plugin-api';
import { createRouter } from './service/router';
export const myPlugin = createBackendPlugin({
pluginId: 'my-plugin',
register(env) {
env.registerInit({
deps: {
httpRouter: coreServices.httpRouter,
logger: coreServices.logger,
config: coreServices.rootConfig,
},
async init({ httpRouter, logger, config }) {
httpRouter.use(
await createRouter({
logger,
config,
}),
);
httpRouter.addAuthPolicy({
path: '/health',
allow: 'unauthenticated',
});
},
});
},
});
export default myPlugin;
The src/index.ts must export the plugin as default:
export { default } from './plugin';
Build and verify the plugin compiles:
cd plugins/<plugin-id>-backend
yarn build
Export the plugin as a dynamic plugin and package it for deployment. For detailed export and packaging options, see the export-and-package skill.
cd plugins/<plugin-id>-backend
npx @red-hat-developer-hub/cli@latest plugin export
This creates dist-dynamic/ with the dynamic plugin package.
npx @red-hat-developer-hub/cli@latest plugin package \
--tag quay.io/<namespace>/<plugin-name>:v0.1.0
podman push quay.io/<namespace>/<plugin-name>:v0.1.0
For advanced options (dependency handling, multi-plugin bundles, tgz/npm packaging), consult the export-and-package skill.
Create the dynamic plugin configuration for RHDH. Add to dynamic-plugins.yaml:
plugins:
- package: oci://quay.io/<namespace>/<plugin-name>:v0.1.0!<plugin-id>-backend-dynamic
disabled: false
pluginConfig:
# Plugin-specific configuration (optional)
myPlugin:
someOption: value
For local development/testing, copy dist-dynamic to RHDH's dynamic-plugins-root:
cp -r dist-dynamic /path/to/rhdh/dynamic-plugins-root/<plugin-id>-backend-dynamic
See examples/dynamic-plugins.yaml for a complete configuration example.
createBackendPlugin)--shared-package to exclude problematic shared deps--embed-package to bundle required depsyarn tsc to check TypeScript errors before export@backstage/* versions match target RHDHrhdh/references/versions.md - Complete version compatibility matrixexamples/dynamic-plugins.yaml - Example RHDH plugin configurationActivates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use for discovering, retrieving, and improving prompts.
Search, retrieve, and install Agent Skills from the prompts.chat registry using MCP tools. Use when the user asks to find skills, browse skill catalogs, install a skill for Claude, or extend Claude's capabilities with reusable AI agent components.
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.