Migrate from Roadie to self-hosted Backstage

A planning guide for moving a Roadie-based developer portal to a Backstage instance your organization hosts and runs, covering what moves cleanly, what needs rework and how to cut over safely.

On this page

How to migrate from Roadie to self-hosted Backstage

Moving from Roadie to self-hosted Backstage is mostly a catalog and integration migration, and your catalog files are usually already in your repositories. Roadie is built on Backstage, so the core model carries over: entities are described by catalog-info.yaml files, and those files are the part of the move that matters most to keep. Teams usually start this work after a renewal, a data location requirement, or a question about who really owns the portal's configuration and history. Before planning, confirm with Roadie which entities exist only in its UI or API, because those will not be in any repository and need a separate export.

Platform engineering usually leads the migration, with security and identity engineers involved early. Backstage is an Apache-2.0 framework with no paid edition from the project itself, so the software license is not the cost. The work you pay for is hosting, PostgreSQL, upgrades, and the people who maintain them. Effort depends mainly on three things: how many custom plugins or Roadie-specific features your teams depend on, how sign-in is set up today, and how many integrations (source control, CI, cloud accounts, incident tools) must be reconnected. Inventory each one and assign an owner before you choose a cutover date.

Authentication and ownership data need the most care at cutover. Backstage ships 19 built-in authentication providers, and its authentication documentation recommends sign-in resolvers that map every provider to the same identity and no guest access in production. Test those resolvers with real users from each group, and check that owner and system fields in every descriptor resolve to existing Group or User entities. Run the new portal in parallel with Roadie for a period, compare entity counts and ownership reports, and only then retire the old instance. Ask Roadie for a written list of data it holds, and confirm how it will delete your data after the contract ends.

Which Roadie capabilities map cleanly to Backstage

This table maps the Roadie features you are likely using to their open-source Backstage equivalents and marks each as clean, needs rework or gap. Use it to scope the migration work, then confirm every Roadie-specific item against Roadie's current documentation before you plan.

Roadie capabilityBackstage equivalentMigration status
Software Catalog and catalog-info.yamlSoftware Catalog with the same descriptor format, kinds and Location filesClean: descriptors stay in the repositories; re-point the catalog locations
Entities created through the Roadie UI or APIEntities defined in YAML or added through the catalog APINeeds rework: export these entities and commit them as descriptors
Software TemplatesSoftware Templates, run from your own scaffolder and Git hostsNeeds rework: copy template definitions and re-test every action against your own SCM and credentials
TechDocsTechDocs with MkDocs, Markdown kept next to the codeClean: confirm your MkDocs plugins and the storage and build setup you will run
Kubernetes viewKubernetes plugin, configured against your own clustersNeeds rework: rebuild cluster access, service account permissions and label mapping
SearchSearch plugin with the catalog and docs indexed by your own backendNeeds rework: choose the search engine and rebuild indexing jobs
Authentication and sign-inBuilt-in providers, including GitHub, GitLab, Google, Azure, Okta and generic OIDC, with sign-in resolversNeeds rework: configure resolvers so each provider maps to one identity; guest access should be off in production
Managed upgrades, managed plugins and ScorecardsNo hosted equivalent; upgrades follow the monthly and weekly release lines and Scorecards need your own plugin or replacementGap: rebuild or replace. Confirm each item against Roadie's current documentation before planning

What moves from Roadie and what you rebuild

Most of what Roadie holds for you is already in your repositories as descriptor files, and that part moves with almost no change. The work sits in what does not live in Git: entities created through the UI or API, credentials for each integration, and the discovery settings that tell your portal where to look. Plan each of these as a separate workstream with its own owner.

catalog-info.yaml stays in repositories

Component, API, System, Domain, Resource and Template descriptors sit next to the code they describe, so a self-hosted Backstage reads the same files without edits. Check that each descriptor still validates against the descriptor format, that metadata.name values are unique per kind and namespace, and that the owner and system references point to entities that will exist after cutover. Broken references are the most common reason ownership appears to vanish.

Entities created outside Git

