Announcing Radius v0.60.0
Today we're happy to announce the release of Radius v0.60.0. Check out the highlights below, along with the full changelog for more details.
We would like to extend our thanks to all the new and existing contributors who helped make this release possible!
Intro to Radius
If you're new to Radius, check out our website, radapp.io, for more information. Also visit our getting started guide to learn how to install Radius and create your first app.
Highlights
Preview release of fully extensible Resource Types
Radius v0.60 introduces preview versions of a new set of Resource Types under the Radius.* namespace. Radius.* Resource Types are completely recipe driven and fully customizable. These new Resource Types are available by using the --preview flag on common Radius CLI commands such as `rad init. For more details, visit the newly rewritten documentation at https://edge.docs.radapp.io/.
Direct IaC module support
Radius now enables users to use standard Bicep and Terraform modules, including Azure Verified Modules and Terraform Registry modules, directly as Recipes without creating and maintaining Radius-specific wrappers. This reduces the overhead of adopting existing production-ready infrastructure modules. Learn more at https://edge.docs.radapp.io/management/existing-recipes/#reference-an-existing-module.
Modernized internal hashing (SHA-1 to SHA-256)
Radius now uses SHA-256 instead of SHA-1 to generate internal resource identifiers, Terraform recipe state keys, ETags, and change-detection tokens. These hashes are used only for uniqueness and change detection - never for security.
This upgrade is transparent and requires no action. Your existing applications, environments, resources, and Terraform-recipe state are automatically recognized through a built-in compatibility layer. As a result of this change, nothing is redeployed, no pods are restarted, and no Terraform state is recreated.
A future release will complete the transition by migrating stored data fully to SHA-256 and removing the SHA-1 compatibility layer. That step will be automatic and called out in its own release notes. As always, upgrade one minor version at a time.
Breaking changes
There are no breaking changes in this release. The SHA-1 to SHA-256 hashing change described above is fully backward compatible - existing data is read through a compatibility fallback, and no customer action is required.
New contributors
Welcome to our new contributors who have merged their first PR in this release!
- @preko-p made their first contribution in #12070
- @gergo-hortobagyi made their first contribution in #12282
- @AzureMike made their first contribution in #12361
- @Alec13355 made their first contribution in #12481
- @ryanwaite made their first contribution in #12577
- @radius-dependabot-manager[bot] made their first contribution in #12578
Upgrading to Radius v0.60.0
You can upgrade to this release by upgrading your Radius CLI then running rad upgrade kubernetes. Only incremental version upgrades are supported. Consult the upgrade documentation for full details.
Full changelog
- build(deps): bump EnricoMi/publish-unit-test-result-action from 2.23.0 to 2.24.0 in /.github/actions/process-test-results in the github-actions group across 1 directory by @dependabot[bot] in #12148
- build(deps): bump ghcr.io/devcontainers/features/node from 2.0.0 to 2.1.0 by @dependabot[bot] in #12146
- build(deps): bump ghcr.io/devcontainers/features/docker-in-docker from 3.0.1 to 3.1.0 by @dependabot[bot] in #12145
- Agent Ex Phase 0 (part 2) — skills, custom agent, prompts, and docs-drift review by @brooke-hamilton in #12097
- build(deps): bump the go-dependencies group across 2 directories with 30 updates by @dependabot[bot] in #12144
- Add output resource identity phased design by @willdavsmith in #12074
- fix(cspell): correct spelling errors by @DariuszPorowski in #12152
- refactor: migrate from unmaintained go-spew to litter by @DariuszPorowski in #12155
- chore(release): final release v0.59.0 by @lakshmimsft in #12149
- refactor(autorest): migrate to typespec by @DariuszPorowski in #12053
- Add Dependabot cooldown to all updates entries by @brooke-hamilton with @Copilot in #12141
- chore(sync): synced file(s) with radius-project/.github by @radius-files-sync[bot] in #12158
- Flatten properties as ReadOnly aliases in Go bicep-tools generator by @willdavsmith in #12132
- Resolve recipe pack references by name in Radius.Core/environments by @willdavsmith in #12134
- chore(sync): synced file(s) with radius-project/.github by @radius-files-sync[bot] in #12162
- refactor(go): replace deprecated packages by @DariuszPorowski in #12168
- chore(sync): synced file(s) with radius-project/.github by @radius-files-sync[bot] in #12171
- refactor(go): upgrade old packages - part 2 by @DariuszPorowski in #12186
- Preserve Helm release values on
rad upgrade kubernetes(#11218) by @nicolejms in #12029 - Clarify unregistered resource type deployment errors by @nicolejms with @Copilot in #12183
- refactor(helm): upgrade to v4 by @DariuszPorowski in #12201
- chore(sync): synced file(s) with radius-project/.github by @radius-files-sync[bot] in #12205
- chore(deps-dev): bump the javascript-deps group across 2 directories with 3 updates by @dependabot[bot] in #12206
- refactor: use gotestsum as go tool by @DariuszPorowski in #12207
- Rename Recipe Packs recipeKind/recipeLocation to kind/source by @willdavsmith in #12104
- test(aci): enhance transient error handling by @DariuszPorowski in #12209
- feat(tests): enable fast cleanup for functional tests to improve teardown efficiency by @DariuszPorowski in #12211
- chore(sync): synced file(s) with radius-project/.github by @radius-files-sync[bot] in #12215
- chore(sync): synced file(s) with radius-project/.github by @radius-files-sync[bot] in #12216
- chore(cspell): update config paths by @DariuszPorowski in #12217
- ci: add merge queue support for the main branch by @DariuszPorowski in #12212
- Add RADIUS_PREVIEW environment variable support for --preview flag by @sylvainsf with @Copilot in #12160
- Fix AWS Terraform output resource IDs by @willdavsmith in #11999
- test: retry functional deployments on transient image-pull errors by @DariuszPorowski in #12220
- Implement direct module support for Recipes by @willdavsmith in #12109
- add resource specific property bag to graph by @nithyatsu in #12138
- ci: make "Collect Pod details" diagnostic step non-fatal by @sylvainsf in #12225
- Add optional NetworkPolicy Helm install flag for the Radius control plane by @willdavsmith in #12208
- Multi-cluster deployment: design + v1 implementation by @sylvainsf in #12106
- ci(test): refresh functional test result check on passing re-run by @DariuszPorowski in #12221
- Delete Test_Storage and Test_PersistentVolume functional tests by @nicolejms with @Copilot in #12235
- chore(sync): synced file(s) with radius-project/.github by @radius-files-sync[bot] in #12240
- docs(README): add OpenSSF badge by @DariuszPorowski in #12241
- Remove flaky AWS S3 Terraform functional test by @willdavsmith in #12242
- Design: Remove the need to add radius properties into every RRT schema explicitly by @nithyatsu in #12223
- Support nested and chained ternaries in recipe parameter resolver by @willdavsmith in #12239
- Repo Radius: externalize control-plane and Terraform state (rad startup / rad shutdown) by @sylvainsf in #12214
- ci(deps): bump actions/checkout from 6.0.3 to 7.0.0 in the github-actions group across 1 directory by @dependabot[bot] in #12246
- Fix flaky upgrade test: replace fixed sleeps with polling and increase timeouts by @sylvainsf with @Copilot in #12245
- refactor(ci): consolidate yq and bicep installs into make targets by @DariuszPorowski in #12248
- fix(ci): run cloud functional-test setup on trusted PRs by @DariuszPorowski in #12253
- refactor(ci): consolidate kind, kubectl, dapr, helm, and oras installs into make targets by @DariuszPorowski in #12251
- revert: cloud functional-test per-PR concurrency serialization by @DariuszPorowski in #12258
- ci: allows checkout from forks by @DariuszPorowski in #12256
- fix(controller): owner and scope validation for DeploymentResource deletion by @DariuszPorowski in #12210
- refactor(ci): consolidate k3d, golangci-lint, terraform, stern into make targets by @DariuszPorowski in #12257
- test(aci): disable Test_ACI to cut corerp-cloud CI time (~2x) by @sylvainsf in #12247
- refactor(security): migrate internal hashing from SHA-1 to SHA-256 by @DariuszPorowski in #12255
- refactor(bicep-types): replace AutoRest with a native TypeSpec emitter by @DariuszPorowski in #12268
- chore(deps): bump ghcr.io/devcontainers/features/docker-in-docker from 3.1.0 to 4.0.0 in the devcontainers group by @dependabot[bot] in #12275
- refactor: single TypeSpec Bicep emitter build on the generate-bicep-types path by @DariuszPorowski in #12277
- chore(deps): bump github.com/go-openapi/runtime from 0.32.3 to 0.32.4 in the go-deps group across 1 directory by @dependabot[bot] in #12276
- fix(codeql): skip SARIF upload in merge queue to avoid ref-not-found error by @DariuszPorowski in #12279
- Migrating cli tests by @lakshmimsft in #12102
- Migrate gateway tests to use Radius.Compute/routes by @lakshmimsft in #12273
- Migrate dynamicrp tests by @lakshmimsft in #12222
- Remove the need to add radius properties into every RRT schema explicitly by @nithyatsu in #12252
- chore(deps): bump ghcr.io/devcontainers/features/git from 1.3.5 to 1.3.7 in the devcontainers group by @dependabot[bot] in #12304
- ci(deps): bump the github-actions group across 1 directory with 4 updates by @dependabot[bot] in #12307
- chore(deps-dev): bump @types/node from 24.13.2 to 26.0.1 in /hack/bicep-types-radius/src/typespec-bicep-types in the javascript-deps group across 1 directory by @dependabot[bot] in #12305
- chore(deps): bump github.com/aws/aws-sdk-go-v2/service/ec2 from 1.307.1 to 1.308.0 in the go-deps group across 1 directory by @dependabot[bot] in #12306
- docs: Agent Ex Phase 3 — consolidate contributing docs and add the index layer by @brooke-hamilton in #12290
- fix(database): refresh stored ETag on Postgres updates by @sk593 in #12312
- Add test for Radius.Data/mySqlDatabases resource type. by @lakshmimsft in #12285
- Refactor recipe settings resources to match the feature spec and support Radius.Security/secrets by @sylvainsf in #12303
- Workspace group display in workspace commands by @officialasishkumar in #11851
- Fix flaky pkg/controller/reconciler tests by awaiting manager shutdown by @brooke-hamilton in #12296
- Fix flaky Test_Gateway* probe timing (#12298) by @brooke-hamilton in #12299
- fix(portable-resources): stop masking recipe errors when status save fails by @sylvainsf in #12315
- Improve missing Terraform config errors by @preko-p in #12070
- chore(sync): synced file(s) with radius-project/.github by @radius-files-sync[bot] in #12267
- test: retry transient UCP connection reset/EOF in functional deploys by @brooke-hamilton in #12300
- populate azure portal links for az resources in graph by @nithyatsu in #12295
- chore(deps-dev): bump prettier from 3.8.5 to 3.9.4 in the javascript-deps group across 1 directory by @dependabot[bot] in #12334
- chore(deps): bump the go-deps group across 1 directory with 14 updates by @dependabot[bot] in #12335
- Add verification workflow for Repo Radius by @sk593 in #12170
- ci(deps): bump the github-actions group across 2 directories with 2 updates by @dependabot[bot] in #12336
- Update
defaults.yamlto include new types by @willdavsmith in #12332 - ci: integrate ShellCheck into PR checks with parallel linters by @DariuszPorowski in #12340
- update defaults.yaml for containerImages by @willdavsmith in #12341
- ci(func-test): build Radius once and share artifacts across test legs by @DariuszPorowski in #12342
- add icons support by @nithyatsu in #12339
- Simplify code review skill and instructions by @brooke-hamilton in #12346
- Add repo-based Radius deploy workflow (extension templates, composite actions, docs) by @sk593 in #12348
- chore(deps): bump ghcr.io/devcontainers/features/git from 1.3.7 to 1.3.8 in the devcontainers group by @dependabot[bot] in #12353
- chore(deps): bump the javascript-deps group across 3 directories with 4 updates by @dependabot[bot] in #12354
- ci(deps): bump the github-actions group across 2 directories with 7 updates by @dependabot[bot] in #12356
- chore(deps): bump the go-deps group across 1 directory with 10 updates by @dependabot[bot] in #12355
- Add pluggable storage backend for orphan-branch state by @brooke-hamilton in #12333
- build(deps): bump Go to 1.26.5 by @DariuszPorowski in #12352
- chore(ci): use install scripts and parallel workflows by @DariuszPorowski in #12358
- fix(workflows): use -p flag with mkdir for creating directories by @DariuszPorowski in #12360
- add built-in types icon sync + registration by @nithyatsu in #12351
- fix(ci): stabilize long-running Azure tests by @DariuszPorowski in #12365
- fix(ci): escape LRT test regex end anchor by @DariuszPorowski with @Copilot in #12368
- Remove radius-deploy and radius-environment skills by @nicolejms in #12366
- chore(sync): synced file(s) with radius-project/.github by @radius-files-sync[bot] in #12373
- chore(deps): bump the go-deps group across 2 directories with 3 updates by @dependabot[bot] in #12388
- chore(deps-dev): bump vitest from 4.1.9 to 4.1.10 in /hack/bicep-types-radius/src/typespec-bicep-types in the javascript-deps group across 1 directory by @dependabot[bot] in #12389
- docs: correct Agent Ex contributor guidance by @brooke-hamilton in #12383
- feat(scaler): add wait for Radius APIService availability and related tests by @DariuszPorowski in #12387
- ci(deps): bump the github-actions group across 2 directories with 3 updates by @dependabot[bot] in #12390
- docs(design): sync default resource types without a fake Go module by @DariuszPorowski in #12236
- Icons in runtime graph by @nithyatsu in #12362
- ci(aws-irsa): switch long-running tests to federated identity by @DariuszPorowski in #12357
- Stabilize scheduled functional test workflows by @DariuszPorowski with @Copilot in #12395
- refactor: improve ARM request context handling by @DariuszPorowski in #12432
- chore(deps): bump the go-deps group across 1 directory with 9 updates by @dependabot[bot] in #12433
- ci(deps): bump the github-actions group across 2 directories with 2 updates by @dependabot[bot] in #12434
- Upd
rad env updto work withRADIUS_PREVIEWenv variable by @lakshmimsft in #12371 - feat(dynamic-rp): secure handling of recipe secret outputs by @willdavsmith in #12344
- handle x-radius-sensitive in static graph by @nithyatsu in #12448
- chore: refresh resource types from resource-types-contrib by @willdavsmith in #12463
- Add OCI state archive backend by @brooke-hamilton in #12364
- Static graph icons + default icon by @nithyatsu in #12396
- Pass RADIUS_STATE_* vars to rad startup/shutdown in deploy workflows by @sk593 in #12472
- Release v0.60.0-rc1 by @willdavsmith in #12466
- Log in to GHCR before rad startup/shutdown in deploy workflow templates by @sk593 in #12493
- enhance edges with depends on on both static and deployed graphs by @nithyatsu in #12479
- Document containerImages Bicep recipe design by @AzureMike in #12372
- Add scoped containerImages support to Bicep recipes by @AzureMike in #12361
- ci(deps): bump the github-actions group across 1 directory with 5 updates by @dependabot[bot] in #12454
- Migrate application graph test to new Radius.Core/* types by @lakshmimsft in #12436
- refactor(test): context usage across the codebase by @DariuszPorowski in #12435
- chore(deps): bump the security group across 2 directories with 2 updates by @dependabot[bot] in #12509
- chore(deps): bump the go-deps group across 1 directory with 13 updates by @dependabot[bot] in #12513
- ci(deps): bump the github-actions group across 2 directories with 8 updates by @dependabot[bot] in #12515
- build: add ARM64 support for Windows by @DariuszPorowski in #12512
- added global list all resources closes #7789 by @Alec13355 in #12481
- Improve Radius.Core resource type documentation, property descriptions, and default values by @zachcasper in #12439
- fix(cli): stop bicep from inheriting rad's stderr handle by @nicolejms in #12519
- fix(test): stabilize Core RP gateway functional tests by @DariuszPorowski in #12518
- Inject registry creds into app rad deploy instead of provisioning a control-plane Secret by @sk593 in #12510
- Add custom recipe pack support and delete workflows to Repo Radius by @sk593 in #12367
- Fix async worker deduplication for in-flight operations by @sylvainsf in #12546
- Fix: Applications.Core/gateways can hang deploying contour httpproxy route child before root 12259 by @gergo-hortobagyi in #12282
- Remove redundant docs self-reference from Radius.Core type descriptions by @zachcasper with @Copilot in #12556
- refactor(resource-types): sync manifests from immutable namespace pins by @DariuszPorowski in #12533
- chore(deps): bump github.com/getkin/kin-openapi from 0.142.0 to 0.144.0 in the security group across 1 directory by @dependabot[bot] in #12561
- chore(sync): synced file(s) with radius-project/.github by @radius-files-sync[bot] in #12564
- Add --preview flag to
rad deploy -aby @lakshmimsft in #12507 - fix(buildkit): bounded concurrency for in-cluster image builds by @DariuszPorowski in #12547
- Fix rad init progress display and Ctrl-C handling by @zachcasper in #12540
- Enhance bicep-types doc emitter to render CLI-style resource references by @zachcasper in #12558
- feat(sync): recipe pack pins and unified defaults.yaml schema by @DariuszPorowski in #12567
- Add --recipe-packs flag to
rad env create --previewby @lakshmimsft in #12531 - feat(tools): add automated tool updater by @DariuszPorowski in #12359
- ci(deps): bump the github-actions group across 3 directories with 11 updates by @dependabot[bot] in #12583
- chore(deps): bump the go-deps group across 2 directories with 22 updates by @dependabot[bot] in #12582
- Migrates Test_DeployEnvironmentTemplate to use new types by @lakshmimsft in #12497
- Add preview flag for
rad install kubernetesby @lakshmimsft in #12504 - feat(tools): configurable cooldown before adopting new tool releases by @DariuszPorowski in #12579
- ci(update-tools): remove obsolete target by @DariuszPorowski in #12589
- Fix deploy parameter injection for templates without image parameters by @ryanwaite in #12580
- Generate reference docs for RRTs in bicep extension by @lakshmimsft in #12545
- Publish deploy-graph.json to radius-deploy-status branch by @sylvainsf in #12591
- chore(tools): bump versions by @radius-dependabot-manager[bot] in #12578
- Create app directory before writing radius-env.bicep by @sylvainsf in #12574
- feat: support oci hashes for tag by @nithyatsu in #12566
- Add GHCR package push permission check to verify workflows by @sylvainsf in #12572
- Materialize schema property defaults before the resource is saved by @AzureMike in #12563
- Surface GitHub OIDC enterprise-claim failures in the Azure verify workflow by @ryanwaite in #12577
- Update README with latest information by @willtsai in #12603
- fix(ci): rebuild resource-types bot branch from main instead of rebasing by @DariuszPorowski in #12611
- chore(sync): synced file(s) with radius-project/.github by @radius-files-sync[bot] in #12594
- fix(test): re-establish gateway port-forward instead of failing the probe by @DariuszPorowski in #12602
- chore(sync): synced file(s) with radius-project/.github by @radius-files-sync[bot] in #12615
- Fast-fail rad deploy when app.bicep is missing on the branch by @sylvainsf in #12605
- refactor(test): use t.Context() instead of context.Background() by @DariuszPorowski in #12523
- chore(deps): bump the javascript-deps group across 2 directories with 12 updates by @dependabot[bot] in #12514
- chore(deps-dev): bump the javascript-deps group across 1 directory with 2 updates by @dependabot[bot] in #12619
- ci(deps): bump the github-actions group across 2 directories with 2 updates by @dependabot[bot] in #12620
- chore(deps): bump the go-deps group across 2 directories with 20 updates by @dependabot[bot] in #12621
- Fix deploy-status publisher never publishing, and failing successful deploys by @brooke-hamilton in #12610
- fix(test): retry rad deploy through kube-apiserver restarts by @DariuszPorowski in #12618
- Fix GHCR push permission false negatives by @AzureMike in #12623
- ci(deps): bump the github-actions group across 1 directory with 4 updates by @dependabot[bot] in #12625
- Add context.azure.resourceNameHash for globally unique Azure recipe names by @AzureMike in #12616
- chore(ci): harden workflows against template injection and cache poisoning by @DariuszPorowski in #12622
- fix(test): cap corerp-cloud parallelism to stop KinD apiserver overload by @DariuszPorowski in #12627
- Fixed garbage text leaking into terminal for rad deploy, rad delete, and rad app delete by @zachcasper in #12639
- Publish deploy status as a workflow artifact by @brooke-hamilton in #12628
- chore(sync): synced file(s) with radius-project/.github by @radius-files-sync[bot] in #12654
- chore(tools): bump versions by @radius-dependabot-manager[bot] in #12652
- ci(deps): bump the github-actions group across 8 directories with 11 updates by @dependabot[bot] in #12657
- chore(deps): bump the go-deps group across 1 directory with 19 updates by @dependabot[bot] in #12655