Skip to content

Certified Backstage Associate (CBA) - Practice Questions

31 original questions for CBA prep, spread across the domains in proportion to their weights.

Cert page: exams/kubernetes/cba/


Question 1

Scenario: Which runtime and package manager versions does the Backstage getting-started guide recommend?

A. Node 14 with npm 6 and a global Yarn 1 install B. Any Node version with Bun, since Backstage ignores the runtime and does not check the engines field C. Python 3.12 with pip, because the backend is Python-based D. Node 22 or 24 (Active LTS) with Yarn 4.4.1 enabled through Corepack

Answer **Correct: D** **Why:** The guide recommends Node 22 or 24 and says Backstage currently uses Yarn 4.4.1, enabled with Corepack.

Question 2

Scenario: After running yarn start in a new app, which URL serves the frontend?

A. http://localhost:7007/frontend B. http://localhost:8080 C. http://localhost:3000 D. http://localhost:443

Answer **Correct: C** **Why:** yarn start runs the frontend and backend as separate processes. The frontend dev server is on port 3000 and the backend is on 7007.

Question 3

Scenario: Which directory of a freshly created Backstage app holds the frontend app?

A. packages/backend B. packages/app C. plugins/app D. src/frontend

Answer **Correct: B** **Why:** packages/app is the fully functioning frontend app. packages/backend holds the backend.

Question 4

Scenario: The docs warn against adding npm dependencies in one place of a new Backstage repo. Where?

A. packages/app/package.json B. The root package.json C. packages/backend/package.json D. Any plugin package.json

Answer **Correct: B** **Why:** The getting-started guide says not to add npm dependencies to the root manifest; dependencies belong to the individual workspace packages.

Question 5

Scenario: Which command installs dependencies exactly as locked and fails if the lockfile would change?

A. yarn install --immutable B. yarn upgrade --latest C. npm install --force D. yarn add --exact

Answer **Correct: A** **Why:** yarn install --immutable is the first step of the documented container build and keeps CI aligned with the reviewed lockfile.

Question 6

Scenario: Which command generates TypeScript type definitions into dist-types/ as part of the documented host build?

A. yarn build:backend B. yarn new C. yarn start D. yarn tsc

Answer **Correct: D** **Why:** The host build runs yarn install --immutable, yarn tsc (type definitions to dist-types), then yarn build:backend.

Question 7

Scenario: What is the recommended way to build the Backstage container image, according to the Docker deployment page?

A. Run yarn start inside a container and expose port 3000 B. Clone the Backstage repo into the image and run npm install at start-up C. Host build: build the backend on the host, then docker image build with packages/backend/Dockerfile D. Download a prebuilt image and mount app-config.yaml

Answer **Correct: C** **Why:** The page recommends the host build. The multi-stage build is the alternative for when Docker-in-Docker is unavailable.

Question 8

Scenario: From which directory should docker image build be run for the Backstage image, and why?

A. packages/backend, because the Dockerfile is there and the build context is its parent folder B. packages/app, because the frontend is bundled first C. The repo root, because the build needs the root yarn.lock and package.json D. Any directory; Docker finds the files automatically

Answer **Correct: C** **Why:** The command is docker image build . -f packages/backend/Dockerfile --tag backstage, run from the repo root.

Question 9

Scenario: Which port does the Backstage container publish when you run it per the docs?

A. 3000, because the frontend is served from the container B. 7007, mapped with -p 7007:7007 C. 5432, because the database is embedded D. 80, set by an EXPOSE instruction in the Dockerfile

Answer **Correct: B** **Why:** The backend listens on 7007 and the Dockerfile has no EXPOSE instruction, so the port is mapped at docker run.

Question 10

Scenario: Which database does the architecture page prefer for production?

A. PostgreSQL B. SQLite, because it is embedded C. Redis, because it is fast D. MongoDB, because entities are documents