Entities added through the Roadie UI or API exist only in Roadie's store unless someone wrote them back to a repository. Inventory them before the contract ends, identify which ones have no descriptor file, and decide whether each becomes a committed catalog-info.yaml or a file in a dedicated catalog repository. The export path is covered in the sibling page on exporting the catalog from Roadie; this card is about finding the gap, not the tooling.

Location, Group and User entities

Location entities tell Backstage which files to load, and Group and User entities usually come from your identity provider or from a directory file you maintain. Confirm which Groups and Users were created by hand in Roadie and which were synced, because a self-hosted instance only keeps what you load. Also confirm that ownership references use the exact entity names your sign-in resolver will produce, or ownership will not match people after cutover.

Integration credentials must be reissued

GitHub, GitLab, Azure DevOps, cloud accounts, Kubernetes clusters and other providers were connected to Roadie with tokens or app registrations that belong to Roadie's setup. Your self-hosted instance needs its own credentials, stored as secrets in your environment and scoped to read what the catalog needs. Create them before cutover, test each one in staging, and record who owns each credential and when it expires.

Discovery and provider configuration

Discovery settings decide which repositories, organizations and paths the catalog scans for descriptor files. Rebuild the same provider rules in your app-config file and compare the entity count against Roadie's catalog for each source. Differences usually point to a path filter that was never written down, or to repositories that were private in Roadie but need an explicit token in your setup.

Scorecards and custom plugins are rebuilt

Scorecard rules, custom plugins and any Roadie-specific widgets do not transfer as configuration. Export the rule definitions and plugin inventory from Roadie as documentation, then decide which checks you still need and who maintains each plugin after cutover. Plan this as development work, because each plugin you carry over adds an upgrade task to every Backstage release.

The migration sequence from inventory to decommission

The sequence moves ownership data from Roadie to a Backstage instance you run, one verified stage at a time. Each stage ends with a written output that the next stage depends on, so Roadie is switched off only after the new portal has been proven against it.

  1. Inventory entities, integrations and plugins

    Your platform team lists every catalog entity in Roadie, including those created through the UI or API, along with each integration (source control, cloud accounts, CI, incident tools) and each installed or custom plugin. Compare that list with the catalog-info.yaml files in your repositories to find entities that exist only in Roadie. The output is an entity reconciliation report that marks each entity as file-backed or UI-only, with an owner for every gap. The step is done when the report has no unassigned rows.

  2. Stand up a pilot Backstage instance

    Deploy Backstage in your own infrastructure using the Backstage releases you choose to follow, with PostgreSQL as the database. Load the catalog from the repositories of one team group, re-create the integrations that group depends on, and check that its components, APIs and ownership render as they do in Roadie. Confirm with your own environment which Node.js version the chosen release line supports before building the image. The output is a pilot checklist signed by the group's lead showing which entities, integrations and plugins match Roadie and which do not.

  3. Build and test sign-in on the pilot

    Configure one authentication provider that matches your identity system and write a sign-in resolver so every login maps to the same user identity in the catalog. Turn off guest access for this instance, test sign-in with users from several groups, and confirm that group membership drives ownership views. The output is a tested authentication flow record listing the provider, the resolver logic, the test accounts used and the failures found and fixed.

  4. Run both portals in parallel

    Keep Roadie live while the Backstage instance serves the pilot group and then expands to more groups. Each week, compare ownership, dependency and scorecard results for a sample of entities in both portals, and record every difference with its cause. Plugin behavior, TechDocs builds and search results should be compared in the same way. The output is a parallel-run discrepancy log, and the step closes when the log shows no unexplained differences for the entities in scope.

  5. Cut over discovery and sign-in

    Point catalog discovery at the repositories and sources you have verified, switch sign-in for all users to the self-hosted instance, and disable new entity creation in Roadie so ownership changes are made in files. Announce the change to engineering teams with the steps to fix a missing owner or a broken catalog file. The output is a signed-off ownership list that matches the reconciliation report, and a rollback procedure that has been rehearsed.

  6. Decommission Roadie after contract end

    After the contract end date, confirm that every export from the export step has been stored, that no teams still depend on Roadie URLs, and that your records of Roadie-specific settings are archived. Ask Roadie in writing how it handles deletion of your tenant data and request confirmation of deletion. The output is a decommission record covering the final export, the deletion confirmation and the revoked access list. Check the exact dates and terms with your contract, since the timing is set by your agreement rather than by this sequence.

