https://twitter.com/denizirgin
📝Full Release Notes: github.com/localstack-d...
cc: @davidfowl.com
📝Full Release Notes: github.com/localstack-d...
cc: @davidfowl.com
Originally, the plan was to keep separate monorepos for .NET and Go because of the tooling complexity.
Looks like we might actually move to a single backend repo 💯
We’re even joking about just migrating into existing frontend mono repo😀
Originally, the plan was to keep separate monorepos for .NET and Go because of the tooling complexity.
Looks like we might actually move to a single backend repo 💯
We’re even joking about just migrating into existing frontend mono repo😀
The NX team nailed the hard stuff, affected, caching, all the things that usually make you cry in monorepo 😅
In just a few hours, I moved my .NET playground repo over, tweaked the CI/CD pipeline, and it just worked.
It felt like black magic 🚀
The NX team nailed the hard stuff, affected, caching, all the things that usually make you cry in monorepo 😅
In just a few hours, I moved my .NET playground repo over, tweaked the CI/CD pipeline, and it just worked.
It felt like black magic 🚀
The frontend folks in the company have been using NX for years, so we figured, even though we weren’t exactly fans, let’s give it a shot.
Turns out, NX actually has plugins for both .NET and Go 🤯
The frontend folks in the company have been using NX for years, so we figured, even though we weren’t exactly fans, let’s give it a shot.
Turns out, NX actually has plugins for both .NET and Go 🤯
github.com/localstack-d...
github.com/localstack-d...
🏎️ .NET 9 Native AOT Lambda Functions
✨ .NET Aspire Host orchestration
☁️ AWS Aspire Integrations
🧑💻 LocalStack for local development
cc: @davidfowl.com
🏎️ .NET 9 Native AOT Lambda Functions
✨ .NET Aspire Host orchestration
☁️ AWS Aspire Integrations
🧑💻 LocalStack for local development
cc: @davidfowl.com
While I managed to get the cold start under 100ms, things naturally change when network calls (Nuget and Github Api, DynamoDb etc.) come into play.
Still, in stress tests running at 1,000 RPM, I observed a max memory consumption of only 60MB💪
While I managed to get the cold start under 100ms, things naturally change when network calls (Nuget and Github Api, DynamoDb etc.) come into play.
Still, in stress tests running at 1,000 RPM, I observed a max memory consumption of only 60MB💪
The deployment pipeline is reusable, and the entire CDK Stack can be deployed to any AWS Account, making it super flexible for anyone to host.
The deployment pipeline is reusable, and the entire CDK Stack can be deployed to any AWS Account, making it super flexible for anyone to host.
Still, it's a strong starting point. While I'm building this for a specific need, it will be also a production-ready .NET Aspire sample🎯
Still, it's a strong starting point. While I'm building this for a specific need, it will be also a production-ready .NET Aspire sample🎯
• InvariantGlobalization=true: Shrinks package size and cuts init time if you don't need culture-specific behavior.
• TrimMode=full: Enables aggressive trimming. Start with partial first to ensure stability.
• InvariantGlobalization=true: Shrinks package size and cuts init time if you don't need culture-specific behavior.
• TrimMode=full: Enables aggressive trimming. Start with partial first to ensure stability.
📦 ~10-15% smaller function size
⏱️ ~15 ms faster init times
🚀 Higher overall performance
I honestly can’t imagine what .NET 10 will bring
📦 ~10-15% smaller function size
⏱️ ~15 ms faster init times
🚀 Higher overall performance
I honestly can’t imagine what .NET 10 will bring
• Runtime: Use AWS’s provided.al2023. I measured a ~15 ms faster init vs. the official dotnet8 runtime.
• Architecture: arm64 beats amd64. Expect a 10-15% smaller package, lower memory usage, and ~10 ms faster bootstrap.
• Runtime: Use AWS’s provided.al2023. I measured a ~15 ms faster init vs. the official dotnet8 runtime.
• Architecture: arm64 beats amd64. Expect a 10-15% smaller package, lower memory usage, and ~10 ms faster bootstrap.
A compile-time flag can strip the entire dependency, cutting package size and saving ~30ms on init + ~15ms per call. I only enable it when I need to debug. Instantiate the SDK directly, NO DI
A compile-time flag can strip the entire dependency, cutting package size and saving ~30ms on init + ~15ms per call. I only enable it when I need to debug. Instantiate the SDK directly, NO DI
Microsoft.Extensions.Logging adds a ~20 ms cold start overhead. I kept it for its structured logging features, but for absolute maximum performance, fall back to the basic LambdaContext.Logger.
Microsoft.Extensions.Logging adds a ~20 ms cold start overhead. I kept it for its structured logging features, but for absolute maximum performance, fall back to the basic LambdaContext.Logger.
Technically they work, but the overhead is huge:
• Generic Host alone: Adds ~70-80 ms
• DIY ServiceCollection/ConfigBuilder: Still adds ~30 ms
Technically they work, but the overhead is huge:
• Generic Host alone: Adds ~70-80 ms
• DIY ServiceCollection/ConfigBuilder: Still adds ~30 ms
🔮NO Reflection, NO dynamic code. The compiler will warn you anyway.
🛠️ALWAYS use Source Generation. For JSON, regex, etc. Even outside of AOT, this is the way. It boosts performance and can cut memory allocations💡
🔮NO Reflection, NO dynamic code. The compiler will warn you anyway.
🛠️ALWAYS use Source Generation. For JSON, regex, etc. Even outside of AOT, this is the way. It boosts performance and can cut memory allocations💡
I started at 250ms Init / 50MB memory, now down to just 77ms / 28MB. The package is 3.5MB zipped. 📉
Here are my insights and key takeaways 👇
I started at 250ms Init / 50MB memory, now down to just 77ms / 28MB. The package is 3.5MB zipped. 📉
Here are my insights and key takeaways 👇
🌴 On vacation for 2 weeks, so won’t be around much. Feedback here 👇
🔗 github.com/localstack-d...
🌴 On vacation for 2 weeks, so won’t be around much. Feedback here 👇
🔗 github.com/localstack-d...
🔗 github.com/localstack-d...
🔗 github.com/localstack-d...
A great example of Aspire and LocalStack in action.
🔗 github.com/Blind-Strike...
A great example of Aspire and LocalStack in action.
🔗 github.com/Blind-Strike...