<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ravi Kumar</title>
    <description>The latest articles on DEV Community by Ravi Kumar (@ravibagri2).</description>
    <link>https://dev.to/ravibagri2</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4184143%2Fb26a476f-8518-40ef-a816-d729115e3a4a.jpg</url>
      <title>DEV Community: Ravi Kumar</title>
      <link>https://dev.to/ravibagri2</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ravibagri2"/>
    <language>en</language>
    <item>
      <title>Order a Database in Plain English. Crossplane Platform APIs, Now AI-Ready!</title>
      <dc:creator>Ravi Kumar</dc:creator>
      <pubDate>Wed, 14 Oct 2026 13:35:39 +0000</pubDate>
      <link>https://dev.to/ravibagri2/order-a-database-in-plain-english-crossplane-platform-apis-now-ai-ready-ab9</link>
      <guid>https://dev.to/ravibagri2/order-a-database-in-plain-english-crossplane-platform-apis-now-ai-ready-ab9</guid>
      <description>&lt;p&gt;A developer needs a Postgres database for a new service.&lt;/p&gt;

&lt;p&gt;On a Crossplane platform, the capability already exists. The platform team has published a database API, wired it to a Composition, and decided what "small" means. But to use it, the developer still has to find the right kind, read an XRD schema, write YAML, apply it, and then interpret &lt;code&gt;Ready&lt;/code&gt; and &lt;code&gt;Synced&lt;/code&gt; conditions when something does not come up.&lt;/p&gt;

&lt;p&gt;The platform API is there. The experience of using it still assumes Crossplane knowledge, and a fair amount of YAML.&lt;/p&gt;

&lt;p&gt;What if the developer could simply ask, in plain English?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Create a small Postgres database called orders-db.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And when it is not ready ten minutes later:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why isn't orders-db ready?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is what &lt;a href="https://github.com/ravibagri5/crossplane-mcp-server" rel="noopener noreferrer"&gt;crossplane-mcp-server&lt;/a&gt; is for. It turns a Crossplane control plane into a set of AI-ready tools, so the platform APIs you already built can be discovered, used and troubleshot from any MCP-compatible assistant or agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Platform APIs are the product, access is the bottleneck
&lt;/h2&gt;

&lt;p&gt;Crossplane's real achievement is not provisioning cloud resources. Plenty of tools do that. It is letting platform teams expose infrastructure as &lt;strong&gt;APIs they own&lt;/strong&gt;: a &lt;code&gt;PostgreSQLInstance&lt;/code&gt; or an &lt;code&gt;App&lt;/code&gt; that hides provider details behind a contract the platform team controls.&lt;/p&gt;

&lt;p&gt;That contract is exactly what you want application teams to consume. But today, consuming it usually means one of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learning enough Crossplane and Kubernetes to write and debug manifests.&lt;/li&gt;
&lt;li&gt;Waiting for a portal, CLI or form that the platform team has to build and maintain.&lt;/li&gt;
&lt;li&gt;Opening a ticket and waiting for the platform team.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of those puts the platform team back in the loop for work the API was meant to make self-service.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP: one interface for every AI client
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://modelcontextprotocol.io/" rel="noopener noreferrer"&gt;Model Context Protocol (MCP)&lt;/a&gt; is an open standard that lets AI applications discover and call tools exposed by a server. Write the integration once, and every MCP-compatible client can use it: Claude Desktop and Claude Code, Cursor, Windsurf, VS Code, Goose, and agent frameworks that speak MCP.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;crossplane-mcp-server&lt;/code&gt; is that integration for Crossplane. It is a standard MCP server, configured like any other, that exposes your control plane as tools an assistant can reason with:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;A person asks&lt;/th&gt;
&lt;th&gt;The server provides&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;"What can I order from this platform?"&lt;/td&gt;
&lt;td&gt;The platform APIs the control plane offers, from its XRDs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"What do I need to give you for a database?"&lt;/td&gt;
&lt;td&gt;The fields that API accepts, with an example manifest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Create a small Postgres database called orders-db."&lt;/td&gt;
&lt;td&gt;A claim built from the API's own schema, with a dry run first&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Is it ready yet? Why not?"&lt;/td&gt;
&lt;td&gt;The composition tree, the deepest failing resource and the provider's real error&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Is anything broken in production?"&lt;/td&gt;
&lt;td&gt;Control plane health, unhealthy resources and package status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"What would deleting this destroy?"&lt;/td&gt;
&lt;td&gt;The blast radius, before anyone acts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nobody in that table named a Kubernetes kind. The server finds the platform API, reads its schema and fills it in. The developer works with the capability, not the implementation.&lt;/p&gt;

