Choosing and vetting third-party Backstage plugins

Before you install a third-party Backstage plugin, check who maintains it, where it is published, how actively it is released, and what credentials and permissions it can reach. This page sets out that checklist and the reasons behind it.

On this page

Why third-party Backstage plugins need a review before install

A platform team wants a plugin that shows CI status, open incidents or cloud cost on entity pages, and must decide whether to install it. Backstage itself carries no license fee and no paid edition from the project, since it is an Apache-2.0 framework. That means the risk you carry comes from the plugin: who maintains it, which repository it comes from, how often it is released, and what it is allowed to reach. Those are the signals your team controls, so the decision should be made deliberately rather than by copying a plugin from a blog post or a demo.

A plugin runs inside the portal's backend and can use whatever tokens, connection settings and catalog data that backend already holds. A plugin for a build server, for example, may need an API token with read access to job history, and a careless configuration can let it read far more than the entity page needs. The review should therefore answer three questions before anything is installed: which credentials the plugin asks for, what scope each credential has in the source system, and which catalog entities and annotations it will read. Confirm these against the plugin's own documentation and a test instance, not only the README.

This section is followed by the checklist, a comparison of plugin sources, and the steps for a trial installation in a non-production instance. One timing point matters for the plan: the Backstage versioning policy says high and critical severity vulnerabilities are backported to releases from the last 6 months where feasible, and other security fixes may be backported. Community plugins do not inherit that policy. Ask each plugin maintainer how fixes are released and how quickly, and check that your Backstage version is one the plugin supports. The Backstage release and versioning policy sets out the release lines you will need to track.

Six checks to complete before a third-party Backstage plugin enters your portal

Each card is a check you can run in parallel before approving a plugin. Together they answer who stands behind the code, where it is maintained, whether it tracks the Backstage release line you run, what it can reach, which secrets it holds, and how it will survive the next upgrade.

Maintainer identity and accountability

Identify who publishes the package and who answers issues and security reports. Look for named maintainers tied to a company or an active community, a published security contact, and a clear owner for the package on the registry. Ask whether the maintainer is paid to maintain it or whether it depends on one volunteer. A weak answer is an anonymous author, a single unreachable maintainer, or no way to report a vulnerability before disclosure.

Repository and publishing origin

Confirm whether the plugin lives in the community-plugins repository, a vendor repository, or a personal fork. Check that the npm package name and version match the source repository and that the publisher is the same party that owns the code. Treat a plugin whose repository has moved, or whose package points to a repository you cannot find, as unverified. A weak answer is a package published from an unlinked repository.

Release activity and target release line

Read the release history and the Backstage version range the plugin declares as a peer dependency. Confirm it targets the main release line you run, not only the next line, and that it has shipped fixes for recent Backstage versions. Check whether the project publishes a changelog and whether security fixes are announced. A weak answer is a plugin that declares support for a release line you have not adopted or has no release notes for recent changes.

Permissions and API scopes requested

Review every permission the plugin asks for, including the scopes on any token it needs from a source system such as a CI server, issue tracker or cloud account. Compare the requested scopes with what the feature actually displays. Prefer read-only scopes and ask whether write actions such as re-running jobs can be disabled. A weak answer is a plugin that asks for administrator scopes to display a status badge.

Credentials and where they are stored

Map each credential the plugin needs to the layer where it runs: backend configuration, a secret store, or the browser. Confirm that tokens are read by the backend, injected from your secret manager, and never placed in frontend bundles or entity annotations. Ask who issues the token, how long it lives, and how you rotate it. A weak answer is a plugin that expects a token in app-config files committed to source control or exposed in the browser.

Upgrade path at the next version bump

Plan for the day the Backstage version moves. Check whether the plugin's dependencies are pinned to the @backstage packages you run, whether the maintainer documents migration steps, and whether you can test the plugin in a staging portal before production. Record the plugin's version and owner in your catalog so the upgrade has a named contact. A weak answer is a plugin with no tested upgrade notes that forces you to stay on an old release line.

Why Backstage plugins run unsandboxed and what that means for your review

