<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Radius Blog – 2025</title><link>https://blog.radapp.io/posts/2025/</link><description>Recent content in 2025 on Radius Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Thu, 18 Dec 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.radapp.io/posts/2025/index.xml" rel="self" type="application/rss+xml"/><item><title>Posts: Announcing Radius v0.54</title><link>https://blog.radapp.io/posts/2025/12/18/announcing-radius-v0.54/</link><pubDate>Thu, 18 Dec 2025 00:00:00 +0000</pubDate><guid>https://blog.radapp.io/posts/2025/12/18/announcing-radius-v0.54/</guid><description>
&lt;p>Today, we’re excited to announce the release of Radius v0.54. This update brings several improvements and fixes detailed below. You can find the full release notes on our &lt;a href="https://github.com/radius-project/radius/releases/tag/v0.54.0">GitHub releases page&lt;/a>.&lt;/p>
&lt;p>If you’re new to Radius, it’s a cloud-native application platform designed to simplify the deployment and management of Applications. To get started, visit our &lt;a href="https://docs.radapp.io/getting-started/">getting started guide&lt;/a> and learn how to install Radius and create your first app.&lt;/p>
&lt;h2 id="fixed-rad-workspace-show-errors-when-no-current-workspace-exists">Fixed &lt;code>rad workspace show&lt;/code> errors when no current workspace exists&lt;/h2>
&lt;p>The &lt;code>rad workspace show&lt;/code> command has been updated to improve usability. Previously, if no workspace was set, the command would return an error, which could be confusing. With this release, the command now logs an informational message to guide you when no current workspace exists. This change ensures a more user-friendly experience when managing workspaces. For more details, refer to the &lt;a href="https://docs.radapp.io/reference/cli/rad_workspace_show/">CLI documentation&lt;/a>.&lt;/p>
&lt;h2 id="fixed-rad-credential-show-azure-command">Fixed &lt;code>rad credential show azure&lt;/code> command&lt;/h2>
&lt;p>A fix has been made to the &lt;code>rad credential show azure&lt;/code> command. Previously, this command would fail with a runtime error: invalid memory address when attempting to display Azure Service Principal credentials. This issue has been resolved, and the command now correctly displays the Azure credentials you’ve configured for Radius.&lt;/p>
&lt;h2 id="upgrading-to-radius-v054">Upgrading to Radius v0.54&lt;/h2>
&lt;p>Upgrading to the latest version is straightforward. First, update your Radius CLI, then run the &lt;code>rad upgrade kubernetes&lt;/code> command. Note that only incremental version upgrades are supported, so ensure you’re upgrading from the previous version. For detailed instructions, consult the &lt;a href="https://docs.radapp.io/guides/operations/kubernetes/kubernetes-upgrade/">upgrade documentation&lt;/a>.&lt;/p>
&lt;h2 id="new-contributors">New contributors&lt;/h2>
&lt;p>We’re thrilled to welcome new contributors to the Radius community! A special thanks to &lt;strong>@filipevrevez&lt;/strong> for their first contribution in &lt;a href="https://github.com/radius-project/radius/pull/10749">PR #10749&lt;/a>. Your contributions help make Radius better for everyone.&lt;/p>
&lt;h2 id="learn-more-and-get-involved">Learn More and Get Involved&lt;/h2>
&lt;p>We would love for you to join us to help build Radius:&lt;/p>
&lt;ul>
&lt;li>Try the &lt;a href="https://docs.radapp.io/tutorials/">Radius Tutorial&lt;/a>&lt;/li>
&lt;li>Checkout the Radius roadmap and influence future features at &lt;a href="https://aka.ms/radius-roadmap">https://aka.ms/radius-roadmap&lt;/a>&lt;/li>
&lt;li>Join our monthly community meeting to see demos and hear the latest updates (join the &lt;a href="https://groups.google.com/g/radapp_io">Radius Google Group&lt;/a> to get email announcements)&lt;/li>
&lt;li>Join the discussion or ask for help on the &lt;a href="https://aka.ms/radius/discord">Radius Discord server&lt;/a>&lt;/li>
&lt;li>Subscribe to the &lt;a href="https://www.youtube.com/@radapp_io">Radius YouTube channel&lt;/a> for more demos&lt;/li>
&lt;/ul></description></item><item><title>Posts: Deploy a RAG chatbot app using Radius</title><link>https://blog.radapp.io/posts/2025/11/24/deploy-a-rag-chatbot-app-using-radius/</link><pubDate>Mon, 24 Nov 2025 08:00:00 -0800</pubDate><guid>https://blog.radapp.io/posts/2025/11/24/deploy-a-rag-chatbot-app-using-radius/</guid><description>
&lt;p>Agentic AI applications are rapidly becoming a cornerstone of modern software, enabling systems to reason, act, and interact with data in unprecedented ways. As these intelligent applications grow in complexity, managing their infrastructure and governance becomes increasingly challenging. For instance, a Retrieval-Augmented Generation (RAG) chatbot application might require a combination of vector databases, large language models (LLMs), and traditional compute, on top of which considerations like dependency management, security, and compliance are layered. Indeed, when looking at some of the most popular AI sample applications, we see that they often involve multiple components and services that need to be orchestrated outside the bounds of the core application itself before the application can even run.&lt;/p>
&lt;p>We wanted to illustrate how Radius can streamline the building and deploying of these modern AI workloads, ensuring they are portable, secure, and easy to manage. This brings us to the demo that we&amp;rsquo;ve built: leveraging Radius to model and deploy the &lt;a href="https://github.com/willtsai/azure-sql-db-chat-sk/tree/radius-insurance-chatbot-demo">azure-sql-db-chat-sk&lt;/a> sample chatbot from the open source &lt;a href="https://github.com/Azure-Samples/azure-sql-db-chat-sk">Azure Samples repo&lt;/a>. This demo illustrates how Radius simplifies the deployment and governance enforcement of intelligent applications across multiple environments. Mark Russinovich presented this &lt;a href="https://youtu.be/-xcNd5ZU0Z8?si=pi9L4jtI2hZBjq-M&amp;amp;t=1731">demo&lt;/a> recently at the Microsoft Ignite conference:&lt;/p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube-nocookie.com/embed/-xcNd5ZU0Z8?si=1KIPvS0vQXj2HglY&amp;amp;start=1731" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen>&lt;/iframe>
&lt;/div>
&lt;br>
&lt;p>To try the demo for yourself, follow the Radius deployment &lt;a href="https://github.com/willtsai/azure-sql-db-chat-sk/tree/radius-insurance-chatbot-demo?tab=readme-ov-file#deployment-with-radius">instructions&lt;/a> in the repo.&lt;/p>
&lt;h2 id="overview-of-the-sample-chatbot-application">Overview of the sample chatbot application&lt;/h2>
&lt;p>The application is a chatbot designed for insurance claims agents. It uses a SQL Server database to store and retrieve data, leveraging both Retrieval-Augmented Generation (RAG) and Natural-Language-to-SQL (NL2QL) mechanisms. This allows the bot to chat effectively using both structured (tables) and unstructured (vector embeddings) data.&lt;/p>
&lt;p>The bot is built using the &lt;a href="https://github.com/microsoft/semantic-kernel">Semantic Kernel&lt;/a> agent orchestration framework and takes advantage of the native vector support in SQL Server.&lt;/p>
&lt;img src="https://blog.radapp.io/posts/2025/11/24/deploy-a-rag-chatbot-app-using-radius/images/sql-db-chat-sk.png" width="500">
&lt;h2 id="modeling-the-chatbot-app-using-radius">Modeling the chatbot app using Radius&lt;/h2>
&lt;p>First, we containerized the chatbot application code using Docker and pushed the container image to a container registry. Then, we used Radius to model the entire application, defining the relationships between the chatbot container and its dependent resources: the SQL Server database and OpenAI services.&lt;/p>
&lt;img src="https://blog.radapp.io/posts/2025/11/24/deploy-a-rag-chatbot-app-using-radius/images/sql-db-chat-sk-radius.png" width="800">
&lt;h3 id="radius-resource-types-and-recipes-for-dependencies">Radius Resource Types and Recipes for dependencies&lt;/h3>
&lt;p>We defined &lt;a href="https://github.com/willtsai/azure-sql-db-chat-sk/blob/radius-insurance-chatbot-demo/types/types.yaml">Radius Resource Types&lt;/a> to model the SQL Server database and AI models, which are deployed using Bicep Recipes. These &lt;a href="https://github.com/willtsai/azure-sql-db-chat-sk/tree/radius-insurance-chatbot-demo/recipes">Recipes&lt;/a> encapsulate the provisioning logic for these resources to abstract them away from developers, allowing for dynamic infrastructure decisions at deploy time. For example, the SQL Server database Recipe provisions different Azure SQL Database SKUs based on the target &lt;a href="https://github.com/willtsai/azure-sql-db-chat-sk/tree/radius-insurance-chatbot-demo/environments">Radius Environment&lt;/a>. This abstraction allows developers to request these resources without needing to know the underlying infrastructure details. The developer simply requests a &amp;ldquo;SQL Server database&amp;rdquo; or an &amp;ldquo;AI model,&amp;rdquo; and Radius handles the provisioning based on the target Environment&amp;rsquo;s configuration.&lt;/p>
&lt;h3 id="radius-application-definition">Radius Application definition&lt;/h3>
&lt;p>As mentioned above, the developer is able to build a declarative application definition that focuses on the application logic and dependencies without worrying about the underlying infrastructure. For our demo chatbot app, the application definition includes a container for the chatbot service, a SQL Server database for the vector store, and AI models for chat and embeddings, all encapsulated in a single &lt;a href="https://github.com/willtsai/azure-sql-db-chat-sk/blob/radius-insurance-chatbot-demo/app.bicep">application definition&lt;/a>. Radius builds the application graph dynamically based on the resources that get deployed and &lt;a href="https://docs.radapp.io/concepts/applications/#connections">connections&lt;/a> between resources are automatically established.&lt;/p>
&lt;img src="https://blog.radapp.io/posts/2025/11/24/deploy-a-rag-chatbot-app-using-radius/images/chatbot-app-graph.png" width="500">
&lt;h3 id="multi-environment-deployment">Multi-environment deployment&lt;/h3>
&lt;p>In our demo, we targeted three distinct Radius Environments:&lt;/p>
&lt;ol>
&lt;li>&lt;code>ACI&lt;/code>: A lightweight environment for quick testing running on Azure Container Instances&lt;/li>
&lt;li>&lt;code>AKS Dev&lt;/code>: A development environment running on Azure Kubernetes Service&lt;/li>
&lt;li>&lt;code>AKS Prod&lt;/code>: A production environment with stricter governance running on Azure Kubernetes Service&lt;/li>
&lt;/ol>
&lt;p>Radius deploys the exact same application definition to all three environments without requiring any changes to the code or the &lt;code>app.bicep&lt;/code> file.&lt;/p>
&lt;img src="https://blog.radapp.io/posts/2025/11/24/deploy-a-rag-chatbot-app-using-radius/images/sql-db-chat-sk-radius-environments.png" width="800">
&lt;h2 id="governance-and-guardrails-using-radius">Governance and guardrails using Radius&lt;/h2>
&lt;p>A key highlight of the demo is leveraging Radius for seamless governance enforcement. We demonstrated how Radius Environments can enforce different policies and configurations for each deployed resource transparently to the application and developer.&lt;/p>
&lt;p>Specifically, we implemented separate database configurations (SKUs, disaster recovery, multizone redundancy) for Dev and Prod environments and added AI content filtering to prevent &amp;ldquo;jailbreak&amp;rdquo; attempts in Prod.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Dev Environment&lt;/strong>: The SQL Database uses a lower SKU and does not have disaster recovery or multizone redundancy enabled for cost savings. The jailbreak content filtering is relaxed or disabled for testing purposes.&lt;/li>
&lt;li>&lt;strong>Prod Environment&lt;/strong>: The SQL Database uses a higher SKU with disaster recovery and multizone redundancy enabled for resilience. The jailbreak content filtering is strictly enforced.&lt;/li>
&lt;/ul>
&lt;p>This configuration is managed entirely through Radius Environment parameters. The SQL Server database and AI model Recipes accept parameters configured at the Environment level. When deploying to Prod, the Environment automatically passes the database resiliency and strict content filtering configurations to the Recipes.&lt;/p>
&lt;img src="https://blog.radapp.io/posts/2025/11/24/deploy-a-rag-chatbot-app-using-radius/images/sql-db-chat-sk-radius-parameters.png" width="800">
&lt;h2 id="seeing-it-in-action">Seeing it in action&lt;/h2>
&lt;p>The platform engineering team sets up the Radius Resource Types, Recipes, and Environments by running the below commands:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Create the Resource Types from the types.yaml file&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rad resource-type create --from-file ./types/types.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Deploy each Environment using its respective definition file &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># (i.e. aci-dev.bicep, aks-dev.bicep, aks-prod.bicep)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rad deploy ./environments/&amp;lt;env-definition&amp;gt;.bicep --parameters subscriptionId&lt;span style="color:#f92672">=&lt;/span>&amp;lt;subscriptionId&amp;gt; --parameters resourceGroupName&lt;span style="color:#f92672">=&lt;/span>&amp;lt;resourceGroupName&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Developers can then deploy the chatbot app to any of the available Environments using the same application definition file and providing the desired chat and embedding model names as parameters:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Target the aci-dev environment using gpt-3.5-turbo and text-embedding-ada-002 models&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rad deploy app.bicep --environment aci-dev --parameters chatModelName&lt;span style="color:#f92672">=&lt;/span>gpt-35-turbo --parameters embeddingModelName&lt;span style="color:#f92672">=&lt;/span>text-embedding-ada-002
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Target the aks-dev environment using gpt-4 and text-embedding-3-small models&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rad deploy app.bicep --environment aks-dev --parameters chatModelName&lt;span style="color:#f92672">=&lt;/span>gpt-4 --parameters embeddingModelName&lt;span style="color:#f92672">=&lt;/span>text-embedding-3-small
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Target the aks-prod environment using gpt-4 and text-embedding-3-small models&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rad deploy app.bicep --environment aks-prod --parameters chatModelName&lt;span style="color:#f92672">=&lt;/span>gpt-4 --parameters embeddingModelName&lt;span style="color:#f92672">=&lt;/span>text-embedding-3-small
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>When running the demo, the difference in behavior is observed based on the target environment:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Deploy to Dev&lt;/strong>: We deploy the app to the AKS Dev environment and see the database configured with a lower SKU and no disaster recovery or multizone redundancy. We attempt a jailbreak prompt, and the bot might respond (or the filter is loose).&lt;/li>
&lt;li>&lt;strong>Deploy to Prod&lt;/strong>: We deploy the same app to the AKS Prod environment and see the database configured with a higher SKU and disaster recovery and multizone redundancy enabled. We attempt the same jailbreak prompt. This time, the Azure OpenAI content filters kick in, and the chatbot refuses to answer, flagging the attempt.&lt;/li>
&lt;/ol>
&lt;p>This demonstrates how platform engineers can enforce security and compliance standards (like database SKUs, redundancy, and AI safety) across environments without burdening developers with the details.&lt;/p>
&lt;p>
&lt;img src="https://blog.radapp.io/posts/2025/11/24/deploy-a-rag-chatbot-app-using-radius/images/chatbot-jailbreak.png" width="800">
&lt;br>&lt;/p>
&lt;h2 id="in-summary">In summary&lt;/h2>
&lt;p>This demo showcases the &amp;ldquo;Write Once, Run Anywhere&amp;rdquo; promise of Radius, not just for compute, but for the entire application topology including dependencies and configuration. By decoupling the application needs from the infrastructure capabilities, Radius enables developers to move fast while ensuring platform engineers can maintain control and governance.&lt;/p>
&lt;p>Check out the &lt;a href="https://github.com/willtsai/azure-sql-db-chat-sk/tree/radius-insurance-chatbot-demo?tab=readme-ov-file#deployment-with-radius">source code&lt;/a> to try it yourself!&lt;/p>
&lt;h2 id="get-involved-with-radius">Get Involved with Radius&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Monthly Community Meetings:&lt;/strong> Join the &lt;a href="https://groups.google.com/g/radapp_io">Radius Google Group&lt;/a> for announcements.&lt;/li>
&lt;li>&lt;strong>Discord:&lt;/strong> Connect with us and other contributors on the &lt;a href="https://aka.ms/radius/discord">Radius Discord&lt;/a>.&lt;/li>
&lt;li>&lt;strong>YouTube:&lt;/strong> Watch demos and tutorials on the &lt;a href="https://www.youtube.com/@radapp_io">Radius YouTube channel&lt;/a>.&lt;/li>
&lt;/ul></description></item><item><title>Posts: Announcing Radius v0.53.0</title><link>https://blog.radapp.io/posts/2025/11/12/announcing-radius-v0.53.0/</link><pubDate>Wed, 12 Nov 2025 04:12:56 +0000</pubDate><guid>https://blog.radapp.io/posts/2025/11/12/announcing-radius-v0.53.0/</guid><description>
&lt;p>Radius v0.53.0 is here! This latest release brings exciting updates to improve your experience with Radius, whether you&amp;rsquo;re deploying cloud-native Applications or managing internal developer platforms. You can explore the full release notes at &lt;a href="https://github.com/radius-project/radius/releases/tag/v0.53.0">Radius v0.53.0 Release Notes&lt;/a>. If you&amp;rsquo;re new to Radius, visit &lt;a href="https://radapp.io">radapp.io&lt;/a> to learn more about the platform and check out the &lt;a href="https://docs.radapp.io/getting-started/">getting started guide&lt;/a> to install Radius and create your first app.&lt;/p>
&lt;h2 id="contour-ingress-controller-installation-re-enabled">Contour ingress controller installation re-enabled&lt;/h2>
&lt;p>Radius v0.53.0 reintroduces support for installing the Contour ingress controller during &lt;code>rad install kubernetes&lt;/code> or &lt;code>rad init&lt;/code>. This enhancement is made possible by the availability of the &lt;a href="https://github.com/projectcontour/helm-charts/releases/tag/contour-0.1.0">Contour Helm Charts&lt;/a>. With this update, you no longer need to manually install and configure a Contour ingress controller before deploying Gateway resources. This streamlines the setup process and ensures a smoother deployment experience for your Applications.&lt;/p>
&lt;h2 id="improved-environment-deletion-experience">Improved environment deletion experience&lt;/h2>
&lt;p>The &lt;code>rad env delete&lt;/code> command has been enhanced to make Environment cleanup safer and more transparent. This update introduces differentiated prompts for deleting empty versus populated Environments, helping you understand the scope of deletion before proceeding. Additionally, progress messages have been added to provide clearer feedback during deletion operations. For more details, refer to the &lt;a href="https://docs.radapp.io/reference/cli/rad_environment_delete/">CLI documentation&lt;/a>.&lt;/p>
&lt;h2 id="better-onboarding--learning-experience">Better Onboarding &amp;amp; Learning Experience&lt;/h2>
&lt;p>This release brings a major documentation update, including a refreshed &lt;a href="https://docs.radapp.io/quick-start/">Quick Start&lt;/a>, brand-new &lt;a href="https://docs.radapp.io/concepts/">Concept&lt;/a> pages that elevate Radius core concepts, and a redesigned 5-part &lt;a href="https://docs.radapp.io/tutorials/">Tutorial&lt;/a>. Together, these improvements create a clearer, more intuitive learning journey that helps new users quickly understand Radius and start building with confidence.&lt;/p>
&lt;h2 id="new-contributors">New contributors&lt;/h2>
&lt;p>Radius v0.53.0 welcomes new contributors to the project. Special thanks to:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>@koksay&lt;/strong> for their first contribution in &lt;a href="https://github.com/radius-project/radius/pull/10614">PR #10614&lt;/a>&lt;/li>
&lt;li>&lt;strong>@DariuszPorowski&lt;/strong> for their first contribution in &lt;a href="https://github.com/radius-project/radius/pull/10771">PR #10771&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Your contributions help make Radius better for everyone!&lt;/p>
&lt;h2 id="upgrading-to-radius-v0530">Upgrading to Radius v0.53.0&lt;/h2>
&lt;p>To upgrade to Radius v0.53.0, update your Radius CLI and run &lt;code>rad upgrade kubernetes&lt;/code>. Note that only incremental version upgrades are supported. For detailed instructions, consult the &lt;a href="https://docs.radapp.io/guides/operations/kubernetes/kubernetes-upgrade/">upgrade documentation&lt;/a>.&lt;/p>
&lt;h2 id="learn-more-and-get-involved">Learn More and Get Involved&lt;/h2>
&lt;p>We would love for you to join us to help build Radius:&lt;/p>
&lt;ul>
&lt;li>Try the &lt;a href="https://docs.radapp.io/tutorials/new-app/">Radius Tutorial&lt;/a>&lt;/li>
&lt;li>Checkout the Radius roadmap and influence future features at &lt;a href="https://aka.ms/radius-roadmap">https://aka.ms/radius-roadmap&lt;/a>&lt;/li>
&lt;li>Join our monthly community meeting to see demos and hear the latest updates (join the &lt;a href="https://groups.google.com/g/radapp_io">Radius Google Group&lt;/a> to get email announcements)&lt;/li>
&lt;li>Join the discussion or ask for help on the &lt;a href="https://aka.ms/radius/discord">Radius Discord server&lt;/a>&lt;/li>
&lt;li>Subscribe to the &lt;a href="https://www.youtube.com/@radapp_io">Radius YouTube channel&lt;/a> for more demos&lt;/li>
&lt;/ul></description></item><item><title>Posts: Happy 2nd birthday, Radius!</title><link>https://blog.radapp.io/posts/2025/10/21/happy-2nd-birthday-radius/</link><pubDate>Tue, 21 Oct 2025 00:00:00 +0000</pubDate><guid>https://blog.radapp.io/posts/2025/10/21/happy-2nd-birthday-radius/</guid><description>
&lt;p>On October 18, 2025 we celebrated two years since Radius was released as an open-source project! This milestone gives us a chance to reflect on our collective journey and the significant progress made with the community. This past year has been transformative for Radius, with a focus on providing an extensibility model for enterprises adopting Radius into their internal developer platforms and adding capabilities that improved operational maturity of the platform.&lt;/p>
&lt;p>The Radius community has grown with new and existing contributors providing thoughtful feedback and collaborative feature development. We&amp;rsquo;ve delivered consistent monthly releases with features that catered to both application developers and platform engineers, improved product documentation and community resources. The Radius maintainers extend their sincere gratitude to everyone who has participated in contributing code, writing documentation, testing features, and providing feedback. Your contributions have been essential to progressing the Radius vision, and we&amp;rsquo;re excited to continue this collaboration as we further evolve the platform.&lt;/p>
&lt;h2 id="year-in-review-radius-feature-highlights">Year in review: Radius feature highlights&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;a href="https://docs.radapp.io/tutorials/create-resource-type/">&lt;strong>Radius Resource Types&lt;/strong>&lt;/a> are one of the most transformative enhancements to the platform this year because they make Radius fundamentally extensible. Instead of being limited to a fixed catalog of built-in resources, platform engineers can now define custom resource types tailored to their organization’s workflows, policies, and infrastructure. Resource Types act as a contract between application developers and their internal developer platform, abstracting away the complexity of underlying cloud resources while enabling seamless integration with existing Infrastructure-as-Code tools like Terraform and Bicep. This decoupling of resource definition from implementation empowers platform teams to enforce best practices and evolve infrastructure without disrupting developer workflows, while developers gain a simplified, application-centric experience. We are building a community driven library of Resource Types and Recipes in the Radius &lt;a href="https://github.com/radius-project/resource-types-contrib">resource-types-contrib&lt;/a> repository to accelerate development and share best practices for defining application-centric abstractions in Radius.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://docs.radapp.io/guides/deploy-apps/gitops/overview/">&lt;strong>Native GitOps integration&lt;/strong>&lt;/a> with Flux enables teams to define applications and infrastructure with Radius, and then use Flux to deploy and manage them with GitOps practices. The integration includes a new Flux Controller that watches for changes in Git repositories and a new Deployment Template Controller that creates, updates, or deletes applications based on these configurations. This brings the operational benefits of GitOps workflows while preserving Radius&amp;rsquo;s application-centric approach.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://docs.radapp.io/guides/author-apps/azure/azure-container-instances/">&lt;strong>Support for serverless platforms&lt;/strong>&lt;/a> is now built into Radius with the integration of Azure Container Instances (ACI). This enables deploying the same application definition, unchanged, to either a Kubernetes cluster or to ACI. Support for ACI is an initial step towards Radius&amp;rsquo; runtime-agnostic vision, allowing an application to be defined once and then deployed across different container platforms while maintaining a consistent developer experience.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://docs.radapp.io/guides/operations/kubernetes/kubernetes-upgrade/">&lt;strong>In-place control plane upgrades&lt;/strong>&lt;/a> introduced in v0.50.0 with the &lt;code>rad upgrade&lt;/code> and &lt;code>rad rollback&lt;/code> commands, make it easy to keep Radius up-to-date. This feature includes preflight safety checks that validate cluster health, permissions, and version compatibility before any changes are made. It also includes built-in rollback capabilities for fast recovery as needed.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Usability improvements&lt;/strong> across multiple releases have improved the developer and platform engineering experience. Key improvements include:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Radius Dashboard&lt;/strong>: Platform engineers can publish organization-specific resource types with rich Markdown docs that include details on how and when to use them, where developers can browse documentation in one place instead of trawling CLI output. The environment page shows additional details about the Kubernetes cluster and the cloud provider configuration.&lt;/p>
&lt;p>
&lt;img src="https://blog.radapp.io/posts/2025/10/21/happy-2nd-birthday-radius/images/resource-types.png" width="70%">
&lt;br>
&lt;img src="https://blog.radapp.io/posts/2025/10/21/happy-2nd-birthday-radius/images/environment.png" width="70%">
&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Radius CLI&lt;/strong>: Interactive confirmation prompts for destructive operations like &lt;code>rad uninstall kubernetes&lt;/code>, &lt;code>rad group delete&lt;/code>, and &lt;code>rad app delete&lt;/code> that clearly explain what resources will be affected, preventing accidental data loss.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="community-and-ecosystem">Community and ecosystem&lt;/h2>
&lt;p>We have had fruitful engagements with the community through various events and contributions. Our community has grown to ~883 members engaging on Discord and ~864 contributions to a wide range of areas, including some significant features that unblocked specific user scenarios.&lt;/p>
&lt;p>&lt;strong>Key community resource type contributions:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/radius-project/resource-types-contrib/tree/main/Data/mySqlDatabases">MySQL Resource Type and Kubernetes Recipe&lt;/a> contributed by &lt;a href="https://github.com/andrewmatveychuk">Andrew Matveychuk&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://github.com/radius-project/resource-types-contrib/pull/58">Neo4j Resource Type and Kubernetes Recipe&lt;/a> contributed by &lt;a href="https://github.com/superbeeny">Nick Beenham&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Community events and talks:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://youtu.be/ZmcZlDCYDgE?si=M4FlrKtBcz23Edw2">KubeCon EU 2025&lt;/a> session with Millennium BCP showcased Radius as the IDP application layer, including live multi-cloud demos and curated resource catalogs.&lt;/li>
&lt;li>&lt;a href="https://youtu.be/U2-Lo-yuvdc?si=Tm_GlKQg5SVMQLyz">KubeCon US 2024 BackstageCon&lt;/a> session showing how Radius integrates with Backstage to visualize environments and deployed applications.&lt;/li>
&lt;li>&lt;a href="https://youtu.be/MNuoMSIs4Jo?si=XI1Uh1Ej7a1uhLEo">Mark Russinovich’s community presentation on Radius Resource Types&lt;/a> outlining the extensibility feature and how platform teams can share reusable abstractions across organizations.&lt;/li>
&lt;li>&lt;a href="https://youtu.be/lHBo_lDWFcI?si=kD3fTzkps8cogIK5&amp;amp;t=2270">Microsoft Build 2025&lt;/a> session with Mark Russinovich spotlighting how Radius aligns developers and platform engineers on real-world deployments.&lt;/li>
&lt;/ul>
&lt;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Extending Radius to even more serverless container runtimes&lt;/strong> with support for AWS Elastic Container Service (ECS) and Azure Container Apps on the roadmap.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Air-gapped environment support&lt;/strong> with offline installation, configuration, and upgrades so organizations with strict security requirements can vet and cache packages and control dependency versions without internet access.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Radius Resource Types for AI workloads.&lt;/strong> As AI reshapes both applications and software delivery workflows to include developers pairing with agents and services that spans beyond Kubernetes, hosted models, databases, queues, and storage, platform engineers must keep both developers and agents aligned with security, cost, and operational guardrails. Check out this blog post on &lt;a href="https://blog.radapp.io/posts/2025/07/18/future-proofing-ai-applications-via-radius-resource-types/">how you can future proof your AI applications with Radius Resource Types&lt;/a>. More updates coming soon.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="thank-you">Thank you&lt;/h2>
&lt;p>Thank you to every maintainer, contributor, speaker, and demo author who invested time in Radius. The result of your efforts are what we celebrate today.&lt;/p>
&lt;h2 id="learn-more-and-get-involved">Learn more and get involved&lt;/h2>
&lt;p>We would love for you to join us to help build Radius:&lt;/p>
&lt;ul>
&lt;li>Try the &lt;a href="https://docs.radapp.io/tutorials/new-app/">Radius Tutorial&lt;/a>&lt;/li>
&lt;li>Checkout the Radius roadmap and influence future features at &lt;a href="https://aka.ms/radius-roadmap">https://aka.ms/radius-roadmap&lt;/a>&lt;/li>
&lt;li>Join our monthly community meeting to see demos and hear the latest updates (join the &lt;a href="https://groups.google.com/g/radapp_io">Radius Google Group&lt;/a> to get email announcements)&lt;/li>
&lt;li>Join the discussion or ask for help on the &lt;a href="https://aka.ms/radius/discord">Radius Discord server&lt;/a>&lt;/li>
&lt;li>Subscribe to the &lt;a href="https://www.youtube.com/@radapp_io">Radius YouTube channel&lt;/a> for more demos&lt;/li>
&lt;/ul></description></item><item><title>Posts: Announcing Radius v0.52.0</title><link>https://blog.radapp.io/posts/2025/10/14/announcing-radius-v0.52.0/</link><pubDate>Tue, 14 Oct 2025 16:29:59 +0000</pubDate><guid>https://blog.radapp.io/posts/2025/10/14/announcing-radius-v0.52.0/</guid><description>
&lt;p>Today marks the release of Radius v0.52.0, bringing usability improvements and refinements to enhance your experience with the Radius platform. This release focuses on making key commands more intuitive and user-friendly, while also addressing several important updates under the hood. You can find the full release notes on the &lt;a href="https://github.com/radius-project/radius/releases/tag/v0.52.0">Radius GitHub repository&lt;/a>.&lt;/p>
&lt;p>If you’re new to Radius, it’s an open-source platform for building, deploying, and managing cloud-native applications. To get started, visit the &lt;a href="https://radapp.io">Radius website&lt;/a> for an overview, or check out the &lt;a href="https://docs.radapp.io/getting-started/">getting started guide&lt;/a> to install Radius and create your first app.&lt;/p>
&lt;h2 id="usability-improvements-to-rad-uninstall-kubernetes">Usability improvements to &lt;code>rad uninstall kubernetes&lt;/code>&lt;/h2>
&lt;p>The &lt;code>rad uninstall kubernetes&lt;/code> command has been enhanced to provide a more transparent and secure experience. When you run this command, it now lists all the Kubernetes resources that will be deleted and prompts you for confirmation before proceeding. This ensures that you have full visibility into the impact of the operation.&lt;/p>
&lt;p>Additionally, the &lt;code>--purge&lt;/code> flag has been improved to perform a thorough cleanup of all Kubernetes resources created by Radius. This makes it easier to ensure that your cluster is left in a clean state after uninstalling Radius. For more details, refer to the &lt;a href="https://docs.radapp.io/reference/cli/rad_uninstall_kubernetes/">CLI documentation&lt;/a>.&lt;/p>
&lt;h2 id="usability-improvements-to-rad-group-delete">Usability improvements to &lt;code>rad group delete&lt;/code>&lt;/h2>
&lt;p>The &lt;code>rad group delete&lt;/code> command now includes a confirmation prompt that lists all resources associated with the group before deletion. This safety measure helps prevent accidental deletions by giving you a clear overview of the impact of the operation. For more information, see the &lt;a href="https://docs.radapp.io/reference/cli/rad_group_delete/">CLI documentation&lt;/a>.&lt;/p>
&lt;h2 id="upgrading-to-radius-v0520">Upgrading to Radius v0.52.0&lt;/h2>
&lt;p>Upgrading to Radius v0.52.0 is straightforward. First, refer to the &lt;a href="https://docs.radapp.io/guides/tooling/rad-cli/howto-rad-cli/">installation guide&lt;/a> to update your Radius CLI to the latest version. Then, run the &lt;code>rad upgrade kubernetes&lt;/code> command to upgrade your Kubernetes environment. Note that only incremental version upgrades are supported, so ensure you are upgrading from v0.51.0. For detailed instructions, consult the &lt;a href="https://docs.radapp.io/guides/operations/kubernetes/kubernetes-upgrade/">upgrade documentation&lt;/a>.&lt;/p>
&lt;h2 id="learn-more-and-get-involved">Learn More and Get Involved&lt;/h2>
&lt;p>We would love for you to join us to help build Radius:&lt;/p>
&lt;ul>
&lt;li>Try the &lt;a href="https://docs.radapp.io/tutorials/new-app/">Radius Tutorial&lt;/a>&lt;/li>
&lt;li>Checkout the Radius roadmap and influence future features at &lt;a href="https://aka.ms/radius-roadmap">https://aka.ms/radius-roadmap&lt;/a>&lt;/li>
&lt;li>Join our monthly community meeting to see demos and hear the latest updates (join the &lt;a href="https://groups.google.com/g/radapp_io">Radius Google Group&lt;/a> to get email announcements)&lt;/li>
&lt;li>Join the discussion or ask for help on the &lt;a href="https://aka.ms/radius/discord">Radius Discord server&lt;/a>&lt;/li>
&lt;li>Subscribe to the &lt;a href="https://www.youtube.com/@radapp_io">Radius YouTube channel&lt;/a> for more demos&lt;/li>
&lt;/ul></description></item><item><title>Posts: Announcing Radius v0.51.0</title><link>https://blog.radapp.io/posts/2025/10/02/announcing-radius-v0.51.0/</link><pubDate>Thu, 02 Oct 2025 00:00:00 +0000</pubDate><guid>https://blog.radapp.io/posts/2025/10/02/announcing-radius-v0.51.0/</guid><description>
&lt;p>Today, we’re excited to announce the release of Radius v0.51.0! This update introduces several enhancements to improve usability, streamline workflows, and address key user concerns. Whether you’re a developer or platform engineer, this release brings meaningful updates to help you manage your cloud-native Applications more effectively. You can find the full release notes &lt;a href="https://github.com/radius-project/radius/releases/tag/v0.51.0">here&lt;/a>.&lt;/p>
&lt;p>If you’re new to Radius, visit &lt;a href="https://radapp.io">radapp.io&lt;/a> to learn more about the platform and its capabilities. To get started, check out the &lt;a href="https://docs.radapp.io/getting-started/">getting started guide&lt;/a> for step-by-step instructions on installing Radius and deploying your first application.&lt;/p>
&lt;h2 id="purge-behavior-updated-for-uninstall-command">Purge behavior updated for uninstall command&lt;/h2>
&lt;p>Radius v0.51.0 introduces an update to the &lt;code>--purge&lt;/code> flag for the &lt;code>rad uninstall kubernetes&lt;/code> command. When this flag is specified, all Kubernetes resources created by Radius—including resources generated during application deployments—will now be deleted. This enhancement ensures a more thorough cleanup process when uninstalling Radius from your Kubernetes environment. For detailed usage instructions, refer to the &lt;a href="https://docs.radapp.io/reference/cli/rad_uninstall_kubernetes/">CLI documentation&lt;/a>.&lt;/p>
&lt;h2 id="progress-status-feedback-added-to-application-deletion-command">Progress status feedback added to application deletion command&lt;/h2>
&lt;p>The &lt;code>rad app delete&lt;/code> command has been improved to provide real-time progress status and a confirmation summary during application deletion. This update addresses a common usability issue where longer deletion operations could appear unresponsive. With this enhancement, you’ll now have clear visibility into the deletion process, ensuring a smoother experience. Learn more about this feature in the &lt;a href="https://docs.radapp.io/reference/cli/rad_application_delete/">CLI documentation&lt;/a>.&lt;/p>
&lt;h2 id="aci-deployments-now-use-dynamic-resource-group-location">ACI deployments now use dynamic resource group location&lt;/h2>
&lt;p>Radius has updated its Azure Container Instances (ACI) deployment process to dynamically retrieve and use the resource group’s location. Previously, deployments defaulted to the hardcoded West US 3 region due to early support for ACI NGroups. This improvement ensures that Radius adapts to your resource group’s location, simplifying ACI Environment creation and resource deployment. For more information, see the &lt;a href="https://docs.radapp.io/guides/author-apps/azure/azure-container-instances/">how-to guide&lt;/a>.&lt;/p>
&lt;h2 id="contour-ingress-controller-installation-disabled">Contour ingress controller installation disabled&lt;/h2>
&lt;p>Radius v0.51.0 disables the automatic installation of the Contour ingress controller during &lt;code>rad install kubernetes&lt;/code> and &lt;code>rad init&lt;/code>. This change is due to &lt;a href="https://community.broadcom.com/tanzu/blogs/beltran-rueda-borrego/2025/08/18/how-to-prepare-for-the-bitnami-changes-coming-soon">Bitnami’s deprecation&lt;/a> of their public container registry, which impacts the availability of Contour images.&lt;/p>
&lt;p>If your Applications rely on Radius Gateway resources for ingress functionality, you’ll need to manually install and configure a Contour ingress controller before deploying Gateway resources. For installation guidance, consult the &lt;a href="https://projectcontour.io/getting-started/#install-contour-and-envoy">Contour documentation&lt;/a>. Additionally, you may find helpful insights in the &lt;a href="https://github.com/projectcontour/community/issues/48">Contour community discussion&lt;/a>.&lt;/p>
&lt;p>This change is temporary while Radius evaluates alternative ingress controller options and repository sources.&lt;/p>
&lt;h2 id="upgrading-to-radius-v0510">Upgrading to Radius v0.51.0&lt;/h2>
&lt;p>To upgrade to Radius v0.51.0, first update your Radius CLI, then run &lt;code>rad upgrade kubernetes&lt;/code>. Note that only incremental version upgrades are supported. For detailed upgrade instructions, consult the &lt;a href="https://docs.radapp.io/guides/operations/kubernetes/kubernetes-upgrade/">upgrade documentation&lt;/a>.&lt;/p>
&lt;h2 id="learn-more-and-get-involved">Learn More and Get Involved&lt;/h2>
&lt;p>We would love for you to join us to help build Radius:&lt;/p>
&lt;ul>
&lt;li>Try the &lt;a href="https://docs.radapp.io/tutorials/new-app/">Radius Tutorial&lt;/a>&lt;/li>
&lt;li>Checkout the Radius roadmap and influence future features at &lt;a href="https://aka.ms/radius-roadmap">https://aka.ms/radius-roadmap&lt;/a>&lt;/li>
&lt;li>Join our monthly community meeting to see demos and hear the latest updates (join the &lt;a href="https://groups.google.com/g/radapp_io">Radius Google Group&lt;/a> to get email announcements)&lt;/li>
&lt;li>Join the discussion or ask for help on the &lt;a href="https://aka.ms/radius/discord">Radius Discord server&lt;/a>&lt;/li>
&lt;li>Subscribe to the &lt;a href="https://www.youtube.com/@radapp_io">Radius YouTube channel&lt;/a> for more demos&lt;/li>
&lt;/ul></description></item><item><title>Posts: Announcing Radius v0.50.0</title><link>https://blog.radapp.io/posts/2025/09/18/announcing-radius-v0.50.0/</link><pubDate>Thu, 18 Sep 2025 00:00:00 +0000</pubDate><guid>https://blog.radapp.io/posts/2025/09/18/announcing-radius-v0.50.0/</guid><description>
&lt;p>Today marks an exciting milestone for the Radius community with the release of &lt;strong>Radius v0.50.0&lt;/strong>. This release introduces several significant enhancements designed to improve your experience as a developer or platform engineer. Whether you&amp;rsquo;re upgrading an existing installation or exploring Radius for the first time, this release has something for everyone. You can find the full release notes &lt;a href="https://github.com/radius-project/radius/releases/tag/v0.50.0">here&lt;/a>. If you&amp;rsquo;re new to Radius, visit our &lt;a href="https://docs.radapp.io/getting-started/">getting started guide&lt;/a> to learn how to install Radius and create your first app.&lt;/p>
&lt;h2 id="introducing-in-place-upgrades">Introducing in-place upgrades&lt;/h2>
&lt;p>Radius v0.50.0 introduces support for in-place upgrades, making it easier than ever to keep your control plane up to date. With the new &lt;code>rad upgrade&lt;/code> command, you can upgrade the Radius control plane while preserving your existing Environments and Applications. If something goes wrong, you can roll back to the previous version using the &lt;code>rad rollback&lt;/code> command. This feature simplifies the upgrade process and reduces downtime. For more details, see the &lt;a href="https://docs.radapp.io/guides/operations/kubernetes/kubernetes-upgrade/">upgrade documentation&lt;/a>.&lt;/p>
&lt;p>Additionally, this release integrates preflight checks into the &lt;code>rad upgrade kubernetes&lt;/code> command. These checks validate your environment before proceeding with the upgrade, helping you avoid potential issues.&lt;/p>
&lt;h2 id="enhancements-to-radius-resource-types">Enhancements to Radius Resource Types&lt;/h2>
&lt;p>Radius Resource Types now support arrays of objects as properties, enabling more flexible and complex configurations. You can also define an &lt;code>enum&lt;/code> type to validate inputs before deployment, ensuring that only valid values are used in your configurations.&lt;/p>
&lt;p>However, note that the YAML schema for resource type definitions has changed. The &lt;code>name&lt;/code> property has been replaced with &lt;code>namespace&lt;/code>. For example, when creating a new resource type using &lt;code>rad resource-type create -f types.yaml&lt;/code>, the &lt;code>types.yaml&lt;/code> file must now include &lt;code>namespace: Radius.Resources&lt;/code> instead of &lt;code>name: Radius.Resources&lt;/code> on the first line. Be sure to update your existing resource type definitions to align with this change.&lt;/p>
&lt;p>Server-side validation has also been added to ensure that resource data conforms to the type schema, providing an additional layer of reliability during deployments.&lt;/p>
&lt;h2 id="offline-installation">Offline installation&lt;/h2>
&lt;p>Radius can now be installed in offline Environments, addressing a key requirement for air-gapped deployments. You can Use the &lt;code>rad install&lt;/code> command or the Helm chart to specify the location of Radius Containers via the &lt;code>global.imageRegistry&lt;/code> and &lt;code>global.imageTag&lt;/code> parameters. For private registry authentication, the &lt;code>global.imagePullSecrets&lt;/code> parameter is also supported. These enhancements make Radius more accessible in restricted Environments.&lt;/p>
&lt;h2 id="learn-more-and-get-involved">Learn more and Get Involved&lt;/h2>
&lt;p>We would love for you to join us to help build Radius:&lt;/p>
&lt;ul>
&lt;li>Try the &lt;a href="https://docs.radapp.io/tutorials/new-app/">Radius Tutorial&lt;/a>&lt;/li>
&lt;li>Checkout the Radius roadmap and influence future features at &lt;a href="https://aka.ms/radius-roadmap">https://aka.ms/radius-roadmap&lt;/a>&lt;/li>
&lt;li>Join our monthly community meeting to see demos and hear the latest updates (join the &lt;a href="https://groups.google.com/g/radapp_io">Radius Google Group&lt;/a> to get email announcements)&lt;/li>
&lt;li>Join the discussion or ask for help on the &lt;a href="https://aka.ms/radius/discord">Radius Discord server&lt;/a>&lt;/li>
&lt;li>Subscribe to the &lt;a href="https://www.youtube.com/@radapp_io">Radius YouTube channel&lt;/a> for more demos&lt;/li>
&lt;/ul></description></item><item><title>Posts: In-place upgrades now available</title><link>https://blog.radapp.io/posts/2025/09/16/in-place-upgrades-now-available/</link><pubDate>Tue, 16 Sep 2025 00:00:00 +0000</pubDate><guid>https://blog.radapp.io/posts/2025/09/16/in-place-upgrades-now-available/</guid><description>
&lt;p>Up until now, upgrading a Radius installation meant manually redeploying the control plane. This was cumbersome and risked downtime for your internal platform. &lt;strong>Beginning with Radius v0.50, we&amp;rsquo;re excited to announce support for in-place upgrades of the Radius control plane.&lt;/strong> Using the new &lt;code>rad upgrade&lt;/code> command, platform engineers can now upgrade a running Radius control plane to a new version without rebuilding their Environments or disrupting running applications. This enhancement makes it much easier to keep up with new Radius releases in production, thanks to built-in safety checks and a rollback capability.&lt;/p>
&lt;p>In this post, we&amp;rsquo;ll walk through how the new in-place upgrade feature works and how to use the &lt;code>rad upgrade&lt;/code> and &lt;code>rad rollback&lt;/code> commands to upgrade safely. For a more detailed step-by-step guide, check out the official &lt;a href="https://docs.radapp.io/guides/operations/kubernetes/kubernetes-upgrade/">How-To: Upgrade Radius on Kubernetes&lt;/a> and &lt;a href="https://docs.radapp.io/guides/operations/kubernetes/kubernetes-rollback/">How-To: Rollback Radius on Kubernetes&lt;/a> in the documentation.&lt;/p>
&lt;h2 id="upgrading-radius-control-plane-in-place-with-rad-upgrade">Upgrading Radius control plane in-place with &lt;code>rad upgrade&lt;/code>&lt;/h2>
&lt;p>Performing an in-place &lt;a href="https://docs.radapp.io/guides/operations/kubernetes/kubernetes-upgrade/">upgrade&lt;/a> of Radius is straightforward. Here&amp;rsquo;s a high-level overview of the process:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Upgrade your Radius CLI:&lt;/strong> First, ensure you have the latest &lt;code>rad&lt;/code> CLI (v0.50 or later) installed on your machine. The new CLI version includes the &lt;code>rad upgrade&lt;/code> and &lt;code>rad rollback&lt;/code> commands. You can verify your CLI version by running:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ rad version
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Make sure it shows &lt;strong>0.50.0 or later&lt;/strong> as the version. If not, update the CLI before proceeding.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Run the upgrade command:&lt;/strong> Once your CLI is up to date, initiate the control plane upgrade with:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ rad upgrade kubernetes
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This will upgrade the Radius control plane in your Kubernetes cluster to the latest version matching your CLI. The CLI will first run a series of preflight checks (more on this below) to ensure your cluster and current Radius installation are ready to upgrade. If all checks pass, &lt;code>rad upgrade&lt;/code> will proceed to perform the upgrade. Under the hood, this triggers a Helm-based upgrade of the Radius containers. The upgrade is applied as a rolling update to minimize downtime—the Radius Pods will be replaced one by one, preserving the system&amp;rsquo;s state and all your Environment configurations.&lt;/p>
&lt;p>Alternatively, if you want to upgrade to a specific version, you can use the &lt;code>--version&lt;/code> flag. For instance, to upgrade to v0.50.0:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ rad upgrade kubernetes --version 0.50.0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you omit &lt;code>--version&lt;/code>, the CLI upgrades to the same version as the CLI itself.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Verify the upgrade:&lt;/strong> After the command finishes, you should verify that the control plane is running the new version and everything is healthy. You can check the Radius version again, which should now reflect the upgraded version:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ rad version
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>CLI Version Information:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>RELEASE VERSION BICEP COMMIT
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>0.50.0 v0.50.0 0.37.4 42e20ccab9001f54cc9c3074fd20016260a37792
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Control Plane Information:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>STATUS VERSION
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Installed 0.50.0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;blockquote>
&lt;p>&lt;strong>Important:&lt;/strong> Radius currently supports &lt;em>incremental upgrades&lt;/em> only. That means you should upgrade one version at a time (e.g. from v0.49 to v0.50). Skipping directly over a version is not supported by &lt;code>rad upgrade&lt;/code> and will be blocked by the version check. Always upgrade sequentially and consult the release notes if you are coming from older versions.&lt;/p>
&lt;/blockquote>
&lt;h3 id="preflight-checks-for-safe-upgrades">Preflight Checks for Safe Upgrades&lt;/h3>
&lt;p>One of the great things about &lt;code>rad upgrade&lt;/code> is that it includes built-in preflight checks to catch any issues before making changes to your cluster. When you run the upgrade command, Radius will automatically validate a number of conditions, such as:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Kubernetes connectivity and permissions&lt;/strong>: Verifies connection to the cluster and required RBAC permissions&lt;/li>
&lt;li>&lt;strong>Helm connectivity and installation status&lt;/strong>: Confirms Radius is installed via Helm and can be upgraded&lt;/li>
&lt;li>&lt;strong>Version compatibility validation&lt;/strong>: Ensures the current version can be upgraded to the target version&lt;/li>
&lt;li>&lt;strong>Cluster resource availability&lt;/strong>: Checks that there is sufficient CPU and memory available on the cluster for the rolling update (optional warning)&lt;/li>
&lt;li>&lt;strong>Custom configuration validation&lt;/strong>: Validates any custom Helm values&lt;/li>
&lt;/ul>
&lt;p>If any of these checks fail, the upgrade will stop and inform you of what needs to be fixed. No changes will be made to your cluster unless all preflight checks pass. This gives you confidence that once the upgrade proceeds, it won&amp;rsquo;t hit a surprise error halfway through.&lt;/p>
&lt;h2 id="rolling-back-if-something-goes-wrong">Rolling Back if Something Goes Wrong&lt;/h2>
&lt;p>What if you perform an upgrade and encounter an unexpected problem with the new version? In previous releases, you would have been stuck trying to reinstall the old version manually. Radius v0.50 also introduces a &lt;a href="https://docs.radapp.io/guides/operations/kubernetes/kubernetes-rollback/">rollback mechanism&lt;/a> for fast recovery.&lt;/p>
&lt;p>If an upgrade doesn&amp;rsquo;t go as planned, you can simply run this command to roll back to the previous version:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ rad rollback kubernetes
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Or, to roll back to a specific revision, you can the &lt;code>--list-revisions&lt;/code> flag to see available revisions:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ rad rollback kubernetes --list-revisions
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Current Radius version: 0.50.0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>REVISION CHART VERSION STATUS UPDATED DESCRIPTION
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">6&lt;/span> 0.50.0 deployed 2025-03-25 21:22:09 Upgrade complete
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">5&lt;/span> 0.49.0 superseded 2025-03-25 21:22:09 Upgrade complete
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">4&lt;/span> 0.42.42-dev superseded 2025-03-25 21:22:09 Upgrade complete
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">3&lt;/span> 0.42.42-dev superseded 2025-03-25 21:22:09 Upgrade complete
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">2&lt;/span> 0.42.42-dev superseded 2025-03-25 21:22:09 Upgrade complete
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">1&lt;/span> 0.42.42-dev superseded 2025-03-25 21:22:09 Install complete
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Then specify the desired revision number with &lt;code>--revision&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ rad rollback kubernetes --revision &lt;span style="color:#ae81ff">5&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The &lt;code>rad rollback&lt;/code> command will revert the Radius control plane back to the last deployed or specified version. Under the hood, it uses Helm&amp;rsquo;s built-in rollback capability to restore the previously installed release of Radius. Essentially, it redeploys the prior version&amp;rsquo;s containers and settings, so your control plane goes back to the state it was in before the upgrade was attempted.&lt;/p>
&lt;p>A successful rollback means your Environments and Applications should continue working under the old version, just as before. No reconfiguration should be needed—the aim is to quickly get you back to a known good state.&lt;/p>
&lt;h2 id="learn-more">Learn more&lt;/h2>
&lt;p>For more details on in-place upgrades and rollbacks, check out the following resources in the documentation:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://docs.radapp.io/guides/operations/kubernetes/kubernetes-upgrade/">How-To: Upgrade Radius on Kubernetes&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://docs.radapp.io/guides/operations/kubernetes/kubernetes-rollback/">How-To: Rollback Radius on Kubernetes&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="get-involved">Get involved&lt;/h2>
&lt;p>We would love for you to join us to help build Radius:&lt;/p>
&lt;ul>
&lt;li>Join our monthly community meeting to see demos and hear the latest updates (join the &lt;a href="https://groups.google.com/g/radapp_io">Radius Google Group&lt;/a> to get email announcements)&lt;/li>
&lt;li>Join the discussion or ask for help on the &lt;a href="https://aka.ms/radius/discord">Radius Discord server&lt;/a>&lt;/li>
&lt;li>Subscribe to the &lt;a href="https://www.youtube.com/@radapp_io">Radius YouTube channel&lt;/a> for more demos&lt;/li>
&lt;/ul></description></item><item><title>Posts: Contribute Your First Resource Type and Recipe</title><link>https://blog.radapp.io/posts/2025/08/11/contribute-your-first-resource-type-and-recipe/</link><pubDate>Mon, 11 Aug 2025 00:00:00 +0000</pubDate><guid>https://blog.radapp.io/posts/2025/08/11/contribute-your-first-resource-type-and-recipe/</guid><description>
&lt;p>Radius helps platform engineers build powerful Internal Developer Platforms (IDPs) with curated resource catalogs that empower developers to build applications that adhere to all enterprise best practices. Key to delivering custom resource catalogs is the &lt;strong>Radius Resource Types&lt;/strong> feature.&lt;/p>
&lt;p>Think of Radius Resource Types as the developer&amp;rsquo;s interface to your platform. They define a contract—a set of properties developers use to provision infrastructure without needing to know the implementation details. Platform engineers then create &lt;a href="https://docs.radapp.io/guides/recipes/overview/">&lt;strong>Recipes&lt;/strong>&lt;/a>—the implementation of that contract—using tools like Terraform or Bicep to deploy and manage the actual cloud resources, ensuring that best practices related to security, compliance, and cost are followed by default.&lt;/p>
&lt;p>While Radius ships with a catalog of common resource types, the true power of Radius is unlocked when the community extends it by creating a &lt;strong>shared library&lt;/strong> of Resource Types. Shared Resource Types, enable you and the community to model any service or technology, from a niche cloud service to a complex, multipart web application.&lt;/p>
&lt;p>This post explains how to contribute Resource Types and Recipes to the Radius ecosystem, with the goal of enabling a rich, community-driven library that benefits everyone.&lt;/p>
&lt;h2 id="contribution-process-overview">Contribution Process Overview&lt;/h2>
&lt;p>Contributions to the &lt;code>resource-types-contrib&lt;/code> repository are categorized into three maturity levels. This allows for a flexible contribution process, where you can start small and collaborate with the community to mature your Resource Type over time.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Alpha&lt;/strong>: This is the entry point for all new contributions. At this stage, the focus is on sharing your experimental work. You&amp;rsquo;ll need a valid resource type schema, at least one working Recipe for any platform, basic documentation, and evidence of manual testing.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Beta&lt;/strong>: As a contribution matures, it can be promoted to Beta. This stage indicates that the Resource Type is well-tested and ready for broader use. Beta requirements include having Recipes for all major platforms (AWS, Azure, Kubernetes) in both Bicep and Terraform, along with automated functional tests.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Stable&lt;/strong>: The final stage is for Resource Types that are considered production-ready and are officially supported by the Radius project. These contributions have 100% test coverage, are fully integrated into the Radius CI/CD pipeline, and have a designated owner for long-term maintenance.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>You can find the detailed requirements for each stage in our &lt;a href="https://github.com/radius-project/resource-types-contrib/blob/main/contributing-docs/contributing-resource-types-recipes.md#maturity-levels">contribution guide&lt;/a>.&lt;/p>
&lt;h2 id="what-can-you-contribute">What Can You Contribute?&lt;/h2>
&lt;p>You can define any resource specific to your own needs or pick a resource type from the list of &lt;a href="https://github.com/radius-project/resource-types-contrib/issues">open issues&lt;/a>.&lt;/p>
&lt;p>We&amp;rsquo;d love to see contributions for:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Databases:&lt;/strong> NoSQL, time-series, or graph databases.&lt;/li>
&lt;li>&lt;strong>Messaging:&lt;/strong> Message queues or event streaming platforms.&lt;/li>
&lt;li>&lt;strong>AI/ML:&lt;/strong> Model serving platforms or vector databases.&lt;/li>
&lt;li>&lt;strong>Cloud Services:&lt;/strong> Niche cloud provider services or multi-cloud abstractions.&lt;/li>
&lt;li>&lt;strong>Observability:&lt;/strong> Monitoring, logging, or tracing solutions.&lt;/li>
&lt;/ul>
&lt;p>The more diverse the contributions, the richer the Radius ecosystem becomes.&lt;/p>
&lt;h2 id="an-example-to-get-you-started">An Example to Get You Started&lt;/h2>
&lt;p>To showcase what a good contribution looks like, the Radius team has added a &lt;a href="https://github.com/radius-project/resource-types-contrib/pull/13">Redis Resource type with a Kubernetes Recipe&lt;/a>. This alpha-stage contribution provides:&lt;/p>
&lt;ul>
&lt;li>A complete Redis Resource type schema.&lt;/li>
&lt;li>Both Bicep and Terraform Recipes for Kubernetes.&lt;/li>
&lt;li>Manual testing with a sample application.&lt;/li>
&lt;li>Clear documentation for others to follow.&lt;/li>
&lt;/ul>
&lt;p>This serves as a template for community driven development. We encourage you to use it as a reference for your own contributions.&lt;/p>
&lt;h2 id="step-by-step-guide">Step-by-Step Guide&lt;/h2>
&lt;p>We&amp;rsquo;ve structured the process in the &lt;a href="https://github.com/radius-project/resource-types-contrib/blob/main/contributing-docs/contributing-resource-types-recipes.md">resource-types-contrib repository&lt;/a> to be as clear as possible, with three maturity levels for contributions: &lt;strong>Alpha&lt;/strong>, &lt;strong>Beta&lt;/strong>, and &lt;strong>Stable&lt;/strong>.&lt;/p>
&lt;p>Here’s the high-level process:&lt;/p>
&lt;h3 id="1-set-up-your-contribution">1. Set Up Your Contribution&lt;/h3>
&lt;p>Fork the &lt;a href="https://github.com/radius-project/resource-types-contrib">resource-types-contrib repository&lt;/a> and create a directory for your resource type. The structure is simple and documented in our contribution guide.&lt;/p>
&lt;h3 id="2-define-your-schema">2. Define Your Schema&lt;/h3>
&lt;p>Create a &lt;code>.yaml&lt;/code> schema file for your resource type. This is the developer-facing interface. Key guidelines are documented in our &lt;a href="https://github.com/radius-project/resource-types-contrib/blob/main/contributing-docs/contributing-resource-types-recipes.md#4-define-your-resource-type-schema">contribution guide&lt;/a>&lt;/p>
&lt;h3 id="3-create-recipes">3. Create Recipes&lt;/h3>
&lt;p>Develop Terraform and/or Bicep Recipes to deploy your resource. This is the platform-facing implementation. Key guidelines are documented in our &lt;a href="https://github.com/radius-project/resource-types-contrib/blob/main/contributing-docs/contributing-resource-types-recipes.md#recipe-guidelines">contribution guide&lt;/a>&lt;/p>
&lt;h3 id="4-document-and-test">4. Document and Test&lt;/h3>
&lt;p>Create a &lt;code>README.md&lt;/code> with an overview, usage instructions, and examples. Most importantly, &lt;strong>test your resource type&lt;/strong> with a real application and provide evidence that it works as expected.&lt;/p>
&lt;h3 id="contribution-checklist">Contribution Checklist&lt;/h3>
&lt;p>Before you submit a pull request, make sure you have:&lt;/p>
&lt;ul>
&lt;li>✅ A schema following the naming conventions.&lt;/li>
&lt;li>✅ At least one working Recipe (Terraform or Bicep).&lt;/li>
&lt;li>✅ A comprehensive &lt;code>README.md&lt;/code>.&lt;/li>
&lt;li>✅ Evidence of successful testing with a sample application.&lt;/li>
&lt;li>✅ Clear commit messages.&lt;/li>
&lt;/ul>
&lt;h2 id="filing-issues-and-getting-help">Filing Issues and Getting Help&lt;/h2>
&lt;p>Not ready to contribute code? You can still participate!&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Propose a New Resource Type:&lt;/strong> Open an issue in the &lt;a href="https://github.com/radius-project/resource-types-contrib">resource-types-contrib repository&lt;/a> to discuss your idea.&lt;/li>
&lt;li>&lt;strong>Report a Bug:&lt;/strong> If you find an issue with an existing Resource type, let us know.&lt;/li>
&lt;li>&lt;strong>Request an Enhancement:&lt;/strong> For broader ideas, file an issue in the main &lt;a href="https://github.com/radius-project/radius">Radius repository&lt;/a>.&lt;/li>
&lt;/ul>
&lt;h2 id="get-started-today">Get Started Today!&lt;/h2>
&lt;p>The future of Radius resource types is community-driven. By sharing your experiments, testing each other&amp;rsquo;s implementations, and collaboratively improving the ecosystem, we&amp;rsquo;re building a platform that truly serves the needs of cloud native application developers. As we build out the testing and CI/CD infrastructure for &lt;code>beta&lt;/code> and &lt;code>stable&lt;/code> contributions, we look forward to collaborating with you to mature your Resource types and Recipes. Your alpha contributions are the first step in a journey of collaborative development. Together, we can promote them through the maturity levels, ensuring they become robust and reliable components for the entire community.&lt;/p>
&lt;p>Ready to contribute? We can&amp;rsquo;t wait to see what you build!&lt;/p>
&lt;h2 id="get-involved-with-radius">Get Involved with Radius&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Resource Types:&lt;/strong> Check out the &lt;a href="https://docs.radapp.io/tutorials/create-resource-type/">tutorial&lt;/a> for step-by-step guide on creating Resource Types and Recipes.&lt;/li>
&lt;li>&lt;strong>Recipes:&lt;/strong> Learn more about &lt;a href="https://docs.radapp.io/guides/recipes/overview/">Recipes&lt;/a>.&lt;/li>
&lt;li>&lt;strong>Monthly Community Meetings:&lt;/strong> Join the &lt;a href="https://groups.google.com/g/radapp_io">Radius Google Group&lt;/a> for announcements.&lt;/li>
&lt;li>&lt;strong>Discord:&lt;/strong> Connect with us and other contributors on the &lt;a href="https://aka.ms/radius/discord">Radius Discord&lt;/a>.&lt;/li>
&lt;li>&lt;strong>YouTube:&lt;/strong> Watch demos and tutorials on the &lt;a href="https://www.youtube.com/@radapp_io">Radius YouTube channel&lt;/a>.&lt;/li>
&lt;li>&lt;strong>Docs:&lt;/strong> Learn more at &lt;a href="https://docs.radapp.io/tutorials/create-resource-type/">docs.radapp.io&lt;/a>.&lt;/li>
&lt;/ul></description></item><item><title>Posts: Future Proofing AI Applications via Radius Resource Types</title><link>https://blog.radapp.io/posts/2025/07/18/future-proofing-ai-applications-via-radius-resource-types/</link><pubDate>Fri, 18 Jul 2025 00:00:00 +0000</pubDate><guid>https://blog.radapp.io/posts/2025/07/18/future-proofing-ai-applications-via-radius-resource-types/</guid><description>
&lt;h2 id="building-applications-in-the-ai-era">Building Applications in the AI Era&lt;/h2>
&lt;p>Imagine you’re an enterprise developer building your first AI-powered application. You start with Anthropic’s Claude, ramp on the APIs, write your application code, configure authentication, test the application and successfully deploy it to production. Everything is working great but, three months later, your organization migrates to an entirely different AI model, such as Google Gemini, for better results or for cost optimization. Suddenly, you’re facing days or weeks of refactoring and testing across environments before redeploying the same application using the different model.&lt;/p>
&lt;p>This scenario plays out daily in organizations embracing AI. The rapid evolution of AI means today’s technical decisions may not align with tomorrow’s AI requirements and capabilities. So, platform engineers must provide Internal Developer Platforms that make it easy to develop AI applications while enabling them to adapt to changing AI providers and models without extensive rewrites. This challenge isn’t just technical, it’s architectural. How does an IDP enable developers to build applications that remain loosely coupled to an underlying AI model, while providing developers a consistent, simple interface in cases where the underlying models change?&lt;/p>
&lt;h2 id="the-application-contract-separating-what-from-how">The Application Contract: Separating What from How&lt;/h2>
&lt;p>The solution lies in establishing a clear contract with developers, a contract that separates developers’ infrastructure requirements from the implementation details of how that infrastructure is configured and deployed. Such an application contract must define a stable interface that remains consistent regardless of the underlying AI provider or model.&lt;/p>
&lt;p>Radius Resource Types enable this contract: Platform engineers use Radius to define custom application resources, including AI models. They enable configuration and deployment of those resources via Radius Recipes, which are infrastructure templates in Bicep or Terraform. Developers simply reference the required resources in their application via simple, high-level abstractions. Infrastructure Recipes, in turn, handle all the implementation details and execution of infrastructure configuration and deployment.&lt;/p>
&lt;img src="https://blog.radapp.io/posts/2025/07/18/future-proofing-ai-applications-via-radius-resource-types/images/dev-platformeng-graphic.png" width="70%">
&lt;p>This separation enables developers to focus on building applications while platform teams focus on maintaining infrastructure consistency and governance. When business requirements change - a new AI strategy, new compliance rules, cost optimization, or cloud migration - platform teams simply update Recipes without disrupting application development or compatibility.&lt;/p>
&lt;h3 id="the-developer-experience-simple-and-consistent-interface">The Developer Experience: Simple and Consistent Interface&lt;/h3>
&lt;p>For a developer, that means adding an AI service to their Radius application is as simple as adding a reference to the AI resource provided by their IDP and then setting a few parameters. Instead of diving into cloud provider documentation, wrestling with authentication flows, or configuring service endpoints, a developer just declares their intent with this simple syntax:&lt;/p>
&lt;img src="https://blog.radapp.io/posts/2025/07/18/future-proofing-ai-applications-via-radius-resource-types/images/ai-interface.png" width="70%">
&lt;p>The developer has access to an AI model catalog, curated by their platform engineering team - from lightweight &lt;code>TinyLlama&lt;/code> for quick prototyping to production-ready &lt;code>GPT 3.5 Turbo&lt;/code> and &lt;code>Claude 3 Sonnet&lt;/code> for enterprise features. When developers need to experiment with different models, they simply change one parameter.&lt;/p>
&lt;p>The best part is that Radius makes it simple to connect a given container in your application to an AI service. No more wrestling with API keys, endpoints, or different authentication schemes—everything gets injected as environment variables.&lt;/p>
&lt;img src="https://blog.radapp.io/posts/2025/07/18/future-proofing-ai-applications-via-radius-resource-types/images/connections.png" width="70%">
&lt;p>And deploy the application with a single command to the environment of choice&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>rad deploy todolist.bicep --environment azure
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>or&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>rad deploy todolist.bicep --environment aws
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For production deployments, teams typically embrace GitOps workflows. Radius seamlessly integrates into these existing workflows, supporting &lt;a href="https://docs.radapp.io/guides/deploy-apps/gitops/overview/">GitOps tools&lt;/a> like Flux and with planned support for Argo CD in the future. This means your AI applications can be deployed and managed through the same CI/CD processes your team already uses, maintaining consistency with your broader deployment strategy.&lt;/p>
&lt;p>Whether your platform team-provided Recipes provision Azure Cognitive Services, AWS Bedrock Claude models, or tomorrow’s next-generation AI provider, this application contract never changes. The developer experience remains constant while the infrastructure beneath evolves freely. Radius Recipes handle the complexity of authentication, rate limiting, and service configuration automatically.&lt;/p>
&lt;p>While Radius mitigates developer exposure to the complexity of infrastructure configuration and deployment, some changes in application runtime may still be necessary. For instance, switching from &lt;code>GPT 3.5 Turbo&lt;/code> to &lt;code>Claude 3 Sonnet&lt;/code> will require modifying how your runtime code interacts with the model. To abstract your runtime code, use &lt;a href="https://docs.dapr.io/developing-applications/building-blocks/conversation/conversation-overview/">Dapr’s Conversation building block&lt;/a>, which provides a single API for calling underlying LLMs. It can be used alongside Radius Resource Types to ensure both infrastructure deployments and the application runtime code is LLM agnostic.&lt;/p>
&lt;h3 id="the-platform-engineering-experience-orchestrating-the-experience-behind-the-scenes">The Platform Engineering Experience: Orchestrating the Experience Behind the Scenes&lt;/h3>
&lt;p>To enable the developer experience described above, platform engineers work behind the scenes crafting the resource catalog and Recipes that transform abstract developer requests into concrete cloud/platform resources while maintaining the application contract.&lt;/p>
&lt;img src="https://blog.radapp.io/posts/2025/07/18/future-proofing-ai-applications-via-radius-resource-types/images/platformeng-interface.png" width="70%">
&lt;p>Platform engineers define the schema definition for the &lt;code>aiModels&lt;/code> resource type, specifying the parameters developers can use to request AI services. They then implement Recipes using Bicep or Terraform that deploy the infrastructure. Recipes use the input context provided by the developer to provision the necessary resources and return output values in a standardized format that Radius can inject into the application.&lt;/p>
&lt;p>&lt;strong>The Kubernetes Recipe&lt;/strong> - When a developer requests a &lt;code>TinyLlama&lt;/code> model, the Kubernetes Recipe deploys a containerized service that downloads the TinyLlama model binary, configures authentication, and outputs the necessary values needed for the application to connect.&lt;/p>
&lt;p>&lt;strong>The Azure Recipe&lt;/strong> - When a developer requests &lt;code>GPT 3.5 Turbo&lt;/code> model, the Azure Recipe deploys Cognitive Services, configures authentication, and outputs the necessary values needed for the application to connect.&lt;/p>
&lt;p>&lt;strong>The AWS Recipe&lt;/strong> - When a developer requests &lt;code>Claude 3 Sonnet&lt;/code> model, the AWS Recipe handles the entirely different world of IAM roles and Bedrock permissions and outputs the necessary values needed for the application to connect.&lt;/p>
&lt;p>When the next breakthrough AI service emerges or when new compliance requirements arise or when cost optimization opportunities appear from hosting providers, platform engineers can implement the requirements at the Recipe level without disrupting development workflows.&lt;/p>
&lt;p>Check out the &lt;a href="https://github.com/Reshrahim/todoapp-ai">Radius Todo List Application&lt;/a> which includes an AI feedback feature, demonstrating this approach in practice.&lt;/p>
&lt;h2 id="get-involved">Get Involved&lt;/h2>
&lt;p>We would love for you to join us to help build Radius:&lt;/p>
&lt;ul>
&lt;li>Try the &lt;a href="https://github.com/Reshrahim/todoapp-ai">Radius Todo List Application&lt;/a>&lt;/li>
&lt;li>Check out the &lt;a href="https://docs.radapp.io/tutorials/create-resource-type/">Radius Resource types tutorial&lt;/a>&lt;/li>
&lt;li>Join our monthly community meeting to see demos and hear the latest updates (join the &lt;a href="https://groups.google.com/g/radapp_io">Radius Google Group&lt;/a> to get email announcements)&lt;/li>
&lt;li>Join the discussion or ask for help on the &lt;a href="https://aka.ms/radius/discord">Radius Discord server&lt;/a>&lt;/li>
&lt;li>Subscribe to the &lt;a href="https://www.youtube.com/@radapp_io">Radius YouTube channel&lt;/a> for more demos&lt;/li>
&lt;/ul></description></item><item><title>Posts: Introducing Radius Resource Types</title><link>https://blog.radapp.io/posts/2025/06/17/introducing-radius-resource-types/</link><pubDate>Tue, 17 Jun 2025 00:00:00 +0000</pubDate><guid>https://blog.radapp.io/posts/2025/06/17/introducing-radius-resource-types/</guid><description>
&lt;p>The Radius maintainers and community have been hard at work enabling platform engineers to build internal developer platforms that are application-centric with a great developer experience. This week Radius launched &lt;a href="https://docs.radapp.io/tutorials/create-resource-type/">Radius Resource Types&lt;/a>, reinforcing its core mission to decouple application definitions from underlying infrastructure.&lt;/p>
&lt;p>Enterprises integrating Radius into their internal developer platform tell us they need to customize the API for common resource types such as a PostgreSQL database to simplify the developer experience (allowing developers to select T-shirt sizes, for example). Others want to create abstract resource types such as a web service that may have a reverse proxy, an application container, and an in-memory cache all encapsulated in one single type. Radius Resource Types enable platform engineers to accomplish these exact scenarios. Platform engineers now have complete flexibility in defining the resources developers use in their applications and, separately, the implementation of those resources using Terraform configurations or Bicep templates (referred to generally as Recipes in Radius).&lt;/p>
&lt;p>This is a major step forward for platform engineering. Platform engineers gain greater control over the implementation and deployment of cloud resources. Ensuring security, compliance, and cost management best practices are followed is significantly easier. Developers can now work with higher-level, familiar abstractions defined by their organization, simplifying their workflow and reducing cognitive load. They no longer need to learn multiple infrastructure as code languages.&lt;/p>
&lt;h2 id="resource-types-the-developers-interface">Resource Types: The developer&amp;rsquo;s interface&lt;/h2>
&lt;p>Radius ships with a catalog of common resource types. This includes core types such as Containers, Gateways, Secrets, and Volumes, but also open-source resource types including MongoDB, Redis, RabbitMQ, and others. Each resource type has a set of properties developers can specify when defining their application.&lt;/p>
&lt;p>For example, the MongoDB resource type has properties for the database name, the host name, the port, and the username. These properties are the interface between the application and the internal developer platform. They constitute the contract between developers and platform engineers.&lt;/p>
&lt;p>This interface insulates developers from the infrastructure implementation. They no longer need to know how to deploy their containers to Kubernetes and their database to AWS or Azure. They no longer need to learn Helm and Bicep, CloudFormation, or Terraform.&lt;/p>
&lt;p>However, until today, these resource types were predefined, immutable, and built into Radius. All this changes with Radius Resource Types. Platform engineers can now create new resource types with custom APIs, opening up a wide array of new capabilities. For example, platform engineers can now:&lt;/p>
&lt;ul>
&lt;li>Create resource types for application components that do not ship with Radius. For example, a resource type could be created for an OpenAI model.&lt;/li>
&lt;li>Modify the API for existing resource types. For example, a T-shirt size (S, M, L) could be added to one of the existing database resources such as MongoDB so the developer can specify the size of the database.&lt;/li>
&lt;li>Create more abstract resource types such as a web service, or a functions-based application that only requires the developer to provide a container image for a full application to be deployed.&lt;/li>
&lt;/ul>
&lt;p>Radius Resource Types are modeled using an OpenAPI schema in a YAML file. If you have created a Kubernetes Custom Resource Definition (CRD) before, Radius Resource Types will look familiar. For example, here is resource type definition for an OpenAI model:&lt;/p>
&lt;p>&lt;strong>&lt;code>types.yaml&lt;/code>&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">namespace&lt;/span>: &lt;span style="color:#ae81ff">Radius.Resources&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">types&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">openAIModels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">apiVersions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#39;2023-10-01-preview&amp;#39;&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">schema&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#e6db74">&amp;#39;object&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">properties&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">environment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">description&lt;/span>: &lt;span style="color:#ae81ff">The Radius environment, typically set by the rad CLI&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">application&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">description&lt;/span>: &lt;span style="color:#ae81ff">The application which the resource is associated with&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">capacity&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">description&lt;/span>: &lt;span style="color:#ae81ff">The capacity of the API, valid values are S, M, or L&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">apiKey&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">description&lt;/span>: &lt;span style="color:#ae81ff">The key that can be used to connect to the API&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">readOnly&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">apiVersion&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">description&lt;/span>: &lt;span style="color:#ae81ff">The version of the OpenAI API&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">readOnly&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">deployment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">description&lt;/span>: &lt;span style="color:#ae81ff">The deployment name, used by the OpenAI SDK to connect to the API&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">readOnly&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">endpoint&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">description&lt;/span>: &lt;span style="color:#ae81ff">The endpoint URL of the OpenAI API&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">readOnly&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">required&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">environment&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">capacity &lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Let&amp;rsquo;s walkthrough this resource type definition. By convention, resource type definitions are stored in a file named &lt;code>types.yaml&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">namespace&lt;/span>: &lt;span style="color:#ae81ff">Radius.Resources&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The namespace is just a namespace for the resource type. In practice, it is recommended to use &lt;code>Radius.Resources&lt;/code> for all resource types. For advanced users, the namespace can be any string in the format &lt;code>Parent.Child&lt;/code> (Radius uses &lt;code>Applications.Core&lt;/code> for the built-in resource types).&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">types&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">openAIModels&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Multiple resource types can be listed under &lt;code>types&lt;/code>. &lt;code>openAIModels&lt;/code> is the name of the resource type. By convention, Radius Resource Types are camel-case and plural.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">apiVersions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#39;2023-10-01-preview&amp;#39;&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">schema&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#e6db74">&amp;#39;object&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">properties&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This defines our API version. API versions in Radius are in date form with an optional &lt;code>-preview&lt;/code> suffix. Today, resource types can only have a single version, but in the future, adding additional versions with a different schema will be possible. Note than when developers add resources to the application definition, the API version must always be specified.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">environment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">description&lt;/span>: &lt;span style="color:#ae81ff">The Radius environment, typically set by the rad CLI&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">application&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">description&lt;/span>: &lt;span style="color:#ae81ff">The application which the resource is associated with&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>These two properties are Radius-specific and should be on every resource type. The &lt;code>environment&lt;/code> property is typically set by the Radius CLI when the application is deployed. The &lt;code>application&lt;/code> property is set by the developer in the application definition.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">capacity&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">description: The capacity of the API. Valid values&lt;/span>: &lt;span style="color:#e6db74">&amp;#39;S&amp;#39;&lt;/span>, &lt;span style="color:#e6db74">&amp;#39;M&amp;#39;&lt;/span>, &lt;span style="color:#e6db74">&amp;#39;L&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>capacity&lt;/code> is the only property that the developer needs to set. Later you will see that &lt;code>capacity&lt;/code> is a required property.&lt;/p>
&lt;img src="https://blog.radapp.io/posts/2025/06/17/introducing-radius-resource-types/images/vscode.png" width="70%">
&lt;p>When the developer is adding an OpenAI model to their application using VS Code, the developer sees the description of the &lt;code>capacity&lt;/code> property.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">apiKey&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">description&lt;/span>: &lt;span style="color:#ae81ff">The key that can be used to connect to the API&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">readOnly&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">apiVersion&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">description&lt;/span>: &lt;span style="color:#ae81ff">The version of the OpenAI API&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">readOnly&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">deployment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">description&lt;/span>: &lt;span style="color:#ae81ff">The deployment name, used by the OpenAI SDK to connect to the API&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">readOnly&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">endpoint&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">description&lt;/span>: &lt;span style="color:#ae81ff">The endpoint URL of the OpenAI API&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">readOnly&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The &lt;code>apiKey&lt;/code>, &lt;code>apiVersion&lt;/code>, &lt;code>deployment&lt;/code>, and &lt;code>endpoint&lt;/code>, are all read-only properties meaning the developer cannot set these properties in the resource definition (notice they are not in the screen shot above).&lt;/p>
&lt;p>These read-only properties are set by the Recipe after the resource gets deployed. The developer can, however, reference these properties in the application definition. For example, this container has environment variables set using properties from an &lt;code>openAIModels&lt;/code> resource.&lt;/p>
&lt;p>&lt;strong>&lt;code>todolist.bicep&lt;/code>&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bicep" data-lang="bicep">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">resource&lt;/span> frontend &lt;span style="color:#e6db74">&amp;#39;Applications.Core/containers@2023-10-01-preview&amp;#39;&lt;/span> = {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name: &lt;span style="color:#e6db74">&amp;#39;frontend&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> properties: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> container: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> env: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> CONNECTION_AI_ENDPOINT: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> value: openai.properties.endpoint
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> CONNECTION_AI_DEPLOYMENT: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> value: openai.properties.&lt;span style="color:#a6e22e">deployment&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> CONNECTION_AI_APIKEY:{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> value: openai.properties.apiKey
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> CONNECTION_AI_APIVERSION:{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> value: openai.properties.apiVersion
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Finally, the remainder of the resource type definition YAML file is:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">required&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">environment&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">capacity &lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This specified that only the &lt;code>environment&lt;/code> and &lt;code>capacity&lt;/code> properties are required to be set by the developer.&lt;/p>
&lt;h2 id="recipes-the-platform-engineers-implementation">Recipes: The platform engineer&amp;rsquo;s implementation&lt;/h2>
&lt;p>The resource type definition discussed above is only the interface for a resource type. The implementation for deploying this resource is completely separate and not exposed to developers. If you are familiar with Radius, you know that Radius uses Recipes and Environments to determine how to deploy a resource. Radius Resource Types uses the same concepts.&lt;/p>
&lt;img src="https://blog.radapp.io/posts/2025/06/17/introducing-radius-resource-types/images/openai.png" width="70%">
&lt;p>In this example, the &lt;code>openAIModels&lt;/code> resource type is used by developers in their application definitions on the left. On the right, the platform engineer has created two Radius Environments. Notice that the same Terraform configuration for deploying the OpenAI model is used for both the test and production environments. While the same configuration file is used, it uses the parameters passed by Radius to determine the proper deployment configuration. The Terraform configuration has several variables set by Radius automatically, but platform engineers can add additional parameters such as &lt;code>production=TRUE&lt;/code> in this example.&lt;/p>
&lt;h3 id="composite-recipes">Composite Recipes&lt;/h3>
&lt;p>Radius Resource Types also introduces a powerful new concept of composite Recipes. In the previous OpenAI example, the recipe deployed a single resource. But recipes are much more powerful than that. With composite Recipes, platform engineers can model abstract resource types then define a Recipe that is composed of multiple resources.&lt;/p>
&lt;img src="https://blog.radapp.io/posts/2025/06/17/introducing-radius-resource-types/images/composite.png" width="70%">
&lt;p>The resources defined in the composite Recipe can be any type that Radius is aware of including:&lt;/p>
&lt;ul>
&lt;li>Radius core types including Containers, Gateways, Secrets, and Volumes&lt;/li>
&lt;li>Resource types built into Radius such as MongoDB, Redis, Dapr Configuration Store, and Dapr State Store&lt;/li>
&lt;li>Radius Resource Types defined by the platform engineer&lt;/li>
&lt;li>Azure resource types&lt;/li>
&lt;li>AWS resource types&lt;/li>
&lt;/ul>
&lt;p>For a hands-on example of using a composite Recipe, see the &lt;em>&lt;a href="https://docs.radapp.io/tutorials/create-composite-recipe/">Create a composite Recipe&lt;/a>&lt;/em> tutorial in the Radius documentation.&lt;/p>
&lt;h2 id="learn-more">Learn More&lt;/h2>
&lt;p>There are several resources available to learn more about Radius Resource Types:&lt;/p>
&lt;ul>
&lt;li>Mark Russinovich, the CTO of Microsoft Azure and sponsor of Radius, introduced and demoed Radius Resource Types at the &lt;a href="https://www.youtube.com/watch?v=MNuoMSIs4Jo">June Radius Community Call&lt;/a>.&lt;/li>
&lt;li>There are two tutorials in the Radius documentation, one for &lt;a href="https://docs.radapp.io/tutorials/create-resource-type/">creating a PostgreSQL resource type&lt;/a> and a &lt;a href="https://docs.radapp.io/tutorials/create-composite-recipe/">second for creating a composite recipe for a web service resource type&lt;/a>.&lt;/li>
&lt;/ul>
&lt;h2 id="get-involved">Get Involved&lt;/h2>
&lt;p>We would love for you to join us to help build Radius:&lt;/p>
&lt;ul>
&lt;li>Join our monthly community meeting to see demos and hear the latest updates (join the &lt;a href="https://groups.google.com/g/radapp_io">Radius Google Group&lt;/a> to get email announcements)&lt;/li>
&lt;li>Join the discussion or ask for help on the &lt;a href="https://aka.ms/radius/discord">Radius Discord server&lt;/a>&lt;/li>
&lt;li>Subscribe to the &lt;a href="https://www.youtube.com/@radapp_io">Radius YouTube channel&lt;/a> for more demos&lt;/li>
&lt;/ul></description></item><item><title>Posts: Deploy your Radius applications to Azure Container Instances</title><link>https://blog.radapp.io/posts/2025/06/03/deploy-your-radius-applications-to-azure-container-instances/</link><pubDate>Tue, 03 Jun 2025 08:00:00 -0800</pubDate><guid>https://blog.radapp.io/posts/2025/06/03/deploy-your-radius-applications-to-azure-container-instances/</guid><description>
&lt;p>An important part of the Radius vision is to be platform agnostic, and that includes the underlying compute such that Radius can deploy the same application across different compute platforms. Thus, it&amp;rsquo;s always been a goal to support additional container runtimes beyond just Kubernetes. That&amp;rsquo;s why we&amp;rsquo;re excited to share that Radius now supports deploying your applications to additional container platforms, beginning with &lt;a href="https://docs.radapp.io/guides/author-apps/azure/azure-container-instances/">Azure Container Instances&lt;/a>. This integration provides Radius users with a serverless container compute option that enables platform engineers to build developer platforms that are decoupled from specific container runtimes while still benefiting from the Radius application-centric approach and separation of concerns.&lt;/p>
&lt;blockquote>
&lt;p>To see a demo of this feature, check out the recording of Mark Russinovich&amp;rsquo;s &lt;a href="https://youtu.be/lHBo_lDWFcI?si=U8KG05S2z-_MFkDh&amp;amp;t=2487">Inside Azure Innovations&lt;/a> session from the Microsoft Build 2025 event&lt;/p>
&lt;/blockquote>
&lt;p>In this post, we&amp;rsquo;ll walk through at a high-level how to deploy your Radius applications to Azure Container Instances, as well as explore specific details behind the integration. For a more detailed guide, check out the &lt;a href="https://docs.radapp.io/guides/author-apps/azure/azure-container-instances/">How-To: Deploy an Application to Azure Container Instances&lt;/a> guide in the Radius documentation.&lt;/p>
&lt;h2 id="what-is-azure-container-instances">What is Azure Container Instances?&lt;/h2>
&lt;p>Azure Container Instances (ACI) is a serverless container platform in Microsoft Azure that allows users to run containerized applications without managing underlying infrastructure, such as virtual machines or complex orchestration systems. It provides a lightweight, unopinionated compute environment where containers can be deployed quickly, starting in seconds, with configurable CPU and memory resources. ACI is well-suited for cloud-native applications, task automation, build jobs, or any scenario where a lightweight, fast-starting container is beneficial without the overhead of managing a full orchestration system. To learn more about ACI, check out the &lt;a href="https://learn.microsoft.com/en-us/azure/container-instances/">official documentation&lt;/a> from Azure.&lt;/p>
&lt;h2 id="why-aci-with-radius">Why ACI with Radius?&lt;/h2>
&lt;p>We chose to integrate ACI first because the Radius maintainers wanted the first expansion beyond Kubernetes to be into a serverless compute platform. Because ACI offers basic, unopinionated building blocks of compute, it provides us with more flexibility in building the integration in an extensible way that covers all the compute primitives available in Kubernetes today. Hopefully, this allows us to better learn how to model the extensibility of Radius core to pave the way for expansion into other container platforms like AWS Elastic Container Service and beyond, including into more opinionated or specialized compute offerings like Azure Functions or AWS Lambda.&lt;/p>
&lt;h2 id="deploying-to-aci-using-radius">Deploying to ACI using Radius&lt;/h2>
&lt;blockquote>
&lt;p>Note: This section provides a high-level overview of the deployment process. For a step-by-step guide, see the &lt;a href="https://docs.radapp.io/guides/author-apps/azure/azure-container-instances/">How-To: Deploy an Application to Azure Container Instances&lt;/a> guide in the Radius documentation.&lt;/p>
&lt;/blockquote>
&lt;p>To deploy your Radius applications to ACI, you&amp;rsquo;ll first need to ensure you have an Azure provider configured and registered with your Radius control plane. If you haven&amp;rsquo;t set up Radius yet, you can install it using the rad CLI and connect it to your Azure subscription. For detailed instructions, refer to the &lt;a href="https://docs.radapp.io/guides/operations/kubernetes/install/">Radius installation&lt;/a> and &lt;a href="https://docs.radapp.io/guides/operations/providers/azure-provider/">Azure provider&lt;/a> guides.&lt;/p>
&lt;h3 id="create-an-aci-environment">Create an ACI environment&lt;/h3>
&lt;p>Once your Azure provider is set up, you can create a Radius Environment that is configured to ACI for its underlying compute. This environment will be the deployment target for your applications bound for ACI. Creating the ACI environment is the same as creating any other environment in Radius, except that you&amp;rsquo;ll specify ACI as the compute platform along with other needed configurations in the environment definition file, for example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bicep" data-lang="bicep">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">resource&lt;/span> env &lt;span style="color:#e6db74">&amp;#39;Applications.Core/environments@2023-10-01-preview&amp;#39;&lt;/span> = {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name: &lt;span style="color:#e6db74">&amp;#39;aci-demo&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> properties: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> compute: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> kind: &lt;span style="color:#e6db74">&amp;#39;aci&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Replace value with your resource group ID&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> resourceGroup: &lt;span style="color:#e6db74">&amp;#39;/subscriptions/&amp;lt;&amp;gt;/resourceGroups/&amp;lt;&amp;gt;&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> identity: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> kind:&lt;span style="color:#e6db74">&amp;#39;userAssigned&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Replace value with your managed identity resource ID&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> managedIdentity: [&lt;span style="color:#e6db74">&amp;#39;/subscriptions/&amp;lt;&amp;gt;/resourceGroups/&amp;lt;&amp;gt;/providers/Microsoft.ManagedIdentity/userAssignedIdentities/&amp;lt;&amp;gt;&amp;#39;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> providers: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> azure: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Replace value with your resource group ID&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> scope: &lt;span style="color:#e6db74">&amp;#39;/subscriptions/&amp;lt;&amp;gt;/resourceGroups/&amp;lt;&amp;gt;&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>Note that a &lt;a href="https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/">managed identity&lt;/a> is required for ACI deployments. If you choose to utilize a &lt;a href="https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-manage-user-assigned-managed-identities?pivots=identity-mi-methods-azp">user-assigned managed identity&lt;/a>, then you need to ensure it is assigned to the &lt;code>Contributor&lt;/code> and &lt;code>Azure Container Instances Contributor&lt;/code> roles on the subscription and resource group where the ACI containers will be deployed.&lt;/p>
&lt;/blockquote>
&lt;p>Then, just like any other Radius environment, you deploy this ACI environment using the &lt;code>rad deploy&lt;/code> command. When Radius creates and deploys the environment, it will provision the relevant Azure resources required to host your applications in ACI, including the virtual network, internal load balancer, and network security group.&lt;/p>
&lt;img src="https://blog.radapp.io/posts/2025/06/03/deploy-your-radius-applications-to-azure-container-instances/images/azure-portal-env.png" width="600">
&lt;h3 id="define-and-deploy-your-application">Define and deploy your application&lt;/h3>
&lt;p>With your environment ready, you can proceed to deploy your application to ACI without changing how you define your applications in Radius. Your Radius application definition includes your container specifications, environment variables, and any required connections to other resources. The beauty of Radius is that the application definitions remain consistent regardless of whether you&amp;rsquo;re targeting Kubernetes or ACI.&lt;/p>
&lt;p>Once your application is defined, you can deploy it using the &lt;code>rad deploy&lt;/code> command, specifying ACI as your target platform.&lt;/p>
&lt;p>For example, if you have an application defined in a Bicep file named &lt;code>app.bicep&lt;/code>, you can deploy it to your ACI environment like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>rad deploy ./app.bicep --environment aci-demo
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Alternatively, if you have a workspace set up for ACI, you can deploy your application using the workspace flag:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>rad deploy ./app.bicep --workspace aci-workspace
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Once your deployment completes, you can run the &lt;code>rad app graph&lt;/code> command in your terminal to view resources that were provisioned for your application:&lt;/p>
&lt;pre tabindex="0">&lt;code>Displaying application: demo-app
Name: frontend (Applications.Core/containers)
Connections:
gateway (Applications.Core/gateways) -&amp;gt; frontend
frontend -&amp;gt; database (Applications.Datastores/redisCaches)
Resources:
frontend (Microsoft.ContainerInstance/containerGroupProfiles)
frontend (Microsoft.ContainerInstance/nGroups)
frontend (Microsoft.Network/loadBalancers/applications)
frontend (Microsoft.Network/virtualNetworks/subnets)
Name: gateway (Applications.Core/gateways)
Connections:
gateway -&amp;gt; frontend (Applications.Core/containers)
Resources:
gateway (Microsoft.Network/applicationGateways)
gateway-nsg (Microsoft.Network/networkSecurityGroups)
gateway (Microsoft.Network/publicIPAddresses)
gateway (Microsoft.Network/virtualNetworks/subnets)
Name: database (Applications.Datastores/redisCaches)
Connections:
frontend (Applications.Core/containers) -&amp;gt; database
Resources:
cache-vxkt2iou25nht (Microsoft.Cache/redis)
&lt;/code>&lt;/pre>&lt;p>The entire process leverages Radius&amp;rsquo;s application-centric approach, allowing you to focus on defining what your application needs rather than the underlying infrastructure details specific to ACI.&lt;/p>
&lt;h2 id="how-it-works">How it works&lt;/h2>
&lt;p>Currently, ACI support is hardcoded as imperative Go code in the Radius core codebase, including the API, Recipes, data model, and other components. The Environment and Container resource schemas were updated to include ACI-specific properties. If you&amp;rsquo;re interested in diving deeper into the implementation details, you can refer to the code changes in &lt;a href="https://github.com/radius-project/radius/pull/9436">PR #9436&lt;/a>.&lt;/p>
&lt;h3 id="aci-ngroups">ACI NGroups&lt;/h3>
&lt;p>The Radius integration leverages the &lt;a href="https://learn.microsoft.com/en-us/azure/container-instances/container-instance-ngroups/container-instances-about-ngroups">ACI NGroups functionality&lt;/a>, which provides a single NGroups API call to create and maintain N number of container instances using a common template. This type of orchestration capability made it possible to build the integration necessary to enable deployment of application containers and NGroups resources to ACI using Radius.&lt;/p>
&lt;h3 id="azure-resources-provisioned-by-radius">Azure resources provisioned by Radius&lt;/h3>
&lt;p>Behind the scenes, Radius handles the translation of your application model into the appropriate Azure resources, including container groups and networking components, and provisions them accordingly on your behalf:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Load balancer&lt;/strong>: ACI requires an internal load balancer to manage traffic to the container instances. Radius provisions a load balancer that routes traffic to your application containers.&lt;/li>
&lt;li>&lt;strong>Virtual Network&lt;/strong>: ACI requires a virtual network for networking and security. Radius provisions a virtual network and subnet for your ACI deployments.&lt;/li>
&lt;li>&lt;strong>Network Security Group&lt;/strong>: ACI deployments require a network security group to control inbound and outbound traffic. Radius creates a security group with appropriate rules based on your application requirements.&lt;/li>
&lt;li>&lt;strong>Container Group Profiles&lt;/strong>: ACI supports container group profiles, which allow you to define common settings for multiple container groups. Radius sets up these profiles based on your application definitions, enabling consistent configurations across deployments.&lt;/li>
&lt;li>&lt;strong>Container NGroups&lt;/strong>: Radius creates container NGroups to manage multiple instances of your application containers.&lt;/li>
&lt;li>&lt;strong>Container Instances&lt;/strong>: The actual container instances are created based on your application definitions, including the container images, environment variables, and resource requirements.&lt;/li>
&lt;/ul>
&lt;p>
&lt;img src="https://blog.radapp.io/posts/2025/06/03/deploy-your-radius-applications-to-azure-container-instances/images/azure-portal-app.png" width="600">
&lt;br>&lt;/p>
&lt;h2 id="whats-next">What&amp;rsquo;s Next?&lt;/h2>
&lt;p>This initial release of ACI support in Radius is just the beginning. The vision is to implement a compute platform extensibility model that allows Radius to support additional container runtimes in a more lightweight, flexible, and declarative way in lieu of the current imperative code.&lt;/p>
&lt;p>To learn more about or provide feedback on this new compute platform extensibility model, check out the &lt;a href="https://github.com/radius-project/design-notes/pull/91">Compute Platform Extensibility design document&lt;/a> currently in progress.&lt;/p>
&lt;h3 id="redesigned-compute-platform-extensibility-model">Redesigned compute platform extensibility model&lt;/h3>
&lt;p>With the way ACI integration is currently implemented through imperative code, it is not readily extensible for other platforms. Expansion into each new platform requires intimate knowledge of the Radius codebase in order to make the necessary changes to support the new platform. To address this, we plan to refactor the ACI integration to make use of Radius extensibility features that leverage Radius &lt;a href="https://docs.radapp.io/guides/recipes/overview/">Recipes&lt;/a> to implement the ACI (and other platforms going forward) integration in a more declarative and extensible way.&lt;/p>
&lt;p>This new design will enable:&lt;/p>
&lt;ul>
&lt;li>Architectural separation of Radius core logic from platform provisioning code&lt;/li>
&lt;li>Community-provided extensions to support new compute platforms without Radius code changes&lt;/li>
&lt;li>Consistent platform engineering and developer experience across all resource types&lt;/li>
&lt;/ul>
&lt;h3 id="support-for-platform-specific-capabilities">Support for platform-specific capabilities&lt;/h3>
&lt;p>As a part of the new extensibility model, we plan to enable support for Radius users to access platform-specific capabilities in their applications. This means that while Radius will continue to provide a consistent application model across different platforms, users will also be able to leverage unique features of each platform when targeting deployments to applicable environments. For example, Radius users should be able to deploy to confidential containers when targeting the deployment to an ACI environment.&lt;/p>
&lt;h2 id="learn-more-and-contribute">Learn more and contribute&lt;/h2>
&lt;p>We would love for you to join us to help build Radius:&lt;/p>
&lt;ul>
&lt;li>Review and provide feedback on the &lt;a href="https://github.com/radius-project/design-notes/pull/91">Compute Platform Extensibility design document&lt;/a>&lt;/li>
&lt;li>Let us know what compute platforms you would like to see supported in Radius by commenting on the &lt;a href="https://github.com/orgs/radius-project/projects/8/views/1?pane=issue&amp;amp;itemId=113169343&amp;amp;issue=radius-project%7Croadmap%7C73">Compute Platform Extensibility roadmap item&lt;/a>&lt;/li>
&lt;li>Join our monthly community meeting to see demos and hear the latest updates (join the &lt;a href="https://groups.google.com/g/radapp_io">Radius Google Group&lt;/a> to get email announcements)&lt;/li>
&lt;li>Join the discussion or ask for help on the &lt;a href="https://aka.ms/radius/discord">Radius Discord server&lt;/a>&lt;/li>
&lt;li>Subscribe to the &lt;a href="https://www.youtube.com/@radapp_io">Radius YouTube channel&lt;/a> for more demos&lt;/li>
&lt;/ul></description></item><item><title>Posts: Platform Engineering : Integrating Radius into your GitOps Flux workflow</title><link>https://blog.radapp.io/posts/2025/05/20/platform-engineering-integrating-radius-into-your-gitops-flux-workflow/</link><pubDate>Tue, 20 May 2025 08:00:00 -0800</pubDate><guid>https://blog.radapp.io/posts/2025/05/20/platform-engineering-integrating-radius-into-your-gitops-flux-workflow/</guid><description>
&lt;p>GitOps is an approach to managing infrastructure and applications using Git as the single source of truth and has become quite popular in the DevOps and Platform Engineering disciplines. This approach provides several benefits - including declarative management of infrastructure definitions and auditable change logs. Radius fits nicely into this workflow, allowing you to define your applications and infrastructure with Radius and then use GitOps to deploy and manage them across your deployment platforms.&lt;/p>
&lt;p>Radius has built first-class support for &lt;a href="https://fluxcd.io/">Flux&lt;/a>, a GitOps tool designed to work with Kubernetes and provides a powerful set of features for managing applications and infrastructure through Git.&lt;/p>
&lt;p>In this post, we&amp;rsquo;ll explore how to deploy and manage Radius applications using Flux, how to integrate Radius into your GitOps workflow, and technical specifics on how this integration works. For a step-by-step integration guide for Radius and Flux, check out see &lt;a href="https://docs.radapp.io/guides/deploy-apps/gitops/howto-flux/">How-To: Set up Radius with Flux&lt;/a> in the Radius documentation.&lt;/p>
&lt;h2 id="overview-of-radius--flux">Overview of Radius + Flux&lt;/h2>
&lt;p>In a typical GitOps workflow using Flux, you would have one or more Git repositories that contain your application and infrastructure definitions. These definitions are Kubernetes manifests, Helm charts, or other formats that Flux can understand. When you make changes to these definitions in Git, Flux automatically detects the changes and applies them to your Kubernetes cluster.&lt;/p>
&lt;p>Since Radius aims to be deployment platform agnostic, its application and infrastructure definitions are written in Bicep and Terraform, which is not natively supported by Flux. However, the first-class integration we have built brings the needed support in Flux to allow for defining applications and infrastructure with Radius, and then using Flux to deploy and manage them.&lt;/p>
&lt;h2 id="using-radius-with-flux">Using Radius with Flux&lt;/h2>
&lt;p>Note: This section is a high-level overview of the integration. For a step-by-step guide, see &lt;a href="https://docs.radapp.io/guides/deploy-apps/gitops/howto-flux/">How-To: Set up Radius with Flux&lt;/a> in the Radius documentation.&lt;/p>
&lt;p>As with any GitOps workflow, you will need to set up a Git repository that contains your application and infrastructure definitions. To enable Radius in this workflow, you will also need to include a &lt;code>radius-gitops-config.yaml&lt;/code> file in the root of your repository. Radius applications and infrastructure are defined using a root Bicep file, so the &lt;code>radius-gitops-config.yaml&lt;/code> file will contain a list of Bicep files that define your applications and infrastructure:&lt;/p>
&lt;h3 id="radius-gitops-configyaml">radius-gitops-config.yaml&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">todolist.bicep&lt;/span> &lt;span style="color:#75715e"># The name of the Bicep file that defines your application&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">params: todolist.bicepparam # Optional&lt;/span>: &lt;span style="color:#ae81ff">Parameter file for the Bicep file&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">resourceGroup: default # Optional&lt;/span>: &lt;span style="color:#ae81ff">The Radius resource group to deploy the resources to&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">namespace: todolist-app # Optional&lt;/span>: &lt;span style="color:#ae81ff">The Kubernetes namespace to deploy the resources to&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">anotherbicepfile.bicep&lt;/span> &lt;span style="color:#75715e"># Can optionally specify multiple Bicep files to deploy and manage.&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="configuring-flux">Configuring Flux&lt;/h3>
&lt;p>Aside from the &lt;code>radius-gitops-config.yaml&lt;/code> file, everything else can stay the same as a typical Flux setup. You will need to set up a Git repository and configure Flux to watch that repository. You can do this using the Flux CLI or by applying the necessary Kubernetes manifests.&lt;/p>
&lt;p>Note: When installing Flux using the &lt;code>flux bootstrap&lt;/code> or &lt;code>flux install&lt;/code> commands, ensure that the &lt;code>--network-policy false&lt;/code> flag is specified for testing, or that the network policy is configured to allow access from &lt;code>radius-system&lt;/code> namespace to the source controller. For more information on the network policy, see the &lt;a href="https://fluxcd.io/flux/installation/configuration/optional-components/#network-policies">Flux documentation&lt;/a>.&lt;/p>
&lt;h3 id="configuring-radius">Configuring Radius&lt;/h3>
&lt;p>The Flux integration with Radius is built into the Radius control plane. Everything is configured automatically when you create a &lt;code>GitRepository&lt;/code> resource in your cluster. The Radius Flux controller will watch for changes to the &lt;code>GitRepository&lt;/code> resources and trigger the necessary actions in Radius. Any changes to the files in the repository will be detected by Flux, and then Radius will create, update, or delete the necessary resources in the cluster. Now you can use Radius to define your applications and infrastructure, and then use Flux to deploy and manage them on Kubernetes.&lt;/p>
&lt;img src="https://blog.radapp.io/posts/2025/05/20/platform-engineering-integrating-radius-into-your-gitops-flux-workflow/images/radius-flux-highlevel.png" width="800">
&lt;h2 id="how-does-this-work">How does this work?&lt;/h2>
&lt;p>To enable this integration, we have built new Kubernetes controllers that work together to watch for changes in the Git repository and trigger the necessary actions in Radius. These new controllers are built into Radius — you do not have to configure anything other than placing the &lt;code>radius-gitops-config.yaml&lt;/code> file in your repository root.&lt;/p>
&lt;h3 id="radius-flux-controller">Radius Flux Controller&lt;/h3>
&lt;p>The &lt;strong>Radius Flux Controller&lt;/strong> [&lt;a href="https://github.com/radius-project/radius/blob/main/pkg/controller/reconciler/flux_controller.go">Code&lt;/a>] [&lt;a href="https://github.com/radius-project/design-notes/blob/main/tools/2025-01-gitops-technical-design.md">Design&lt;/a>] watches Flux &lt;code>GitRepository&lt;/code> resources on the cluster. When a new &lt;code>GitRepository&lt;/code> resource is created, the controller will read the contents of the repository. If it contains a &lt;code>radius-gitops-config.yaml&lt;/code> file, the controller will parse the file and create a new &lt;code>DeploymentTemplate&lt;/code> resource for each application defined in the &lt;code>radius-gitops-config.yaml&lt;/code> file. &lt;code>DeploymentTemplate&lt;/code> resources are a new resource type that we have created to represent the deployment of a Radius application.&lt;/p>
&lt;h3 id="deploymenttemplate-controller">DeploymentTemplate Controller&lt;/h3>
&lt;p>The &lt;strong>DeploymentTemplate Controller&lt;/strong> [&lt;a href="https://github.com/radius-project/radius/blob/main/pkg/controller/reconciler/deploymenttemplate_reconciler.go">Code&lt;/a>] [&lt;a href="https://github.com/radius-project/design-notes/blob/main/architecture/2024-10-deploymenttemplate-controller.md">Design&lt;/a>] watches for changes to &lt;code>DeploymentTemplate&lt;/code> resources. When a &lt;code>DeploymentTemplate&lt;/code> resource is created, updated, or deleted, the controller will submit the necessary operations and data to the Radius control plane to create, update, or delete the application and its resources.&lt;/p>
&lt;h2 id="extensibility">Extensibility&lt;/h2>
&lt;p>The design of this feature in Radius is intentionally pluggable to allow for future extensibility. We have built the first-class support for Flux first, but the design allows for other GitOps tools to be integrated in the future.&lt;/p>
&lt;h3 id="argocd">ArgoCD&lt;/h3>
&lt;p>Similar to Flux, &lt;a href="https://argo-cd.readthedocs.io/en/stable/">ArgoCD&lt;/a> is another popular GitOps tool for Kubernetes. The design of the Radius GitOps integration allows for ArgoCD to be integrated in the future. We have a &lt;a href="https://github.com/radius-project/radius/issues/6942">GitHub issue&lt;/a> open to track the progress of this integration, so if you are interested in this work or would like to contribute, please feel free to comment on the issue.&lt;/p>
&lt;p>Using the existing design, ArgoCD could integrate with Radius in a similar way to Flux. ArgoCD would watch for changes to the remote Git repository, and some replacement for the &lt;code>radius-flux-controller&lt;/code> would be responsible for creating and updating the &lt;code>DeploymentTemplate&lt;/code> resources in the cluster. As long as this &lt;code>DeploymentTemplate&lt;/code> resources is created and updated when the Git repository changes, Radius will handle the rest of the deployment process.&lt;/p>
&lt;p>One idea is to use ArgoCD&amp;rsquo;s &lt;a href="https://argo-cd.readthedocs.io/en/stable/operator-manual/config-management-plugins/">Config Management Plugins&lt;/a> to watch for &lt;code>radius-gitops-config.yaml&lt;/code> files in the Git repository. When a new &lt;code>radius-gitops-config.yaml&lt;/code> file is detected, ArgoCD would create a new &lt;code>DeploymentTemplate&lt;/code> resource in the cluster. This would allow for a similar integration to the one we have built for Flux. We would love to hear your thoughts on this idea, so please feel free to comment on the &lt;a href="https://github.com/radius-project/radius/issues/6942">GitHub issue&lt;/a>, and come join us and contribute if it interests you!&lt;/p>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>Integrating Radius into your GitOps workflow brings out the best of both worlds: the power of Radius for defining and managing applications and infrastructure, and the benefits of GitOps for managing those definitions in a declarative and auditable way. This integration allows you to use Radius to define your applications and infrastructure, and then use Flux to deploy and manage them on Kubernetes.&lt;/p>
&lt;p>For more detailed information and step-by-step guides, refer to &lt;a href="https://docs.radapp.io/guides/deploy-apps/gitops/howto-flux/">How-To: Set up Radius with Flux&lt;/a> in the Radius documentation.&lt;/p>
&lt;h2 id="learn-more-and-contribute">Learn More and Contribute&lt;/h2>
&lt;p>The Radius maintainers are excited to continue collaborating with the open-source community to grow its feature set and welcome all contributions from the community.&lt;/p>
&lt;p>We&amp;rsquo;re looking for people to join us! To get started with Radius today, please see:&lt;/p>
&lt;ul>
&lt;li>Start using Radius with the &lt;a href="https://docs.radapp.io/getting-started/">getting started guide&lt;/a>.&lt;/li>
&lt;li>Explore the open-source &lt;a href="https://github.com/radius-project">code repositories&lt;/a>.&lt;/li>
&lt;li>Engage with the &lt;a href="https://aka.ms/radius/discord">community&lt;/a>.&lt;/li>
&lt;/ul></description></item><item><title>Posts: Platform Engineering with Radius to build application-centric IDPs</title><link>https://blog.radapp.io/posts/2025/05/13/platform-engineering-with-radius-to-build-application-centric-idps/</link><pubDate>Tue, 13 May 2025 00:00:00 -0800</pubDate><guid>https://blog.radapp.io/posts/2025/05/13/platform-engineering-with-radius-to-build-application-centric-idps/</guid><description>
&lt;p>Very early in my career I worked on a long-forgotten system called the HP-3000. I wrote batch processing applications in Pascal to process financial transactions. Then I transitioned to being a web application developer. Moving from the world where each batch application had a single executable and maybe a few shared libraries to the world of web applications was a big change. I remember trying to wrap my head around how it all worked. There were so many different applications all communicating with other applications. Of course, I quickly learned that it was a simple model-view-controller pattern, and the application was just a collection of binaries and HTML templates.&lt;/p>
&lt;p>Roll forward twenty-five years and developers today have the same experience, just on steroids. Cloud-native applications are composed of so many resources—containers, pods, services, databases, message queues, blob storage, secrets, and so on. And of course if you look at the cloud infrastructure needed to host these applications, it gets incredibly complex very quickly.&lt;/p>
&lt;p>When I look at the AWS console or a resource group in the Azure portal, I most definitely do not see anything resembling what I would traditionally consider an application. For example, here is what the Azure portal looks like after deploying a moderately complex application, &lt;a href="https://github.com/finos/traderX/tree/main">TraderX&lt;/a>.&lt;/p>
&lt;p>&lt;img src="images/screenshot2.png" alt="azure-portal">&lt;/p>
&lt;p>I see lots of stuff TraderX depends upon, but where is the TraderX application? Maybe the cool new Kubernetes GUI, &lt;a href="https://headlamp.dev/">Headlamp&lt;/a>, will give us a better view of my application?&lt;/p>
&lt;p>&lt;img src="images/screenshot1.png" alt="aws-console">&lt;/p>
&lt;p>Even on the Workloads tab, there is no application. I would show you the AWS console, but you all know what that&amp;rsquo;s going to be like. As time goes on and technology progresses our applications have become more complex, more distributed, and harder to define.&lt;/p>
&lt;p>Compounding this trend, the platforms we use to run our applications have also gotten more complex, more distributed, and less easy to define. Modern cloud platforms including AWS, Azure, Google Cloud, and Kubernetes were built bottom-up and infrastructure centric. But developers build applications top-down and user centric.&lt;/p>
&lt;p>What if, instead of seeing infrastructure components in your cloud console, or Kubernetes Pods and Services, we had a console that showed developers and operators their &lt;em>applications&lt;/em>?&lt;/p>
&lt;p>&lt;img src="images/traderx.png" alt="traders">&lt;/p>
&lt;p>That&amp;rsquo;s why we built Radius: To make it easy for Platform Engineers to ensure their IDPs give developers and operators a more application-centric experience.&lt;/p>
&lt;p>Radius provides platform engineers an open-source, cloud agnostic, application platform. Radius can be integrated into internal developer platforms (IDPs) to give developers a more application centric experience. For more context regarding how Radius relates to other open-source projects used by platform engineers, please see &lt;a href="https://blog.radapp.io/posts/2025/04/24/platform-engineering-with-radius-at-kubecon-london-2025/.">Platform Engineering with Radius at KubeCon London 2025&lt;/a>&lt;/p>
&lt;h2 id="application-centric-developer-experience-with-radius">Application Centric Developer Experience with Radius&lt;/h2>
&lt;p>Let’s take a look at the specifics of the application-centric developer experience when creating a Radius application. Radius provides an application-centric experience in two basic ways:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Radius allows developers to focus entirely on their application without intermingling cloud infrastructure concepts within their application. Specifically, Radius enables defining an application once and deploying it across clouds (private cloud, AWS, Azure), without the developer having to understand the nuances of each. Radius also provides consistent syntax for defining application resources whether they run in the cloud (like AWS MemoryDB) or on Kubernetes (like a frontend container).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>An output of every Radius application deployment is an application graph, just like the graph of the TraderX app shown above. So, the developer and other members of an enterprise application team all understand exactly what the application is, all of it’s software and infrastructure components sand how they are all connected. The graph makes very clear what the application is and all of its component dependencies.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>To better understand this application-centric experience, imagine you are an enterprise application developer very familiar with writing and containerizing runtime application code but not familiar with cloud infrastructure deployment and configuration. You want to just describe your application and deploy it to whatever cloud your company prefers, whether private-cloud, AWS or Azure. To provide this experience in a real-world scenario, your infrastructure operator would configure your Radius environment to enable the following developer experience. More on this later. For now, we’ll just walk through a simple example that you can try out yourself at the &lt;a href="https://docs.radapp.io/getting-started">Radius Getting Started Guide&lt;/a>.&lt;/p>
&lt;p>We’ll start with the description of a very simple ToDo list application that includes only two resources: a frontend container and a Redis cache. These resource types are both natively supported in Radius. (In a future post, we’ll explain how to extend Radius by adding your own custom resource types). Here&amp;rsquo;s the Radius application description, which is written in the Bicep language:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bicep" data-lang="bicep">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">//This is a Radius application file named app.bicep.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Import the set of Radius resources (Applications.*) into Bicep&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>extension radius
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>@&lt;span style="color:#a6e22e">description&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;The app ID of your Radius Application. Set automatically by the rad CLI.&amp;#39;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">param&lt;/span> application &lt;span style="color:#a6e22e">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">//This is a frontend container named &amp;#39;demo&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">resource&lt;/span> demo &lt;span style="color:#e6db74">&amp;#39;Applications.Core/containers@2023-10-01-preview&amp;#39;&lt;/span> = {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name: &lt;span style="color:#e6db74">&amp;#39;demo&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> properties: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> application: application
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> container: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> image: &lt;span style="color:#e6db74">&amp;#39;ghcr.io/radius-project/samples/demo:latest&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ports: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> web: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> containerPort: 3000
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">//The following connection makes it easy to connect this frontend container &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// to the database defined further below&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> connections: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> redis: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> source: db.id
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">param&lt;/span> &lt;span style="color:#a6e22e">environment&lt;/span> &lt;span style="color:#a6e22e">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">//This is the definition of the database resource, named &amp;#39;db&amp;#39;.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">//It is a Redis cache, which is a type of datastore.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">resource&lt;/span> db &lt;span style="color:#e6db74">&amp;#39;Applications.Datastores/redisCaches@2023-10-01-preview&amp;#39;&lt;/span> = {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name: &lt;span style="color:#e6db74">&amp;#39;db&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> properties: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> application: application
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> environment: &lt;span style="color:#a6e22e">environment&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can see the frontend container (&lt;code>demo&lt;/code>) in this application is created using the &lt;code>resource&lt;/code> key word, which just tells Radius to create an application resource, in this case one of type container. This container has only a few parameters, including a container image file and a container port. The container also includes a Radius “connection,” which is a powerful feature. Connections enable Radius to do a lot of work behind the scenes for the developer, including showing explicit connections in an application graph, like the TraderX application graph pictured above. With connections, Radius also automatically injects details like connection strings and credentials into the container as environment variables. This tells the container how to connect to Redis no matter where Redis is deployed (on-premise, on AWS or on Azure) so the developer doesn’t have to grapple with all of these details.&lt;/p>
&lt;p>It&amp;rsquo;s also very easy for the developer to add a database to this application. The developer creates a resource named &lt;code>db&lt;/code> of type redisCaches with only an application and an environment parameter. Per the connection defined in the frontend container above, &lt;code>db&lt;/code> is explicitly connected to the frontend container, &lt;code>demo&lt;/code>. Notice that even though the container is a kubernetes specific resource and redis is a service that can run in any cloud environment, the syntax for creating both the container and the Redis cache is consistent.&lt;/p>
&lt;p>That’s it! Your first Radius application is ready to deploy!
But, before we look at the deployment experience, let’s pause to highlight some things you do &lt;em>not&lt;/em> see in this Radius application definition: Beyond creating a redis resource named &lt;code>db&lt;/code>, there are no infrastructure details. As a developer, you are not concerned about how Redis is configured and deployed, how your application will authenticate to Redis, how Redis connects to your frontend container, or even where Redis will ultimately run (on-premise, AWS or Azure). You just say you need Redis and you need it connected to your frontend container, and Radius uses a feature called &lt;a href="https://docs.radapp.io/guides/recipes/overview/">Recipes&lt;/a> to do the rest. That’s a big reason for why we say Radius provides an application centric experience: Developers focus entirely on their applications, not on the details of underlying infrastructure deployment and configuration.&lt;/p>
&lt;p>Now, here’s the deployment experience using the Radius CLI. (In a real world scenario, Radius application deployments would more likely happen via a GitOps tool like Flux or ArgoCD. We’ll discuss Radius integration with GitOps tools in a future post). To deploy this application to, say, your default local environment, from the rad CLI, you would run&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>rad run app.bicep
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The run command deploys the application and it sets up port forwarding so you can:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Browse the applications graph at &lt;a href="https://localhost:7007">https://localhost:7007&lt;/a>, which is a Backstage based Dashboard that allows you to browse all the details of your Radius application. The application graph is created every time you deploy a Radius application. So, you can always easily see the application you deployed, the resources that make up that application, including all of its dependent infrastructure.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Browse the actual running application at &lt;a href="https://localhost:3000">https://localhost:3000&lt;/a>.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>Let’s first take a look at the application graph at &lt;a href="https://localhost:7007">https://localhost:7007&lt;/a>.&lt;/p>
&lt;p>&lt;img src="images/RadiusAppGraph.png" alt="Application Graph">&lt;/p>
&lt;p>This application graph shows only two nodes: the frontend container and the Redis cache defined in the &lt;code>app.bicep&lt;/code> file above. The two resources are explicitly connected to each other per the &lt;code>connection&lt;/code> property discussed above. Radius application graphs are as simple or as rich as the application they describe, as we saw in the TraderX application graph above. Regardless, the graph makes it trivial to visualize any application you have deployed, which contributes to a more application-centric experience for developers and their operator and SRE counterparts.&lt;/p>
&lt;p>Navigating to the actual running application at &lt;a href="https://localhost:3000">https://localhost:3000&lt;/a>, we see&lt;/p>
&lt;p>&lt;img src="images/RadiusToDolistApp.png" alt="Application Graph">&lt;/p>
&lt;p>The ToDo list application has a Container Info tab that shows all of the environment variables Radius automatically created inside of the container based on the &lt;code>connection&lt;/code> property in the Radius application description. When writing this Radius application, the developer was focused on declaring the intent to have the frontend container and the Redis connected but then Radius took care of these connection details behind the scenes.&lt;/p>
&lt;p>Lastly, let’s take a look at the deployment experience for deploying the same todo list application to Amazon Web Services and Azure. This experience is completely consistent with the local deployment above, the developer just changes the target Radius environment for the application deployment. Above the target was a default local environment. Below assumes your Radius environment for Amazon Web Services is named aws, and your environment for Azure is named azure.&lt;/p>
&lt;p>To deploy the application unchanged to AWS you would run&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>rad deploy app.bicep --environment aws
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>To deploy the application unchanged to Azure you would run&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>rad deploy app.bicep --environment azure
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>In both cases, the application is deployed to the target cloud environment without the developer having to make environment specific changes to the application description.&lt;/p>
&lt;h2 id="recipes">Recipes&lt;/h2>
&lt;p>The application-centric experience described above is largely enabled by a Radius feature called &lt;a href="https://docs.radapp.io/guides/recipes/overview/">Recipes&lt;/a>. In a future post, we’ll explain Recipes (which are written in either Terraform or Bicep), how they enable the developer experience described above and how they are authored by infrastructure operators.&lt;/p>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>Radius is an open source, cloud agnostic application platform that you can integrate into your internal developer platform (IDP) to provide an application centric experience for your developers. Radius enables app-centricity in two basic ways:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Radius allows developers to focus entirely on their application without intermingling cloud infrastructure concepts within their application. Specifically, Radius enables defining an application once and deploying it across clouds (private cloud, AWS, Azure), without the developer having to understand the nuances of each. Radius also provides consistent syntax for defining application resources whether they run in the cloud (like AWS MemoryDB) or on Kubernetes (like a frontend container).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>An output of every Radius application deployment is an application graph, just like the graph of the TraderX app shown above. So, the developer and other members of an enterprise application team all understand exactly what the application is, all of it’s software and infrastructure components sand how they are all connected. The graph makes very clear what the application is and all of its component dependencies.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>To replicate the steps for deploying the simple Radius discussed above, please try the &lt;a href="https://docs.radapp.io/getting-started">Radius Getting Started Guide&lt;/a>.&lt;/p>
&lt;h2 id="learn-more-and-contribute">Learn More and Contribute&lt;/h2>
&lt;p>If you are a platform engineer, we invite you to try using Radius in your internal developer platform to provide a more application centric experience.
We also invite everyone in the open source community to get involved with the Radius project. Your perspective and contributions are immensely valuable.&lt;/p>
&lt;ul>
&lt;li>Join our monthly community meeting to see demos and hear the latest updates (join the &lt;a href="https://groups.google.com/g/radapp_io">Radius Google Group&lt;/a> to get email announcements)&lt;/li>
&lt;li>Join the discussion or ask for help on the &lt;a href="https://aka.ms/radius/discord">Radius Discord server&lt;/a>&lt;/li>
&lt;li>Subscribe to the &lt;a href="https://www.youtube.com/@radapp_io">Radius YouTube channel&lt;/a> for more demos&lt;/li>
&lt;/ul></description></item><item><title>Posts: Platform engineering with Radius at KubeCon London 2025</title><link>https://blog.radapp.io/posts/2025/04/24/platform-engineering-with-radius-at-kubecon-london-2025/</link><pubDate>Thu, 24 Apr 2025 08:00:00 -0800</pubDate><guid>https://blog.radapp.io/posts/2025/04/24/platform-engineering-with-radius-at-kubecon-london-2025/</guid><description>
&lt;p>I had a great time at KubeCon London earlier this month presenting and demoing Radius and meeting members of the Radius community! Thanks to everyone for taking time to stop by and chat. It was very fun to meet so many community members in person versus over video conference. 😊&lt;/p>
&lt;p>Anyone familiar with Radius will know that platform engineers have become the primary focus for the maintainers. That’s because so many Radius early adopters are platform engineering teams who are integrating Radius into their internal developer platforms (IDPs). A great example is &lt;a href="https://www.linkedin.com/in/nunoguedes">Nuno Guedes&lt;/a> and his platform engineering team at &lt;a href="https://www.millenniumbcp.pt/">Millennium bcp&lt;/a> (the largest private bank in Portugal). The Millennium bcp team has integrated Radius into their IDP and have been using it in production since December 2024. Nuno is the head of cloud at Millennium bcp and he and I co-presented on his use of Radius at KubeCon London. To learn more about how the Millennium bcp team is using Radius in their IDP, please check out our joint presentation &lt;em>How Millennium bcp Leverages Radius to Empower Developer + Operator Collaboration&lt;/em> (&lt;a href="https://www.youtube.com/watch?v=ZmcZlDCYDgE">CNCF YouTube channel&lt;/a> | &lt;a href="images/kubecon-london-radius-presentation.pdf">Slides from presentation&lt;/a>).&lt;/p>
&lt;p>Also please check out the &lt;a href="https://www.youtube.com/@radapp_io">Radius YouTube channel&lt;/a> where you can see the demos I show in the presentation:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;a href="https://youtu.be/gFTw2TDI80w">Demo 1 - Deploy a Radius Application Across on-premise and AWS&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=3zREEbewbVo">Demo 2 - Extending Radius with Resource Types&lt;/a>&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>A recurring theme from this presentation and many other conversations that I had at KubeCon is how Radius enables platform engineers to provide an application-centric experience through their IDPs. I have the good fortune to work with so many platform engineering teams from around the world. Those teams have taught me a ton about the problems they are solving via for enterprise application teams via custom IDPs, the challenges they face, and the increasingly rich ecosystem of open-source technologies they leverage in their day-to-day work. This diagram from CNOE (as snipped from the slide deck above) does a great job as a reference architecture including common open-source technologies used to build IDPs. Many platform teams use open-source technologies like Kubernetes for their compute platform, Terraform for infrastructure as code, Backstage as the UI framework for their developer portals, ArgoCD or Flux for GitOps workflows, etc.&lt;/p>
&lt;br>
&lt;img src="https://blog.radapp.io/posts/2025/04/24/platform-engineering-with-radius-at-kubecon-london-2025/images/cnoe.png" width="750">
&lt;br>&lt;br>
&lt;p>Radius maintainers, along with our platform engineering early adopters found common cause around an important concept and technology that is &lt;em>missing&lt;/em> in this landscape: the notion of what you can think of as an “application model,” or an “application platform.” That gap matters a lot, because developers live and breathe applications: It’s what they design, build, support. It’s what they reason about in their day-to-day work. But, in the world of distributed systems and cloud native technologies, it’s gotten increasingly difficult to reason about an application as an entity or even agree on what an application is and what its boundaries are. That ambiguity, in addition to the myriad challenges with cloud development, just further increases the cognitive load developers struggle with, which ironically is what IDPs are explicitly designed to reduce. Platform engineers require an open-source project to draw from, along with those illustrated above, that allows them to build an application-centric developer experience. That’s where Radius comes in: Radius is the application model platform engineers use to provide an application-centric developer experience integrated with other key open-source technologies used in their IDPs like Terraform, Flux, and Backstage.&lt;/p>
&lt;p>Radius is open-source (CNCF), it is cloud-agnostic and it allows you to create custom application resources tailored precisely to the needs of your developers.&lt;/p>
&lt;br>
&lt;img src="https://blog.radapp.io/posts/2025/04/24/platform-engineering-with-radius-at-kubecon-london-2025/images/cnoe&amp;#43;radius.png" width="750">
&lt;br>&lt;br>
&lt;p>Please watch the &lt;a href="https://www.youtube.com/watch?v=ZmcZlDCYDgE">KubeCon presentation from Millennium bcp&lt;/a> mentioned above. And watch this blog for future posts on how Radius is used by platform engineers in IDPs to:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Provide an application-centric experience for enterprise application developers&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Enable better collaboration across application developers and infrastructure operators&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Create custom Radius application resources and publish them to a Backstage catalog&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Deploy Radius application as part of GitOps workflows using Flux or ArgoCD&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Deploy the same Radius application, unchanged, across&lt;/p>
&lt;ul>
&lt;li>Clouds: on-premises, AWS, and Azure&lt;/li>
&lt;li>Runtimes: Kubernetes and serverless container runtimes like Azure Container Instances and AWS Elastic Container Services&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="learn-more-and-contribute">Learn More and Contribute&lt;/h2>
&lt;p>We would love for you to join us to help build Radius:&lt;/p>
&lt;ul>
&lt;li>Join our monthly community meeting to see demos and hear the latest updates (join the &lt;a href="https://groups.google.com/g/radapp_io">Radius Google Group&lt;/a> to get email announcements)&lt;/li>
&lt;li>Join the discussion or ask for help on the &lt;a href="https://aka.ms/radius/discord">Radius Discord server&lt;/a>&lt;/li>
&lt;li>Subscribe to the &lt;a href="https://www.youtube.com/@radapp_io">Radius YouTube channel&lt;/a> for more demos&lt;/li>
&lt;/ul></description></item><item><title>Posts: Radius feature roadmap update</title><link>https://blog.radapp.io/posts/2025/04/21/radius-feature-roadmap-update/</link><pubDate>Mon, 21 Apr 2025 08:00:00 -0800</pubDate><guid>https://blog.radapp.io/posts/2025/04/21/radius-feature-roadmap-update/</guid><description>
&lt;p>The Radius project maintainers would like to provide a progress update on our &lt;a href="https://aka.ms/radius-roadmap">feature roadmap&lt;/a> to share some of the features that have been released, what&amp;rsquo;s coming next, and how the community can help shape the future of Radius.&lt;/p>
&lt;p>We invite the community to provide feedback on our priorities to jointly grow and enhance Radius. Please bookmark the &lt;a href="https://aka.ms/radius-roadmap">&lt;strong>Radius roadmap&lt;/strong>&lt;/a> for updates on the full set of roadmap priorities.&lt;/p>
&lt;blockquote>
&lt;p>To see video demos of the latest Radius features, visit the &lt;a href="https://youtube.com/playlist?list=PLrZ6kld_pvgz8usAJCVqvUw5evfEzBCt-&amp;amp;si=0wPB_E43ktbMCc1i">Radius YouTube channel&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;img src="https://blog.radapp.io/posts/2025/04/21/radius-feature-roadmap-update/images/gh-roadmap.png" width="800">
&lt;h2 id="recent-progress">Recent progress&lt;/h2>
&lt;p>With early adopters of Radius being primarily platform engineers, GitOps support and the ability to create custom resource types are the two major feature requests. These have been part of the top priorities for Radius, with the recent release of Flux integration and custom resource types coming soon. In addition, Radius contributors have been hard at work in delivering other new features, including support for the Dapr Configuration building block. Other recent accomplishments include a new &lt;code>rad resource-type create&lt;/code> CLI command that introduces foundational primitives for resource extensibility, while preparations for migrating to PostgreSQL lay the groundwork for further improvements to the Radius data store. These updates reflect the collaborative efforts of the Radius community to drive innovation and usability.&lt;/p>
&lt;h3 id="support-for-gitops-using-flux">Support for GitOps using Flux&lt;/h3>
&lt;p>Radius now has integrated first-class support for &lt;a href="https://fluxcd.io/">Flux&lt;/a>, a popular GitOps tool. Flux is designed to work with Kubernetes and provides a set of features for managing applications and infrastructure through Git. To learn more, visit the &lt;a href="https://docs.radapp.io/guides/deploy-apps/gitops/overview/">Radius and GitOps overview&lt;/a> and &lt;a href="https://docs.radapp.io/guides/deploy-apps/gitops/howto-flux/">how-to guide for Radius + Flux&lt;/a>. You can also view a demo of the Flux features &lt;a href="https://youtu.be/l4t2Fj6oDI8?si=TMys4ccsGfdQsGj2">here&lt;/a>.&lt;/p>
&lt;h3 id="support-for-dapr-configuration-building-block">Support for Dapr Configuration Building Block&lt;/h3>
&lt;p>A new &lt;code>Applications.Dapr/configurationStores&lt;/code> resource type is now available to define and deploy the &lt;a href="https://docs.dapr.io/getting-started/quickstarts/configuration-quickstart/">Dapr Configuration&lt;/a> building block in Radius. The Dapr Configuration building block allows for dynamic configuration updates, including feature flag management, and is a great addition to the Dapr integration in Radius. To learn more, go to the &lt;a href="https://docs.radapp.io/reference/resource-schema/dapr-schema/configurationstore/">Dapr Configuration Store resource schema&lt;/a> in the Radius documentation. To see a demo of this feature, visit the Radius YouTube channel &lt;a href="https://youtu.be/5X7zNMX6J2c">here&lt;/a>.&lt;/p>
&lt;h3 id="rad-cli-command-for-creating-new-resource-types">rad CLI command for creating new resource types&lt;/h3>
&lt;p>We have added a CLI command &lt;code>rad resource-type create&lt;/code> to create new resource-types in Radius. This was added to enable resource extensibility in Radius. The end-to-end functionality of creating and deploying a custom user-defined resource type will be available in a future release. To learn more about these efforts, see the &lt;a href="https://github.com/radius-project/design-notes/blob/main/architecture/2024-07-user-defined-types.md">resource types extensibility technical design document&lt;/a>. For an early preview, check out the video demo for deploying custom resource types &lt;a href="https://youtu.be/3zREEbewbVo?si=Vsm5Dw6mZ5kOoKFJ">here&lt;/a>.&lt;/p>
&lt;h3 id="preparations-for-using-postgresql-as-the-radius-database">Preparations for using PostgreSQL as the Radius database&lt;/h3>
&lt;p>In the near future, the Radius data store will be migrated from etcd to a PostgreSQL database. In preparation for this, the Helm chart for installing Radius now includes deploying PostgreSQL to the Kubernetes cluster. You can follow the progress of moving the Radius data store in &lt;a href="https://github.com/radius-project/radius/issues/8398">this issue&lt;/a>.&lt;/p>
&lt;h2 id="upcoming-priorities">Upcoming priorities&lt;/h2>
&lt;p>Looking ahead, our feature focus will be on enhancing the extensibility of Radius, starting with the ability to create custom resource types and enabling compute platform portability into serverless container platforms. Scalability and operational improvements are also on the horizon, including control plane upgrades, support for external data stores, and ability to specify additional application configurations.&lt;/p>
&lt;h3 id="custom-resource-types">Custom resource types&lt;/h3>
&lt;p>Radius currently supports a set of &lt;a href="https://docs.radapp.io/guides/author-apps/portable-resources/overview/">built-in resource types&lt;/a> that you can define and deploy in your Radius application. Through &lt;a href="https://github.com/radius-project/roadmap/issues/14">custom resource types&lt;/a>, Radius will provide an extensibility model where the user can bring their own services or resources and integrate them with Radius. This will enable users to easily define and deploy their own resource types and leverage the other features of Radius such as Recipes and Application Graph to manage their complete suite of resources. Additionally, it will provide an avenue for the open-source community to publish custom resource types and Recipes as community supported assets.&lt;/p>
&lt;h3 id="serverless-container-platforms">Serverless container platforms&lt;/h3>
&lt;p>An important part of the Radius vision is to be not only cloud provider agnostic, but also container platform agnostic, and that includes the underlying compute such that Radius can deploy the same application across different compute platforms. Given the importance of serverless infrastructure in the modern application landscape, it is a priority for Radius to support &lt;a href="https://github.com/radius-project/roadmap/issues/23">serverless container platforms&lt;/a>, in addition to Kubernetes, as the underlying compute platform. Our first foray into this space will be to build support for Azure Container Instances as a compute provider. We wanted our first expansion beyond Kubernetes to be into a less opinionated platform that provides raw compute primitives which allows us to better learn how to model the extensibility of Radius. Our learnings will hopefully pave the way for further expansion including AWS Elastic Container Service and Azure Container Apps in the future.&lt;/p>
&lt;h3 id="control-plane-upgrades">Control plane upgrades&lt;/h3>
&lt;p>Today, Radius does not have a safe mechanism for upgrading from one release to another. This enhancement provides users the ability to &lt;a href="https://github.com/radius-project/roadmap/issues/52">upgrade from an existing installation&lt;/a> to a new release with safeguards in place like data backups, rolling upgrades to minimize downtime, and automatic rollback if something goes wrong with the upgrade. This is a critical feature for production deployments of Radius, and we are working to ensure that users can effortlessly upgrade their control plane installations without losing the stored state of their applications.&lt;/p>
&lt;h3 id="external-data-store">External data store&lt;/h3>
&lt;p>As mentioned above, preparations are underway for enabling the use of PostgreSQL as the Radius data store and implementation is ongoing. This will improve the resiliency of the Radius control plane and make upgrades easier. The technical design is &lt;a href="https://github.com/radius-project/roadmap/issues/49">here&lt;/a> if you&amp;rsquo;d like to read about or contribute to this effort.&lt;/p>
&lt;h3 id="additional-application-configurations">Additional application configurations&lt;/h3>
&lt;p>Incremental improvements to the application configuration experience in Radius are also in progress. These include the ability to &lt;a href="https://github.com/radius-project/roadmap/issues/56">specify application scaling behavior&lt;/a> (such as custom metrics for scaling and setting maximum number of replicas) and the ability to &lt;a href="https://github.com/radius-project/roadmap/issues/60">configure HTTP timeouts for gateways&lt;/a>. These are community-driven enhancements that will provide users with more control over their applications and improve the utility of Radius across a wider range of production scenarios.&lt;/p>
&lt;h2 id="learn-more-and-contribute">Learn more and contribute&lt;/h2>
&lt;p>All feedback and contributions are welcome! The community is encouraged to engage with the Radius project in the following ways:&lt;/p>
&lt;ul>
&lt;li>Provide feedback to influence roadmap decisions by commenting on and upvoting &lt;a href="https://aka.ms/radius-roadmap">existing items&lt;/a>&lt;/li>
&lt;li>Submit new &lt;a href="https://github.com/radius-project/radius/issues/new?assignees=&amp;amp;labels=feature&amp;amp;projects=&amp;amp;template=feature.md&amp;amp;title=%3CFEATURE+TITLE%3E">feature requests&lt;/a> to propose new functionality or other &lt;a href="https://github.com/radius-project/radius/issues/new/choose">issue reports&lt;/a>&lt;/li>
&lt;li>Review in-progress &lt;a href="https://github.com/radius-project/design-notes/pulls">designs&lt;/a> and &lt;a href="https://github.com/radius-project/radius/pulls">code&lt;/a>&lt;/li>
&lt;li>Contribute directly to fix &lt;a href="https://github.com/radius-project/radius/issues">open issues&lt;/a> and &lt;a href="https://github.com/radius-project/docs/issues">documentation&lt;/a>&lt;/li>
&lt;li>Engage with the Radius community via the &lt;a href="https://github.com/radius-project/community?tab=readme-ov-file#community-meetings">monthly community calls&lt;/a> and &lt;a href="https://aka.ms/radius/discord">Discord&lt;/a>&lt;/li>
&lt;/ul></description></item></channel></rss>