Answer **Correct: A** **Why:** SQLite is mainly for in-memory testing. PostgreSQL is preferred for production. Backstage uses Knex and a separate logical database per plugin.

Question 11

Scenario: Which of the following is a core feature (core plugin) of Backstage?

A. Terraform state storage B. Kubernetes cluster provisioning C. Container image registry D. Software Catalog

Answer **Correct: D** **Why:** The architecture overview lists the Software Catalog, Software Templates, TechDocs, Kubernetes and Search as core features.

Question 12

Scenario: Which config file is the only one required?

A. app-config.local.yaml B. app-config.production.yaml C. app-config.override.yaml D. app-config.yaml

Answer **Correct: D** **Why:** Only the base app-config.yaml is required. The local and environment files are optional.

Question 13

Scenario: A value is set in both app-config.yaml and app-config.local.yaml. Which wins?

A. The value in app-config.yaml, because it is the base file and local files only add new keys B. Neither; Backstage refuses to start C. The value in app-config.local.yaml, because local files load last D. Whichever file has the later modification time

Answer **Correct: C** **Why:** All non-local files load before local files, so local settings win.

Question 14

Scenario: A secret must not be committed. Which config include reads it from an environment variable?

A. $file: MY_SECRET_KEY B. $env: MY_SECRET_KEY C. ${MY_SECRET_KEY} inside a quoted string D. $secret: MY_SECRET_KEY

Answer **Correct: B** **Why:** $env reads a string value from an environment variable. $file reads the contents of a text file. The Backstage docs on configuration show these two includes.

Question 15

Scenario: What is the default visibility of configuration values?

A. Backend-only B. Visible to the frontend C. Visible only to administrators D. Visible to plugins but not the backend

Answer **Correct: A** **Why:** Config is backend-only by default; a custom visibility keyword in a schema controls what reaches the frontend.

Question 16

Scenario: Which command validates configuration against plugin-contributed schemas?

A. yarn backstage-cli config:check B. yarn tsc --noEmit C. yarn new --validate D. yarn backstage-cli plugin:verify

Answer **Correct: A** **Why:** Schemas are JSON Schema, contributed by plugins and combined; config:check validates them, and config:docs prints the reference.

Question 17

Scenario: According to the Docker page, which statement about authentication in containerized deployments is correct?

A. Guest authentication is required for containers B. Authentication is disabled automatically when NODE_ENV=production is set in the container C. Containers must use SQLite-backed sessions D. The default Guest auth provider is not intended for containerized environments

Answer **Correct: D** **Why:** The page lists an auth provider and a Postgres database as prerequisites and warns about the default Guest provider.

Question 18

Scenario: Which apiVersion do Backstage entity kinds such as Component use?

A. backstage.io/v2 B. catalog.backstage.io/v1 C. backstage.io/v1alpha1 D. apps/v1

Answer **Correct: C** **Why:** For Backstage kinds the apiVersion is backstage.io/v1alpha1; Template uses backstage.io/v1beta2.

Question 19

Scenario: Which spec fields are required on a Component?

A. name, namespace and title B. type, lifecycle and owner C. system, domain and owner D. providesApis and consumesApis

Answer **Correct: B** **Why:** A Component requires type, lifecycle and owner. system, subcomponentOf, providesApis, consumesApis and dependsOn are optional.

Question 20

Scenario: What does the annotation backstage.io/techdocs-ref point to?

A. The URL of the deployed TechDocs site, which the entity page links to from its Docs tab B. Where the TechDocs source lives, usually a path relative to catalog-info.yaml C. The Docker image that builds the docs D. The owner of the documentation

Answer **Correct: B** **Why:** It tells Backstage where the TechDocs source is, normally a relative path, though it can be an absolute URL.

Question 21

Scenario: Who should write the annotation backstage.io/managed-by-location?

A. Nobody; the catalog adds it automatically B. The entity owner, in every descriptor C. The platform team, via a Template D. The GitHub integration, via a webhook