A Backstage plugin is code that runs inside your portal, with the same access as the portal itself. Backend and frontend plugins are JavaScript packages loaded into the same Node.js process as the rest of Backstage. Nothing isolates them the way a browser extension is isolated from a web page, so a plugin that reads a token, opens a network connection or registers a route has whatever reach the host process has. Your review therefore has to cover where the code came from, which dependencies it pulls in, and which configuration values it reads, not only the features its README advertises. Confirm the current isolation model in the Backstage documentation before you rely on any statement about it here, because the project's guidance on plugin trust may change between releases.

The practical consequences fall on sign-in and secrets. A backend plugin can read entries from app-config.yaml, including values that were meant for another plugin, and it can call APIs with any credential it is given. Ask each candidate for the exact configuration keys it reads, the environment variables it expects and the scopes of every token it asks for, then check that each one is stored as a secret and not in the repository. Find out whether the plugin needs its own backend credentials or can work through an existing proxy, since a shared credential widens the blast radius of a bad release.

Sign-in matters most when a new plugin adds routes. The Backstage authentication documentation advises configuring sign-in resolvers so every provider resolves to the same identity, and not offering guest access in production. A plugin that exposes a new API path can be reached by anyone who can reach the backend, and if guest access is still enabled or the resolver maps a login to a different user, the route may run under an identity you did not intend. Before installing, test the plugin's new endpoints with an unauthenticated request, a signed-in user without the right group, and a guest session, and record the result as part of the approval.

Which plugin source fits which level of risk

This table compares four sources of Backstage plugins by typical maintenance owner, review effort, upgrade responsibility and the situations where each fits. Read each row against the risk level of the data and credentials the plugin will touch, not only the feature it offers. Whatever the source, confirm maintainer activity and release history for each named plugin yourself before installing it.

Plugin sourceTypical maintenance ownerReview effort and upgrade responsibilityWhere it fits
Community-plugins repositoryIndividual or volunteer maintainers listed in the repository, with no guaranteed support from the Backstage projectFull review of code, dependencies and requested credentials before install. Your team owns upgrades and must retest after each Backstage version bump.Read-only views for low-sensitivity data, pilots, and integrations where a second source is not available
Vendor-maintained repositoryThe vendor that operates the connected tool, under its own release and support termsReview the vendor's release notes, token scopes and dependencies. Upgrades depend on the vendor keeping pace with Backstage, so confirm compatibility with your version.Integrations with a tool your organization already licenses and supports, where the vendor's accountability matters to auditors
Internal plugin built by your teamYour platform or portal team, which owns code, dependencies and on-call supportHighest build effort, but the review is your own code review. Your team carries every Backstage upgrade and security patch for the plugin.Connections to internal systems no public plugin covers, or where the plugin must handle sensitive data under your own controls
Fork of an upstream pluginYour team for the fork, while the upstream project keeps its own release lineReview each upstream change before merging into the fork. Your team owns security fixes, rebasing and compatibility, which grows with every divergence from upstream.A proven upstream plugin needs a change the maintainers will not accept, and your team accepts ongoing merge work
Plugin with a shared or user-level credentialDepends on the source above, but the credential owner carries the access riskConfirm the token scope, storage location and rotation process before install. Review effort rises when the plugin reads secrets or can trigger builds or changes.Read-only status views where the credential is scoped narrowly and kept out of the browser
Plugin that runs unsandboxed in the backendSame owner as the source, but the code runs inside your Backstage processTreat any backend plugin as trusted code with access to your configuration and secrets. Review its dependencies and version pins on every upgrade.Only where the source review is complete and the plugin's access matches its purpose
Plugin that has moved or been archivedUnclear, so confirm the current owner before installingCheck the repository's archive status, last commit and open security issues. Plan a migration or replacement before the next Backstage upgrade.Generally not a fit for new installations. Keep only for existing deployments with a dated replacement plan

How deep the review goes for each kind of plugin

