Resource Types
❗️ Preview Release: This documentation covers a preview of Radius which uses different Resource Types from the current release. Enable it by passing the --preview to the Radius CLI or settingRADIUS_PREVIEW=true.
Introduction
Resource Types define the schema for the resources developers use to model their applications—the properties you can configure, the values Radius returns, and the API versions each type supports. For a deeper explanation of what Resource Types are and how they abstract the underlying infrastructure, see the Resource Types concepts page.
All of the schema information on these pages is also available directly from your environment using rad resource-type list and rad resource-type show, as well as through the Radius Dashboard.
Out-of-the-box Resource Types
Radius provides two categories of out-of-the-box Resource Types:
Radius.Coretypes are built into Radius itself and provide its core API. These types are always present and are managed by Radius.- All other out-of-the-box types are maintained in the resource-types-contrib repository and installed as defaults. This community-maintained repository is the home for these Resource Types and their Recipes.
The following Resource Types are available out of the box. Every namespace except Radius.Core is defined in the defaults.yaml manifest and sourced from resource-types-contrib:
| Namespace | Resource Types |
|---|---|
Radius.Core | applications, environments, recipePacks, bicepSettings, terraformSettings |
Radius.Compute | containers, containerImages, persistentVolumes, routes |
Radius.Data | postgreSqlDatabases, mySqlDatabases, sqlServerDatabases, mongoDatabases, redisCaches |
Radius.Messaging | kafka, rabbitMQ |
Radius.AI | search, models |
Radius.Security | secrets |
Radius.Storage | objectStorage |
Because these types are pinned in a versioned manifest, the exact list can change between releases. Refer to defaults.yaml for the definitive set that ships with your version of Radius, or list the types registered in your installation with:
rad resource-type list
Defining a Resource Type
Custom Resource Types are defined in a YAML file. See How to create a custom Resource Type for a walkthrough, or the resource-types-contrib contribution guide to contribute a Resource Type and Recipe to the community library. A few conventions apply to every definition:
- Namespace groups related Resource Types and follows the
PrimaryName.SecondaryNameformat. Use a namespace that identifies your organization, such asMyCompany.Radius. TheRadius.prefix is reserved for built-in and resource-types-contrib types. - Type names are typically plural and camelCase, for example
externalServices. requiredlists the properties a developer must provide. Everything else is optional.readOnlyproperties are set by the Recipe as outputs after the resource is deployed.capabilitiesopts a Resource Type into optional Radius behaviors.ManualResourceProvisioningis currently the only supported capability. It tells Radius that the resource is not provisioned by a Recipe: Radius stores the properties the developer provides without running a Recipe to create backing infrastructure. Omitcapabilitiesfor Resource Types whose infrastructure is provisioned by a Recipe.
Supported property types
Every property must declare a type. Radius supports these types:
string: text values.integer: whole numbers.number: floating-point numbers.boolean:trueorfalse.array: a list of items of a single type.object: either a nested set ofproperties, or a map of key/value pairs declared withadditionalProperties. A single object cannot define bothpropertiesandadditionalProperties, andadditionalProperties: trueis not allowed, so provide a schema for the map’s values instead.
To restrict a property to a fixed set of values, add an enum, for example enum: ['basic', 'apiKey', 'jwt'].
Sensitive properties
Some resources need to store secrets such as API keys, passwords, or connection strings. Mark a property with the x-radius-sensitive annotation to have Radius protect it:
properties:
apiKey:
type: string
x-radius-sensitive: true
When a property is marked x-radius-sensitive: true, Radius:
- Never persists the plaintext on the resource. A value the developer supplies is encrypted in transit and redacted from the stored resource after provisioning. A value a Recipe returns as a secret is materialized into a separate Radius-managed
Radius.Security/secretsresource that the resource references by name; if the Resource Type declares nosecretsblock, the secret output is dropped rather than stored. - Redacts the value from reads, including
rad resource show, the Radius Dashboard, and the resource API. - Decrypts the value only in memory, such as when passing it to the resource’s Recipe.
The annotation has two constraints:
- It is only supported on
stringandobjectproperties, a limitation of the Bicep type system. - The property must declare an explicit
type.
Because Radius only decrypts sensitive values when running a Recipe, x-radius-sensitive is intended for Resource Types provisioned by a Recipe. For a Resource Type that uses ManualResourceProvisioning and has no Recipe, store secrets in a separate Radius.Security/secrets resource and reference it by ID instead.
How this section is organized
Resource Types are organized first by namespace (such as Radius.Core, Radius.Compute, and Radius.Data) and then by API version (for example, 2025-08-01-preview). Open a Resource Type to view its schema reference, which documents the resource’s properties, including which fields are required and read-only.
Feedback
Was this page helpful?
Glad to hear it! Please feel free to star our repo and join our Discord server to stay up to date with the project.
Sorry to hear that. If you would like to also contribute a suggestion visit and tell us how we can improve.