News

The pre-conference quiet continued this week. Backstage shipped v1.49.0-next.2 with incremental fixes ahead of the March 17 stable release, while the community focused on New Frontend System migrations and the recurring DOM types debate in backend packages.
Roadie published a deep dive on context engineering that reframes AI grounding as a platform discipline that requires structured catalog metadata, not just better prompts. With BackstageCon and KubeCon Europe eleven days away, Discord traffic is centered on migration patterns, MCP discovery, and getting production instances ready for Amsterdam.
v1.49.0-next.2 ships incremental fixes
Backstage v1.49.0-next.2 landed on March 10, the second weekly pre-release in the v1.49 cycle. This follows v1.49.0-next.1 from March 3 and keeps everything on track for the stable v1.49.0 release expected March 17. The full changelog is available in docs/releases/v1.49.0-next.2-changelog.md. The v1.49.0 release will be the last before KubeCon Europe and BackstageCon on March 23.
Roadie publishes Context Engineering deep dive

Roadie published "Context Engineering: The Missing Discipline in AI-Assisted Development" this week, arguing that organizational context is the unsolved layer in AI coding tools. GitHub Copilot and Cursor handle local context and repository context reasonably well, but neither knows who owns payment-service, what lifecycle state legacy-auth-api is in, or what security constraints apply to production services. No amount of prompt engineering can retrieve information that doesn't exist in any repository.
The article frames the Internal Developer Portal as the natural solution to Layer 3 context. Your IDP already holds the two things an AI needs: metadata in catalog-info.yaml (owner, tier, lifecycle, dependencies) and semantics in TechDocs (ADRs, runbooks, how-to guides). Spotify proved this architecture works at scale with AiKA and Honk, both tightly integrated with Backstage's catalog and metadata graph. The piece walks through connecting AI tools via the Model Context Protocol (MCP), with Roadie acting as an MCP Server that exposes your catalog and TechDocs as queryable endpoints.
A key warning: the "dump everything into a vector database" approach produces context poisoning. A Confluence instance with 2,000 pages where only 300 are accurate means your AI retrieves from both canonical ADRs and three-year-old contradictory wiki pages with no way to distinguish them. The catalog-info.yaml schema enforces structure at the source. A deprecated service can't masquerade as current because its lifecycle field says otherwise. Context engineering starts with good catalog maintenance.
Community Discussions
Removing node-fetch and the DOM Types Problem
Backstage maintainer Jon Koops opened a significant architectural discussion in #general (22 replies) about the implications of removing node-fetch from the main repo, as outlined in ADR14. As backend packages (like @backstage/backend-defaults) are built from the root TSConfig, they silently receive browser DOM types, which means that incorrect web-based types are provided anywhere the Fetch API behaves differently between Node.js and the browser. Jon proposes changing the TypeScript configurations so that backend-only packages are never exposed to library types from the web, and he plans to bring it to the framework SIG. The discussion also covers project references performance in CI, the upcoming tsgo compiler, and whether the change should be opt-in for adopters initially.
State of AI in Backstage: MCP, RAG, and a Discoverability Gap
A thread in #general titled "ai" (6 replies) kicked off a survey of what AI integration currently looks like in Backstage. The conversation catalogued the current landscape: an MCP chat plugin in the community plugins repo, a plugin for exposing Backstage actions as MCP tools (mcp-actions-backend), and Roadie's RAG-based AI assistant plugin for querying catalog and TechDocs knowledge. This knowledge is currently scattered across Discord threads and GitHub PRs, with no central tracking page. Thomvaill and drodil (a Backstage Framework maintainer) agreed that a dedicated documentation page listing all available MCP actions per plugin would be valuable. Drodil also noted a new PR (#33253 ) they've made on the topic, though it's not yet clear whether it belongs in the main repo or community plugins.
Templates and partOf Relations: A Design Clarification
A 21-message thread in #general surfaced a common point of confusion: why can't Scaffolder Templates reference entities outside of their owner using partOf relations? A user wanted to track which Component (a repo containing all their templates) each Template "belongs to" in the catalog graph. Maintainer Freben explained that this is an intentional design constraint of the System Model. Templates are not designed to have arbitrary cross-entity relations. Freben suggested the Resource kind as a better fit if the model needs to be extended. The thread links to the Extending the Model docs as the recommended solution.
Finding Entities with Missing or Unknown Owners
An 18-message thread in #catalog explored how to hook into catalog ingestion to detect or process entities with invalid or unknown owners. Freben recommended the Catalog FAQ's processor-based validation section as a starting point, and followed up with a more advanced pattern: as you page through entities, you can call .prime() on the existence dataloader to pre-populate knowledge of which entities exist, then mark the ones that don't as having broken relations. This approach avoids storing the full catalog in memory or making repeated catalog API requests.
Jest Removed from Backstage CLI: Community Plugin Impact
Maintainer Ahhhndre investigated why removing Jest from the Backstage CLI in v1.46.0 hadn't broken anything yet , and found the answer: a version of the Backstage CLI still exists in the root package.json, and CI is using that. Simply removing it would break most workspaces. The fix is a gradual migration. A PR for community plugins (#7867) has been opened to migrate packages one by one, and Ahhhndre has also filed an issue (#7868) for maintainer-owned workspaces so the community can help during ContribFest.
Release Train: v1.49.0 Pre-Releases Are Rolling
The #announcements channel has been active with the v1.49.0 pre-release train. v1.49.0-next.2 dropped on March 10, following v1.49.0-next.1 on March 4 (which also updated the Backstage Demo site ). Before that, v1.48.2 (Feb 24) included a fix to update @microsoft/api-extractor to 7.57.3 and restore formFieldsApiRef and ScaffolderFormFieldsApi alpha exports that had gone missing. If you're tracking pre-releases or running the demo, this is a good time to test against next.2 ahead of the stable v1.49.0 release.
Templates Randomly Disappearing with Split Catalog Deployments
A recent #catalog thread flags a possible operational issue for anyone running Backstage at scale with a split read/write catalog deployment and HPA. One user reported that Template entities (and only Templates, not Components or APIs) were disappearing periodically from statically configured catalog locations. The logs showed a ConflictError: Conflicting write of processing result for <entity-id> with location key 'url:https://github.com/<location-key>' error. This appears to be a race condition specific to multi-pod catalog-write deployments; if you're running 2–4 catalog-write pods in production, this thread is worth watching.
Backstage Documentary Premieres at KubeCon Amsterdam
For those attending KubeCon + CloudNativeCon Europe in Amsterdam on March 23, don't miss the premiere of the CNCF Documentary: "Backstage: From Spreadsheet to Standard", a film co-produced by Spotify, CNCF, and Roadie. The screening is on the official KubeCon schedule . The Community Plugins SIG scheduled for March 24 has been cancelled due to the KubeCon overlap, so the documentary event is the place to be for community networking around Backstage that week.
Changelog
v1.49.0-next.2 - March 10, 2026
Pre-release:
- Incremental fixes and improvements ahead of v1.49.0 stable release
Release: v1.49.0-next.2