1"use strict";(self.webpackChunkbackstage_microsite=self.webpackChunkbackstage_microsite||[]).push([["18697"],{528780(e,n,t){t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>d});var s=t(570859),i=t(474848),l=t(28453);let a={id:"well-known-skills",title:"Well-known published skills",description:"This section lists the AI skills published by the Backstage project."},o,r={},d=[{value:"Skills",id:"skills",level:2},{value:"Frontend System Migration",id:"frontend-system-migration",level:3},{value:"UI Migration",id:"ui-migration",level:3},{value:"Instrumentation",id:"instrumentation",level:3},{value:"Backend Tooling",id:"backend-tooling",level:3}];function c(e){let n={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,l.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(n.p,{children:["This section lists the ",(0,i.jsx)(n.a,{href:"/docs/ai/skills",children:"AI skills"})," published by the Backstage project at the ",(0,i.jsxs)(n.a,{href:"https://backstage.io/.well-known/skills/",children:[(0,i.jsx)(n.code,{children:"backstage.io"})," well-known endpoint"]}),". Install any of these skills into your repository with:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"npx skills add https://backstage.io\n"})}),"\n",(0,i.jsx)(n.h2,{id:"skills",children:"Skills"}),"\n",(0,i.jsx)(n.h3,{id:"frontend-system-migration",children:"Frontend System Migration"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"app-frontend-system-migration"}),": Migrate a Backstage app from the old frontend system to the new one. Covers the hybrid migration phase and the full migration of routes, sidebar, plugins, APIs, themes, and other app-level concerns."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"plugin-new-frontend-system-support"}),": Add new frontend system support to an existing Backstage plugin while keeping the old system working. Use this for published or shared plugins that need to work in both old and new frontend system apps."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"plugin-full-frontend-system-migration"}),": Fully migrate a Backstage plugin to the new frontend system, dropping all old system support. Use this for internal plugins that only need to run in a single app, or when you are ready to remove backward compatibility entirely."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"ui-migration",children:"UI Migration"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"mui-to-bui-migration"}),": Migrate Backstage plugins from Material UI (MUI) to Backstage UI (BUI). Covers component mapping, import updates, and styling pattern replacements."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"instrumentation",children:"Instrumentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"plugin-analytics-instrumentation"}),": Instrument a Backstage frontend plugin with analytics events using the Backstage Analytics API. Covers adding, reviewing, and extending event capture, deciding whether an interaction warrants an event, and writing tests for analytics behavior."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"backend-tooling",children:"Backend Tooling"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"onboard-to-openapi-server"}),": Migrate an existing Backstage backend plugin's hand-written Express router to the typed OpenAPI tooling. Optionally covers typed client generation and migrating router tests to the OpenAPI test wrapper."]}),"\n"]})]})}function h(e={}){let{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453(e,n,t){t.d(n,{R:()=>a,x:()=>o});var s=t(296540);let i={},l=s.createContext(i);function a(e){let n=s.useContext(l);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(l.Provider,{value:n},e.children)}},570859(e){e.exports=JSON.parse('{"id":"ai/well-known-skills","title":"Well-known published skills","description":"This section lists the AI skills published by the Backstage project.","source":"@site/versioned_docs/version-stable/ai/well-known-skills.md","sourceDirName":"ai","slug":"/ai/well-known-skills","permalink":"/docs/ai/well-known-skills","draft":false,"unlisted":false,"editUrl":"https://github.com/backstage/backstage/edit/master/docs/ai/well-known-skills.md","tags":[],"version":"stable","frontMatter":{"id":"well-known-skills","title":"Well-known published skills","description":"This section lists the AI skills published by the Backstage project."},"sidebar":"docs","previous":{"title":"Published skills","permalink":"/docs/ai/skills"},"next":{"title":"Auth and Identity","permalink":"/docs/auth-and-identity/generated-index"}}')}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.