Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Planned as **3.0.0** for both packages; not yet published.

### Added

- Added endpoint catalog entries (endpoint mapping and client construction) for DSQL, S3 Tables, Bedrock Runtime, CodeArtifact, Database Migration Service, Identity Store, Managed Blockchain, SSO Admin, Textract, Lambda Web, and S3 Files. Inputs: [LocalStack Python client `localstack/localstack-python-client@75fd327`](https://github.com/localstack/localstack-python-client/blob/75fd327/localstack_client/config.py) for DSQL and S3 Tables, and the [LocalStack service documentation](https://docs.localstack.cloud/aws/services/) for the rest. Most require a LocalStack license tier per that documentation; catalog membership does not establish operation coverage.
- Added `net10.0` and `net11.0` assets to Core (`LocalStack.Client`) and Extensions (`LocalStack.Client.Extensions`). .NET 11 is not generally available yet; the `net11.0` assets are built with the .NET 11 RC2 SDK pinned in `global.json`.
- Both packages support Native AOT and trimming on these targets with zero trim/AOT warnings, no suppressions, and no consumer code changes. This includes `AddLocalStack(configuration)`, all Add/TryAdd/alias registration overloads, Core `Session` / `SessionStandalone`, and the `Type`-based APIs.
- On `net10.0` and `net11.0`, both packages use no runtime reflection for AWS SDK service clients and configs, or for accessible, concrete, non-generic custom clients/configs with constructors and properties eligible for the [generated registry](docs/architecture/platform-and-packaging.md#native-aot-and-trimming). The generic interface APIs (`AddAwsService<T>` and every overload, `CreateClientByInterface<T>()`) use the AWS SDK v4 static factories when the injected helper is exactly the default `SessionReflection` and do not depend on source generation, so they also work in F# and Visual Basic; custom or mocked helpers retain the previous calls and ordering. The `Type`-based APIs and generic implementation API use a build-time source generator that ships in Core and turns itself on for net10-compatible C# projects, with no setup or extra package. Other client shapes (private or generic custom clients, F# and Visual Basic projects for the `Type`-based APIs, assemblies loaded at run time, unusual constructors or properties) keep the previous behavior through a reflection fallback that runs only under JIT; trimmed and Native AOT apps do not include it. These claims cover LocalStack.NET's own code; the AWS SDK, dependency injection and BCL internals have their own AOT status, and LocalStack determines its own service coverage.
Expand All @@ -20,6 +21,10 @@ Planned as **3.0.0** for both packages; not yet published.

- With `UseLocalStack: false`, Extensions now creates clients through the AWS SDK's public `AddAWSService<T>` factory instead of private SDK reflection. No consumer code changes are needed.

### Fixed

- With `UseLegacyPorts: true`, Account, ACM PCA, Bedrock, CloudControl, CodeBuild, CodeConnections, CodeDeploy, CodePipeline, Elastic Transcoder, MemoryDB, Shield and Verified Permissions now use port 4566, matching the LocalStack Python client. They used 4567, the legacy API Gateway port. The default edge-port mode is unchanged.

### Documentation

- The README states that LocalStack images from 2026.03.0 on, including `latest`, need `LOCALSTACK_AUTH_TOKEN`, and links the official [auth-token](https://docs.localstack.cloud/aws/getting-started/auth-token/) and [CI documentation](https://docs.localstack.cloud/aws/ci-pipelines/). It names 4.14.0 as the last token-free release, which gets no further updates ([#51](https://github.com/localstack-dotnet/localstack-dotnet-client/issues/51)).
Expand Down
14 changes: 14 additions & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
<PackageVersion Include="AWSSDK.AppConfig" Version="4.0.101.16" />
<PackageVersion Include="AWSSDK.AppConfigData" Version="4.0.100.19" />
<PackageVersion Include="AWSSDK.Appflow" Version="4.0.101.7" />
<PackageVersion Include="AWSSDK.ApplicationAutoScaling" Version="4.0.100.18" />
<PackageVersion Include="AWSSDK.AppSync" Version="4.0.100.19" />
<PackageVersion Include="AWSSDK.Athena" Version="4.0.100.19" />
<PackageVersion Include="AWSSDK.AutoScaling" Version="4.0.104.7" />
Expand All @@ -43,6 +44,7 @@
<PackageVersion Include="AWSSDK.Backup" Version="4.0.101.13" />
<PackageVersion Include="AWSSDK.Batch" Version="4.0.104.3" />
<PackageVersion Include="AWSSDK.Bedrock" Version="4.0.103.3" />
<PackageVersion Include="AWSSDK.BedrockRuntime" Version="4.0.101.11" />
<PackageVersion Include="AWSSDK.CertificateManager" Version="4.0.102.10" />
<PackageVersion Include="AWSSDK.CloudControlApi" Version="4.0.100.18" />
<PackageVersion Include="AWSSDK.CloudFormation" Version="4.0.103.2" />
Expand All @@ -52,6 +54,7 @@
<PackageVersion Include="AWSSDK.CloudWatch" Version="4.0.105.4" />
<PackageVersion Include="AWSSDK.CloudWatchEvents" Version="4.0.100.18" />
<PackageVersion Include="AWSSDK.CloudWatchLogs" Version="4.0.105.3" />
<PackageVersion Include="AWSSDK.CodeArtifact" Version="4.0.100.19" />
<PackageVersion Include="AWSSDK.CodeBuild" Version="4.0.101.18" />
<PackageVersion Include="AWSSDK.CodeConnections" Version="4.0.101.2" />
<PackageVersion Include="AWSSDK.CodeCommit" Version="4.0.101.10" />
Expand All @@ -63,7 +66,10 @@
<PackageVersion Include="AWSSDK.Keyspaces" Version="4.0.101.2" />
<PackageVersion Include="AWSSDK.MWAA" Version="4.0.101.7" />
<PackageVersion Include="AWSSDK.CostExplorer" Version="4.0.101.3" />
<PackageVersion Include="AWSSDK.DatabaseMigrationService" Version="4.0.100.19" />
<PackageVersion Include="AWSSDK.DocDB" Version="4.0.101.4" />
<PackageVersion Include="AWSSDK.DSQL" Version="4.0.103.7" />
<PackageVersion Include="AWSSDK.DynamoDBStreams" Version="4.0.101" />
<PackageVersion Include="AWSSDK.DynamoDBv2" Version="4.0.107.3" />
<PackageVersion Include="AWSSDK.EC2" Version="4.0.127" />
<PackageVersion Include="AWSSDK.ECR" Version="4.0.101.10" />
Expand All @@ -81,8 +87,10 @@
<PackageVersion Include="AWSSDK.EMRServerless" Version="4.0.101.2" />
<PackageVersion Include="AWSSDK.FIS" Version="4.0.100.18" />
<PackageVersion Include="AWSSDK.OpenSearchService" Version="4.0.104.2" />
<PackageVersion Include="AWSSDK.Glacier" Version="4.0.100.18" />
<PackageVersion Include="AWSSDK.Glue" Version="4.0.115.1" />
<PackageVersion Include="AWSSDK.IdentityManagement" Version="4.0.103.10" />
<PackageVersion Include="AWSSDK.IdentityStore" Version="4.0.101.5" />
<PackageVersion Include="AWSSDK.IoT" Version="4.0.101.8" />
<PackageVersion Include="AWSSDK.IoTAnalytics" Version="4.0.2.15" />
<PackageVersion Include="AWSSDK.IotData" Version="4.0.100.19" />
Expand All @@ -98,6 +106,8 @@
<PackageVersion Include="AWSSDK.KinesisFirehose" Version="4.0.100.18" />
<PackageVersion Include="AWSSDK.LakeFormation" Version="4.0.101.1" />
<PackageVersion Include="AWSSDK.Lambda" Version="4.0.110" />
<PackageVersion Include="AWSSDK.LambdaWeb" Version="4.0.102.2" />
<PackageVersion Include="AWSSDK.ManagedBlockchain" Version="4.0.100.19" />
<PackageVersion Include="AWSSDK.MediaConvert" Version="4.0.105.4" />
<PackageVersion Include="AWSSDK.MediaStore" Version="4.0.100.19" />
<PackageVersion Include="AWSSDK.MediaStoreData" Version="4.0.100.19" />
Expand All @@ -121,6 +131,8 @@
<PackageVersion Include="AWSSDK.Route53Domains" Version="4.0.101.1" />
<PackageVersion Include="AWSSDK.S3" Version="4.0.104.4" />
<PackageVersion Include="AWSSDK.S3Control" Version="4.0.101.6" />
<PackageVersion Include="AWSSDK.S3Files" Version="4.0.100.18" />
<PackageVersion Include="AWSSDK.S3Tables" Version="4.0.100.18" />
<PackageVersion Include="AWSSDK.SageMaker" Version="4.0.122.1" />
<PackageVersion Include="AWSSDK.SageMakerRuntime" Version="4.0.101.12" />
<PackageVersion Include="AWSSDK.Scheduler" Version="4.0.100.18" />
Expand All @@ -135,7 +147,9 @@
<PackageVersion Include="AWSSDK.SimpleWorkflow" Version="4.0.100.18" />
<PackageVersion Include="AWSSDK.Shield" Version="4.0.100.18" />
<PackageVersion Include="AWSSDK.SQS" Version="4.0.100.18" />
<PackageVersion Include="AWSSDK.SSOAdmin" Version="4.0.103.5" />
<PackageVersion Include="AWSSDK.StepFunctions" Version="4.0.100.19" />
<PackageVersion Include="AWSSDK.Textract" Version="4.0.100.18" />
<PackageVersion Include="AWSSDK.TimestreamQuery" Version="4.0.100.18" />
<PackageVersion Include="AWSSDK.TimestreamWrite" Version="4.0.100.18" />
<PackageVersion Include="AWSSDK.Transfer" Version="4.0.105" />
Expand Down
2 changes: 2 additions & 0 deletions docs/engineering/maintenance-playbook.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ Current behavior remains owned by [client runtime](../architecture/client-runtim

Inspect the official [LocalStack Python client](https://github.com/localstack/localstack-python-client) at a recorded commit. Compare its catalog with this library and the selected AWS SDK; record relevant additions, removals, renames, and intentional differences. Do not copy an upstream name without checking its meaning.

Record the inspected Python client commit and the added services in [CHANGELOG.md](../../CHANGELOG.md).

For each applicable mapping change, review these locations together:

| Concern | Source to review |
Expand Down
13 changes: 12 additions & 1 deletion src/LocalStack.Client/Enums/AwsService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -124,4 +124,15 @@ public enum AwsService
MemoryDb,
Shield,
VerifiedPermissions,
}
Dsql,
S3Tables,
BedrockRuntime,
CodeArtifact,
DatabaseMigrationService,
IdentityStore,
ManagedBlockchain,
SsoAdmin,
Textract,
LambdaWeb,
S3Files,
}
38 changes: 25 additions & 13 deletions src/LocalStack.Client/Enums/AwsServiceEndpointMetadata.cs
Original file line number Diff line number Diff line change
Expand Up @@ -115,18 +115,29 @@ public class AwsServiceEndpointMetadata
public static readonly AwsServiceEndpointMetadata AppConfigData = new("AppConfigData", "appconfigdata", CommonEndpointPattern, 4632, AwsService.AppConfigData);
public static readonly AwsServiceEndpointMetadata Pinpoint = new("Pinpoint", "pinpoint", CommonEndpointPattern, 4566, AwsService.Pinpoint);
public static readonly AwsServiceEndpointMetadata Pipes = new("Pipes", "pipes", CommonEndpointPattern, 4566, AwsService.Pipes);
public static readonly AwsServiceEndpointMetadata Account = new("Account", "account", CommonEndpointPattern, 4567, AwsService.Account);
public static readonly AwsServiceEndpointMetadata ACMPCA = new("ACM PCA", "acm-pca", CommonEndpointPattern, 4567, AwsService.ACMPCA);
public static readonly AwsServiceEndpointMetadata Bedrock = new("Bedrock", "bedrock", CommonEndpointPattern, 4567, AwsService.Bedrock);
public static readonly AwsServiceEndpointMetadata CloudControl = new("CloudControl", "cloudcontrol", CommonEndpointPattern, 4567, AwsService.CloudControl);
public static readonly AwsServiceEndpointMetadata CodeBuild = new("CodeBuild", "codebuild", CommonEndpointPattern, 4567, AwsService.CodeBuild);
public static readonly AwsServiceEndpointMetadata CodeConnections = new("CodeConnections", "codeconnections", CommonEndpointPattern, 4567, AwsService.CodeConnections);
public static readonly AwsServiceEndpointMetadata CodeDeploy = new("CodeDeploy", "codedeploy", CommonEndpointPattern, 4567, AwsService.CodeDeploy);
public static readonly AwsServiceEndpointMetadata CodePipeline = new("CodePipeline", "codepipeline", CommonEndpointPattern, 4567, AwsService.CodePipeline);
public static readonly AwsServiceEndpointMetadata ElasticTranscoder = new("Elastic Transcoder", "elastictranscoder", CommonEndpointPattern, 4567, AwsService.ElasticTranscoder);
public static readonly AwsServiceEndpointMetadata MemoryDb = new("MemoryDB", "memorydb", CommonEndpointPattern, 4567, AwsService.MemoryDb);
public static readonly AwsServiceEndpointMetadata Shield = new("Shield", "shield", CommonEndpointPattern, 4567, AwsService.Shield);
public static readonly AwsServiceEndpointMetadata VerifiedPermissions = new("VerifiedPermissions", "verifiedpermissions", CommonEndpointPattern, 4567, AwsService.VerifiedPermissions);
public static readonly AwsServiceEndpointMetadata Account = new("Account", "account", CommonEndpointPattern, 4566, AwsService.Account);
public static readonly AwsServiceEndpointMetadata ACMPCA = new("ACM PCA", "acm-pca", CommonEndpointPattern, 4566, AwsService.ACMPCA);
public static readonly AwsServiceEndpointMetadata Bedrock = new("Bedrock", "bedrock", CommonEndpointPattern, 4566, AwsService.Bedrock);
public static readonly AwsServiceEndpointMetadata CloudControl = new("CloudControl", "cloudcontrol", CommonEndpointPattern, 4566, AwsService.CloudControl);
public static readonly AwsServiceEndpointMetadata CodeBuild = new("CodeBuild", "codebuild", CommonEndpointPattern, 4566, AwsService.CodeBuild);
public static readonly AwsServiceEndpointMetadata CodeConnections = new("CodeConnections", "codeconnections", CommonEndpointPattern, 4566, AwsService.CodeConnections);
public static readonly AwsServiceEndpointMetadata CodeDeploy = new("CodeDeploy", "codedeploy", CommonEndpointPattern, 4566, AwsService.CodeDeploy);
public static readonly AwsServiceEndpointMetadata CodePipeline = new("CodePipeline", "codepipeline", CommonEndpointPattern, 4566, AwsService.CodePipeline);
public static readonly AwsServiceEndpointMetadata ElasticTranscoder = new("Elastic Transcoder", "elastictranscoder", CommonEndpointPattern, 4566, AwsService.ElasticTranscoder);
public static readonly AwsServiceEndpointMetadata MemoryDb = new("MemoryDB", "memorydb", CommonEndpointPattern, 4566, AwsService.MemoryDb);
public static readonly AwsServiceEndpointMetadata Shield = new("Shield", "shield", CommonEndpointPattern, 4566, AwsService.Shield);
public static readonly AwsServiceEndpointMetadata VerifiedPermissions = new("VerifiedPermissions", "verifiedpermissions", CommonEndpointPattern, 4566, AwsService.VerifiedPermissions);
public static readonly AwsServiceEndpointMetadata Dsql = new("DSQL", "dsql", CommonEndpointPattern, 4566, AwsService.Dsql);
public static readonly AwsServiceEndpointMetadata S3Tables = new("S3Tables", "s3tables", CommonEndpointPattern, 4566, AwsService.S3Tables);
public static readonly AwsServiceEndpointMetadata BedrockRuntime = new("Bedrock Runtime", "bedrock-runtime", CommonEndpointPattern, 4566, AwsService.BedrockRuntime);
public static readonly AwsServiceEndpointMetadata CodeArtifact = new("codeartifact", "codeartifact", CommonEndpointPattern, 4566, AwsService.CodeArtifact);
public static readonly AwsServiceEndpointMetadata DatabaseMigrationService = new("Database Migration Service", "dms", CommonEndpointPattern, 4566, AwsService.DatabaseMigrationService);
public static readonly AwsServiceEndpointMetadata IdentityStore = new("identitystore", "identitystore", CommonEndpointPattern, 4566, AwsService.IdentityStore);
public static readonly AwsServiceEndpointMetadata ManagedBlockchain = new("ManagedBlockchain", "managedblockchain", CommonEndpointPattern, 4566, AwsService.ManagedBlockchain);
public static readonly AwsServiceEndpointMetadata SsoAdmin = new("SSO Admin", "sso-admin", CommonEndpointPattern, 4566, AwsService.SsoAdmin);
public static readonly AwsServiceEndpointMetadata Textract = new("Textract", "textract", CommonEndpointPattern, 4566, AwsService.Textract);
public static readonly AwsServiceEndpointMetadata LambdaWeb = new("Lambda Web", "lambda-web", CommonEndpointPattern, 4566, AwsService.LambdaWeb);
public static readonly AwsServiceEndpointMetadata S3Files = new("S3Files", "s3files", CommonEndpointPattern, 4566, AwsService.S3Files);

public static readonly AwsServiceEndpointMetadata[] All =
[
Expand All @@ -137,6 +148,7 @@ public class AwsServiceEndpointMetadata
TimeStreamQuery, TimeStreamWrite, S3Control, ElbV2, Support, Neptune, DocDb, ServiceDiscovery, ServerlessApplicationRepository, AppConfig, CostExplorer, MediaConvert, ResourceGroupsTaggingApi,
ResourceGroups, Efs, Backup, LakeFormation, Waf, WafV2, ConfigService, Mwaa, EventBridge, Fis, MarketplaceMetering, Transcribe, Mq, EmrServerless, Appflow, Route53Domains, Keyspaces, Scheduler, Ram, AppConfigData,
Pinpoint, Pipes, Account, ACMPCA, Bedrock, CloudControl, CodeBuild, CodeConnections, CodeDeploy, CodePipeline, ElasticTranscoder, MemoryDb, Shield, VerifiedPermissions,
Dsql, S3Tables, BedrockRuntime, CodeArtifact, DatabaseMigrationService, IdentityStore, ManagedBlockchain, SsoAdmin, Textract, LambdaWeb, S3Files,
];

private AwsServiceEndpointMetadata(string serviceId, string cliName, string endPointPattern, int port, AwsService @enum)
Expand Down Expand Up @@ -204,4 +216,4 @@ public override string ToString()
{
return $"{ServiceId} - {CliName} - {Port}";
}
}
}
Loading
Loading