&lt;p&gt;The server provides tools and live data; the MCP client provides the language model and the conversation. The assistant answers from what the control plane actually returns, not from what a model guesses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ordering a database in plain English
&lt;/h2&gt;

&lt;p&gt;Here is the flow against the project's demo control plane. The developer asks for a database, in their own words, and wants to see it first:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Create a small Postgres database called orders-db. Show me the manifest before you create anything.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The assistant calls &lt;code&gt;crossplane_database_create&lt;/code&gt; with a dry run. The server finds the database API this control plane offers, reads the schema its XRD declares, and returns exactly what would be submitted:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;crossplane_database_create(name="orders-db", size="small", dryRun=true)

apiVersion: demo.crossplane.io/v1alpha1
kind: PostgreSQLInstance
metadata:
  name: orders-db
  namespace: default
spec:
  parameters:
    engine: postgresql
    size: small
    version: "16"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The developer approves, the claim is created, and Crossplane does what it always does: reconciles it through the Composition the platform team wrote. The platform team still decides what a "small Postgres database" is. The developer never wrote a line of YAML or looked up a kind.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why isn't my database ready?
&lt;/h2&gt;

&lt;p&gt;Creating is not the same as Ready. When something fails, a generic Kubernetes tool can return objects, but it does not know how a claim leads to a composite, how a composite leads to managed resources, or that the useful error is usually in an event three levels down.&lt;/p&gt;

&lt;p&gt;This server does. Ask why a claim is not ready and it walks the tree to the deepest failure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;crossplane_diagnose(kind="PostgreSQLInstance", name="app-db")

PostgreSQLInstance app-db is NOT READY.

Verdict: Instance/app-db-rds is the deepest failure: InvalidParameterValue:
the instance class db.t2.mega does not exist

Control plane checks:
CHECK         STATE   DETAIL
composition   OK      Composition "postgres-aws" exists.
providers     OK      all 3 provider(s) are Installed and Healthy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the difference between "something is wrong" and "fix the instance class in your Composition". The same Crossplane knowledge powers the rest of the toolset: drift detection between declared and observed state, finding what is holding up a stuck deletion, validating or rendering a Composition before applying it, and checking provider and function health.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built so platform teams can say yes
&lt;/h2&gt;

&lt;p&gt;Giving an AI assistant access to infrastructure is a trust decision. The server is designed so that decision can be made incrementally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Read-only by default.&lt;/strong&gt; Out of the box, the create and update tools are not registered at all, so a client cannot see or call them. Point it at production and it can explain everything and change nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Writes are opt-in.&lt;/strong&gt; Start the server with &lt;code&gt;--read-only=false&lt;/code&gt; to let teams order through your platform APIs, ideally starting with a development control plane.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nothing deletes.&lt;/strong&gt; There is no delete tool and no delete call in the codebase. Ask it to delete a database and it can show the impact; a person runs the deletion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform APIs only.&lt;/strong&gt; Writes are limited to Crossplane kinds. The server refuses Secrets, Deployments and RBAC, no matter how it is asked.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reviewable writes.&lt;/strong&gt; Every write tool supports &lt;code&gt;dryRun&lt;/code&gt;, writes are server-side applies under a named field manager, and created objects are labelled for easy discovery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RBAC still decides.&lt;/strong&gt; The example &lt;a href="https://github.com/ravibagri5/crossplane-mcp-server/blob/main/deploy/rbac-write.yaml" rel="noopener noreferrer"&gt;&lt;code&gt;rbac-write.yaml&lt;/code&gt;&lt;/a&gt; grants &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt; and &lt;code&gt;patch&lt;/code&gt; on named platform API groups, with no &lt;code&gt;delete&lt;/code&gt; verb.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A sensible rollout: connect read-only, let engineers troubleshoot with it, then enable ordering where the platform API and permissions are ready for self-service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Works wherever your AI works
&lt;/h2&gt;

&lt;p&gt;Because it is a standard MCP server, the same tools can reach developers in their editor, in a desktop assistant, or inside an AI-driven automation. A chat surface such as Slack can use it too, through an assistant or bridge that supports MCP. The project itself does not ship a Slack bot; MCP is the connection point, and the host application owns the chat experience and user identity.&lt;/p&gt;

&lt;p&gt;For platform teams, that means maintaining one Crossplane integration instead of building a separate one for every assistant, portal and bot your organization adopts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get started in minutes
&lt;/h2&gt;

