<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel><title>Pulumi Blog: Cdktf</title><link>https://www.pulumi.com/blog/tag/cdktf/</link><description>Pulumi blog posts: Cdktf.</description><language>en-us</language><pubDate>Thu, 18 Dec 2025 10:00:00 -0800</pubDate><item><title>CDKTF is deprecated: What's next for your team?</title><link>https://www.pulumi.com/blog/cdktf-is-deprecated-whats-next-for-your-team/</link><pubDate>Thu, 18 Dec 2025 10:00:00 -0800</pubDate><guid>https://www.pulumi.com/blog/cdktf-is-deprecated-whats-next-for-your-team/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/cdktf-is-deprecated-whats-next-for-your-team/index.png" /&gt;
&lt;p&gt;In July, 2020, CDK for Terraform (CDKTF) was introduced, and last week, on December 10, it was officially deprecated. Support for CDKTF has stopped, the &lt;a href="https://github.com/cdktf"&gt;organization&lt;/a&gt; and &lt;a href="https://github.com/hashicorp/terraform-cdk"&gt;repository&lt;/a&gt; have been archived, and HashiCorp/IBM will no longer be updating or maintaining it, leaving a lot of teams out there without a clear path forward.&lt;/p&gt;
&lt;p&gt;For most teams, that means it&amp;rsquo;s time to start looking for a replacement.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s an unfortunate situation to suddenly find yourself in as a user of CDKTF, but you do have options, and Pulumi is one of them. In this post, we&amp;rsquo;ll help you understand what those options are, how Pulumi fits into them, and what it&amp;rsquo;d look like to migrate your CDKTF projects to Pulumi.&lt;/p&gt;
&lt;h2 id="what-are-the-alternatives-to-cdktf"&gt;What are the alternatives to CDKTF?&lt;/h2&gt;
&lt;p&gt;Teams migrating away from CDKTF generally have three options:&lt;/p&gt;
&lt;h3 id="option-1-fall-back-to-hcl"&gt;Option 1: Fall back to HCL&lt;/h3&gt;
&lt;p&gt;HashiCorp&amp;rsquo;s official recommendation is to export your projects to HashiCorp Configuration Language (HCL) and manage them with Terraform. CDKTF even has a command that makes this fairly simple:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cdktf synth --hcl
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Of course, if you&amp;rsquo;re using CDKTF, you probably chose it specifically to avoid HCL. So while possible, this probably isn&amp;rsquo;t the choice most teams would make unless they had to.&lt;/p&gt;
&lt;h3 id="option-2-migrate-to-aws-cdk"&gt;Option 2: Migrate to AWS CDK&lt;/h3&gt;
&lt;p&gt;If your team is all-in on AWS, another option would be to migrate to AWS CDK. It&amp;rsquo;s widely used, officially supported, the programming model is similar to CDKTF&amp;rsquo;s, and both CDK and CDKTF transpile to an intermediate format (CloudFormation YAML and Terraform JSON, respectively) that gets passed on to their underlying tools for deployment.&lt;/p&gt;
&lt;p&gt;But while their programming and deployment models are conceptually similar, their resource models and APIs are entirely different. Here&amp;rsquo;s the code for an S3 bucket written in AWS CDK, for example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;aws-cdk-lib/aws-s3&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;my-bucket&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;bucketName&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;my-example-bucket&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;versioned&lt;/span&gt;: &lt;span class="kt"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;publicReadAccess&lt;/span&gt;: &lt;span class="kt"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And here&amp;rsquo;s the code for a similarly configured bucket in CDKTF:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;S3Bucket&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;@cdktf/provider-aws/lib/s3-bucket&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;S3Bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;my-bucket&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;my-example-bucket&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;versioning&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;enabled&lt;/span&gt;: &lt;span class="kt"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;acl&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;private&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Notice how different these APIs are — and this is just one simple resource with only a few properties; imagine having to rewrite dozens or hundreds of them. Beyond that, there&amp;rsquo;s also the problem of state: How would you go about translating the contents of a Terraform state file containing hundreds of resources into the equivalent CloudFormation YAML or JSON?&lt;/p&gt;
&lt;p&gt;Despite their surface similarities, CDKTF and AWS CDK have little in common. Migration would essentially mean a ground-up rewrite that&amp;rsquo;d also leave you without the multi-cloud support you already have with CDKTF. For most teams, that makes this option a practical non-starter.&lt;/p&gt;
&lt;h3 id="option-3-migrate-to-pulumi"&gt;Option 3: Migrate to Pulumi&lt;/h3&gt;
&lt;p&gt;This is where we should acknowledge our obvious bias — but we genuinely believe that for most users of CDKTF, Pulumi really is the simplest and most broadly compatible alternative.&lt;/p&gt;
&lt;p&gt;Like CDKTF, Pulumi lets you build and manage your infrastructure with general-purpose languages like TypeScript, Python, Go, C#, and Java, and it supports organizing your code into higher-level abstractions called &lt;a href="https://www.pulumi.com/docs/iac/concepts/components/"&gt;&lt;em&gt;components&lt;/em&gt;&lt;/a&gt;, which you can think of like CDKTF constructs. Both organize cloud resources into &lt;a href="https://www.pulumi.com/docs/iac/concepts/stacks/"&gt;&lt;em&gt;stacks&lt;/em&gt;&lt;/a&gt; (think &lt;code&gt;dev&lt;/code&gt;, &lt;code&gt;prod&lt;/code&gt;), and both track &lt;a href="https://www.pulumi.com/docs/iac/concepts/state-and-backends/"&gt;deployment state&lt;/a&gt; similarly, with local, remote, and cloud-hosted options available.&lt;/p&gt;
&lt;p&gt;Many of Pulumi&amp;rsquo;s most popular &lt;a href="https://www.pulumi.com/docs/iac/concepts/resources/providers/"&gt;providers&lt;/a&gt; (e.g., the AWS provider) are also built from open-source Terraform schemas, which means their resource models will be nearly identical to what you&amp;rsquo;re used to with CDKTF. Here&amp;rsquo;s what an S3 bucket looks like in Pulumi, for example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;aws&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;@pulumi/aws&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;my-bucket&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;my-example-bucket&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;versioning&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;enabled&lt;/span&gt;: &lt;span class="kt"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;acl&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;private&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can also use &lt;a href="https://www.pulumi.com/docs/iac/get-started/terraform/terraform-providers/"&gt;any Terraform provider&lt;/a&gt; with Pulumi, and you can even &lt;a href="https://www.pulumi.com/docs/iac/guides/migration/migrating-to-pulumi/from-terraform/#using-terraform-modules-directly"&gt;reference Terraform modules directly&lt;/a&gt; from within your Pulumi code.&lt;/p&gt;
&lt;p&gt;Pulumi is also different from CDKTF in several ways. One is that rather than transpile your source code to a format like JSON as CDKTF does (and then deploying it separately later), Pulumi uses its own declarative deployment engine that resolves the resource graph at runtime and provisions cloud resources directly, which is much faster and more flexible. You can learn more about the deployment model in &lt;a href="https://www.pulumi.com/docs/iac/concepts/how-pulumi-works/"&gt;How Pulumi Works&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Given the API similarities, the support for all Terraform providers and modules, the ability to &lt;a href="https://www.pulumi.com/docs/iac/guides/migration/#coexistence"&gt;coexist&lt;/a&gt; alongside Terraform-managed projects, and the built-in support for conversion (which we&amp;rsquo;ll cover next), we think Pulumi is the best alternative for most teams looking to migrate.&lt;/p&gt;
&lt;div class="rounded-lg bg-violet-50 p-6 my-8"&gt;
&lt;p class="heading-4 m-0 mb-3 flex items-center gap-1.5"&gt;Migrate from CDKTF to Pulumi&lt;/p&gt;
&lt;div class="body-base m-0 text-gray-950"&gt;Keep writing infrastructure in TypeScript, Python, Go, C#, or Java, and use Pulumi&amp;rsquo;s built-in convert and import commands to bring your CDKTF projects and state across.&lt;/div&gt;
&lt;a href="https://www.pulumi.com/docs/iac/guides/migration/migrating-to-pulumi/from-terraform/" data-track="blog-body-cta" class="btn btn-primary mt-4"&gt;
Get started
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon ph-icon--regular size-4" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.21047dcd83825f0caafb78a6fd28628a694219e6b6824f6b3e24ee3147bac331.svg#p-arrow-right-regular"/&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;h2 id="what-migrating-to-pulumi-looks-like"&gt;What migrating to Pulumi looks like&lt;/h2&gt;
&lt;p&gt;Migrating a CDKTF project to Pulumi generally happens in three steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Conversion&lt;/strong&gt;, which translates your CDKTF code into a new Pulumi program&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Import&lt;/strong&gt;, which reads the contents of your CDKTF state into a new Pulumi stack&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Refactoring&lt;/strong&gt;, which brings the code in the new program into alignment with the stack&amp;rsquo;s currently deployed resources&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="conversion-and-import"&gt;Conversion and import&lt;/h3&gt;
&lt;p&gt;Migration starts with exporting your CDKTF project to HCL with &lt;code&gt;cdktf synth&lt;/code&gt;. From there, Pulumi&amp;rsquo;s built-in &lt;a href="https://www.pulumi.com/docs/iac/cli/commands/pulumi_convert/"&gt;&lt;code&gt;convert&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://www.pulumi.com/docs/iac/cli/commands/pulumi_import/"&gt;&lt;code&gt;import&lt;/code&gt;&lt;/a&gt; commands handle creating the new program and importing your state:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Export your project to HCL.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cdktf synth --hcl
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Convert the HCL into a new Pulumi project.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pulumi convert --from terraform --language typescript
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Create a new Pulumi stack.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pulumi stack init dev
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Import your CDKTF stack&amp;#39;s resources into your new Pulumi stack.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pulumi import --from terraform ./terraform.dev.tfstate
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The converter automatically translates Terraform input variables, data sources, resources, and outputs into their Pulumi equivalents. You can read more about how this works in &lt;a href="https://www.pulumi.com/docs/iac/guides/migration/migrating-to-pulumi/from-terraform/#converting-terraform-hcl-to-pulumi"&gt;Converting Terraform HCL to Pulumi&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="refactoring"&gt;Refactoring&lt;/h3&gt;
&lt;p&gt;Once you&amp;rsquo;ve imported your state, you&amp;rsquo;ll often have to make some adjustments to the code to bring it in line with the new Pulumi stack. For instance, &lt;code&gt;pulumi import&lt;/code&gt; marks new resources &lt;a href="https://www.pulumi.com/docs/iac/concepts/resources/options/protect/"&gt;protected&lt;/a&gt; by default, to prevent them from being accidentally deleted — but since the code produced by &lt;code&gt;pulumi convert&lt;/code&gt; doesn&amp;rsquo;t include the &lt;code&gt;protect&lt;/code&gt; resource option, you&amp;rsquo;ll need to add it yourself. Fortunately the import step also emits code that you can copy into your program to make this process a little easier.&lt;/p&gt;
&lt;p&gt;Refactoring can get a bit more complicated when custom logic and higher-level abstractions are involved, as fidelity to the original CDKTF code is often lost in the translation to HCL. In these situations, having the help of an LLM to recapture that original logic or translate your CDKTF constructs into Pulumi components can be a big time-saver.&lt;/p&gt;
&lt;h2 id="an-end-to-end-example"&gt;An end-to-end example&lt;/h2&gt;
&lt;p&gt;The best way to get a feel for how this works, though, is to try it yourself.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://github.com/pulumi/cdktf-to-pulumi-example"&gt;pulumi/cdktf-to-pulumi-example&lt;/a&gt; repository on GitHub contains a CDKTF project with multiple stacks written in TypeScript, along with a guide that walks you through the process of migrating that project to Pulumi. The guide covers everything we&amp;rsquo;ve discussed here so far, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Converting the CDKTF project into a new Pulumi project&lt;/li&gt;
&lt;li&gt;Importing its actively running resources into Pulumi stacks&lt;/li&gt;
&lt;li&gt;Modifying the generated code to align with imported state&lt;/li&gt;
&lt;li&gt;Performing an initial deployment with Pulumi to complete the migration process&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The walkthrough takes only a few minutes to complete, and it&amp;rsquo;s a great way to stand up an example of your own to get more familiar with Pulumi.&lt;/p&gt;
&lt;a href="https://github.com/pulumi/cdktf-to-pulumi-example" target="_blank" rel="noopener noreferrer" class="github-card"&gt;
&lt;img
src="https://opengraph.githubassets.com/1/pulumi/cdktf-to-pulumi-example"
alt="GitHub repository: pulumi/cdktf-to-pulumi-example"
class="github-card-image"
loading="lazy"
/&gt;
&lt;div class="github-card-content"&gt;
&lt;div class="github-card-domain"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon github-card-icon" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.21047dcd83825f0caafb78a6fd28628a694219e6b6824f6b3e24ee3147bac331.svg#b-github"/&gt;&lt;/svg&gt;
github.com/pulumi/cdktf-to-pulumi-example
&lt;/div&gt;
&lt;/div&gt;
&lt;/a&gt;
&lt;h2 id="whats-next"&gt;What&amp;rsquo;s next?&lt;/h2&gt;
&lt;p&gt;If you’re moving on from CDKTF and looking for an alternative, there are a few possible paths forward. For teams that want to keep using real languages and avoid a ground-up rewrite, Pulumi offers the clearest way forward.&lt;/p&gt;
&lt;p&gt;To learn more about how Pulumi works, how it differs from CDKTF and from Terraform, how to handle additional conversion scenarios, and more, we recommend:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Diving into &lt;a href="https://www.pulumi.com/docs/iac/concepts/"&gt;the Pulumi docs&lt;/a&gt; to get familiar with core concepts and features of the platform&lt;/li&gt;
&lt;li&gt;Reading &lt;a href="https://www.pulumi.com/docs/iac/guides/migration/migrating-to-pulumi/from-terraform/"&gt;Migrating from Terraform or CDKTF to Pulumi&lt;/a&gt; for more detailed, Terraform-specific migration guidance&lt;/li&gt;
&lt;li&gt;Joining us in the &lt;a href="https://slack.pulumi.com/"&gt;Pulumi Community Slack&lt;/a&gt; to ask questions and learn from others who&amp;rsquo;ve successfully made the leap from Terraform and CDKTF to Pulumi&lt;/li&gt;
&lt;li&gt;Checking out &lt;a href="https://www.pulumi.com/blog/all-iac-including-terraform-and-hcl/"&gt;Pulumi for All Your IaC — Including Terraform and HCL&lt;/a&gt; to learn more about Pulumi&amp;rsquo;s native support for Terraform and HCL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And of course, &lt;a href="https://www.pulumi.com/contact/"&gt;feel free to reach out&lt;/a&gt;! We&amp;rsquo;d love to help in any way we can.&lt;/p&gt;</description><author>Adam Gordon Bell</author><author>Christian Nunciato</author><category>migration</category><category>terraform</category><category>cdktf</category></item></channel></rss>