plugin-development.ts•3.3 kB
export const pluginDevelopment = {
title: "Backstage Plugin Development Guide",
description: "Complete guide for developing custom Backstage plugins",
content: {
overview: {
definition: "Plugins are the primary way to extend Backstage functionality",
architecture: "Frontend and backend components that integrate seamlessly with Backstage core",
types: ["Frontend plugins", "Backend plugins", "Full-stack plugins", "Common libraries"]
},
gettingStarted: {
prerequisites: [
"Node.js 18+ and Yarn",
"Basic knowledge of React and TypeScript",
"Understanding of Backstage architecture",
"Access to Backstage development environment"
],
scaffolding: {
command: "yarn create @backstage/plugin",
options: [
"--backend (for backend plugins)",
"--frontend (for frontend plugins)",
"--common (for shared libraries)"
]
}
},
pluginStructure: {
frontend: {
structure: [
"src/components/ - React components",
"src/hooks/ - Custom React hooks",
"src/api/ - API client definitions",
"src/routes.ts - Plugin routes",
"src/plugin.ts - Plugin definition"
],
key_files: {
"plugin.ts": "Main plugin definition and registration",
"routes.ts": "Route definitions for the plugin",
"index.ts": "Public API exports"
}
},
backend: {
structure: [
"src/service/ - Business logic",
"src/database/ - Database interactions",
"src/api/ - REST API endpoints",
"src/plugin.ts - Plugin registration"
],
key_files: {
"plugin.ts": "Backend plugin definition",
"router.ts": "Express router configuration",
"database.ts": "Database schema and operations"
}
}
},
commonPatterns: {
entityProvider: "For adding entities to the software catalog",
processor: "For processing catalog entities",
scaffolder_actions: "For custom scaffolding actions",
search_collators: "For indexing content in Backstage search",
permission_policies: "For custom authorization rules"
},
apis: {
catalog_api: "Access and modify catalog entities",
scaffolder_api: "Trigger and manage scaffolding operations",
techdocs_api: "Access documentation",
auth_api: "Handle authentication and authorization",
config_api: "Access configuration values"
},
testing: {
unit_tests: "Jest for component and service testing",
integration_tests: "Testing with Backstage test utilities",
e2e_tests: "Playwright for end-to-end testing"
},
deployment: {
local_development: "yarn dev for local testing",
packaging: "npm publish for distribution",
installation: "yarn add in target Backstage instance"
},
bestPractices: [
"Follow Backstage design system",
"Use TypeScript for type safety",
"Implement proper error handling",
"Add comprehensive documentation",
"Follow semantic versioning",
"Include unit and integration tests",
"Use Backstage APIs consistently",
"Handle permissions properly"
]
}
};