EmmittJ.Terraform.Sdk 0.0.8

dotnet add package EmmittJ.Terraform.Sdk --version 0.0.8
                    
NuGet\Install-Package EmmittJ.Terraform.Sdk -Version 0.0.8
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="EmmittJ.Terraform.Sdk" Version="0.0.8" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="EmmittJ.Terraform.Sdk" Version="0.0.8" />
                    
Directory.Packages.props
<PackageReference Include="EmmittJ.Terraform.Sdk" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add EmmittJ.Terraform.Sdk --version 0.0.8
                    
#r "nuget: EmmittJ.Terraform.Sdk, 0.0.8"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package EmmittJ.Terraform.Sdk@0.0.8
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=EmmittJ.Terraform.Sdk&version=0.0.8
                    
Install as a Cake Addin
#tool nuget:?package=EmmittJ.Terraform.Sdk&version=0.0.8
                    
Install as a Cake Tool

EmmittJ.Terraform.Sdk

Infrastructure as C# - Define Terraform configurations using strongly-typed C# with compile-time safety and IntelliSense support.

See the main README for installation, comprehensive documentation, and examples.

Quick Start

using EmmittJ.Terraform.Sdk;

// Create a stack
var stack = new TerraformStack { Name = "my-infrastructure" };

// Configure Terraform settings
stack.Terraform = new TerraformSettingsBlock
{
    RequiredVersion = ">= 1.9.0"
};

// Add AWS provider
var awsProvider = new TerraformProvider("aws")
{
    ["region"] = "us-west-2"
};
stack.Add(awsProvider);

// Create resources with indexer syntax
var vpc = new TerraformResource("aws_vpc", "main")
{
    ["cidr_block"] = "10.0.0.0/16",
    ["enable_dns_hostnames"] = true,
    ["enable_dns_support"] = true
};
stack.Add(vpc);

// Reference the VPC in a subnet - type-safe!
var subnet = new TerraformResource("aws_subnet", "public")
{
    ["vpc_id"] = vpc["id"],  // Generates: aws_vpc.main.id
    ["cidr_block"] = "10.0.1.0/24",
    ["availability_zone"] = "us-west-2a"
};
stack.Add(subnet);

// Generate HCL
string hcl = stack.ToHcl();
Console.WriteLine(hcl);

Key Concepts

Resource References (Indexer Syntax)

Access resource attributes using the indexer - generates correct HCL references:

var vpc = new TerraformResource("aws_vpc", "main") { ["cidr_block"] = "10.0.0.0/16" };
var subnet = new TerraformResource("aws_subnet", "public")
{
    ["vpc_id"] = vpc["id"]  // Generates: aws_vpc.main.id
};

Variables and Outputs

// Input variable
var region = new TerraformVariable("region")
{
    Type = Tf.Types.String,
    Default = "us-west-2",
    Description = "AWS region"
};

// Output
var vpcIdOutput = new TerraformOutput("vpc_id")
{
    Value = vpc["id"],
    Description = "The ID of the VPC"
};

Variable References (AsReference)

Reference entire variable values:

var region = new TerraformVariable("region") { Default = "us-west-2" };
var provider = new TerraformProvider("aws")
{
    ["region"] = region.AsReference()  // Generates: var.region
};

Data Sources

var ami = new TerraformDataSource("aws_ami", "ubuntu")
{
    ["most_recent"] = true,
    ["owners"] = new TerraformList<string> { "099720109477" }
};

var instance = new TerraformResource("aws_instance", "web")
{
    ["ami"] = ami["id"]  // Generates: data.aws_ami.ubuntu.id
};

Modules

var vpcModule = new TerraformModule("vpc")
{
    Source = "terraform-aws-modules/vpc/aws",
    Version = "5.1.0",
    ["name"] = "my-vpc",
    ["cidr"] = "10.0.0.0/16"
};

var instance = new TerraformResource("aws_instance", "web")
{
    ["subnet_id"] = vpcModule["public_subnets"][0]  // Generates: module.vpc.public_subnets[0]
};

Quick Reference

Block Type How to Reference Example Generates
Resource attribute resource["attr"] vpc["id"] aws_vpc.main.id
Data source attribute dataSource["attr"] ami["id"] data.aws_ami.ubuntu.id
Module output module["output"] vpcModule["vpc_id"] module.vpc.vpc_id
Variable variable.AsReference() region.AsReference() var.region
Local value locals["name"] locals["region"] local.region

Architecture Documentation

For detailed architecture documentation, see:

Feedback & Contributing

https://github.com/EmmittJ/terraform-sdk

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

    • No dependencies.

NuGet packages (6)

Showing the top 5 NuGet packages that depend on EmmittJ.Terraform.Sdk:

Package Downloads
EmmittJ.Terraform.Sdk.Providers.Aws

AWS provider bindings for EmmittJ.Terraform.Sdk - strongly-typed C# classes for AWS Terraform resources. Generated from provider schema v~> 6.0.

EmmittJ.Aspire.Hosting.Terraform

Terraform support for Aspire using EmmittJ.Terraform.Sdk.

EmmittJ.Terraform.Sdk.Providers.Google

Google Cloud provider bindings for EmmittJ.Terraform.Sdk - strongly-typed C# classes for Google Cloud Terraform resources. Generated from provider schema v~> 7.0.

EmmittJ.Terraform.Sdk.Providers.Azurerm

Azure RM provider bindings for EmmittJ.Terraform.Sdk - strongly-typed C# classes for Azure RM Terraform resources. Generated from provider schema v~> 4.0.

EmmittJ.Terraform.Sdk.Providers.Azuread

Azure AD provider bindings for EmmittJ.Terraform.Sdk - strongly-typed C# classes for Azure AD Terraform resources. Generated from provider schema v~> 3.0.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.0.8 390 12/8/2025
0.0.7 370 12/7/2025
0.0.6 267 12/4/2025
0.0.5 730 12/3/2025
0.0.4 759 12/2/2025
0.0.3 781 12/1/2025
0.0.2 519 11/30/2025
0.0.1 453 11/30/2025
0.0.0 973 11/30/2025