- Add new features to Backstage
- Modify or extend existing features
- Customize the UI
- Integrate with third‑party systems

Architecture refresher
Backstage follows a classic web architecture: a frontend (React) and a backend (Node.js). Plugins may include both frontend and backend components. For example, the Catalog feature typically has acatalog frontend plugin and a corresponding backend plugin that handles data retrieval and APIs.
Typical request flow:
- The user interacts with the frontend (clicks or navigates).
- The frontend sends a request to a backend plugin endpoint.
- The backend plugin queries a database or external service.
- The backend returns data to the frontend, which renders it.

Each plugin is a separate package that can be developed, tested, and deployed in isolation. This improves developer productivity and runtime resilience.
Monorepo layout
A common Backstage repo structure places each plugin in its own directory underplugins/, and core application code under packages/. Example layout:
package.json and can be treated like an independent npm package. You can publish or share plugins via npm, and you can run or debug a single plugin without launching the entire Backstage app.


Plugin architecture types
When designing plugins it helps to think in patterns. The three common plugin architecture types are:Standalone plugin
A standalone plugin runs entirely in the browser. It is typically a React component that renders static or client-side data and does not require a backend plugin or external service calls.
Service-backed plugin
Service-backed plugins are appropriate when you control the backend service or need to aggregate and process internal data. The frontend plugin calls a backend plugin; the backend then communicates with databases, caches, or internal services.
Third‑party‑backed (proxy) plugin
Use a third‑party‑backed pattern when you must interact with external services you do not control (e.g., GitHub, GitHub Actions, external SaaS APIs). In this pattern the frontend calls a backend proxy, which forwards requests to the external API. Common reasons to add a backend proxy:- Avoid CORS issues by making server-to-server requests
- Keep credentials and tokens on the backend (do not expose long-lived tokens in the browser)
- Apply authorization, caching, rate limiting, or request shaping before contacting the external API

Never store long‑lived API keys or credentials in frontend code. Use a backend proxy to keep secrets secure and to perform authorization checks server‑side.
Frontend presentation patterns
Frontend plugins can be presented in multiple ways within Backstage. Common presentation patterns:
Full‑page plugin
Full-page plugins register a route (for example,/my-plugin) and render an entire page within Backstage. Many core features, such as the Catalog (/catalog), are implemented as full-page plugins.


Catalog plugin
Catalog plugins enhance entity pages by injecting cards or sections into the existing Catalog UI (for example, adding an About section, relations, or links). This preserves the overall Catalog layout while surfacing extra contextual information for entities.
Conclusion
You now have a practical overview of Backstage plugins:- Why plugins exist and what they enable
- How plugins are structured in a typical monorepo
- Common architecture patterns (standalone, service‑backed, third‑party proxy)
- Frontend presentation options (full‑page, catalog, tab)
- Explore the Backstage plugin directory for existing plugins
- Try creating a small standalone plugin to get familiar with the development workflow
- When integrating external APIs, design a secure backend proxy to handle credentials and cross‑service concerns
- Backstage documentation: https://backstage.io/docs
- Plugins directory: https://backstage.io/plugins