How the migration changes by team size and starting point

A small team usually has a modest catalog, a handful of integrations and little or no custom plugin code. The migration is mostly about moving files and restoring the basic portal. Most entities already live as catalog-info.yaml files in repositories, so the catalog itself is rarely the hard part. The work concentrates on standing up a Backstage instance, pointing it at the repositories and wiring one identity provider.

  • Scope: Confirm which entities exist only in Roadie's UI or API and export them, then let the repository files re-register on the new instance.
  • Authentication: Configure one provider and one sign-in resolver so every login maps to the same identity. Avoid guest access in production.
  • Plugins: Check whether any Roadie-provided features are used. Most small teams can rebuild the few they need, or drop them.
  • Parallel run: Keep Roadie live until the new portal shows the same owners and docs for the services people actually open, which is usually a short window if the catalog is small.
  • Ownership: Confirm that every component still names a team and a lifecycle state after import.

Ask your Backstage implementer to confirm, in writing, which Roadie features are in use before the scope is fixed.

What drives cost and duration in this migration

The largest cost in moving from Roadie to a self-hosted Backstage portal is usually platform engineer time, not infrastructure. Roadie's fee buys upgrades, plugin maintenance and support, and after cutover your own staff inherit those jobs. Estimate the work in three buckets: the one-time build (authentication, catalog ingestion, TechDocs, search, custom plugins), the cutover, and the recurring upkeep. Duration depends on how many custom plugins Roadie's setup relies on and how many integrations must be rebuilt by hand. Ask any implementation partner for a written breakdown by these buckets, with the assumed number of plugins and integrations stated, so you can compare quotes on the same basis.

Upkeep is the cost that recurs. The Backstage versioning policy describes a main release line shipped monthly, on the Tuesday before the third Wednesday of each month, and a next release line shipped weekly on Tuesdays. Someone must test each upgrade against your custom plugins and identity configuration. The same policy says high and critical severity vulnerabilities will always be backported to releases from the last 6 months if feasible, so you must stay within that window to receive those fixes. Hosting costs also recur: Backstage uses PostgreSQL in production, and that database, its backups and the Kubernetes or VM capacity behind it are billed monthly by your cloud or data center. Ask for the upgrade cadence, test environment and rollback plan to be priced as a retainer or as a fixed deliverable.

Run Roadie's paid contract in parallel until the new portal has passed ownership checks, because that overlap is often the largest avoidable cost. Each week of overlap is a week of fees with no benefit. Ask quotes to state the parallel-run length as an assumption, the exit criteria that end it, and who signs off. Ask for custom plugin development to be scoped per plugin, identity provider setup (including sign-in resolvers) to be listed separately, and any work on search and TechDocs to be itemized. Confirm with Roadie the notice period and data export terms, and confirm with your team which plugins they actually use before anyone prices them.

What drives effort in a Backstage migration and how to reduce it

This table lists the factors that most change how much work a move from Roadie to self-hosted Backstage takes, and how to keep each one contained. Read it before estimating effort, because each driver is largely set by what your current Roadie instance contains. The main takeaway is that plugin count, sign-in design and integration count decide most of the work, and they can be inventoried before the cutover plan is written.