&lt;p&gt;Install it, see what it exposes, and check it can reach your control plane:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go &lt;span class="nb"&gt;install &lt;/span&gt;github.com/ravibagri5/crossplane-mcp-server/cmd/crossplane-mcp-server@latest

crossplane-mcp-server tools
crossplane-mcp-server call crossplane_status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Installing from source needs Go 1.26 or newer; pre-built binaries and a container image are on the &lt;a href="https://github.com/ravibagri5/crossplane-mcp-server/releases" rel="noopener noreferrer"&gt;releases page&lt;/a&gt;. It is also listed in the official MCP Registry and on Smithery.&lt;/p&gt;

&lt;p&gt;Then add it to your MCP client like any other server. For VS Code, in &lt;code&gt;.vscode/mcp.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"servers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"crossplane"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stdio"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"crossplane-mcp-server"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"--clusters"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"staging,production"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;--clusters&lt;/code&gt; names the control planes the assistant may reach. Add &lt;code&gt;--read-only=false&lt;/code&gt; to &lt;code&gt;args&lt;/code&gt; on a development control plane when you want to order as well as inspect.&lt;/p&gt;

&lt;p&gt;No Crossplane platform handy? The &lt;a href="https://github.com/ravibagri5/crossplane-mcp-server/tree/main/examples/demo" rel="noopener noreferrer"&gt;demo control plane&lt;/a&gt; runs on kind with provider-nop, so you can order fake databases and workloads, watch them reconcile, and try every tool without a cloud account.&lt;/p&gt;

&lt;h2&gt;
  
  
  The point
&lt;/h2&gt;

&lt;p&gt;Crossplane already lets platform teams turn infrastructure into products. MCP makes those products reachable from the AI tools developers are adopting anyway. Put the two together and a platform API stops being something you need Crossplane expertise and YAML to use, and becomes something anyone on the team can ask for in plain English, inspect and understand, within the boundaries the platform team set.&lt;/p&gt;

&lt;p&gt;Try &lt;a href="https://github.com/ravibagri5/crossplane-mcp-server" rel="noopener noreferrer"&gt;crossplane-mcp-server&lt;/a&gt;, run the demo, and tell me which platform API you would put in front of your developers first.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>crossplane</category>
      <category>platformengineering</category>
    </item>
    <item>
      <title>We Treat Applications as Products. Why Is the Platform Still a Black Box? Introducing Platform BOM (PBOM)</title>
      <dc:creator>Ravi Kumar</dc:creator>
      <pubDate>Wed, 14 Oct 2026 09:29:28 +0000</pubDate>
      <link>https://dev.to/ravibagri2/we-treat-applications-as-products-why-is-the-platform-still-a-black-box-introducing-platform-bom-3cd3</link>
      <guid>https://dev.to/ravibagri2/we-treat-applications-as-products-why-is-the-platform-still-a-black-box-introducing-platform-bom-3cd3</guid>
      <description>&lt;p&gt;An application team can point to the feature it shipped this week. A platform team may have spent that same week making deployments safer, improving cluster reliability, tightening identity, or removing a recurring obstacle from dozens of teams.&lt;/p&gt;

&lt;p&gt;The work matters. Its impact is just harder to see.&lt;/p&gt;

&lt;p&gt;As a platform engineer, I have sometimes felt that platform work is not seen with the same importance as application development. I do not think this is because application teams misunderstand infrastructure, or because every organization undervalues its platform. It is often a visibility problem: application features connect directly to customers, while platform improvements create value indirectly, across many teams and over time.&lt;/p&gt;

&lt;p&gt;That difference can make the platform look like a cost center or a collection of infrastructure tickets, even when it is a product that application teams rely on every day.&lt;/p&gt;

&lt;p&gt;I want to help change that perspective. Platform engineering deserves to be treated as software product engineering: with users, capabilities, releases, feedback, and a clear account of what is running. That is the idea behind &lt;a href="https://github.com/ravibagri5/platform-bom" rel="noopener noreferrer"&gt;Platform BOM&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3sa9i1knvoh9vxhtexbi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3sa9i1knvoh9vxhtexbi.png" alt=" " width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A platform is more than its infrastructure
&lt;/h2&gt;

&lt;p&gt;An internal platform is not just Kubernetes, a cloud account, or a deployment pipeline. It is the set of capabilities and experiences that help teams build, deliver, and operate their products.&lt;/p&gt;

