<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://lambdaopenapi.dev/blog/</id>
    <title>LambdaOpenApi Blog</title>
    <updated>2025-12-21T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://lambdaopenapi.dev/blog/"/>
    <subtitle>LambdaOpenApi Blog</subtitle>
    <icon>https://lambdaopenapi.dev/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[LambdaOpenApi v1.1 — Introducing the LambdaOpenApi Merge Tool]]></title>
        <id>https://lambdaopenapi.dev/blog/lambdaopenapi-v1.1-release/</id>
        <link href="https://lambdaopenapi.dev/blog/lambdaopenapi-v1.1-release/"/>
        <updated>2025-12-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[As serverless applications grow, APIs rarely live in a single project for long.]]></summary>
        <content type="html"><![CDATA[<p>As serverless applications grow, APIs rarely live in a single project for long.</p>
<p>Teams break functionality into focused Lambda Annotation projects, deploy them independently, and often place them behind a single API Gateway. The architecture scales beautifully—but documentation doesn’t always keep up.</p>
<p>With LambdaOpenApi 1.1.0, we’re introducing a new capability designed specifically for this reality:
the OpenAPI Schema Merge Tool.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-problem-we-kept-running-into">The Problem We Kept Running Into<a href="https://lambdaopenapi.dev/blog/lambdaopenapi-v1.1-release/#the-problem-we-kept-running-into" class="hash-link" aria-label="Direct link to The Problem We Kept Running Into" title="Direct link to The Problem We Kept Running Into" translate="no">​</a></h2>
<p>LambdaOpenApi has always focused on producing accurate, compile-time OpenAPI specifications directly from your Lambda code. That works extremely well—right up until you have:</p>
<ul>
<li class="">Multiple Lambda Annotation projects</li>
<li class="">One shared API Gateway</li>
<li class="">A desire for one authoritative API definition</li>
</ul>
<p>What you end up with is a collection of perfectly valid OpenAPI specs… and no clean way to present them as a single platform API.</p>
<p>This friction shows up everywhere:</p>
<ul>
<li class="">Documentation portals feel fragmented</li>
<li class="">SDK generation becomes awkward</li>
<li class="">Gateway-level validation and tooling expect one spec, not many</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="introducing-the-openapi-merge-tool">Introducing the OpenAPI Merge Tool<a href="https://lambdaopenapi.dev/blog/lambdaopenapi-v1.1-release/#introducing-the-openapi-merge-tool" class="hash-link" aria-label="Direct link to Introducing the OpenAPI Merge Tool" title="Direct link to Introducing the OpenAPI Merge Tool" translate="no">​</a></h2>
<p>LambdaOpenApi 1.1.0 adds a first-class solution to this problem.</p>
<p>The new OpenAPI Merge Tool allows you to combine multiple OpenAPI specifications into one unified definition, while preserving the boundaries and intent of each underlying service.</p>
<p>It’s designed for teams that:</p>
<ul>
<li class="">Implement APIs across multiple Lambda Annotation projects</li>
<li class="">Deploy those APIs behind a shared API Gateway</li>
<li class="">Want a clean, consolidated OpenAPI document for docs, tooling, or governance</li>
</ul>
<p>Most importantly, it does this without forcing you to change how you structure or deploy your services.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="designed-for-real-world-serverless-architectures">Designed for Real-World Serverless Architectures<a href="https://lambdaopenapi.dev/blog/lambdaopenapi-v1.1-release/#designed-for-real-world-serverless-architectures" class="hash-link" aria-label="Direct link to Designed for Real-World Serverless Architectures" title="Direct link to Designed for Real-World Serverless Architectures" translate="no">​</a></h2>
<p>This release isn’t about squeezing everything back into a monolith.</p>
<p>The merge tool respects the reality of modern serverless systems:</p>
<ul>
<li class="">Independent services</li>
<li class="">Independent deployments</li>
<li class="">Shared infrastructure at the edge</li>
</ul>
<p>You can namespace APIs, keep schemas distinct, and still present a cohesive platform surface—something that’s historically been painful to achieve without custom scripts or fragile build steps.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-natural-extension-of-lambdaopenapi">A Natural Extension of LambdaOpenApi<a href="https://lambdaopenapi.dev/blog/lambdaopenapi-v1.1-release/#a-natural-extension-of-lambdaopenapi" class="hash-link" aria-label="Direct link to A Natural Extension of LambdaOpenApi" title="Direct link to A Natural Extension of LambdaOpenApi" translate="no">​</a></h2>
<p>LambdaOpenApi has always been opinionated about one thing:
your OpenAPI spec should reflect your code, not drift from it.</p>
<p>The merge tool extends that philosophy one step further:</p>
<ul>
<li class="">Generate specs at compile time</li>
<li class="">Merge them intentionally</li>
<li class="">Publish a single source of truth</li>
</ul>
<p><em>No hand-edited mega-specs. No guesswork. No duct tape.</em></p>
<h1>What This Means Going Forward</h1>
<p>LambdaOpenApi 1.1.0 lays the groundwork for:</p>
<p>Better platform-level documentation</p>
<ul>
<li class="">Cleaner API Gateway configurations</li>
<li class="">Easier client and SDK generation</li>
<li class="">More confidence as systems scale</li>
</ul>
<p>If you’re already using LambdaOpenApi across multiple services, this release is designed to fit directly into your existing workflow.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-learn-more-and-get-started">📖 Learn more and get started:<a href="https://lambdaopenapi.dev/blog/lambdaopenapi-v1.1-release/#-learn-more-and-get-started" class="hash-link" aria-label="Direct link to 📖 Learn more and get started:" title="Direct link to 📖 Learn more and get started:" translate="no">​</a></h2>
<p>Check out the <a class="" href="https://lambdaopenapi.dev/docs/tools/merge/">full documentation</a> for the OpenAPI Merge Tool to see how it fits into your architecture.</p>]]></content>
        <author>
            <name>Dan Guisinger</name>
            <uri>https://danguisinger.com</uri>
        </author>
        <category label="Release" term="Release"/>
        <category label="Announcement" term="Announcement"/>
        <category label="LambdaOpenAPI" term="LambdaOpenAPI"/>
        <category label=".NET" term=".NET"/>
        <category label="AWS" term="AWS"/>
        <category label="merge" term="merge"/>
        <category label="microservices" term="microservices"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[LambdaOpenApi v1.0 Released!]]></title>
        <id>https://lambdaopenapi.dev/blog/lambdaopenapi-v1-release/</id>
        <link href="https://lambdaopenapi.dev/blog/lambdaopenapi-v1-release/"/>
        <updated>2025-12-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We’re excited to announce the official v1.0 release of LambdaOpenApi — now available on NuGet!]]></summary>
        <content type="html"><![CDATA[<p>We’re excited to announce the official v1.0 release of LambdaOpenApi — now available on NuGet!</p>
<p>LambdaOpenApi grew out of an internal tool we built to support our own production AWS Lambda applications.
After using it successfully in real workloads, we refined it, generalized it, and open-sourced it so the broader .NET and Lambda community can benefit from the same streamlined OpenAPI workflow.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-lambdaopenapi">What is LambdaOpenApi?<a href="https://lambdaopenapi.dev/blog/lambdaopenapi-v1-release/#what-is-lambdaopenapi" class="hash-link" aria-label="Direct link to What is LambdaOpenApi?" title="Direct link to What is LambdaOpenApi?" translate="no">​</a></h2>
<p>LambdaOpenApi is a lightweight, compile-time OpenAPI generator for AWS Lambda Annotations .NET applications.
Define your API with simple C# attributes and get a complete OpenAPI 3.x document at build time — no runtime work, no manual YAML, and no drift.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="install">Install<a href="https://lambdaopenapi.dev/blog/lambdaopenapi-v1-release/#install" class="hash-link" aria-label="Direct link to Install" title="Direct link to Install" translate="no">​</a></h2>
<p>Using the .NET CLI:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">dotnet add package Oproto.Lambda.OpenApi</span><br></span></code></pre></div></div>
<p>Or via the NuGet Package Manager:</p>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Install-Package Oproto.Lambda.OpenApi</span><br></span></code></pre></div></div>
<p>📦 <a href="https://www.nuget.org/packages/Oproto.Lambda.OpenApi" target="_blank" rel="noopener noreferrer" class="">NuGet Package</a></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="key-features">Key Features<a href="https://lambdaopenapi.dev/blog/lambdaopenapi-v1-release/#key-features" class="hash-link" aria-label="Direct link to Key Features" title="Direct link to Key Features" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="zero-runtime-overhead">Zero Runtime Overhead<a href="https://lambdaopenapi.dev/blog/lambdaopenapi-v1-release/#zero-runtime-overhead" class="hash-link" aria-label="Direct link to Zero Runtime Overhead" title="Direct link to Zero Runtime Overhead" translate="no">​</a></h3>
<p>Fully compile-time generation using C# source generators — no reflection, no startup scanning, and no cold-start impact.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="seamless-lambda-annotations-integration">Seamless Lambda Annotations Integration<a href="https://lambdaopenapi.dev/blog/lambdaopenapi-v1-release/#seamless-lambda-annotations-integration" class="hash-link" aria-label="Direct link to Seamless Lambda Annotations Integration" title="Direct link to Seamless Lambda Annotations Integration" translate="no">​</a></h3>
<p>Works directly with AWS Lambda Annotations (HTTP attributes, request/response types, errors, and more).</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="strongly-typed-api-definitions">Strongly Typed API Definitions<a href="https://lambdaopenapi.dev/blog/lambdaopenapi-v1-release/#strongly-typed-api-definitions" class="hash-link" aria-label="Direct link to Strongly Typed API Definitions" title="Direct link to Strongly Typed API Definitions" translate="no">​</a></h3>
<p>Describe your entire API surface using C# attributes. Routes, inputs, outputs, and metadata stay clean and discoverable.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="openapi-3x-compliant">OpenAPI 3.x Compliant<a href="https://lambdaopenapi.dev/blog/lambdaopenapi-v1-release/#openapi-3x-compliant" class="hash-link" aria-label="Direct link to OpenAPI 3.x Compliant" title="Direct link to OpenAPI 3.x Compliant" translate="no">​</a></h3>
<p>Produces a complete, standards-compliant OpenAPI document your tooling can rely on.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="getting-started">Getting Started<a href="https://lambdaopenapi.dev/blog/lambdaopenapi-v1-release/#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started" translate="no">​</a></h2>
<p>Follow the <a class="" href="https://lambdaopenapi.dev/docs/getting-started/">Getting Started guide</a> on our documentation site to generate your first OpenAPI spec in minutes.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="feedback--contributions">Feedback &amp; Contributions<a href="https://lambdaopenapi.dev/blog/lambdaopenapi-v1-release/#feedback--contributions" class="hash-link" aria-label="Direct link to Feedback &amp; Contributions" title="Direct link to Feedback &amp; Contributions" translate="no">​</a></h2>
<p>LambdaOpenApi aims to remain small, stable, and focused — but your feedback helps keep it sharp.
If you discover any issues or have suggestions, feel free to open an issue on GitHub.</p>
<p>Thank you for trying out LambdaOpenApi — we hope it makes your Lambda development experience simpler and smoother!</p>]]></content>
        <author>
            <name>Dan Guisinger</name>
            <uri>https://danguisinger.com</uri>
        </author>
        <category label="Release" term="Release"/>
        <category label="Announcement" term="Announcement"/>
        <category label="LambdaOpenAPI" term="LambdaOpenAPI"/>
        <category label=".NET" term=".NET"/>
        <category label="AWS" term="AWS"/>
    </entry>
</feed>