← ClaudeAtlas

backstage-plugin-createlisted

Scaffold a new Backstage plugin package (frontend, backend, common, node) with `yarn new` and wire it into packages/app and packages/backend for the repo's actual system generation.
bendaamerahmed/backstage-idp-plugin · ★ 1 · API & Backend · score 65
Install: claude install-skill bendaamerahmed/backstage-idp-plugin
# Create a Backstage plugin Scaffold a new plugin package in a Backstage monorepo and wire it into `packages/app` and/or `packages/backend` so it actually loads. ## Preconditions - Repo generation is known. Run `backstage-repo-discovery` first, or determine it yourself: - **NFS** (new frontend system): `packages/app/src/App.tsx` uses `createApp` from `@backstage/frontend-defaults`; plugins use `createFrontendPlugin`, blueprints, `/alpha` imports. - **Legacy frontend**: `createApp` from `@backstage/app-defaults`, `<FlatRoutes>`, `bindRoutes`, `createPlugin` / `createRoutableExtension`. - **New backend**: `packages/backend/src/index.ts` is a short `createBackend()` + `backend.add(...)` file. `createServiceBuilder` or `plugins/*.ts` env wiring means the removed legacy backend — stop and report BLOCKED. - Release line read from `backstage.json`. Node 22 or 24 only. - Plugin ID decided: lowercase, dash-separated, stable (it becomes the URL path, the backend mount point `/api/<pluginId>`, and `backstage.pluginId`). If the ID or the package split cannot be determined from the task, return BLOCKED rather than guessing. - `yarn` unless the repo's `packageManager` field says otherwise. ## Procedure 1. **Decide the package split** before generating anything. Follow ADR011 naming, where `x` is `plugin-<id>`: - `x` — frontend plugin (React, extensions/blueprints, pages). - `x-backend` — HTTP routes, DB, service dependencies. Never imported by fr