Skip to content

Releases: hashicorp/terraform-cdk


16 Nov 14:07
Choose a tag to compare

A broken import that only appeared in the bundled cdktf-cli that we publish broke the 0.14.0 release. This patch release fixes this.


  • fix(provider-generator): fix cross package import which breaks the cdktf-cli release bundle #2302


  • chore: document authoring cdktf constructs #2287


15 Nov 20:51
Choose a tag to compare

Breaking changes
Back in October, we announced significant performance improvements with CDKTF version 0.13. These improvements required breaking changes for which we provided backward-compatible provider bindings in version 0.13. As announced, the 0.12 (non-namespaced) provider bindings will no longer work starting with CDKTF 0.14. Refer to the upgrade guide for 0.13 to learn how to update your imports for these changes.


  • feat(cli): add provider upgrade command #2202
  • feat(cli): Add option to select providers to add with init #2184
  • feat(cli): only re-generate provider bindings on get if necessary #2266
  • feat(lib): expose operators on their own API class #2292
  • feat(lib): Introduce Token.nullValue() that allows to pass null to Terraform configurations in languages other than TypeScript #2284
  • feat(cli): Automatically Update Locked Providers #2020
  • feat(lib): Added testing matchers for Providers #2154
  • feat(lib): adds failed process output to test matcher APIs #1953 #2196


  • fix(cli): do not check for version when DISABLE_VERSION_CHECK #2257
  • fix(docs): fix module code example #2256
  • fix(docs): fix links to pre-built provider repositories #2264
  • fix(docs): fix a couple of typos in stacks.mdx #2269
  • fix(examples): fix CI for Python examples #2291
  • fix: set global flag to be able to start search for code blocks at an index #2274


  • chore(docs): Add CDK for Terraform to page titles #2278
  • chore: document Python hash error in local development #2272
  • chore: document JSII debug flags in contribution guide #2271
  • chore: update LICENSE #2268
  • chore(cli): Prevent minification when watching cdktf-cli #2262
  • chore(lib): Add deprecation notices to backends that were deprecated in Terraform v1.2.3 and removed in TF 1.3 #2261
  • chore: adding mgarrell777 to docs codeowners to be notified for docs changes #2259
  • chore: add ecs-microservices example #2252
  • chore: sync version and changelog from the 0.13.3 backported release #2251
  • chore: install pre-built provider with exact version #2249
  • chore: cache examples and terraform plugins #2213


03 Nov 15:55
Choose a tag to compare


  • fix: Redact authorization header when error logging from TFC/TFE #2241


26 Oct 06:59
Choose a tag to compare


  • fix(provider-generator): don't require arrays wrapping variable / output declarations #2199
  • fix(cli): Use 'id' as argument name for all templates #2119
  • fix(cli): use a custom user-agent when talking to TFC #2210
  • fix(cli): Ignore local obj/ dir in C# template #2217
  • fix(deps): Use apt instead of yum, since base image is debian based now #2216
  • fix: correctly denote all of our redirects as temporary because they might change #2218


  • chore: Update Go to version 1.18 on windows workflows #2219
  • chore: Update Digital Team Files #2203
  • chore(cli): change url to pre-built providers to one we control #2181
  • chore(cli): Move things to src/ folder #2130
  • chore(deps): Update docker image to use new jsii/superchain tag #2214
  • chore(docs): rewrite internal redirects #2204


  • feat: add CODEOWNERS file for automatic PR review assignment #2212


18 Oct 14:27
Choose a tag to compare


  • feat(cli): Add support for terraform's parallelism flag #2107
  • feat: add redirect link to pre-built providers json file #2180
  • feat(cli): link to troubleshooting page for error #2192


  • fix(provider-generator): change Static resource class to StaticResource as their namespace 'static' is not valid in TypeScript re-exports #2168
  • fix(cli): dont wrap list terminal output #2188
  • fix(cli): handle missing package versions for non-npm packages #2177
  • fix(docs): Fix upgrade guide imports for Python #2171
  • fix(docs): update old config key #2195


  • chore: Update link to blogpost #2176


03 Oct 16:18
Choose a tag to compare

Breaking Changes
Abbreviated version below, for a guide see Upgrade Guide for 0.13.

0.13 includes performance improvements to generated providers. Instead of exporting a flat list of exports including all supported resources and data sources, we now export each construct and it's associated structures in their own namespace. Due to this, the way you import constructs from your CDKTF application will change. For more information regarding this release, and some of the reasonings behind the changes, please check out the version 0.13 release post.


