What is the difference between ARM templates and Bicep?
ARM templates are the native JSON declarative language for Azure Resource Manager. Bicep is a domain-specific language that transpiles to ARM JSON.
Advantages of Bicep:
- Concise, readable syntax with no mandatory boilerplate.
- First-class modules, loops, conditions, and type checking.
- Tooling: VS Code extension, IntelliSense, and the bicep CLI.
- Idempotent deployments and what-if analysis, same as ARM.
param location string = resourceGroup().location
resource sa 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: 'stapp${uniqueString(resourceGroup().id)}'
location: location
sku: { name: 'Standard_LRS' }
kind: 'StorageV2'
}
Both use the same deployment engine, so you can decompile ARM to Bicep with az bicep decompile. Prefer Bicep for new work, and use ARM when you must generate JSON programmatically or consume existing templates.