A frontend-only plugin runs in the browser and renders data it receives from the Backstage backend or from an existing API. It holds no secret of its own, so the review concentrates on what the page can reach and what it displays. Confirm that the plugin does not call external services directly with embedded keys, and that any data it shows is already filtered by the permissions your sign-in model applies.

  • Bundled code: Read the package's dependencies and check whether it pulls in scripts or assets from third-party domains at runtime.
  • Data source: Identify which backend route or proxy endpoint supplies the data, and confirm that route is covered by your authorization policy.
  • Rendered content: Check how the plugin handles untrusted text from catalog annotations or external systems, so that it cannot inject markup into entity pages.
  • Configuration exposure: Verify that no token, URL with credentials or internal hostname is shipped in the frontend configuration.
  • Update path: Note who tracks new releases and whether the package version is pinned in your lockfile.

Record the package version, the dependency list, the network calls observed in a browser session, and the reviewer's name before approval.

How to run a plugin trial before production

This sequence moves a candidate plugin from a compatibility check to a recorded approval in a non-production instance, so the team knows what the plugin reads, what it can change, and how to back it out before it touches the production portal.

  1. Confirm compatibility with your release line

    Start by checking the plugin's documented Backstage compatibility against the release line your instance runs, and note the Node.js version the plugin expects. Your Backstage instance supports exactly two adjacent even-numbered Node.js releases, so confirm the plugin works with one of them. Use the upgrade guide to keep your @backstage packages aligned with the plugin's peer requirements rather than adjusting versions ad hoc. The step is complete when you have a written note naming the Backstage version, the Node.js version and the plugin release you tested against.

  2. Install in a pinned non-production instance

    Install the plugin in a non-production Backstage instance that uses the same @backstage package versions as production. Pin the plugin to a specific release rather than a floating range, and confirm that the install does not pull in a second copy of any @backstage package. The step is complete when the instance builds, starts and shows no new errors in its backend logs after startup.

  3. Configure with a read-only test credential

    Create a credential that can only read from the source system, scoped to one test project or namespace. Store it in your secrets mechanism and reference it from the plugin configuration, keeping it out of frontend configuration and version control. The step is complete when the plugin loads data for the test project and a request outside that scope is refused by the source system.

  4. Verify annotations and displayed data

    Add the entity annotations the plugin requires to a few test catalog entities, then compare what the plugin shows with the same data in the source system. Check counts, statuses, timestamps and links, and confirm that entities without annotations show an empty state rather than another entity's data. The step is complete when a reviewer has signed off on a short table of matched and mismatched fields.

  5. Review dependency and lockfile changes

    Compare the lockfile before and after the install and list every new or upgraded package the plugin brings in, including transitive dependencies. Check each new package's maintainer, license and recent activity, and flag any that run install scripts or make outbound network calls at build time. The step is complete when the list is attached to the review record and each flagged package has a documented decision.

  6. Record approval and rollback steps

    Write down who approved the plugin, the release and commit tested, the credentials it uses and where they are stored, and the exact steps to remove it, including the configuration keys and catalog annotations to delete. Test the rollback in the non-production instance and confirm the portal still starts without the plugin. The step is complete when the record is filed and the rollback has been run successfully once.

Credentials and permissions to scope before a plugin goes live

A third-party plugin inherits whatever access you give it, and most plugins run inside the Backstage backend with the same trust as your own code. The five checks below cover what the plugin can read, where its secrets live, whose identity it acts as, who can reach its routes, and how its activity is traced.

Scope the external API token

Create a token for the plugin that can only read the data the portal displays, and limit it to named projects, pipelines, or workspaces where the vendor supports that. Ask whether the plugin ever writes back to the source system, and if it does not need to, confirm that the token has no write scopes. Record the scopes in your plugin review so a later token rotation does not quietly widen them. Confirm the token key names in the plugin's own configuration documentation.

Keep tokens out of frontend bundles

Plugin credentials belong in backend configuration, loaded from environment variables or a secrets store, and never in values that the frontend reads. Anything exposed in a frontend bundle can be read by every signed-in user through the browser. Check each plugin's frontend and backend packages to see which one needs the secret, and confirm that the proxy or backend plugin is the only path that calls the external API.

Choose per-user or shared credentials

Where a plugin supports per-user OAuth or personal tokens, it can act with each user's own permissions, so it cannot show or trigger more than that user could in the source system. Where it only supports a shared service credential, every portal user gets the same access, so the credential needs the narrowest scope and an owner who can rotate it. Decide this per plugin and write the decision down, since some plugins offer both modes and the default may not be the one you want.

