π Quick Start:
dotnet add package LocalStack.Client --version 2.0.0
(AWS SDK v4) | Installation Guide | GA Timeline
v2.0.0 is live with complete AWS SDK v4 support - easier migration than expected!
- β 1,168 tests passing across all frameworks
- β Minimal breaking changes (just .NET Framework 4.6.2 β 4.7.2 and AWS SDK v3 β v4)
- β Public APIs unchanged - your code should work as-is!
- π Read Full Roadmap
Version Strategy:
- v2.x (AWS SDK v4) active development on master branch
- v1.x (AWS SDK v3) Available on sdkv3-lts branch, maintenance until July 2026
Localstack.NET is an easy-to-use .NET client for LocalStack, a fully functional local AWS cloud stack. The client library provides a thin wrapper around aws-sdk-net which automatically configures the target endpoints to use LocalStack for your local cloud application development.
Headsβup for
dotnet publish -p:PublishAot=true
/PublishTrimmed=true
users
-
v2.0.0 GA ships without Nativeβ―AOT support.
The current build still relies on reflection for some AWS SDK internals.- Public entry points that touch reflection are tagged with
[RequiresDynamicCode]
/[RequiresUnreferencedCode]
. - Youβll see IL3050 / IL2026 warnings at compile time (promoted to errors in a strict AOT publish).
- Public entry points that touch reflection are tagged with
-
We already ship a linker descriptor with
LocalStack.Client.Extensions
to keep the privateClientFactory<T>
machinery alive. Nothing to configure for that part. -
Until the reflectionβfree, sourceβgenerated path lands (work in progress in
draftΒ PRβ―#49 and tracked on
roadmapΒ #48):-
Suppress the warnings in your app or call only the APIs that donβt rely on reflection.
-
Add a tiny serviceβspecific linker descriptor for every
AWSSDK.*
package you reference
(S3, DynamoDB, etc.). For example, for S3:<!-- ILLink.Descriptors.xml --> <linker> <assembly fullname="AWSSDK.S3"> <type fullname="Amazon.S3.AmazonS3Client" /> <type fullname="Amazon.S3.Internal.AmazonS3Metadata" /> <type fullname="Amazon.S3.AmazonS3Config" /> </assembly> <!-- LocalStack options classes already carry [DAM] attributes, but you can include them if you prefer explicit rules --> <assembly fullname="LocalStack.Client"> <type fullname="LocalStack.Client.Options.LocalStackOptions" /> <type fullname="LocalStack.Client.Options.SessionOptions" /> <type fullname="LocalStack.Client.Options.ConfigOptions" /> </assembly> </linker>
-
Wire it into your project once:
<ItemGroup> <TrimmerRootDescriptor Include="ILLink.Descriptors.xml" /> </ItemGroup>
-
If you hit a runtime βmissing memberβ error, ensure youβre on AWSΒ SDKΒ v4 β₯β―4.1.* and that the concrete
AWSSDK.*
package youβre using is included in the descriptor above.
-
Planned β v2.1 will introduce an AOTβfriendly factory that avoids reflection entirely; once you migrate to that API these warnings and extra XML files go away.
Package | NuGet.org | GitHub Packages (Nightly) |
---|---|---|
LocalStack.Client v1.x | ||
LocalStack.Client v2.x | ||
LocalStack.Client.Extensions v1.x | ||
LocalStack.Client.Extensions v2.x |
- Supported Platforms
- Why LocalStack.NET Client?
- Prerequisites
- Getting Started
- Known Issues
- Developing
- Changelog
- License
-
Consistent Client Configuration: LocalStack.NET eliminates the need for manual endpoint configuration, providing a standardized and familiar approach to initializing clients.
-
Adaptable Environment Transition: Easily switch between LocalStack and actual AWS services with minimal configuration changes.
-
Versatile .NET Compatibility: Supports a broad spectrum of .NET versions, from .NET 9.0 and .NET Standard 2.0 to .NET Framework 4.6.2 and above.
-
Reduced Learning Curve: Offers a familiar interface tailored for LocalStack, ideal for developers acquainted with the AWS SDK for .NET.
-
Enhanced Development Speed: Reduces boilerplate and manual configurations, speeding up the development process.
To utilize this library, you need to have LocalStack running. While LocalStack can be installed directly on your machine and accessed via the localstack cli, the recommended approach is to run LocalStack using Docker or docker-compose.
For detailed installation and setup instructions, please refer to the official LocalStack installation guide.
LocalStack.NET is available through multiple package sources to support different development workflows.
To install the latest version of LocalStack.NET with AWS SDK v4 support, use the following command:
# Install v2.0.0 with AWS SDK v4 support
dotnet add package LocalStack.Client --version 2.0.0
dotnet add package LocalStack.Client.Extensions --version 2.0.0
For testing latest features and bug fixes:
# Add GitHub Packages source
dotnet nuget add source https://nuget.pkg.github.com/localstack-dotnet/index.json \
--name github-localstack \
--username YOUR_GITHUB_USERNAME \
--password YOUR_GITHUB_TOKEN
# Install development packages
dotnet add package LocalStack.Client --prerelease --source github-localstack
dotnet add package LocalStack.Client.Extensions --prerelease --source github-localstack
π GitHub Packages Authentication: You'll need a GitHub account and Personal Access Token with
read:packages
permission.
Refer to documentation for more information on how to install LocalStack.NET.
LocalStack.NET
is a library that provides a wrapper around the aws-sdk-net. This means you can use it in a similar way to the AWS SDK for .NET
and to AWSSDK.Extensions.NETCore.Setup with a few differences. For more on how to use the AWS SDK for .NET, see Getting Started with the AWS SDK for .NET.
Here's a basic example of how to setup LocalStack.NET
:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddLocalStack(Configuration)
services.AddDefaultAWSOptions(Configuration.GetAWSOptions());
services.AddAwsService<IAmazonS3>();
services.AddAwsService<IAmazonDynamoDB>();
}
The AddLocalStack
method integrates LocalStack.NET into your application, and the AddAwsService
method allows you to specify which AWS services you want to use with LocalStack.
(Alternatively, AddAWSServiceLocalStack
method can be used to prevent mix-up with AddAWSService
.)
AddLocalStack
extension method is responsible for both configurations and adding of LocalStack.Client
dependencies to service collection.
To configure LocalStack.NET, you can use entries in the appsettings.json files. Here's a basic example for different environments:
appsettings.Development.json
"LocalStack": {
"UseLocalStack": true,
"Session": {
"RegionName": "eu-central-1"
},
"Config": {
"LocalStackHost": "localhost.localstack.cloud", // or "localhost",
"EdgePort": 4566
}
}
appsettings.Production.json
"LocalStack": {
"UseLocalStack": false
},
"AWS": {
"Profile": "<your aws profile>",
"Region": "eu-central-1"
}
The RegionName
is important as LocalStack creates resources based on the specified region. For more advanced configurations and understanding how LocalStack.NET operates with LocalStack, refer to documentation.
-
SNS with LocalStack v3.7.2 and v3.8.0: During development on the new version, it was discovered that SNS functional tests are not working in LocalStack versions v3.7.2 and v3.8.0. This issue was reported in LocalStack issue #11652. The LocalStack team identified a bug related to handling SNS URIs and resolved it in PR #11653. The fix will be included in an upcoming release of LocalStack. In the meantime, if you're using SNS, it is recommended to stick to version v3.7.1 of LocalStack until the fix is available.
-
LocalStack Versions v2.0.1 - v2.2: In versions v2.0.1 through v2.2 of LocalStack, the URL routing logic was changed, causing issues with SQS and S3 operations. Two issues were opened in LocalStack regarding this: issue #8928 and issue #8924. LocalStack addressed this problem with PR #8962. Therefore, when using LocalStack.NET, either use version v2.0 of LocalStack (there are no issues with the v1 series as well) or the upcoming v2.3 version, or use the latest v3 series container from Docker Hub.
-
AWS_SERVICE_URL Environment Variable: Unexpected behaviors might occur in LocalStack.NET when the
AWS_SERVICE_URL
environment variable is set. This environment variable is typically set by LocalStack in the container when using AWS Lambda, and AWS also uses this environment variable in the live environment. Soon, just like in LocalStack's official Python library, this environment variable will be prioritized by LocalStack.NET when configuring the LocalStack host, and there will be a general simplification in the configuration. You can follow this in the issues issue #27 and issue #32. You set theAWS_SERVICE_URL
to empty string until this issue is resolved.
Environment.SetEnvironmentVariable("AWS_SERVICE_URL", string.Empty);
-
IAmazonLambda Operations: There's a general issue with
IAmazonLambda
operations. This matter is currently under investigation. -
AWSSDK.SQS Compatibility: Starting from version
3.7.300.*
ofAWSSDK.SQS
, there are compatibility issues with LocalStack v1 and v2 series versions. The v3 series of LocalStack does not have these issues. Therefore, it is recommended to either update your LocalStack container to the v3 series or downgrade yourAWSSDK.SQS
to version3.7.200.*
if you are using LocalStack v1 or v2 series containers. It is important to note that this is not a problem related to LocalStack.NET, but rather an issue with the LocalStack container and the AWS SDK for .NET.
We appreciate contributions in the form of feedback, bug reports, and pull requests.
To build the project, use the following commands based on your operating system:
Windows
build.ps1
Linux
./build.sh
The LocalStack .NET repository includes several sandbox console applications located in tests/sandboxes. These applications serve both as testing tools and as examples. Refer to the documentation for more information
To execute the tests, use the commands below:
Windows
build.ps1 --target=tests
Linux
./build.sh --target=tests
Please refer to CHANGELOG.md
to see the complete list of changes for each release.
Licensed under MIT, see LICENSE for the full text.