Answer **Correct: A** **Why:** managed-by-location is added automatically and records where the entity was fetched from. backstage.io/orphan is likewise set by the catalog, never manually.

Question 22

Scenario: Which default entity kinds does the catalog allow before catalog.rules is set?

A. All kinds B. Component only C. Component, Template and Group D. Component, API and Location

Answer **Correct: D** **Why:** By default only Component, API and Location are allowed. Setting catalog.rules replaces those defaults.

Question 23

Scenario: A team adds catalog.rules with allow: [Template] and finds their Components no longer ingest. Why?

A. Templates and Components cannot coexist in one catalog unless each kind has its own location B. Components require a separate provider for each owner C. Setting catalog.rules replaces the defaults, so Component was no longer listed D. Rules apply only to file-type locations

Answer **Correct: C** **Why:** The docs say setting catalog.rules replaces the defaults, so any default kinds you still want must be listed.

Question 24

Scenario: Which location type is meant only for local development, tests and example data?

A. url B. github C. file D. git

Answer **Correct: C** **Why:** The file type is for local development, tests and example data; url is the type handled by the UrlReaderProcessor and used for repositories.

Question 25

Scenario: What is the difference between an entity provider and a processor?

A. Processors supply entities and providers validate them B. Providers supply entities from external sources; processors read, parse, transform and validate entity data C. They are the same component configured in two places D. Providers run in the browser and processors in the backend

Answer **Correct: B** **Why:** Providers supply raw entities and are configured under catalog.providerOptions. Processors validate and transform and are configured under catalog.processorOptions.

Question 26

Scenario: An entity shows backstage.io/orphan: 'true'. What does it mean?

A. A parent stopped emitting it and nothing else references it; by default it is later deleted B. The entity has no owner field C. The entity failed schema validation D. The entity was created by the UI and not by a file

Answer **Correct: A** **Why:** The stitcher adds the annotation when a parent stops emitting a child. The default orphanStrategy is delete; keep disables automatic cleanup.

Question 27

Scenario: Which package provides automated discovery of catalog-info.yaml files in a GitHub organization?

A. @backstage/plugin-techdocs B. @backstage/create-app C. @backstage/theme D. @backstage/plugin-catalog-backend-module-github

Answer **Correct: D** **Why:** Install it in packages/backend and add it with backend.add. It needs a GitHub integration with a PAT (repo scope) or GitHub App (Contents read-only).

Question 28

Scenario: Which statement correctly places plugins in a Backstage repo?

A. Frontend plugins are added to the root package.json; backend plugins to the plugins/ directory of the repo workspace B. Both kinds are added to packages/app C. Backend plugins run in the browser through a service worker D. Frontend UI plugins are added to the app package; backend plugins are added to the backend package

Answer **Correct: D** **Why:** The configure-app-with-plugins page states that frontend UI plugins go in the app package and backend plugins go in backend.

Question 29

Scenario: In the new frontend system, which setting makes installed plugins get discovered without code changes?

A. backend.discovery: true B. catalog.rules: all C. app.packages: all in app-config.yaml D. plugins.autoload: enabled

Answer **Correct: C** **Why:** With app.packages set to all, plugins are discovered automatically and page plugins register their sidebar item.

Question 30

Scenario: Which function creates a backend plugin in the new backend system?

A. createFrontendPlugin B. createBackendPlugin C. createServiceFactory only D. registerPlugin

Answer **Correct: B** **Why:** createBackendPlugin takes a pluginId and register(env), where env.registerInit declares deps and init.

Question 31

Scenario: Which Material UI related function builds a Backstage theme from the base options and palettes?

A. createUnifiedTheme B. createMuiTheme from App.tsx only C. buildTheme D. makeBackstageTheme

Answer **Correct: A** **Why:** The docs build themes with createUnifiedTheme({...createBaseThemeOptions({palette: palettes.light})}) from @backstage/theme, and register them in createApp themes with UnifiedThemeProvider.