// Before version 0.13
import { Container, Image, DockerProvider } from "@ckdtf/provider-docker";

// Version 0.13
import { Image } from "@cdktf/provider-docker/lib/image";
import { DockerProvider } from "@cdktf/provider-docker/lib/provider";
import { Container } from "@cdktf/provider-docker/lib/container";


from cdktf_cdktf_provider_kubernetes.kubernetes import Namespace, Service, Deployment, KubernetesProvider


29 Sep 11:28
Choose a tag to compare

Breaking Changes

A very minor change in the UX of the cdktf get command now generates the provider bindings for all languages (except TypeScript) in parallel. This speeds up the process in general, but on devices with limited memory it could lead to Out of Memory errors. If this happens you can limit the parallelism by providing the parallelism flag: cdktf get --parallelism=1.


  • fix(provider-generator): Add special case in case resource is named 'object' #2138
  • fix(docs): Fix two small bugs in the code causing it to not compile #2128
  • fix(lib): Add missing config options for AzurermBackend #2127
  • fix(cli): Update require package in template #2118
  • fix: Change url of pipenv in log #2117
  • fix(cli): support using remote execution in Terraform Cloud with up to 500 MB (instead of 10MB) #2108
  • fix(docs): remove empty code block #2102
  • fix: update constructs and go runtime versions #2096
  • fix(cli): add sentry DSN in build process #2085
  • fix(docs): fix wrong command mentioned in TFC docs #2083
  • fix: let create changelog script use commit hashes from PRs instead of finding merge commit messages that may not always exist #2068


  • feat(cli): include language used in cdktf init telemetry event #2123
  • feat(cli): support generating provider bindings in parallel #2111


  • chore(cli): Use the npm package's repository field for generating go package name #2145
  • chore: npm-check-updates && yarn upgrade #2142
  • chore: split up unit tests per package #2122
  • chore: Update diagram with new provider count #2104
  • chore: change YT link to cut version #2103
  • chore(cli): Don't trim output for unstructured logs #2100
  • chore: only run expensive tasks on source code changes #2099
  • chore: Support building with Go 1.19 #2098
  • chore: fix go azure example #2092
  • chore: fix the project board TS errors #2091
  • chore: npm-check-updates && yarn upgrade #2090
  • chore: npm-check-updates && yarn upgrade #2077
  • chore(examples): clean up examples #2069
  • chore(docs): Check whether links work :) #2063
  • chore: ensure we have license header #1960
  • chore: measure and print memory consumption of build and synth steps for examples in CI #2060
  • chore: start running tests against TF 1.2.8 and drop running against 1.0.7 #2058


26 Aug 15:03
Choose a tag to compare

Breaking Changes

A very minor change in the interface names for provisioners occured to support them in JSII languages, renaming the following interfaces:

  • ISSHProvisionerConnection to SSHProvisionerConnection
  • IWinrmProvisionerConnection to WinrmProvisionerConnection
  • IFileProvisioner to FileProvisioner
  • ILocalExecProvisioner to LocalExecProvisioner
  • IRemoteExecProvisioner to RemoteExecProvisioner

Another very minor change is that we now use the CloudBackend by default when running cdktf init. This requires Terraform >=1.1, therefore an error is thrown on cdktf init if you want to use Terraform Cloud and are on an older version. Already existing projects are not affected and you can use cdktf init --local and configure the RemoteBackend if you need to use an older version.


  • feat(cli): throw an error if a user tries to create a new project with TFC on an old TF version #2062
  • feat: install time tool in Docker container to be able to use it for memory consumption tracking in tests #2059
  • feat: add Go port of TypeScript Google CloudRun example #2035
  • feat(lib): add support for cloud backend #1924


  • fix(provider-generator): use terraform get instead of init to download modules #2057
  • fix(lib): Add missing config options for S3Backend: skipRegionValidation, assumeRolePolicyArns, assumeRoleTags, and assumeRoleTransitiveTagKeys #2050
  • fix: support provisioners in JSII languages #2042
  • fix(hcl2json): add fs-extra to dependencies #2040
  • fix(lib): Improve error message when provider constructs are missing #2039
  • fix(cli): Make provider add command case insensitive for provider names #2038
  • fix(cli): run a speculative plan on diff #2033


  • chore(cli): remove red and magenta from colors for stack names #2064
  • chore: add link to hybrid module talk #2054
  • chore: make Terraform 1.2.8 available in Docker image #2051
  • chore: document updating the API documentation #2046
  • chore(docs): Remove positional language + fix style nits #2045
  • chore(lib): deprecate Resource in favor of Construct #2044
  • chore: update links in our youtube playlist examples #2043
  • chore: npm-check-updates && yarn upgrade #2025
  • chore: translate parts of the documentation #2011


  • refactor: port example script to JS #2047