&lt;p&gt;That may include Kubernetes, GitOps, networking, identity, policy, observability, data services, and the self-service workflows that connect them. The implementation can change while the capability a team depends on stays the same. A platform might replace one database provider with another without changing the promise that teams can request a supported PostgreSQL service.&lt;/p&gt;

&lt;p&gt;This is why “platform as a product” is more than a slogan. A product has users and a purpose. It has capabilities, a roadmap, support expectations, and a lifecycle. It should evolve in response to user needs, not just accumulate tools because they are available.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://tag-app-delivery.cncf.io/whitepapers/platforms/" rel="noopener noreferrer"&gt;CNCF Platforms White Paper&lt;/a&gt; describes platforms as curated capabilities presented around the needs of internal users. It also calls out user experience, documentation, self-service, and reducing cognitive load as important platform attributes. &lt;a href="https://dora.dev/capabilities/platform-engineering/" rel="noopener noreferrer"&gt;DORA’s platform engineering guidance&lt;/a&gt; similarly emphasizes product thinking, developer needs, and measuring outcomes.&lt;/p&gt;

&lt;p&gt;So the industry is not ignoring platform engineering. The discipline is increasingly recognized. But recognition does not automatically make a platform’s scope, health, or impact visible inside every organization. That is the gap I want to work on.&lt;/p&gt;

&lt;h2&gt;
  
  
  The questions we should be able to answer
&lt;/h2&gt;

&lt;p&gt;If the platform is a product, we should be able to describe it without reconstructing it from memory every time someone asks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What capabilities does the platform offer to application teams?&lt;/li&gt;
&lt;li&gt;Which components implement those capabilities?&lt;/li&gt;
&lt;li&gt;What is the declared platform release?&lt;/li&gt;
&lt;li&gt;Which versions are actually running in development, staging, and production?&lt;/li&gt;
&lt;li&gt;Where have environments drifted from their intended release?&lt;/li&gt;
&lt;li&gt;Which upstream updates deserve attention?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In many organizations, the answers are spread across Helm releases, Git repositories, cluster APIs, dashboards, spreadsheets, and the knowledge of a few engineers. Each tool can be useful and still leave the platform itself difficult to describe as one product.&lt;/p&gt;

&lt;p&gt;An application catalog can tell us which services exist and who owns them. A Kubernetes dashboard can show resources in a cluster. An SBOM describes the packages in a software artifact. These tools answer different questions. They do not, by themselves, connect a platform’s user-facing capabilities to the components and versions behind them across environments.&lt;/p&gt;

&lt;h2&gt;
  
  
  An inventory for the platform itself
&lt;/h2&gt;

&lt;p&gt;Software teams use a Software Bill of Materials to describe what an artifact contains. Platform BOM applies a similar idea at a different level: describe a platform’s components, capabilities, releases, and environments, then compare what was intended with evidence of what is running.&lt;/p&gt;

&lt;p&gt;To be precise, &lt;strong&gt;Platform Bill of Materials (PBOM) is a concept proposed by this project, not an established industry standard&lt;/strong&gt;. The project does not claim CNCF endorsement or industry-wide adoption. The goal is to explore a useful model and make it practical enough for platform teams to try.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ravibagri5/platform-bom" rel="noopener noreferrer"&gt;Platform BOM&lt;/a&gt; is an open-source, read-only inventory for platform teams. It connects a Git-declared platform and its releases with evidence discovered from Kubernetes, Helm, and Crossplane. It can compare environments with their target releases and show upstream versions that may need attention.&lt;/p&gt;

&lt;p&gt;The model separates a few ideas that often get mixed together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Offerings&lt;/strong&gt; describe what platform users receive, such as GitOps delivery, metrics, or managed PostgreSQL.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Components&lt;/strong&gt; describe the technologies behind those offerings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform releases&lt;/strong&gt; describe versioned baselines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environments and inventories&lt;/strong&gt; describe where the platform runs and what discovery observed there.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That separation matters. Users depend on capabilities; platform teams operate implementations. If an implementation changes, the platform can record the change without pretending the user-facing capability disappeared.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this looks like in practice
&lt;/h2&gt;

&lt;p&gt;Platform BOM is deliberately observational. It does not install or upgrade components, and it does not compete with GitOps. Your existing deployment tools remain responsible for making changes; PBOM helps describe and compare the result.&lt;/p&gt;

&lt;p&gt;For example, a platform team can declare that development, staging, and production should run a particular platform release. Discovery then gives the team evidence about the components found in each environment. If production is still on an earlier release, the difference is visible instead of being hidden in a spreadsheet or rediscovered during an incident.&lt;/p&gt;