Restrict access through sign-in resolvers

Plugin routes inherit the portal's sign-in, so the resolver that maps each identity to a catalog user decides who can reach them. Follow the authentication guidance to make every provider resolve to one identity model and to turn off guest access in production. Then test with a user from each group that should be excluded, because a plugin that only checks for a signed-in user lets any authenticated account through.

Review plugin activity in source systems

Ask the vendor or project which API calls the plugin makes and how they appear in the audit logs of the source system. Route those logs to your central store, and set alerts for token use from unexpected hosts or for bursts of reads on projects outside scope. Review the logs on a schedule that matches your change process, and treat any new plugin version as a change that needs the same review as the first install.

Questions teams ask before approving a third-party Backstage plugin

How much internal effort does a plugin review take?

The effort depends on how many plugins you are reviewing, how many external systems each one touches, and how deeply you examine the credentials each plugin needs. A single read-only plugin that calls one API with a scoped token is a short review. A plugin that writes to a delivery or incident system, or that asks for broad organization-wide tokens, needs more time for the source read, the permission mapping and the test in a non-production instance. Plan the review per plugin, then multiply by the number of systems. Ask any partner to price the review by plugin count and credential depth, and to state what is one-time (the first review) and what recurs (re-review after major upgrades or maintainer changes).

Can our own team run the plugin review without outside help?

Yes, if you have people who can read the plugin source, understand the target system's token and permission model, and run Backstage in a test environment. The team usually needs a Node.js and TypeScript reader, someone who knows the identity and access model of each external system (such as which API scopes a token needs), and a security reviewer who can judge secret handling. Check the plugin's repository, its release history and its open issues yourself, and record the answers in a short review note per plugin. Bring in outside help when the review covers many systems at once or when you need written evidence for an assessment.

How long should a plugin trial run, and what sets its length?

Trial length is set by the questions you need answered, not by the calendar. A trial should exercise the plugin against a non-production instance of the external system, confirm that it reads only what the entity page needs, check that credentials stay on the backend, and confirm the plugin still works after a Backstage version bump in a staging copy. Longer trials are needed when the external system has many projects or teams to map, or when your change process requires a full cycle of releases to observe behavior. Agree on the trial's exit criteria before it starts so the length follows from them.

What should a written quote for outside plugin review include?

A useful quote states what is in scope and what is not, so you can compare offers. Ask for the following in writing:

  • The list of plugins and the external systems each one connects to
  • The environments where testing happens (for example, a staging Backstage and a non-production instance of each system)
  • The credentials and token scopes reviewed, and where each one is stored
  • The written acceptance criteria that mark the review as complete
  • Who fixes issues found, and whether that work is priced separately
  • The deliverables, such as a review note per plugin and a configuration record

DeployOpen agrees scope, deliverables and timelines in writing before work starts, so a quote follows from that written scope.

Who owns upgrades when a plugin falls behind a Backstage release?

Your organization owns the decision, and the plugin's maintainer usually owns the code change. Backstage moves its @backstage packages together with yarn backstage-cli versions:bump, and the Backstage Upgrade Helper shows template changes between versions. A community or vendor plugin may lag that cycle, so you need an agreed rule: pin the last compatible version, delay the Backstage bump, or fork and maintain the patch yourself. Name an owner for each plugin in your catalog, state who tests it after each bump, and decide in advance how long a lagging plugin may stay on the older Backstage line. Ask any partner who will carry that upgrade work and whether it is in the retainer or a separate fixed-scope job.

What should we do when a plugin is abandoned by its maintainer?

Treat abandonment as a risk with a defined response, not a surprise. Check the plugin's release activity, open security issues and maintainer responses before you rely on it, and set a rule for when a plugin counts as inactive. When one goes quiet, your options are to replace it with a maintained alternative, to remove the entity page feature, or to take over maintenance through a fork with a named owner. Keep the plugin's credentials scoped so an unmaintained plugin cannot reach more than it needs. Record the decision in your catalog so the owner and the review date are visible to other teams.