18 Aug 12:58
Choose a tag to compare


  • fix(cli): add major versions greater 1 to package name when installing pre-built providers for go #2002
  • fix(cli): Wait for other stacks to complete if one of them failed #1987
  • fix(cli): fix version detection for Java being a bit too optimistic about the package name #1995
  • fix(cli): Improve wording around starting from an existing Terraform project #1985
  • fix(tests): force local as Go now has pre-built providers #2005
  • fix(tests): as predicted, the test needs to be skipped for a bit of time #2004
  • fix(docs): fix aspects example not being valid TypeScript #1986
  • fix(docs): fix links by removing all links to the providers-and-resources page that does not exist anymore #2010
  • fix: don't lock state in tests #1990
  • fix: don't overwrite all NODE_OPTIONS #2009


  • chore: add vercel config for redirects page #2016
  • chore: add notes for how to clean the local dotnet cache #2022
  • chore: add issue template for filing bugs with a pre-built providers label #1983
  • chore: npm-check-updates && yarn upgrade #1984
  • chore: npm-check-updates && yarn upgrade #2007


26 Jul 16:12
Choose a tag to compare

Breaking Changes

cdktf get exits with 0 exit code when no provider / module specifications are found in the cdktf.json

Previously we would throw an error and exit with 1 if there were no provider or module specifications in the cdktf.json file. This can be inconvenient if cdktf get is part of a workflow.

Fn.merge is split into Fn.mergeLists and Fn.mergeMaps

The Terraform merge function can merge both lists and maps, but this can cause issues when using the result in a typed language. Therefore we split it into Fn.mergeLists and Fn.mergeMaps, this means you need to change your cdktf programs code.

Simplified interfaces of recursive attributes

The generated provider bindings are based on the Terraform schema which does not support recursion and hence uses a large, explicit structure instead. Previously this resulted in long names such as e.g. Wafv2WebAclRuleStatementAndStatementStatementOrStatementStatementLabelMatchStatement. In 0.12 we implemented a first rough detection for this underlying recursion which drastically reduced the amount of generated interfaces as they now are converted to recursive data structures themselves.
If you are currently using those types e.g. in a language like Java, you will need to change them to the new shorter names.


  • feat(lib): Introduce Iterator and for_each to implement apply time iteration #1830
  • feat(lib): Introduce TerraformDynamicBlock to enable iterator usage on blocks #1882
  • feat(cli): support refresh only option for diff and deploy #1851
  • feat(docs): Add iterator docs page #1840
  • feat(docs): document FORCE_COLOR env var that allows disabling colored output #1917
  • feat(cli): plug provider add command in help printed after initializing a new cdktf project #1833
  • feat(lib): exposed testing matchers for other languages properly #1935


  • fix: Allow "all" as ignoreChanges lifecycle value #1848
  • fix: Fixed naming collision between resources of different providers #1870
  • fix: Small fix to the #1887
  • fix(cli): increase default max memory for node process when running app command for synth #1915
  • fix(provider-generator): Meta arguments available for generated modules #1880
  • fix(provider-generator): replace dashes with underscores in module names for Go when generating bindings for Terraform modules #1928
  • fix(hcl2json): bundle wasm_exec used for building Go instead of looking for it at runtime #1954
  • fix(hcl2cdk): use the same attribute renaming function as in the provider generation #1842
  • fix(hcl2cdk): maps should not be wrapped in arrays #1838


  • chore: document CI flag #1888
  • chore: modernize example output #1914
  • chore: pin provider version #1896
  • chore: update prerequisites #1894
  • chore(tests): Re-enable Windows Provider Add C# Test #1879
  • chore: add tfe test as pre-step to releasing #1872
  • chore: split provider tests into one test per provider #1862
  • chore: reuse integration test definition for releases #1859
  • chore: fix broken link in readme #1845
  • chore: npm-check-updates && yarn upgrade #1706