DriverWhy it mattersHow to keep it down
Number of custom pluginsEach custom or forked plugin must be ported, tested and kept compatible with each Backstage release you adopt.Inventory every plugin before migrating, drop unused ones, and prefer published community plugins over forks.
Sign-in resolver designBackstage needs a resolver that maps each provider identity to one catalog user, and a poor mapping creates duplicate or orphaned owners.Define the resolver and test it against real ownership data in a staging instance before cutover.
Integrations to re-authorizeEvery source such as GitHub, GitLab, cloud accounts or Kubernetes must get new tokens or app registrations in your environment.List each integration with its owner and required scopes, then request credentials early because approvals often take longest.
TechDocs site countEach docs site needs a build pipeline, storage and a publishing path, so the count multiplies operational work.Consolidate docs where teams share repositories and confirm the storage backend your organization will run.
Search index rebuildThe search index is not moved with the catalog, so it must be rebuilt in your environment and checked after each large import.Schedule the rebuild before the cutover window and verify that key services return in search results.
Node.js version supportBackstage supports exactly two adjacent even-numbered Node.js releases, which are Node.js 22 and 24 as of Backstage 1.46.0 per the versioning policy, so your runtime must match.Pin your Node.js version to a supported pair and confirm the current list in the versioning policy before each upgrade.

What usually goes wrong and how to prevent it

Why does ownership data disappear when I move from Roadie to Backstage?

Ownership data usually disappears because some entities were created only through the Roadie UI or API and never existed as a catalog-info.yaml file in a repository. Backstage reads the catalog from descriptor files, so anything that lives only in Roadie's database has no source to load from. Before cutover, compare the entity list from your Roadie export against the entities discovered from your repositories, and list every gap. For each gap, write a catalog-info.yaml with the owner (a Group or User reference), the lifecycle and the system it belongs to, then commit it to the owning repository. The descriptor format is described in the Backstage descriptor format documentation. Treat any entity without a committed file as unfinished until its owner has reviewed it.

Is guest access safe to leave on in a production Backstage portal?

Guest access is not safe for production because it lets anyone who reaches the portal sign in without a verified identity. Leaving it on is a common carry-over from a development or pilot setup, where it made testing easier. Before go-live, remove the guest provider from the auth configuration, confirm that unauthenticated requests to the catalog and API endpoints are rejected, and test sign-in with a real provider account. The Backstage authentication documentation advises against offering guest access in production. Add a check to your deployment pipeline or review checklist so the setting cannot return unnoticed in a later configuration change.

What goes wrong when sign-in resolvers map providers to different identities?

When sign-in resolvers map the same person to different identities, users see duplicate or wrong catalog ownership, and permissions and group membership stop matching the people they describe. This happens when a user signs in with GitHub in one case and Google or Okta in another, and each provider produces a separate user entity. The fix is to configure sign-in resolvers so every provider resolves to the same identity, typically by matching on a shared email address or a verified username that maps to an existing User entity. The Backstage authentication documentation recommends this approach. Test each provider with the same test account before cutover and confirm that all of them land on one User entity in the catalog.

Why does the Backstage catalog go stale after cutover?

The catalog goes stale when discovery and ingestion stop running or point at the wrong sources after the Roadie integrations are switched off. Backstage only knows about entities that its locations and providers have ingested, so a missing integration or a broken token leaves old or empty data in place. Before cutover, confirm that every repository provider and Location is configured, that the service account token has read access, and that a scheduled refresh completes without errors. After cutover, check the catalog for entities whose last update is older than expected and for entities that were deleted in source repositories but still appear in the portal. Assign one person to review ingestion errors for the first weeks.

What happens if we let Backstage upgrades slip behind?

Falling behind on upgrades leaves the portal exposed to known vulnerabilities and makes each later upgrade harder. Backstage's main release line ships monthly, and its versioning policy says high and critical severity vulnerabilities will always be backported to releases from the last 6 months if feasible. A portal that stays on a release outside that window may not receive those fixes, so the security exposure grows with each month of delay. Also check the Node.js requirement: the versioning policy says Backstage supports exactly two adjacent even-numbered Node.js releases, so runtime upgrades can be required as well. Set a recurring upgrade owner, schedule a monthly review of the release notes, and keep a staging instance on the next release line to catch breaking changes early.

How do we know the Roadie export is complete before we cut over?