&lt;p&gt;The project includes a Helm chart and a getting-started guide. To try the released &lt;code&gt;v0.9.0&lt;/code&gt; chart on a cluster you are authorized to inspect:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm upgrade &lt;span class="nt"&gt;--install&lt;/span&gt; pbom oci://ghcr.io/ravibagri5/charts/platform-bom &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--version&lt;/span&gt; 0.9.0 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--namespace&lt;/span&gt; platform-bom &lt;span class="nt"&gt;--create-namespace&lt;/span&gt; &lt;span class="nt"&gt;--wait&lt;/span&gt;

kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; platform-bom port-forward svc/pbom-platform-bom 8080:80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open &lt;a href="http://127.0.0.1:8080" rel="noopener noreferrer"&gt;http://127.0.0.1:8080&lt;/a&gt;. The default service account is read-only. Before sharing the UI, configure sign-in or an authenticating proxy, as described in the &lt;a href="https://github.com/ravibagri5/platform-bom/blob/main/docs/authentication.md" rel="noopener noreferrer"&gt;authentication guide&lt;/a&gt;. The &lt;a href="https://github.com/ravibagri5/platform-bom/blob/main/docs/getting-started.md" rel="noopener noreferrer"&gt;getting-started guide&lt;/a&gt; walks through describing a platform and its release baselines in YAML.&lt;/p&gt;

&lt;p&gt;The project is at &lt;code&gt;v0.9.0&lt;/code&gt; today. It includes multi-environment inventory, component and offering views, release comparison, upstream version information, cloud workload identity for supported managed Kubernetes environments, and OIDC or proxy-based authentication. Those are current capabilities, not a claim that every platform concern is solved.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a BOM can and cannot prove
&lt;/h2&gt;

&lt;p&gt;A platform inventory can make composition, declared releases, observed versions, and drift easier to discuss. That can support upgrade planning, operational reviews, and conversations about which capabilities the platform provides.&lt;/p&gt;

&lt;p&gt;It cannot prove that developers are satisfied. It cannot show on its own that onboarding is faster, cognitive load is lower, or product outcomes have improved. Those questions need user feedback and outcome measures: task success, onboarding time, satisfaction, delivery performance, and other signals that make sense for the organization.&lt;/p&gt;

&lt;p&gt;That distinction is important to me. A BOM should not become another dashboard used to justify building a platform nobody asked for. It should make the platform easier to understand, then help platform teams have better conversations with the people who use it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the project is heading
&lt;/h2&gt;

&lt;p&gt;The roadmap is a statement of direction, not a promise of dates. Areas under consideration and active development include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A versioned API and integrations with tools such as Backstage and MCP clients.&lt;/li&gt;
&lt;li&gt;More evidence from GitOps controllers and infrastructure-as-code systems.&lt;/li&gt;
&lt;li&gt;Better upstream intelligence, including support windows, security advisories, and compatibility information.&lt;/li&gt;
&lt;li&gt;Interoperability work, including exporting a platform release in an established format such as CycloneDX.&lt;/li&gt;
&lt;li&gt;A shared PBOM specification, if the model proves useful beyond this project.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are ways to make the platform easier to inspect and integrate with existing workflows. They are not reasons to replace the systems that already deploy, secure, or observe it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the platform legible
&lt;/h2&gt;

&lt;p&gt;Platform engineering is software engineering applied to shared capabilities and developer experience. If we expect platform teams to own products, we should also make it possible to describe those products: what they offer, how they are assembled, which release is intended, and what is actually running.&lt;/p&gt;

&lt;p&gt;That is the problem I am exploring with Platform BOM. It is early, the resource model is still evolving, and the PBOM concept is not a standard. I would rather be explicit about those limits than imply the problem is already solved.&lt;/p&gt;

&lt;p&gt;If you work on an internal platform, I would be interested in how your team answers these questions today. What do you track? What remains tribal knowledge? Which evidence sources or integrations would make a platform inventory genuinely useful in your workflow?&lt;/p&gt;

&lt;p&gt;Explore the project, try the &lt;a href="https://github.com/ravibagri5/platform-bom/blob/main/docs/getting-started.md" rel="noopener noreferrer"&gt;getting-started guide&lt;/a&gt;, or share feedback through &lt;a href="https://github.com/ravibagri5/platform-bom/discussions" rel="noopener noreferrer"&gt;GitHub Discussions&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>devex</category>
      <category>platformengineering</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
