If you've ever written an ARM template, you know the pain. Hundreds of lines of nested JSON, string interpolation with concat(), resource IDs that make you question your life choices. Bicep is Microsoft's answer: it gives you the same deployment power as ARM templates but with a syntax that doesn't make you reach for the bourbon. By March 2021, it reached GA and suddenly infrastructure-as-code on Azure became readable again.
What Bicep improves over ARM JSON
ARM templates in JSON are verbose, repetitive, and syntactically brittle. A simple Azure App Service + SQL Database deployment can require hundreds of lines of JSON with deeply nested resource properties, manual resource ID construction using concat(), and no support for comments. Bicep replaces the JSON syntax with a concise declarative language: the same deployment in Bicep is a fraction of the size, readable to a developer not steeped in ARM quirks.
The compilation model
Bicep compiles to ARM JSON. There is no separate runtime or API: a Bicep file is transpiled to ARM JSON and deployed via the standard ARM deployment API. The compilation is deterministic and reversible (ARM templates can be decompiled to Bicep, with some limitations). This means Bicep deployments have identical semantics to ARM JSON deployments, no new failure modes, no new deployment service to trust.
Modules and reusability
Bicep modules allow resource definitions to be composed from reusable components. A module is a .bicep file that takes parameters and deploys a set of resources. Modules can be referenced from a local path or from a Bicep registry. This enables platform teams to publish validated, standards-compliant module libraries that application teams consume. The same pattern as Terraform modules but in the Azure-native toolchain.
Bicep vs Terraform for Azure
Terraform is language-agnostic and works across providers. Bicep is Azure-only. For organisations with multi-cloud infrastructure, Terraform (or CDK for Terraform) is the right choice. For organisations that are Azure-only or Azure-primary, Bicep provides a better developer experience than Terraform for purely Azure resources: no state file management, no provider plugins, simpler authentication model, and first-class Azure Portal integration for deployment visualisation.