You know the export is complete only when you have compared it against the live Roadie catalog and resolved every difference, not when the export file exists. Count entities by kind in Roadie and in the exported YAML, then check relationships such as owners, systems and dependencies on a sample of each kind. Include TechDocs source locations, scorecard or custom metadata you still need, and any API definitions attached to API entities. Verify that the exported files parse and load into a test Backstage instance before you change any DNS, bookmarks or team processes. Keep the Roadie account active until the test instance matches the signed-off inventory, because the contract end is not the right trigger for checking the data.

Can our own team run the cutover, or do we need outside help?

Your team can run the cutover if it has engineers who can operate Kubernetes or another host, PostgreSQL, Backstage configuration and an identity provider, and if someone owns upgrades afterward. Outside help is most useful for the parts that are easy to get wrong: writing the entity gap list, hardening authentication, and proving that the new instance matches the verified export. DeployOpen plans, implements, hardens, backs up, upgrades and documents self-hosted platforms inside the client's own infrastructure, and most engagements are fixed-scope with the scope and timeline agreed in writing before work starts. Ask any provider to name the specific cutover checks it will run and the evidence it will hand over.

What DeployOpen does and what your team keeps

DeployOpen plans, implements, integrates, hardens, backs up, upgrades and documents your Backstage instance inside your own infrastructure, under a fixed scope agreed in writing before work starts. For a Roadie migration, that scope usually covers the Backstage application itself, its PostgreSQL databases, the catalog and integration configuration, the authentication setup, TechDocs and search, and the cutover plan. Deliverables and timelines are written into that scope, so you can see exactly what changes hands and when. Ongoing support, upgrades and continuous testing are available as a separate retainer, which you can decide on once the initial migration is complete and the operating model is clear.

Your team keeps the decisions that define ownership and access. Your engineering leaders decide which Group and User entities represent your organization, which teams own which components, and who may edit catalog-info.yaml files in each repository. Your security and identity teams decide which sign-in provider is authoritative, how sign-in resolvers map identities, and who holds administrative rights. Your data owners decide where the catalog and TechDocs output are stored and how long backups are retained. DeployOpen implements these decisions as configuration, but it does not set them for you. Compliance readiness works the same way: DeployOpen prepares systems, controls and evidence for an assessment, while independent auditors and certification bodies issue any audit report, attestation or certification. Confirm with your assessor early which evidence they will accept from a self-hosted portal.

Questions buyers ask before moving from Roadie

How much does it cost to migrate from Roadie to self-hosted Backstage?

The migration cost depends on the work you assign, not on a fixed package. The main cost drivers are the size of your catalog, how many integrations and custom plugins you need to rebuild, how many authentication providers and sign-in resolvers you configure, and how much of your TechDocs estate moves over. Some costs are one-time, such as discovery, build-out, cutover and training. Others recur, such as hosting, PostgreSQL, monthly upgrades and the platform engineers who run the portal. Backstage itself has no license fee, since the project is Apache-2.0 licensed and has no paid edition. Ask any implementation partner for a quote built from a written scope that lists each component separately, and confirm which Roadie charges end when the contract ends.

How long does a Roadie to self-hosted Backstage migration take?

The timeline is driven by scope rather than by the Backstage codebase. Duration grows with the number of entities to verify, the integrations to re-create, the custom plugins to port, the identity provider to configure and the number of teams that must test the new portal before cutover. A smaller catalog with standard integrations moves faster than one with many custom plugins and scorecards. Plan a parallel run so the old and new portals show the same ownership data before you retire Roadie. Ask for a timeline in the written scope, with milestones for discovery, build, parallel run and cutover, and confirm the Roadie contract end date so the cutover window fits inside it.

Can our internal team migrate from Roadie to Backstage on its own?

A team that already runs Kubernetes, PostgreSQL and a CI/CD pipeline can do much of this work, because the catalog format is the same Backstage model. The harder parts are authentication, custom plugin maintenance, search and TechDocs hosting, and the monthly upgrade cadence that Backstage follows. Backstage's main release line ships monthly, and its next line ships weekly, so someone must own upgrades after launch. Assess your team against those skills before you decide. If you want outside help, DeployOpen plans, implements, integrates, hardens, backs up and upgrades self-hosted platforms in your own infrastructure under a fixed-scope written agreement, and offers retainers for ongoing support.