Why do Backstage plugins run unsandboxed, and what does that mean for review?

Backstage plugins are code that runs inside the Backstage frontend or backend process, so they have the same access to the process as Backstage itself. The framework does not isolate a plugin in a separate sandbox, which means a plugin can read any configuration or secret the backend can read, and can call any network address the backend can reach. For that reason, review each plugin's source as you would any dependency with production access. Check which configuration keys it reads, which tokens it requests, which outbound hosts it calls and whether it exposes data to the browser. Limit the secrets available to the backend, and give each plugin its own narrowly scoped token.

Where should we check whether a plugin is community-maintained or from a vendor?

Start with where the plugin is published and who signs its releases. Plugins in the community-plugins repository are maintained by contributors and have their own review standards, while vendor plugins are maintained in the vendor's repository and usually follow the vendor's release process. Confirm the repository owner, the license, the maintainers listed on the package, and the last release date. Compare the plugin's supported Backstage version with your running version before you install it. Ask the vendor or community maintainers the questions you cannot answer from the repository, and record the answers in your plugin review note.

Limits to confirm in your environment before approving a plugin

This page does not assess any named plugin, and the facts that decide whether a plugin fits your portal change over time. The four cards below cover what you must confirm yourself at the time of review, from ownership and release line compatibility to Node.js support and the scopes an external API grants.

Current maintainer and repository

Confirm who maintains the plugin on the day you review it and where its code lives, since vendor-maintained plugins may change ownership or move to a different repository. Check the repository's recent commits, open issues and the named maintainers, and compare them with the location in your architecture notes. A plugin that moved after your last review is a new decision, so record the repository URL and review date in your approval file. Ask your procurement or security owner who accepts responsibility if the maintainer stops.

Compatibility with your Backstage release line

Confirm that the plugin declares support for the Backstage release line you run, because the main line ships monthly and the next line ships weekly. Read the plugin's release notes and compare them with the Backstage release notes on the GitHub releases page before you bump any @backstage package. A plugin that lags behind your release line blocks upgrades, so record the version pair you tested.

Node.js requirements against supported versions

Check the plugin's published Node.js engine requirements against the Node.js releases Backstage supports at your version. Backstage supports exactly two adjacent even-numbered Node.js releases, so a plugin that requires a single older or newer version can break your build or force a runtime change. Confirm the range in your container image and in your CI pipeline, not only on your workstation.

Scopes offered by the external API

Confirm that the external system's API offers the scopes the plugin needs, and no more. Read the plugin's documentation for each permission it requests, then check whether your chosen token type can grant a read-only scope for that data. If the API only issues broad tokens, record that risk and ask whether a narrower service account is possible. Credentials belong in backend configuration, never in frontend code.

How DeployOpen works on this

DeployOpen reviews candidate Backstage plugins against your organization's identity model, credential rules and delivery tools before anything reaches a production portal. The review produces a written decision for each plugin, along with the configuration and operating notes your team needs to keep it safe after handover.

How we scope

  • Agree in writing which plugins are in the review and which Backstage version they must work with
  • List the source systems each plugin would read from and the permissions each one would need
  • Define the decision record format: maintainer, release activity, license and accepted risk per plugin
  • Engagements are fixed-scope, so the scope, deliverables and timeline are confirmed before work starts

How we build

  • Check each candidate's repository, maintainer and release history against the agreed criteria
  • Install candidates in a non-production Backstage instance and test their sign-in and token handling
  • Review the credentials and API scopes each plugin requests and propose narrower alternatives where possible
  • Document any plugin that runs unsandboxed with the controls we recommend around it

How we hand over

  • Deliver a decision record for each plugin with the evidence behind it
  • Provide the approved plugin list, pinned versions and the configuration keys each plugin requires
  • Document the steps to add, upgrade or remove a plugin under your change process
  • Walk your platform and security teams through the findings and open questions

How we support

  • Re-review plugins when their maintainers change, releases slow or a new Backstage line ships
  • Ongoing support, upgrades and continuous testing are available as retainers
  • Confirm any plugin's current status with its repository and your own environment before each change
  • Keep the approved list and decision records current as your catalog and integrations grow

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.