diff --git a/content/assets/roadie-backstage-logos.svg b/content/assets/roadie-backstage-logos.svg new file mode 100644 index 000000000..f88d12685 --- /dev/null +++ b/content/assets/roadie-backstage-logos.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/components/BackstageComparison/FeatureComparisonTable.js b/src/components/BackstageComparison/FeatureComparisonTable.js new file mode 100644 index 000000000..62d4e1bdf --- /dev/null +++ b/src/components/BackstageComparison/FeatureComparisonTable.js @@ -0,0 +1,434 @@ +import React, { Fragment } from 'react'; +import { CheckIcon, MinusIcon } from '@heroicons/react/solid'; +import { TextLink } from 'components'; + +import COMPETITORS from './competitors'; + +const sections = [ + { + name: 'Software catalog', + features: [ + { + name: 'Bring your own data model', + competitor: { Roadie: 'Yes', Backstage: 'Yes, with some effort' }, + }, + { + name: 'Adding and updating Catalog items via YAML', + competitor: { Roadie: true, Backstage: true }, + }, + { + name: 'Updating Catalog items in the UI', + competitor: { Roadie: true, Backstage: false }, + }, + { + name: 'Adding and updating Catalog items via API', + competitor: { Roadie: true, Backstage: false }, + }, + { + name: 'Out of the box data ingestion (k8s, GitHub, CI/CD, etc)', + competitor: { Roadie: true, Backstage: true }, + }, + { + name: 'SCM Support', + competitor: { + Roadie: + 'GitHub Cloud, GitHub Enterprise Server, Azure DevOps, GCP, GitLab Cloud, GitLab On-Prem, BitBucket Cloud, BitBucket Server', + Backstage: + 'GitHub Cloud, GitHub Enterprise Server, Azure DevOps, GCP, GitLab Cloud, GitLab On-Prem, BitBucket Cloud, BitBucket Server, Gerrit', + }, + }, + { + name: 'Syncing repositories as items in the Catalog', + competitor: { Roadie: true, Backstage: false }, + }, + ], + }, + { + name: 'Scorecards', + features: [ + { + name: 'Extensible through the creation of custom data sources', + competitor: { Roadie: true, Backstage: false }, + }, + { + name: 'Operational reviews', + competitor: { Roadie: true, Backstage: false }, + }, + { + name: 'Levels', + competitor: { Roadie: 'Coming soon', Backstage: false }, + }, + { + name: 'Campaigns', + competitor: { Roadie: 'Coming soon', Backstage: false }, + }, + { + name: 'Team-based rollups', + competitor: { Roadie: true, Backstage: false }, + }, + ], + }, + { + name: 'Scaffolder', + features: [ + { + name: 'Self-serve actions', + competitor: { Roadie: true, Backstage: true }, + }, + { + name: 'Custom self-serve actions', + competitor: { Roadie: true, Backstage: true }, + }, + { + name: 'Custom field extensions', + competitor: { Roadie: true, Backstage: true }, + }, + { + name: 'Fallback and retry', + competitor: { Roadie: true, Backstage: true }, + }, + ], + }, + { + name: 'TechDocs', + features: [ + { + name: 'Docs creation engine', + competitor: { Roadie: 'TechDocs', Backstage: 'TechDocs' }, + }, + { + name: 'Extensibility via plugins', + competitor: { Roadie: true, Backstage: true }, + }, + ], + }, + { + name: 'Other plugins and extensions', + features: [ + { + name: 'Available Plugins', + competitor: { Roadie: '70+', Backstage: 'Requires build' }, + }, + { + name: 'Secure access to on-prem infrastructure and resources', + competitor: { Roadie: true, Backstage: true }, + }, + { + name: 'Theme customisation', + competitor: { Roadie: true, Backstage: 'Requires build' }, + }, + { + name: 'Layout customisation', + competitor: { Roadie: true, Backstage: 'Requires build' }, + }, + { + name: 'Catalog UI customisation', + competitor: { Roadie: 'Yes', Backstage: 'Requires build' }, + }, + ], + }, + { + name: 'Search', + features: [ + { + name: 'Engine', + competitor: { Roadie: 'Backstage search', Backstage: 'Backstage search' }, + }, + { + name: 'Hosted search collators', + competitor: { Roadie: 'Atlassian Confluence', Backstage: false }, + }, + ], + }, + { + name: 'Users and Groups', + features: [ + { + name: 'SSO', + competitor: { Roadie: true, Backstage: 'Via OSS providers' }, + }, + { + name: 'Entities created in the Catalog for each user and group', + competitor: { Roadie: true, Backstage: 'Via OSS providers' }, + }, + ], + }, + { + name: 'Role-based Access Control', + features: [ + { + name: 'Admin and non-Admin roles', + competitor: { Roadie: true, Backstage: true }, + }, + { + name: 'Role assignment in the UI', + competitor: { Roadie: true, Backstage: false }, + }, + { + name: 'Role assignment by identity provider token', + competitor: { Roadie: true, Backstage: false }, + }, + { + name: 'Custom roles', + competitor: { Roadie: true, Backstage: false }, + }, + { + name: 'Custom permissions policies', + competitor: { Roadie: true, Backstage: false }, + }, + ], + }, + { + name: 'Cost Insights (in beta)', + features: [ + { + name: 'Visualisation of cost data', + competitor: { Roadie: true, Backstage: true }, + }, + { + name: 'Out of the box data ingestion', + competitor: { Roadie: 'AWS, GCP', Backstage: false }, + }, + { + name: 'Attribution back to catalog components (inc. users and groups)', + competitor: { Roadie: true, Backstage: true }, + }, + ], + }, + { + name: 'Non-feature extras', + features: [ + { + name: 'Hosting', + competitor: { Roadie: true, Backstage: false }, + }, + { + name: 'Upgrades to the latest version of Backstage', + competitor: { Roadie: true, Backstage: 'Requires build' }, + }, + { + name: 'Analytics', + competitor: { Roadie: true, Backstage: false }, + }, + { + name: 'Support', + competitor: { + Roadie: 'Email, Slack/Teams, and 24/7 On-call', + Backstage: 'via the OSS community', + }, + }, + { + name: 'Uptime guarantee', + competitor: { Roadie: true, Backstage: false }, + }, + ], + }, +]; + +const FeatureNameHeaderCell = ({ feature }) => ( + + {feature.name} + +); + +const FeatureInCompetitorIndicatorText = ({ text }) => ( + {text} +); + +const FeatureInCompetitorIndicatorIcon = ({ featureCompetitor, competitor }) => ( + <> + {featureCompetitor === true ? ( +