Do catalog-info.yaml files need changes when moving off Roadie?

In most cases the catalog-info.yaml descriptor files that live in your repositories stay as they are, because Backstage catalog entities use the same YAML format regardless of who hosts the portal. You should still check each file against the Backstage descriptor format for the kinds you use, such as Component, API, Resource, System, Domain, Group, User, Template and Location. Entities created only through the Roadie UI or API will not be in your repositories, so they need to be exported and committed before cutover. Also check for Roadie-specific annotations or plugin settings that Backstage does not read, and confirm each one with your engineers before you retire the old portal.

Does authentication have to be rebuilt when leaving Roadie?

Yes, authentication must be configured again in your own Backstage, although your identity provider does not change. Backstage ships 19 built-in authentication providers, including GitHub, GitLab, Google, Azure, Okta, Auth0, OneLogin, Bitbucket, Cloudflare Access, AWS ALB, Google IAP and generic OIDC. Configure sign-in resolvers so every provider resolves to the same identity, which keeps ownership consistent across sign-in methods. Do not offer guest access in production. Authentication is a security boundary, so include it in your threat model and in any security testing before go-live.

What happens to TechDocs content during the move?

TechDocs content is written as Markdown next to the code, so the source files usually stay in your repositories. What you must rebuild is the TechDocs pipeline in your own environment, because documentation sites are built with MkDocs and its plugins in your infrastructure. Check the MkDocs plugins your sites use and confirm they run in your build. Also decide where the built sites are stored and who can read them, since access rules move to your own setup. Test a sample of sites in the new portal and compare them with the old ones before you cut over.

Does Backstage have a paid edition, and does it need a license?

No. Backstage is an open source framework released under the Apache License 2.0, and the project itself offers no paid edition. Your costs come from the infrastructure you run it on, the people who operate it and any commercial services you choose to buy around it. Confirm the license terms for every plugin you install, because third-party plugins may be licensed separately. Note that this differs from self-managed editions of other portals, which still require a vendor license key. Check the license file in the Backstage GitHub repository and your plugin sources before finalizing the design.

How do we stay on a supported Backstage version after migrating?

Plan for regular upgrades from the start. Backstage's main release line ships monthly, and its versioning policy says high and critical vulnerabilities are backported to releases from the last six months where feasible. Supported Node.js versions also change with releases, so check the versioning policy for the current pair before each upgrade. Build upgrades into your operating model with a named owner, a test environment and a rollback plan. Ask any partner to show how they handle upgrades, backups and documentation for your environment.

How DeployOpen scopes and runs the migration

DeployOpen runs a migration from Roadie to a self-hosted Backstage portal as a fixed-scope engagement, with the scope, deliverables and timeline agreed in writing before any work starts. For this migration the written scope should name the entities and catalog-info.yaml locations in scope, the identity provider and sign-in resolvers, the TechDocs storage target, the search backend, the custom plugins to be ported or rebuilt, and the scorecard rules to recreate. Ask for each of these to be listed as a deliverable with an acceptance check, so that both sides can tell when the migration is finished. A quote follows from that written scope, so the more precisely your team describes its catalog and integrations up front, the more accurate the quote will be.

Cutover is planned as a parallel run. The Backstage instance is deployed in your infrastructure and populated from the same repositories while Roadie stays live, so teams can compare ownership, dependencies and TechDocs output side by side before anyone changes a bookmark. Before the switch, agree who signs off on entity counts and owner mapping, how Roadie-only data such as UI-created entities and scorecard history is captured, and when the Roadie contract ends. Confirm with Roadie what export options are available for your plan, since that determines how much of the history can be carried over. Retainers for upgrades and continuous testing are optional and can be scoped separately, which matters because Backstage releases on a monthly main line and a weekly next line, so someone must own that upgrade path after go-live.

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.