<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Microcks Blog</title>
        <link>https://microcks.io/blog/</link>
        <description>Microcks Blog</description>
        <lastBuildDate>Fri, 16 Oct 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Streamline Your API Testing with Microcks GitLab Components]]></title>
            <link>https://microcks.io/blog/gitlab-ci-component/</link>
            <guid>https://microcks.io/blog/gitlab-ci-component/</guid>
            <pubDate>Fri, 16 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Discover how to seamlessly integrate API mocking and testing into your GitLab CI/CD pipelines using the new Microcks GitLab Components]]></description>
            <content:encoded><![CDATA[<p>In today's fast-paced development environment, API testing and contract validation are critical to shipping reliable software. But how do you efficiently integrate these practices into your GitLab CI/CD pipelines without complex configurations? That's exactly what we're solving with the <strong>Microcks GitLab Components</strong>!</p>
<p>A reusable CI/CD components is now available in the <a href="https://gitlab.com/explore/catalog/microcks-cncf/microcks-community/microcks-gitlab-components" target="_blank" rel="noopener noreferrer" class="">GitLab CI/CD Catalog</a>. These components make it incredibly easy to import API artifacts and run contract conformance tests directly from your pipeline—with just a few lines of YAML!</p>
<p>By leveraging GitLab Components, we've made Microcks integration as simple as including a component reference in your pipeline configuration. Let's see how!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-you-can-do-with-microcks-gitlab-components">What You Can Do with Microcks GitLab Components<a href="https://microcks.io/blog/gitlab-ci-component/#what-you-can-do-with-microcks-gitlab-components" class="hash-link" aria-label="Direct link to What You Can Do with Microcks GitLab Components" title="Direct link to What You Can Do with Microcks GitLab Components" translate="no">​</a></h2>
<p>The Microcks GitLab Components provide two main capabilities:</p>
<ol>
<li class=""><strong>Import API Artifacts</strong> - Push your OpenAPI, AsyncAPI, Postman collections, and other specifications into your Microcks instance</li>
<li class=""><strong>Run Contract Tests</strong> - Validate that your deployed API endpoints conform to their specifications</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="getting-started">Getting Started<a href="https://microcks.io/blog/gitlab-ci-component/#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="prerequisites">Prerequisites<a href="https://microcks.io/blog/gitlab-ci-component/#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites" translate="no">​</a></h3>
<p>Before you begin, make sure you have:</p>
<ul>
<li class="">A running Microcks instance with its API URL (e.g., <code>https://microcks.apps.acme.com/api/</code>)</li>
<li class="">A <a class="" href="https://microcks.io/documentation/explanations/service-account/">Service Account</a> configured in your Microcks Keycloak realm</li>
<li class="">The Service Account's <code>client_id</code> and <code>client_secret</code></li>
</ul>
<blockquote>
<p><strong>Pro tip</strong>: Store your credentials as masked GitLab CI variables for security! Navigate to Settings → CI/CD → Variables in your GitLab project and add:</p>
<ul>
<li class=""><code>MICROCKS_URL</code> → Your Microcks API endpoint</li>
<li class=""><code>KEYCLOAK_CLIENT_ID</code> → Service Account client ID</li>
<li class=""><code>KEYCLOAK_CLIENT_SECRET</code> → Service Account client secret</li>
</ul>
</blockquote>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="finding-the-components-in-the-catalog">Finding the Components in the Catalog<a href="https://microcks.io/blog/gitlab-ci-component/#finding-the-components-in-the-catalog" class="hash-link" aria-label="Direct link to Finding the Components in the Catalog" title="Direct link to Finding the Components in the Catalog" translate="no">​</a></h3>
<p>The Microcks GitLab Components are published in the <a href="https://gitlab.com/explore/catalog/microcks-cncf/microcks-community/microcks-gitlab-components" target="_blank" rel="noopener noreferrer" class="">GitLab CI/CD Catalog</a></p>
<p>From there, you can browse documentation, view available versions, and see usage examples. Let's explore how to use each component!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="importing-api-artifacts-into-microcks">Importing API Artifacts into Microcks<a href="https://microcks.io/blog/gitlab-ci-component/#importing-api-artifacts-into-microcks" class="hash-link" aria-label="Direct link to Importing API Artifacts into Microcks" title="Direct link to Importing API Artifacts into Microcks" translate="no">​</a></h2>
<p>The first component, <code>microcks-import</code>, allows you to push your API specifications into Microcks. This is perfect for keeping your mocks in sync with your latest API definitions.</p>
<p>Here's a simple example:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># .gitlab-ci.yml</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">include</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">component</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> gitlab.com/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">cncf/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">community/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">gitlab</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">components/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">import@~latest</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">inputs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">specs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"specs/weather-forecast-openapi.yml:true,specs/weather-forecast-postman.json:false"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">microcks_url</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://microcks.apps.acme.com/api/"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">keycloak_client_id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> $KEYCLOAK_CLIENT_ID</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">keycloak_client_secret</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> $KEYCLOAK_CLIENT_SECRET</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">stage</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> import</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">stages</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> import</span><br></div></code></pre></div></div>
<p>Some important things to notice here:</p>
<ul>
<li class="">You can customize the <code>stage</code> name to fit your pipeline structure</li>
<li class="">Using <code>@~latest</code> ensures you always get the most recent component version</li>
</ul>
<p>Once this runs, your API specifications will be imported into Microcks, and your development team can immediately start consuming mock endpoints!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="running-contract-conformance-tests">Running Contract Conformance Tests<a href="https://microcks.io/blog/gitlab-ci-component/#running-contract-conformance-tests" class="hash-link" aria-label="Direct link to Running Contract Conformance Tests" title="Direct link to Running Contract Conformance Tests" translate="no">​</a></h2>
<p>The second component, <code>microcks-test</code>, runs contract tests against your deployed API endpoints. This ensures your implementation matches your specification—automatically catching breaking changes before they reach production!</p>
<p>Here's how to use it:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># .gitlab-ci.yml</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">include</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">component</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> gitlab.com/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">cncf/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">community/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">gitlab</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">components/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">test@~latest</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">inputs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">api_name_version</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Weather Forecast API:1.0.0"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">test_endpoint</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://my-weather-api.example.com"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">test_runner</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"OPEN_API_SCHEMA"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">microcks_url</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://microcks.apps.acme.com/api/"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">keycloak_client_id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> $KEYCLOAK_CLIENT_ID</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">keycloak_client_secret</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> $KEYCLOAK_CLIENT_SECRET</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">stage</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> test</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">wait_for</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"15sec"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">stages</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> test</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="putting-it-all-together-a-pipeline-sample">Putting It All Together: A Pipeline sample<a href="https://microcks.io/blog/gitlab-ci-component/#putting-it-all-together-a-pipeline-sample" class="hash-link" aria-label="Direct link to Putting It All Together: A Pipeline sample" title="Direct link to Putting It All Together: A Pipeline sample" translate="no">​</a></h2>
<p>Let's see how both components work together in a real-world pipeline. <a href="https://gitlab.com/saberkan_personal/microcks-gitlab-components/-/tree/testing_components?ref_type=heads" target="_blank" rel="noopener noreferrer" class="">The following example</a> demonstrates how to import a local spec file, and how to run the test against a running API.</p>
<p>To run this example, you will need to:</p>
<ul>
<li class="">Configure <code>$MICROCKS_DN</code> and <code>$PASTRY_API_DN</code> as GitLab CI variable.</li>
<li class="">Run the <a href="https://microcks.io/documentation/tutorials/getting-started-tests/#deploying-the-api-implementation" target="_blank" rel="noopener noreferrer" class="">Pastry API</a></li>
<li class="">Configure a running <a href="https://microcks.io/documentation/guides/installation/docker-compose/#development-mode" target="_blank" rel="noopener noreferrer" class="">Microcks instance in Dev mode</a></li>
<li class="">Load the <a href="https://microcks.io/documentation/tutorials/getting-started/#loading-a-sample" target="_blank" rel="noopener noreferrer" class="">Pastry sample</a></li>
</ul>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># .gitlab-ci.yml</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">include</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">component</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> $CI_SERVER_FQDN/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">cncf/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">community/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">gitlab</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">components/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">import@~latest</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">inputs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">specs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"samples/HelloService.postman.json:true"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">microcks_url</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"http://$MICROCKS_DN:8080/api/"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">stage</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> import</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">component</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> $CI_SERVER_FQDN/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">cncf/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">community/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">gitlab</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">components/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">test@~latest </span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">inputs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">api_name_version</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"API Pastry - 2.0:2.0.0"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">test_endpoint</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"http://$PASTRY_API_DN/"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">test_runner</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"OPEN_API_SCHEMA"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">microcks_url</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"http://$MICROCKS_DN:8080/api/"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">stage</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> test</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">stages</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> import</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> test</span><br></div></code></pre></div></div>
<p>Here's the resulting pipeline in GitLab, with the import stage followed by the test stage:</p>
<p><img decoding="async" loading="lazy" alt="GitLab pipeline with the import and test stages" src="https://microcks.io/assets/images/gitlab-component-pipeline-7d61429bbe04e623aa250a57b31c472b.png" width="1966" height="506" class="img_ev3q"></p>
<p>If the contract test fails, the pipeline stops, preventing broken APIs from reaching production. It's continuous verification in action!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="version-pinning-for-stability">Version Pinning for Stability<a href="https://microcks.io/blog/gitlab-ci-component/#version-pinning-for-stability" class="hash-link" aria-label="Direct link to Version Pinning for Stability" title="Direct link to Version Pinning for Stability" translate="no">​</a></h2>
<p>While <code>@~latest</code> is great for always getting improvements, you might want stability in production pipelines. Simply specify a version:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token key atrule">include</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">component</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> gitlab.com/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">cncf/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">community/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">gitlab</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">components/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">import@0.0.2</span><br></div></code></pre></div></div>
<p>This ensures your pipeline behavior remains consistent even as new component versions are released.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="under-the-hood">Under the Hood<a href="https://microcks.io/blog/gitlab-ci-component/#under-the-hood" class="hash-link" aria-label="Direct link to Under the Hood" title="Direct link to Under the Hood" translate="no">​</a></h2>
<p>Behind the scenes, these components leverage the <a href="https://github.com/microcks/microcks-cli" target="_blank" rel="noopener noreferrer" class="">Microcks CLI</a>.</p>
<p>The beauty of GitLab Components is that all this complexity is abstracted away—you just declare what you want, and the component handles the rest!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="wrap-up">Wrap-Up<a href="https://microcks.io/blog/gitlab-ci-component/#wrap-up" class="hash-link" aria-label="Direct link to Wrap-Up" title="Direct link to Wrap-Up" translate="no">​</a></h2>
<p>With the Microcks GitLab Components, integrating API mocking and contract testing into your CI/CD pipelines has never been easier. You get:</p>
<ul>
<li class=""><strong>Simple integration</strong> - Just include the component, no complex scripts</li>
<li class=""><strong>Reusable configuration</strong> - Use across all your projects</li>
<li class=""><strong>Version control</strong> - Pin versions or stay on latest</li>
</ul>
<p>Ready to give it a try? Check out the components in the <a href="https://gitlab.com/explore/catalog/microcks-cncf/microcks-community/microcks-gitlab-components" target="_blank" rel="noopener noreferrer" class="">GitLab CI/CD Catalog</a> and start mocking!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="improve-the-gitlab-components">Improve the GitLab Components<a href="https://microcks.io/blog/gitlab-ci-component/#improve-the-gitlab-components" class="hash-link" aria-label="Direct link to Improve the GitLab Components" title="Direct link to Improve the GitLab Components" translate="no">​</a></h2>
<p>The Microcks GitLab Components are designed to cover the most common use cases, but we know there's always room for improvement! The underlying <a href="https://github.com/microcks/microcks-cli" target="_blank" rel="noopener noreferrer" class="">Microcks CLI</a> supports many <strong>advanced options</strong> and <strong>flags</strong> that aren't yet exposed as component inputs. Feel free to contribute!</p>]]></content:encoded>
            <category>open-source</category>
            <category>microcks</category>
            <category>gitlab</category>
            <category>ci</category>
        </item>
        <item>
            <title><![CDATA[Microcks is Now a CNCF Incubating Project! 🎉]]></title>
            <link>https://microcks.io/blog/microcks-incubating-cncf/</link>
            <guid>https://microcks.io/blog/microcks-incubating-cncf/</guid>
            <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[We are beyond thrilled to announce a major milestone in our journey: Microcks has officially been accepted as an Incubating project by the Cloud Native…]]></description>
            <content:encoded><![CDATA[<p>We are beyond thrilled to announce a major milestone in our journey: <strong>Microcks has officially been accepted as an Incubating project</strong> by the Cloud Native Computing Foundation (CNCF)!</p>
<p><img decoding="async" loading="lazy" alt="microcks incubating banner" src="https://microcks.io/assets/images/microcks-incubating-banner-d9c074cae58ad58aa8b8e5d1c6629bb6.jpg" width="1200" height="800" class="img_ev3q"></p>
<p>Moving from the <strong>Sandbox</strong> to the <strong>Incubating</strong> stage is a massive achievement. For the Microcks community, this isn't just a new label; it is a formal validation of our project's maturity. Reaching this level means the CNCF Technical Oversight Committee (TOC) has thoroughly reviewed and confirmed our real-world adoption, solid governance models, and rigorous security posture.</p>
<blockquote>
<p>For platform teams and enterprises evaluating tools for production-grade API mocking and testing, <strong>Incubating status</strong> represents the credibility threshold required to rely on a tool at scale.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-year-of-explosive-growth">A Year of Explosive Growth<a href="https://microcks.io/blog/microcks-incubating-cncf/#a-year-of-explosive-growth" class="hash-link" aria-label="Direct link to A Year of Explosive Growth" title="Direct link to A Year of Explosive Growth" translate="no">​</a></h2>
<p>Our momentum leading up to this announcement has been record-breaking. In the latest <a href="https://github.com/cncf/velocity#current-reports" target="_blank" rel="noopener noreferrer" class=""><strong>CNCF Projects Velocity report</strong></a> (1/1/2025 - 1/1/2026), Microcks ranked within the <strong>top <a href="https://docs.google.com/spreadsheets/d/1-NNsw5AH9SFLld6Vu76CSIhgSi0GB-0GuQFFYfrw6_g" target="_blank" rel="noopener noreferrer" class="">65 of over 236 projects</a></strong>, a testament to the sheer energy of our ecosystem.</p>
<p>This velocity is reflected in our 2025 metrics:</p>
<ul>
<li class=""><strong>Global Adoption</strong>: We saw a massive surge in usage, with annual container image downloads jumping from <strong>850k in 2024 to 2.5+ million in 2025</strong>: more than 3x growth year-over-year.</li>
<li class=""><strong>2026 Headstart</strong>: The momentum isn't slowing down; we have already reached over <strong>1.3 million downloads</strong> since January 2026 alone.</li>
<li class=""><strong>Community Depth</strong>: Our contributor base grew to <strong>167 active individuals</strong> representing <strong>35 different organizations</strong>, ensuring diverse perspectives drive our roadmap.</li>
<li class=""><strong>Trusted by Industry</strong>: We now have <strong>34 public adopters</strong>, with <strong>13 new organizations</strong> joining the list in 2025 to help demonstrate Microcks' sustainability in real-world business contexts.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-heartfelt-thank-you-to-our-community">A Heartfelt Thank You to Our Community<a href="https://microcks.io/blog/microcks-incubating-cncf/#a-heartfelt-thank-you-to-our-community" class="hash-link" aria-label="Direct link to A Heartfelt Thank You to Our Community" title="Direct link to A Heartfelt Thank You to Our Community" translate="no">​</a></h2>
<p>This milestone belongs to all of you. We are extremely proud and happy about this move, which is the direct result of years of community effort.</p>
<ul>
<li class=""><strong>Our Contributors</strong>: Your energy, code, and documentation are the heartbeat of this project.</li>
<li class=""><strong>Our Adopters</strong>: A special thank you to our <a href="https://github.com/microcks/.github/blob/main/ADOPTERS.md" target="_blank" rel="noopener noreferrer" class="">public adopters</a> who rely on Microcks in real-world, business-critical contexts.</li>
<li class=""><strong>Our Sponsor</strong>: We owe a debt of gratitude to <a href="https://www.postman.com/" target="_blank" rel="noopener noreferrer" class="">Postman</a>, our sponsor for the past three years. Their graceful support and belief in open source collaboration have been instrumental in our growth.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="gratitude-to-the-cncf">Gratitude to the CNCF<a href="https://microcks.io/blog/microcks-incubating-cncf/#gratitude-to-the-cncf" class="hash-link" aria-label="Direct link to Gratitude to the CNCF" title="Direct link to Gratitude to the CNCF" translate="no">​</a></h2>
<p>We want to thank the <strong>CNCF</strong> <a href="https://www.cncf.io/people/technical-oversight-committee/" target="_blank" rel="noopener noreferrer" class="">TOC</a>, <strong>TAG</strong> App Delivery, and the broader <strong>CNCF team</strong> for their invaluable support and guidance throughout this process. We are staunch promoters of the <strong>"Better Together"</strong> approach, and this collaboration reinforces how complementary cloud native projects can deliver greater value to end users.</p>
<blockquote>
<p>A <strong>special kudos to</strong> <a href="https://www.cncf.io/people/technical-oversight-committee/?p=katie-gamanji&amp;_sf_s=katie+gamanji" target="_blank" rel="noopener noreferrer" class="">Katie Gamanji</a>, who served as the Microcks sponsor over the past several months. We deeply appreciated her feedback and help in refining key aspects of our incubating application; her collaboration was essential to making this happen.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="understanding-the-journey">Understanding the Journey<a href="https://microcks.io/blog/microcks-incubating-cncf/#understanding-the-journey" class="hash-link" aria-label="Direct link to Understanding the Journey" title="Direct link to Understanding the Journey" translate="no">​</a></h2>
<p>For those interested in the rigorous process and "due diligence" behind this promotion, we invite you to explore the full details here:</p>
<ul>
<li class=""><strong>Microcks Incubation Application</strong>: <a href="https://github.com/cncf/toc/issues/1552" target="_blank" rel="noopener noreferrer" class="">GitHub Issue #1552</a></li>
<li class=""><strong>Microcks Due Diligence</strong>: <a href="https://github.com/cncf/toc/pull/2038" target="_blank" rel="noopener noreferrer" class="">GitHub Pull Request #2038</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="looking-ahead-the-future-of-api-mocking">Looking Ahead: The Future of API Mocking<a href="https://microcks.io/blog/microcks-incubating-cncf/#looking-ahead-the-future-of-api-mocking" class="hash-link" aria-label="Direct link to Looking Ahead: The Future of API Mocking" title="Direct link to Looking Ahead: The Future of API Mocking" translate="no">​</a></h2>
<p>As we enter this new chapter in 2026, our mission remains unchanged, but our resolve is stronger. We are ready to keep growing and become the <strong>de facto standard</strong> for open source API mocking and testing.</p>
<blockquote>
<p>We empower cloud native developers to level up their API execution. By leveraging our mocking and sandboxing capabilities, organizations can accelerate the adoption of microservices while ensuring conformance testing never bottlenecks innovation.</p>
</blockquote>
<p><strong>Let’s keep building the future of API testing together !</strong></p>]]></content:encoded>
            <category>Featured</category>
        </item>
        <item>
            <title><![CDATA[Microcks 1.14.0 release 🚀]]></title>
            <link>https://microcks.io/blog/microcks-1.14.0-release/</link>
            <guid>https://microcks.io/blog/microcks-1.14.0-release/</guid>
            <pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[We are thrilled to announce the 1.14.0 release of Microcks, the CNCF's open-source cloud-native tool for API Mocking and Testing!]]></description>
            <content:encoded><![CDATA[<p>We are thrilled to announce the <code>1.14.0</code> release of Microcks, the <a href="https://landscape.cncf.io/?selected=microcks" target="_blank" rel="noopener noreferrer" class="">CNCF</a>'s open-source cloud-native tool for API Mocking and Testing! 🚀</p>
<p>This release marks a significant milestone in our journey to provide the <strong>most comprehensive simulation environment for modern architectures</strong>. As distributed systems become more complex, the lines between synchronous and asynchronous interactions blur. Microcks <code>1.14.0</code> bridges these worlds with powerful new features for <a href="https://www.openapis.org/" target="_blank" rel="noopener noreferrer" class="">OpenAPI</a> and <a href="https://www.asyncapi.com/" target="_blank" rel="noopener noreferrer" class="">AsyncAPI</a>, allowing you to <strong>simulate sophisticated business flows with ease</strong>.</p>
<p><img decoding="async" loading="lazy" alt="microcks-feature" src="https://microcks.io/assets/images/microcks-1.14.0-feature-a1ed4edd446d19f78a5f8f68b15780af.png" width="1200" height="799" class="img_ev3q"></p>
<p>Below are the highlights of this major release.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="simulating-openapi-callbacks-️">Simulating OpenAPI Callbacks 🛎️<a href="https://microcks.io/blog/microcks-1.14.0-release/#simulating-openapi-callbacks-%EF%B8%8F" class="hash-link" aria-label="Direct link to Simulating OpenAPI Callbacks 🛎️" title="Direct link to Simulating OpenAPI Callbacks 🛎️" translate="no">​</a></h2>
<p>In the OpenAPI v3 specification, <strong>Callbacks</strong> are used to describe asynchronous, out-of-band requests that your service sends back in response to a specific event (like a payment confirmation or a long-running registration process).</p>
<p>Microcks <code>1.14.0</code> now fully supports the simulation of these callbacks. You can now define ordered, contextual, and asynchronous callback sequences. By using the <code>x-microcks-callback.order</code> extension, you can ensure that notifications are sent in the exact order your business logic requires, using data captured from the initial request to make the simulation realistic.</p>
<p><img decoding="async" loading="lazy" alt="openai-callbacks-timelines" src="https://microcks.io/assets/images/microcks-1.14.0-callbacks-4ca805ad3d458e93b0b67b63b68b8b18.png" width="1040" height="723" class="img_ev3q"></p>
<blockquote>
<p>Check out the <a class="" href="https://microcks.io/documentation/guides/usage/openapi-callbacks/">OpenAPI Callbacks guide</a> to see how to implement this in your mocks.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-for-openapi-webhooks-">Support for OpenAPI Webhooks 🎣<a href="https://microcks.io/blog/microcks-1.14.0-release/#support-for-openapi-webhooks-" class="hash-link" aria-label="Direct link to Support for OpenAPI Webhooks 🎣" title="Direct link to Support for OpenAPI Webhooks 🎣" translate="no">​</a></h2>
<p>While callbacks are tied to a specific request, <strong>Webhooks</strong> represent a stream of events that consumers can subscribe to independently. They are essential for modeling event-driven behaviors within a RESTful ecosystem.</p>
<p>With this release, Microcks introduces a dedicated <strong>Manage Webhooks</strong> UI and API. This allows you to register subscribers, configure the frequency of events, set expiration delays, and even monitor delivery errors. It’s never been easier to simulate a live stream of "New Pet" or "Order Updated" events for your consumers!</p>
<p><img decoding="async" loading="lazy" alt="openai-webhooks-timelines" src="https://microcks.io/assets/images/microcks-1.14.0-webhooks-08eff79df04bb646c0bdc660b8ccdddc.png" width="1089" height="878" class="img_ev3q"></p>
<blockquote>
<p>Dive into our <a class="" href="https://microcks.io/documentation/guides/usage/openapi-webhooks/">OpenAPI Webhooks documentation</a> for a full walkthrough.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sync-to-async-triggers-️">Sync-to-Async Triggers ⚡️<a href="https://microcks.io/blog/microcks-1.14.0-release/#sync-to-async-triggers-%EF%B8%8F" class="hash-link" aria-label="Direct link to Sync-to-Async Triggers ⚡️" title="Direct link to Sync-to-Async Triggers ⚡️" translate="no">​</a></h2>
<p>In modern cloud-native apps, a common pattern is a "Sync-to-Async" flow: a user hits a REST endpoint (Sync), which then triggers an event on a message broker like Kafka or RabbitMQ (Async).</p>
<p>Microcks <code>1.14.0</code> introduces <strong>Sync-to-Async trigger</strong>s**, allowing you to describe these cross-protocol scenarios. By adding a simple trigger to your OpenAPI or gRPC operation, Microcks will automatically publish a contextualized message to your AsyncAPI channels whenever the mock is invoked. This ensures that your entire event-driven choreography can be tested end-to-end without a single line of code.</p>
<p><img decoding="async" loading="lazy" alt="openai-asyncapi-timelines" src="https://microcks.io/assets/images/microcks-1.14.0-sync-to-async-9ec3b76adfa6f35fa40b893f474193a6.png" width="1200" height="550" class="img_ev3q"></p>
<blockquote>
<p>Read more about <a class="" href="https://microcks.io/documentation/explanations/async-triggers/">Async API event triggers</a> to master these complex scenarios.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="request-reply-for-asyncapi-">Request-Reply for AsyncAPI 🤝<a href="https://microcks.io/blog/microcks-1.14.0-release/#request-reply-for-asyncapi-" class="hash-link" aria-label="Direct link to Request-Reply for AsyncAPI 🤝" title="Direct link to Request-Reply for AsyncAPI 🤝" translate="no">​</a></h2>
<p>Microcks is a community-driven project, and this release features a fantastic contribution from <a href="https://www.linkedin.com/in/the-adam/" target="_blank" rel="noopener noreferrer" class="">Adam Hicks</a> 🙏, who implemented support for the <strong>Request-Reply</strong> pattern in AsyncAPI.</p>
<p>This enhancement is a game-changer for simulating asynchronous interactions that require a correlation between a request message and a response message.</p>
<p><img decoding="async" loading="lazy" alt="asyncapi-request-reply-timelines" src="https://microcks.io/assets/images/microcks-1.14.0-request-reply-589a3f7442b3eeb0f19314564f13f1fe.png" width="979" height="712" class="img_ev3q"></p>
<blockquote>
<p>A huge thank you to Adam for his hard work and for helping Microcks support even more real-world messaging patterns! 👏</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="other-improvements">Other Improvements<a href="https://microcks.io/blog/microcks-1.14.0-release/#other-improvements" class="hash-link" aria-label="Direct link to Other Improvements" title="Direct link to Other Improvements" translate="no">​</a></h2>
<p>This release is one of our largest yet, with nearly <strong>70 issues resolved</strong>! Beyond the major features, we’ve included:</p>
<ul>
<li class="">
<p><strong>UI Enhancements:</strong> Updates to Angular <code>19.2.18</code> for a smoother experience.</p>
</li>
<li class="">
<p><strong>Better Debugging:</strong> Homogenized "Live Traces" between Groovy and JS engines.</p>
</li>
<li class="">
<p><strong>Quality &amp; Stability:</strong> Numerous bug fixes in gRPC error handling and test controllers.</p>
</li>
</ul>
<p>For the full list of changes, please check the <a href="https://github.com/microcks/microcks/milestone/57?closed=1" target="_blank" rel="noopener noreferrer" class="">milestone details on GitHub</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-next">What’s Next?<a href="https://microcks.io/blog/microcks-1.14.0-release/#whats-next" class="hash-link" aria-label="Direct link to What’s Next?" title="Direct link to What’s Next?" translate="no">​</a></h2>
<p>As we continue to push the boundaries of API mocking and testing, your feedback is our North Star. Join our community, share your ideas, and let's build the future of API tooling together! You can either help us define the scope of the next <code>1.15</code> release <a href="https://github.com/microcks/microcks/issues/2048" target="_blank" rel="noopener noreferrer" class="">in this discussion</a>.</p>
<p>Come say hi on our <a class="" href="https://microcks.io/community/">Discord</a> chat, give us a star on <a href="https://github.com/microcks/microcks" target="_blank" rel="noopener noreferrer" class="">GitHub</a> ⭐️, or follow us on our social channels!</p>
<p>Thanks for your continued support! ❤️</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Dynamic Mocking with JavaScript Dispatchers in Microcks]]></title>
            <link>https://microcks.io/blog/js-dispatchers/</link>
            <guid>https://microcks.io/blog/js-dispatchers/</guid>
            <pubDate>Wed, 21 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Announcing JavaScript dispatcher in Microcks 1.13]]></description>
            <content:encoded><![CDATA[<p>One of the most exciting new features introduced in <a class="" href="https://microcks.io/blog/microcks-1.13.0-release/"><strong>Microcks 1.13</strong></a> is the ability to write <a class="" href="https://microcks.io/documentation/explanations/dispatching/#javascript-scripting"><strong>JavaScript dispatchers</strong></a>.
This gives you fine-grained control over how mock responses are selected and tailored—based not only on static examples but also on request headers, payloads, and parameters.</p>
<p><img decoding="async" loading="lazy" alt="js dispatchers banner" src="https://microcks.io/assets/images/js-dispatchers-banner-528d1db8c01aaebec4353dd6dfbc2c81.png" width="1200" height="800" class="img_ev3q"></p>
<p>This is a powerful step forward: instead of static mocks, you can now create dynamic, context-aware simulations that behave much closer to real services.</p>
<blockquote>
<p>ℹ️ <strong>Note:</strong> Microcks already supported <strong>Groovy-based dispatchers</strong> in earlier releases. JavaScript is now offered as an alternative, making it easier for teams who prefer JS or want to align dispatcher logic with front-end or Node.js skills.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="setting-up-microcks-locally">Setting up Microcks locally<a href="https://microcks.io/blog/js-dispatchers/#setting-up-microcks-locally" class="hash-link" aria-label="Direct link to Setting up Microcks locally" title="Direct link to Setting up Microcks locally" translate="no">​</a></h2>
<p>To get started quickly, you’ll need <strong>Docker Compose</strong>.
This sample command will give you a demo working environment in a one-liner:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token builtin class-name" style="color:rgb(189, 147, 249)">echo</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'services:</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  mongo:</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">    image: mongo:4.4.29</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  app:</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">    depends_on:</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">      - mongo</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">    image: microcks/microcks</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">    ports:</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">      - "8080:8080"</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">    environment:</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">      - SPRING_DATA_MONGODB_URI=mongodb://mongo:27017</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">      - SPRING_DATA_MONGODB_DATABASE=microcks</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">      - KEYCLOAK_ENABLED=false'</span><span class="token plain"> </span><span class="token operator">|</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">docker</span><span class="token plain"> compose </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-f</span><span class="token plain"> - up</span><br></div></code></pre></div></div>
<p>Once Microcks is up, try this quick path:</p>
<ol>
<li class="">Open <a href="http://localhost:8080/" target="_blank" rel="noopener noreferrer" class="">http://localhost:8080</a> in your browser</li>
<li class="">Go to <strong>Microcks Hub</strong> -&gt; <strong>MicrocksIO Samples APIs</strong> -&gt; <strong>Pastry API - 2.0</strong></li>
<li class="">Hit <strong>Install</strong> -&gt; <strong>+ Direct Import</strong></li>
<li class="">In the left panel, open <strong>APIs | Services</strong></li>
<li class="">Pick <strong>API Pastry - 2.0</strong> -&gt; select the second endpoint <code>⋮</code> (three dots) -&gt; <strong>Edit Properties</strong></li>
<li class="">Scroll down and set <strong>Dispatcher</strong> to <code>JS</code> ✅</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="introducing-javascript-dispatchers">Introducing JavaScript dispatchers<a href="https://microcks.io/blog/js-dispatchers/#introducing-javascript-dispatchers" class="hash-link" aria-label="Direct link to Introducing JavaScript dispatchers" title="Direct link to Introducing JavaScript dispatchers" translate="no">​</a></h2>
<p>Now comes the fun part. In your API definition, you can attach a <strong>JavaScript dispatcher script</strong>.
This script inspects incoming requests and decides which example response to serve.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="example-dispatch-by-path-parameter-and-accept-header">Example: dispatch by path parameter and Accept header<a href="https://microcks.io/blog/js-dispatchers/#example-dispatch-by-path-parameter-and-accept-header" class="hash-link" aria-label="Direct link to Example: dispatch by path parameter and Accept header" title="Direct link to Example: dispatch by path parameter and Accept header" translate="no">​</a></h3>
<p>We’ll attach a script that looks at the <code>name</code> path parameter and the <code>Accept</code> header to choose the appropriate example. For <code>Eclair Cafe</code>, we’ll return a JSON or XML variant depending on the requested content type; for anything else, we’ll default to <code>Millefeuille</code>.</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> contentType </span><span class="token operator">=</span><span class="token plain"> mockRequest</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">getRequestHeader</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"Accept"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">toString</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> nameParam </span><span class="token operator">=</span><span class="token plain"> mockRequest</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">getURIParameter</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"name"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">nameParam </span><span class="token operator">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Eclair Cafe"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">contentType </span><span class="token operator">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"text/xml"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Eclair Cafe Xml"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Eclair Cafe"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Millefeuille"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div>
<p>Try the following requests against <code>API Pastry - 2.0</code>:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-X</span><span class="token plain"> GET </span><span class="token string" style="color:rgb(255, 121, 198)">'http://localhost:8080/rest/API+Pastry+-+2.0/2.0.0/pastry/Eclair+Cafe'</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-H</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'Accept: application/json'</span><br></div></code></pre></div></div>
<p>Returns:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"name"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Eclair Cafe"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"description"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Delicieux Eclair au Cafe pas calorique du tout"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"size"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"M"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"price"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">2.5</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"status"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"available"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<p>Requesting XML:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-X</span><span class="token plain"> GET </span><span class="token string" style="color:rgb(255, 121, 198)">'http://localhost:8080/rest/API+Pastry+-+2.0/2.0.0/pastry/Eclair+Cafe'</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-H</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'Accept: text/xml'</span><br></div></code></pre></div></div>
<p>Returns:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">pastry</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">name</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">Eclair Cafe</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">name</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">description</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">Delicieux Eclair au Cafe pas calorique du tout</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">description</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">size</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">M</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">size</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">price</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">2.5</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">price</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">status</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">available</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">status</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">pastry</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><br></div></code></pre></div></div>
<p>And the default variant when requesting another pastry name:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-X</span><span class="token plain"> GET </span><span class="token string" style="color:rgb(255, 121, 198)">'http://localhost:8080/rest/API+Pastry+-+2.0/2.0.0/pastry/Millefeuille'</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-H</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'Accept: application/json'</span><br></div></code></pre></div></div>
<p>Returns:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"name"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Millefeuille"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"description"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Delicieux Millefeuille pas calorique du tout"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"size"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"L"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"price"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">4.4</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"status"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"available"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="tweaking-the-script-is-easy-with-server-side-logging">Tweaking the script is easy (with server-side logging)<a href="https://microcks.io/blog/js-dispatchers/#tweaking-the-script-is-easy-with-server-side-logging" class="hash-link" aria-label="Direct link to Tweaking the script is easy (with server-side logging)" title="Direct link to Tweaking the script is easy (with server-side logging)" translate="no">​</a></h3>
<p>One of the benefits of JavaScript dispatchers is how quickly you can iterate: update the snippet, save, and re-run the same requests. You can also add server-side logs with the built-in <code>log.info</code> to trace what’s happening:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> accept </span><span class="token operator">=</span><span class="token plain"> mockRequest</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">getRequestHeader</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"Accept"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">toString</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> name </span><span class="token operator">=</span><span class="token plain"> mockRequest</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">getURIParameter</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"name"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">info</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">Dispatching for name=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">name</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">, accept=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">accept</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">name </span><span class="token operator">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Eclair Cafe"</span><span class="token plain"> </span><span class="token operator">&amp;&amp;</span><span class="token plain"> accept </span><span class="token operator">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"text/xml"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">info</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"Returning XML example for Eclair Cafe"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Eclair Cafe Xml"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Millefeuille"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div>
<p>Check your Microcks container/server logs to see these messages and understand which path the script took.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-it-matters">Why it matters<a href="https://microcks.io/blog/js-dispatchers/#why-it-matters" class="hash-link" aria-label="Direct link to Why it matters" title="Direct link to Why it matters" translate="no">​</a></h2>
<p>With JavaScript dispatchers, Microcks becomes much more flexible:</p>
<ul>
<li class=""><strong>Dynamic behavior</strong> – responses vary depending on request context</li>
<li class=""><strong>Richer test scenarios</strong> – simulate more realistic API flows</li>
<li class=""><strong>Fewer examples needed</strong> – reuse existing payloads with smart logic</li>
<li class=""><strong>Maximum availability</strong> - works in standard, uber, and native-compiled distributions of Microcks</li>
</ul>
<p>This makes it easier to mock APIs for contract testing, early integration, or even demos where you want your mock to “feel alive”.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="next-steps">Next steps<a href="https://microcks.io/blog/js-dispatchers/#next-steps" class="hash-link" aria-label="Direct link to Next steps" title="Direct link to Next steps" translate="no">​</a></h2>
<p>We’ve only scratched the surface here. In the full documentation, you’ll find:</p>
<ul>
<li class="">How to write and attach dispatcher scripts</li>
<li class="">The full request/response object model is available in scripts</li>
<li class="">Examples covering REST, gRPC, and event-based APIs</li>
</ul>
<p>👉 <a class="" href="https://microcks.io/documentation/">Check the official documentation</a> for more details and start experimenting with your own mocks.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Testing Google Pub/Sub Locally? Microcks Now Supports the Emulator!]]></title>
            <link>https://microcks.io/blog/google-pubsub-emulator-usage-dojo/</link>
            <guid>https://microcks.io/blog/google-pubsub-emulator-usage-dojo/</guid>
            <pubDate>Mon, 12 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[At Dojo, speed is critical.]]></description>
            <content:encoded><![CDATA[<p>At <a href="https://dojo.tech/" target="_blank" rel="noopener noreferrer" class=""><strong>Dojo</strong></a>, speed is critical. Not just in how fast our card machines process payments (which is milliseconds, by the way 😉), but in how fast we ship value to our customers.</p>
<p>Our platform relies heavily on an event-driven architecture running on Google Cloud. While this is powerful in production, it creates friction for our "inner loop" development. Developers often have to connect to real cloud resources just to test a single microservice, which means managing complex credentials, spending time waiting for cloud resources to deploy, and incurring cloud costs for every test run.</p>
<p><img decoding="async" loading="lazy" alt="google pubsub emulator usage dojo feature" src="https://microcks.io/assets/images/google-pubsub-emulator-usage-dojo-feature-3f3d3a7460bf2e8579c984a194771d7b.png" width="1200" height="800" class="img_ev3q"></p>
<p>We want to <strong>shift our testing left, enabling our engineers to spin up a transaction flow simulation on their laptop, completely offline</strong>. We want to publish mock payment events, verify how services consume them, and iterate instantly without waiting for a cloud deployment.</p>
<p>However, Microcks couldn't be used with the Google Pub/Sub emulator, so I've recently contributed a new feature to Microcks to bridge this gap.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-the-use-case">What is the use case?<a href="https://microcks.io/blog/google-pubsub-emulator-usage-dojo/#what-is-the-use-case" class="hash-link" aria-label="Direct link to What is the use case?" title="Direct link to What is the use case?" translate="no">​</a></h2>
<p>The use case is simple: <strong>Local Development without the Cloud</strong>.</p>
<p>Developers often use tools like <a href="https://www.localstack.cloud/" target="_blank" rel="noopener noreferrer" class=""><strong>LocalStack</strong></a> to mock AWS services (like SQS or SNS) locally. We wanted the same seamless experience for Google Pub/Sub.</p>
<p>Previously, Microcks' Google Pub/Sub implementation assumed it was always talking to the real GCP service. It required a Service Account key file and valid authentication to a real Google Cloud project. This is great for integration testing in a staging environment, but for a developer working offline or trying to keep their setup lightweight, it was a blocker.</p>
<p>With this change (introduced in <a href="https://github.com/microcks/microcks/pull/1851" target="_blank" rel="noopener noreferrer" class="">PR #1851</a>, available from <a href="https://github.com/microcks/microcks/releases/tag/1.13.1" target="_blank" rel="noopener noreferrer" class="">v1.13.1</a>), Microcks can now detect and connect to a local Google Pub/Sub emulator. This allows you to publish mock messages from Microcks directly to the emulator.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="example-use-case">Example Use Case<a href="https://microcks.io/blog/google-pubsub-emulator-usage-dojo/#example-use-case" class="hash-link" aria-label="Direct link to Example Use Case" title="Direct link to Example Use Case" translate="no">​</a></h2>
<p>Let's look at how to set this up. The magic happens by configuring the Microcks Async Minion to recognise the standard <code>PUBSUB_EMULATOR_HOST</code> environment variable.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-the-setup">1. The Setup<a href="https://microcks.io/blog/google-pubsub-emulator-usage-dojo/#1-the-setup" class="hash-link" aria-label="Direct link to 1. The Setup" title="Direct link to 1. The Setup" translate="no">​</a></h3>
<p>First, you need a <code>docker-compose.yml</code> that spins up Microcks (and its Async Minion) alongside the Google Pub/Sub emulator.</p>
<p><em>Here is the Docker Compose configuration you can use to get started:</em></p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token key atrule">services</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">image</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> quay.io/microcks/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">uber</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">1.13.1</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">ports</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"8080:8080"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">environment</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> ASYNC_MINION_URL=http</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">//microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">async</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">minion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token number">8081</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)"># Link to Async Minion</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">healthcheck</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">test</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"CMD"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"curl"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"-f"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"http://localhost:8080/api/health"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">interval</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> 10s</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">timeout</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> 3s</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">microcks-async-minion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">image</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> quay.io/microcks/microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">uber</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">async</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">minion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">1.13.1</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">ports</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"8081:8081"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">environment</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> ASYNC_PROTOCOLS=</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">GOOGLEPUBSUB </span><span class="token comment" style="color:rgb(98, 114, 164)"># Enable Google Pub/Sub support</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> MICROCKS_HOST_PORT=microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token number">8080</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)"># Link to Microcks</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> PUBSUB_EMULATOR_HOST=pubsub</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">emulator</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token number">8681</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)"># Link to Pub/Sub Emulator</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">depends_on</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">condition</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> service_healthy</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">pubsub-emulator</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">condition</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> service_started</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">healthcheck</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">test</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"CMD"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"curl"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"-f"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"http://localhost:8081/q/health/ready"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">interval</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> 10s</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">timeout</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> 3s</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">pubsub-emulator</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">image</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> gcr.io/google.com/cloudsdktool/cloud</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">sdk</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">441.0.0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">emulators</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">command</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> gcloud beta emulators pubsub start </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">host</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">port=0.0.0.0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">8681 </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">project=my</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">project</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">ports</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"8681:8681"</span><br></div></code></pre></div></div>
<p>Running this with <code>docker compose up</code> should result in a local Microcks environment that you can access the Web UI at <code>http://localhost:8080</code></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-the-asyncapi-specification">2. The AsyncAPI Specification<a href="https://microcks.io/blog/google-pubsub-emulator-usage-dojo/#2-the-asyncapi-specification" class="hash-link" aria-label="Direct link to 2. The AsyncAPI Specification" title="Direct link to 2. The AsyncAPI Specification" translate="no">​</a></h3>
<p>You don't need to change your AsyncAPI specification to support this! That’s the beauty of it. Microcks uses the same contract definition whether you are targeting production GCP or your local emulator.</p>
<p><em>Here is the AsyncAPI file we are using for this example:</em></p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token key atrule">asyncapi</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> 3.0.0</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'urn:io.microcks.example.hello-microcks'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">info</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">title</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Hello Microcks API</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> 1.0.0</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">description</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Example showing a simple pub/sub message</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">defaultContentType</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> application/json</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">channels</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">helloEvents</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">address</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> microcks/hello</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">description</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Topic with Hello events</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">bindings</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">googlepubsub</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">schemaSettings</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">encoding</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> json</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> projects/my</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">project/topics/my</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">topic</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">messages</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">hello.message</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">description</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> A simple Hello event message</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">traits</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">$ref</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'#/components/messageTraits/commonHeaders'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">payload</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> object</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">properties</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token key atrule">greeting</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> string</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">const</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> hello</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token key atrule">fullName</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> string</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token key atrule">sentAt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> string</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">examples</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> microcks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">example</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token key atrule">summary</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Hello to Microcks example message</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token key atrule">payload</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">greeting</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> hello</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">fullName</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Microcks</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">sentAt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'{{now()}}'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token key atrule">headers</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">1</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> random</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">example</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token key atrule">summary</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Example message with random name</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token key atrule">payload</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">greeting</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> hello</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">fullName</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'{{randomFirstName()}}'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">sentAt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'{{now()}}'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token key atrule">headers</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">2</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">operations</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">receivedHellos</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">action</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> receive</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">channel</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">$ref</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'#/channels/helloEvents'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">summary</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Receive hellos</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">messages</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">$ref</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'#/channels/helloEvents/messages/hello.message'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">messageTraits</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">commonHeaders</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">headers</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> object</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">properties</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> integer</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token key atrule">minimum</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">0</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token key atrule">maximum</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">10</span><br></div></code></pre></div></div>
<p>This spec has two example messages, one with the <code>fullName</code> field set to “Microcks” and another with a random name for each message.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-you-can-verify-its-working">How you can verify it's working<a href="https://microcks.io/blog/google-pubsub-emulator-usage-dojo/#how-you-can-verify-its-working" class="hash-link" aria-label="Direct link to How you can verify it's working" title="Direct link to How you can verify it's working" translate="no">​</a></h2>
<p>Once you have your stack running, verification is straightforward.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="import-your-api"><strong>Import your API</strong><a href="https://microcks.io/blog/google-pubsub-emulator-usage-dojo/#import-your-api" class="hash-link" aria-label="Direct link to import-your-api" title="Direct link to import-your-api" translate="no">​</a></h3>
<p>Import the AsyncAPI definition above into Microcks using the Web UI uploader at <a href="http://localhost:8080/#/importers" target="_blank" rel="noopener noreferrer" class=""><code>http://localhost:8080/#/importers</code></a></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="check-the-logs"><strong>Check the logs</strong><a href="https://microcks.io/blog/google-pubsub-emulator-usage-dojo/#check-the-logs" class="hash-link" aria-label="Direct link to check-the-logs" title="Direct link to check-the-logs" translate="no">​</a></h3>
<p>If you look at the logs for the <code>microcks-async-minion</code> container, you should see that it has detected the emulator configuration and is outputting mock message.</p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">..</span><span class="token plain">.snip</span><span class="token punctuation" style="color:rgb(248, 248, 242)">..</span><span class="token plain">.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">io.git.mic.min.asy.pro.GooglePubSubProducerManager</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">QuarkusQuartzScheduler_Worker-9</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> Using Google PubSub emulator at pubsub-emulator:8681</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">io.git.mic.min.asy.pro.GooglePubSubProducerManager</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">QuarkusQuartzScheduler_Worker-9</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> Publishing on topic </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain">HelloMicrocksAPI-1.0.0-receivedHellos</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain">, message: </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string" style="color:rgb(255, 121, 198)">"greeting"</span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">:</span><span class="token string" style="color:rgb(255, 121, 198)">"hello"</span><span class="token plain">,</span><span class="token string" style="color:rgb(255, 121, 198)">"fullName"</span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">:</span><span class="token string" style="color:rgb(255, 121, 198)">"Microcks"</span><span class="token plain">,</span><span class="token string" style="color:rgb(255, 121, 198)">"sentAt"</span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">:</span><span class="token string" style="color:rgb(255, 121, 198)">"1767870113823"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">..</span><span class="token plain">.snip</span><span class="token punctuation" style="color:rgb(248, 248, 242)">..</span><span class="token plain">.</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="receiving-messages">Receiving Messages<a href="https://microcks.io/blog/google-pubsub-emulator-usage-dojo/#receiving-messages" class="hash-link" aria-label="Direct link to Receiving Messages" title="Direct link to Receiving Messages" translate="no">​</a></h3>
<p>You can use a local subscriber script to confirm that messages are arriving.</p>
<p>Here is a simple python script that streams messages from the topic</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> google</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">cloud </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> pubsub_v1</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> google</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">api_core</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">exceptions </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> AlreadyExists</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> NotFound</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">PROJECT_ID </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"my-project"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">TOPIC_ID </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"HelloMicrocksAPI-1.0.0-receivedHellos"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">SUBSCRIPTION_ID </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"stream-out-py"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">get_or_create_subscription</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">project_id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> topic_id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> subscription_id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token triple-quoted-string string" style="color:rgb(255, 121, 198)">"""</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token triple-quoted-string string" style="color:rgb(255, 121, 198)">    Creates a subscription if it doesn't exist, then returns the path.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token triple-quoted-string string" style="color:rgb(255, 121, 198)">    """</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    subscriber </span><span class="token operator">=</span><span class="token plain"> pubsub_v1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">SubscriberClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    publisher </span><span class="token operator">=</span><span class="token plain"> pubsub_v1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">PublisherClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    topic_path </span><span class="token operator">=</span><span class="token plain"> publisher</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">topic_path</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">project_id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> topic_id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    subscription_path </span><span class="token operator">=</span><span class="token plain"> subscriber</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">subscription_path</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">project_id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> subscription_id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">with</span><span class="token plain"> subscriber</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">try</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            subscriber</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">create_subscription</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">                request</span><span class="token operator">=</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string" style="color:rgb(255, 121, 198)">"name"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> subscription_path</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"topic"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> topic_path</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">print</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">f"Created new subscription: </span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string-interpolation interpolation">subscription_path</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">except</span><span class="token plain"> AlreadyExists</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">print</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">f"Subscription already exists: </span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string-interpolation interpolation">subscription_path</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">except</span><span class="token plain"> NotFound</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">print</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">f"Error: The Topic '</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string-interpolation interpolation">topic_id</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">' does not exist. Please create the topic first."</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">raise</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> subscription_path</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">receive_messages</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">sub_path</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token triple-quoted-string string" style="color:rgb(255, 121, 198)">"""Receives messages from the subscription."""</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">callback</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">message</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">print</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">f"Received: </span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string-interpolation interpolation">message</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token string-interpolation interpolation">data</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token string-interpolation interpolation">decode</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string-interpolation interpolation string" style="color:rgb(255, 121, 198)">'utf-8'</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        message</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">ack</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    subscriber </span><span class="token operator">=</span><span class="token plain"> pubsub_v1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">SubscriberClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    stream </span><span class="token operator">=</span><span class="token plain"> subscriber</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">subscribe</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">sub_path</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> callback</span><span class="token operator">=</span><span class="token plain">callback</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">print</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">f"Listening for messages...\n"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">with</span><span class="token plain"> subscriber</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        stream</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">result</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> __name__ </span><span class="token operator">==</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"__main__"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    sub_path </span><span class="token operator">=</span><span class="token plain"> get_or_create_subscription</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">PROJECT_ID</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> TOPIC_ID</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> SUBSCRIPTION_ID</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    receive_messages</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">sub_path</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><br></div></code></pre></div></div>
<p>Running this with the environment variable <code>PUBSUB_EMULATOR_HOST</code> pointing at our emulator</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">PUBSUB_EMULATOR_HOST</span><span class="token operator">=</span><span class="token plain">localhost</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token number">8681</span><span class="token plain"> python stream</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">py</span><br></div></code></pre></div></div>
<p>Will output live message events</p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">Created new subscription: projects/my-project/subscriptions/stream-out-py</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Listening </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> messages</span><span class="token punctuation" style="color:rgb(248, 248, 242)">..</span><span class="token plain">.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Received: </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string" style="color:rgb(255, 121, 198)">"greeting"</span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">:</span><span class="token string" style="color:rgb(255, 121, 198)">"hello"</span><span class="token plain">,</span><span class="token string" style="color:rgb(255, 121, 198)">"fullName"</span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">:</span><span class="token string" style="color:rgb(255, 121, 198)">"Microcks"</span><span class="token plain">,</span><span class="token string" style="color:rgb(255, 121, 198)">"sentAt"</span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">:</span><span class="token string" style="color:rgb(255, 121, 198)">"1767870122753"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Received: </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string" style="color:rgb(255, 121, 198)">"greeting"</span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">:</span><span class="token string" style="color:rgb(255, 121, 198)">"hello"</span><span class="token plain">,</span><span class="token string" style="color:rgb(255, 121, 198)">"fullName"</span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">:</span><span class="token string" style="color:rgb(255, 121, 198)">"Josie"</span><span class="token plain">,</span><span class="token string" style="color:rgb(255, 121, 198)">"sentAt"</span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">:</span><span class="token string" style="color:rgb(255, 121, 198)">"1767870122759"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Received: </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string" style="color:rgb(255, 121, 198)">"greeting"</span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">:</span><span class="token string" style="color:rgb(255, 121, 198)">"hello"</span><span class="token plain">,</span><span class="token string" style="color:rgb(255, 121, 198)">"fullName"</span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">:</span><span class="token string" style="color:rgb(255, 121, 198)">"Microcks"</span><span class="token plain">,</span><span class="token string" style="color:rgb(255, 121, 198)">"sentAt"</span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">:</span><span class="token string" style="color:rgb(255, 121, 198)">"1767870125757"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Received: </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string" style="color:rgb(255, 121, 198)">"greeting"</span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">:</span><span class="token string" style="color:rgb(255, 121, 198)">"hello"</span><span class="token plain">,</span><span class="token string" style="color:rgb(255, 121, 198)">"fullName"</span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">:</span><span class="token string" style="color:rgb(255, 121, 198)">"Merlin"</span><span class="token plain">,</span><span class="token string" style="color:rgb(255, 121, 198)">"sentAt"</span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">:</span><span class="token string" style="color:rgb(255, 121, 198)">"1767870125762"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<p>🥳</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="summary">Summary<a href="https://microcks.io/blog/google-pubsub-emulator-usage-dojo/#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary" translate="no">​</a></h2>
<p>This small but mighty change opens up a smoother local development workflow for anyone building event-driven systems with Google Cloud. For us at Dojo, it means faster iterations and happier developers. By supporting the native Pub/Sub emulator, <strong>Microcks continues to be the most versatile tool for mocking and testing, no matter where your infrastructure lives, in the cloud or on your machine</strong>.</p>
<p>I hope this helps you streamline your testing loops! If you have any questions or feedback, feel free to reach out on GitHub.</p>
<p>Happy Mocking! 🚀</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Recap of an Incredible 2025, and Ready for 2026!]]></title>
            <link>https://microcks.io/blog/recap-of-an-incredible-2025/</link>
            <guid>https://microcks.io/blog/recap-of-an-incredible-2025/</guid>
            <pubDate>Wed, 07 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[As we close the chapter on 2025, we cant to take a moment to sincerely thank our adopters, contributors, sponsors, partners, and community members.]]></description>
            <content:encoded><![CDATA[<p>As we close the chapter on <strong>2025</strong>, we cant to take a moment to sincerely thank <strong>our adopters</strong>, <strong>contributors</strong>, <strong>sponsors</strong>, <strong>partners</strong>, and <strong>community members</strong>. Your continued trust, engagement, and energy are what drive Microcks' growth year after year.</p>
<p><img decoding="async" loading="lazy" alt="recap of an incredible 2025 feature" src="https://microcks.io/assets/images/recap-of-an-incredible-2025-feature-e02aa646626800ddb8f5c6edc038abd4.png" width="1200" height="800" class="img_ev3q"></p>
<p>2025 has been a <strong>transformational year</strong> for Microcks. It drove massive adoption growth, fostered deeper ecosystem collaborations, strengthened community ownership, and facilitated global expansion. It also reinforced our belief in <strong>open source</strong>, <strong>better-together principles</strong> and <strong>cloud native collaboration</strong>.</p>
<p>Let’s look back at some of the highlights before we step confidently into <strong>2026</strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-microcks-in-numbers">🚀 Microcks in Numbers<a href="https://microcks.io/blog/recap-of-an-incredible-2025/#-microcks-in-numbers" class="hash-link" aria-label="Direct link to 🚀 Microcks in Numbers" title="Direct link to 🚀 Microcks in Numbers" translate="no">​</a></h2>
<p>2025 clearly exceeded our expectations and our KPIs across almost every dimension:</p>
<blockquote>
<p>Microcks is no longer just growing; it’s <strong>scaling globally</strong>.</p>
</blockquote>
<ul>
<li class=""><strong>📦 2.5+ million container image downloads in 2025</strong>, compared to <strong>850k total downloads in 2024</strong>. That’s <strong>more than 3× growth year over year</strong>.</li>
<li class=""><strong>🔗 3,300+</strong> <a href="https://www.linkedin.com/company/microcks/" target="_blank" rel="noopener noreferrer" class="">LinkedIn</a> <strong>followers</strong>, with <strong>+700 new followers in 2025</strong>, showing steady and organic growth.</li>
<li class=""><strong>⭐ 1,800 GitHub stars</strong> on the <a href="https://github.com/microcks/microcks" target="_blank" rel="noopener noreferrer" class="">main repository</a> (<strong>+300 in 2025</strong>). While this is solid progress, we believe there’s much more potential here, and we welcome ideas from the community to help amplify this metric.</li>
<li class=""><strong>🏢 34 public</strong> adopters in total. We’re especially grateful to the <strong>13 organizations that joined the public adopters list in 2025</strong>. Public references are critical for open source sustainability, and we warmly invite private adopters to help the project and the community by adding themselves 🙏 <strong><a href="https://github.com/microcks/.github/blob/main/ADOPTERS.md" target="_blank" rel="noopener noreferrer" class="">here</a></strong>.</li>
<li class=""><strong>🌍 Global expansion continues</strong>, with new users across all regions. Microcks <strong>documentation traffic</strong> insights from Scarf.sh and Google Analytics confirm strong worldwide adoption growth throughout the year.</li>
</ul>
<p><img decoding="async" loading="lazy" alt="recap of an incredible 2025 scarf" src="https://microcks.io/assets/images/recap-of-an-incredible-2025-scarf-f1fcbb3bb00859ccc11eb16d2ef6c752.png" width="1200" height="648" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-community-contributions">🙌 Community Contributions<a href="https://microcks.io/blog/recap-of-an-incredible-2025/#-community-contributions" class="hash-link" aria-label="Direct link to 🙌 Community Contributions" title="Direct link to 🙌 Community Contributions" translate="no">​</a></h2>
<p>Open source lives and thrives through its <strong>people</strong>, and 2025 proved once again how strong the Microcks community is!</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="️-the-heart-of-microcks">❤️ The Heart of Microcks<a href="https://microcks.io/blog/recap-of-an-incredible-2025/#%EF%B8%8F-the-heart-of-microcks" class="hash-link" aria-label="Direct link to ❤️ The Heart of Microcks" title="Direct link to ❤️ The Heart of Microcks" translate="no">​</a></h3>
<p>A <strong>huge thank you</strong> to <a href="https://www.linkedin.com/in/harshvardhan-parmar/" target="_blank" rel="noopener noreferrer" class=""><strong>Harshvardhan Parmar</strong></a> from the <a href="https://www.linkedin.com/company/yosemitecrew/" target="_blank" rel="noopener noreferrer" class="">Yosemite Crew</a>, who became a <strong>Code Owner</strong> (Domain Maintainer) for the <a href="https://github.com/microcks/microcks-cli" target="_blank" rel="noopener noreferrer" class="">Microcks CLI</a>.</p>
<blockquote>
<p>This recognition highlights his outstanding contributions, technical leadership, and ongoing impact on the project 👏</p>
</blockquote>
<p>Harshvardhan joins <a href="https://www.linkedin.com/in/sebastien-degodez/" target="_blank" rel="noopener noreferrer" class=""><strong>Sébastien Degodez</strong></a> (<a href="https://www.linkedin.com/company/axa-france/" target="_blank" rel="noopener noreferrer" class="">AXA France</a>), <strong>Code Owner</strong> of the <a href="https://github.com/microcks/microcks-testcontainers-dotnet" target="_blank" rel="noopener noreferrer" class="">Testcontainers .NET library</a> since 2024, and leads the <a href="https://github.com/microcks/microcks-aspire" target="_blank" rel="noopener noreferrer" class=""><strong>Microsoft Aspire</strong> integrations</a>.</p>
<blockquote>
<p>This <strong>growing maintainer base</strong>, backed by dedicated individuals and organizations, is a cornerstone of the <strong>project’s long-term sustainability</strong>.</p>
</blockquote>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-contributor-growth-in-2025">📊 Contributor Growth in 2025<a href="https://microcks.io/blog/recap-of-an-incredible-2025/#-contributor-growth-in-2025" class="hash-link" aria-label="Direct link to 📊 Contributor Growth in 2025" title="Direct link to 📊 Contributor Growth in 2025" translate="no">​</a></h3>
<p>Behind the numbers lies what matters most to us: a <strong>strong, collaborative, and invested community</strong>. Microcks continues to grow thanks to a diverse group of contributors who not only use the project but also actively help shape it.</p>
<p>What we are particularly grateful for is that <strong>many of our contributors are also adopters of Microcks</strong>. These individuals and organizations rely on Microcks in real-world, business contexts, and they clearly understand a fundamental <strong>open source principle</strong>:</p>
<blockquote>
<p>If you like and <strong>depend on</strong> a project, you should <strong>invest in</strong> it.</p>
</blockquote>
<p>This mindset is incredibly powerful. It means improvements are driven by real needs, feedback is grounded in practice, and the project evolves in ways that directly benefit the broader community. As maintainers, we couldn’t agree more with this approach, and we <strong>deeply appreciate</strong> and <strong>support</strong> the organizations that choose to <strong>contribute back</strong>.</p>
<p>In 2025, this collaboration translated into:</p>
<ul>
<li class="">
<p><strong>167 active contributors</strong><br>
<em>What it represents:</em> unique individuals contributing code, reviews, issues, documentation, and ideas throughout the year.<br>
<em>Why it matters:</em> this reflects a vibrant, healthy, and engaged community where innovation is shared and collective.</p>
</li>
<li class="">
<p><strong>35 active organizations</strong><br>
<em>What it represents:</em> contributors affiliated with a wide range of companies and institutions.<br>
<em>Why it matters:</em> this diversity strengthens the project’s resilience, reduces dependency on any single entity, and ensures long-term sustainability.</p>
</li>
</ul>
<p>👉 For more informations and metrics: <a href="https://www.cncf.io/projects/microcks/" target="_blank" rel="noopener noreferrer" class="">Microcks, <strong>a CNCF project</strong></a>, <a href="https://insights.linuxfoundation.org/project/microcks" target="_blank" rel="noopener noreferrer" class="">LFX <strong>Insights</strong></a> and <a href="https://clomonitor.io/projects/cncf/microcks" target="_blank" rel="noopener noreferrer" class=""><strong>CLOMonitor</strong></a>.</p>
<blockquote>
<p>These numbers are more than metrics; they are proof of <strong>shared ownership</strong>, <strong>mutual trust</strong>, and a community that believes in building Microcks together. We are deeply <strong>grateful</strong> to every contributor and organization for their ongoing <strong>commitment</strong> and <strong>collaboration</strong>.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-ecosystem-collaborations">🌟 Ecosystem Collaborations<a href="https://microcks.io/blog/recap-of-an-incredible-2025/#-ecosystem-collaborations" class="hash-link" aria-label="Direct link to 🌟 Ecosystem Collaborations" title="Direct link to 🌟 Ecosystem Collaborations" translate="no">​</a></h2>
<p>2025 was a year of <strong>deep and meaningful ecosystem collaborations</strong>, reinforcing our belief that <strong>integration beats isolation</strong> 👍 Better Together 🤝</p>
<h6 class="anchor anchorTargetStickyNavbar_Vzrq" id="dapr">Dapr<a href="https://microcks.io/blog/recap-of-an-incredible-2025/#dapr" class="hash-link" aria-label="Direct link to Dapr" title="Direct link to Dapr" translate="no">​</a></h6>
<p>A fantastic collaboration with the <a href="https://dapr.io/" target="_blank" rel="noopener noreferrer" class="">Dapr</a> <strong>community</strong>, including:</p>
<ul>
<li class="">CNCF blog post: "<a href="https://www.cncf.io/blog/2025/06/25/cloud-native-app-local-development-made-easy-with-microcks-and-dapr/" target="_blank" rel="noopener noreferrer" class="">Cloud Native App Local Development Made Easy with Microcks and Dapr</a>" and Live demo and discussion during a <a href="https://www.youtube.com/live/pbla9IjikvM?si=IJOB85GFFm4XQEPM&amp;t=258" target="_blank" rel="noopener noreferrer" class="">Dapr Community Call</a>.</li>
</ul>
<h6 class="anchor anchorTargetStickyNavbar_Vzrq" id="score">Score<a href="https://microcks.io/blog/recap-of-an-incredible-2025/#score" class="hash-link" aria-label="Direct link to Score" title="Direct link to Score" translate="no">​</a></h6>
<p>Great <a href="https://www.linkedin.com/pulse/microcks-chronicles-maintainers-week-kubecon-na-2025-yacine-kheddache-tnwie" target="_blank" rel="noopener noreferrer" class="">collaboration</a> with <a href="https://www.linkedin.com/in/mathieubenoitqc/" target="_blank" rel="noopener noreferrer" class="">Mathieu Benoit</a>, maintainer of the <a href="https://score.dev/" target="_blank" rel="noopener noreferrer" class="">Score</a> <strong>project</strong>, exploring how our projects are <em>better together</em> with more planned for 2026 (talk at <a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/program/schedule/" target="_blank" rel="noopener noreferrer" class="">KubeCon EU 2026</a>).</p>
<h6 class="anchor anchorTargetStickyNavbar_Vzrq" id="asyncapi-generator">AsyncAPI Generator<a href="https://microcks.io/blog/recap-of-an-incredible-2025/#asyncapi-generator" class="hash-link" aria-label="Direct link to AsyncAPI Generator" title="Direct link to AsyncAPI Generator" translate="no">​</a></h6>
<p>Microcks now provides <strong>acceptance testing infrastructure</strong> for the <a href="https://www.asyncapi.com/en" target="_blank" rel="noopener noreferrer" class="">AsyncAPI</a> Generator:</p>
<ul>
<li class="">Generated clients are <strong>tested against Microcks mocks</strong> at PR level</li>
<li class="">Initially, for WebSockets, with <strong>Kafka support coming next</strong></li>
</ul>
<p>This is a powerful <a href="https://github.com/asyncapi/generator/tree/master/packages/templates/clients/websocket/test" target="_blank" rel="noopener noreferrer" class="">example</a> of Microcks enabling confidence in <strong>API tooling</strong> ecosystems.</p>
<h6 class="anchor anchorTargetStickyNavbar_Vzrq" id="observability--opentelemetry-">Observability &amp; OpenTelemetry 🔭<a href="https://microcks.io/blog/recap-of-an-incredible-2025/#observability--opentelemetry-" class="hash-link" aria-label="Direct link to Observability &amp; OpenTelemetry 🔭" title="Direct link to Observability &amp; OpenTelemetry 🔭" translate="no">​</a></h6>
<p>In 2025, we integrated <strong>OpenTelemetry directly into the Microcks engine</strong>, enabling:</p>
<ul>
<li class="">Live Traces and Improved observability for API testing workflows 👉 <a class="" href="https://microcks.io/blog/microcks-1.13.0-release/">https://microcks.io/blog/microcks-1.13.0-release/</a></li>
</ul>
<blockquote>
<p>These <strong>partnerships</strong> demonstrate how <strong>Microcks</strong> enhances <strong>local development</strong> and <strong>testing experiences</strong> in <strong>cloud-native architectures</strong>, and how <strong>CNCF projects</strong> can <strong><a href="https://github.com/cncf/maintainer-summit/discussions/59" target="_blank" rel="noopener noreferrer" class="">join forces</a></strong> to deliver greater <strong>value to end users</strong>.</p>
</blockquote>
<h6 class="anchor anchorTargetStickyNavbar_Vzrq" id="traefik-labs">Traefik Labs<a href="https://microcks.io/blog/recap-of-an-incredible-2025/#traefik-labs" class="hash-link" aria-label="Direct link to Traefik Labs" title="Direct link to Traefik Labs" translate="no">​</a></h6>
<p><a href="https://traefik.io/" target="_blank" rel="noopener noreferrer" class="">Traefik Labs</a> introduced a <strong><a href="https://traefik.io/solutions/api-mocking" target="_blank" rel="noopener noreferrer" class="">Sandbox-as-a-Service</a></strong> offer, powered by Microcks and our new <strong><a class="" href="https://microcks.io/documentation/guides/installation/kubernetes-operator/">Kubernetes Operator</a></strong>. What a great demonstration of a fully <strong>GitOps-driven</strong> workflow.</p>
<h6 class="anchor anchorTargetStickyNavbar_Vzrq" id="apiquality">APIquality<a href="https://microcks.io/blog/recap-of-an-incredible-2025/#apiquality" class="hash-link" aria-label="Direct link to APIquality" title="Direct link to APIquality" translate="no">​</a></h6>
<p><a href="https://apiquality.io/" target="_blank" rel="noopener noreferrer" class="">APIquality</a> now uses <strong>Microcks as a backend service</strong> in their offering, along with professional training: <a href="https://apiquality.io/apimocking-microcks/" target="_blank" rel="noopener noreferrer" class="">https://apiquality.io/apimocking-microcks/</a></p>
<blockquote>
<p>These provide strong <strong>validation</strong> of Microcks’ role in <strong>production-grade</strong> cloud native environments.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-communication--knowledge-sharing">🎤 Communication &amp; Knowledge Sharing<a href="https://microcks.io/blog/recap-of-an-incredible-2025/#-communication--knowledge-sharing" class="hash-link" aria-label="Direct link to 🎤 Communication &amp; Knowledge Sharing" title="Direct link to 🎤 Communication &amp; Knowledge Sharing" translate="no">​</a></h2>
<p>Microcks continued to gain visibility through <strong>talks, meetups, conferences, and community events</strong>, thanks to our amazing contributors and advocates.</p>
<p>Highlights include:</p>
<ul>
<li class=""><strong><a href="https://2025.springio.net/" target="_blank" rel="noopener noreferrer" class="">Spring I/O</a></strong>: “<a href="https://youtu.be/Pdeqic_pXGE?si=AE1IpLSGvUzq5Pff" target="_blank" rel="noopener noreferrer" class="">Simplifying cloud-native app testing across environments</a>” by <a href="https://www.linkedin.com/in/salaboy/" target="_blank" rel="noopener noreferrer" class="">Mauricio Salatino</a> from <a href="https://www.diagrid.io/" target="_blank" rel="noopener noreferrer" class="">Diagrid</a> &amp; <a href="https://www.linkedin.com/in/laurentbroudoux/" target="_blank" rel="noopener noreferrer" class="">Laurent Broudoux</a>.</li>
<li class=""><strong><a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/" target="_blank" rel="noopener noreferrer" class="">KubeCon NA</a> Atlanta</strong>: "<a href="https://youtu.be/RvTEYp7QyzI?si=oBijG5eknsmnjZE8&amp;t=0" target="_blank" rel="noopener noreferrer" class="">Simplifying Cloud Native App Testing Across Environments</a>" presenting how <strong>Dapr ✚ Microcks</strong> enhance developer experience by <a href="https://www.linkedin.com/in/laurentbroudoux/" target="_blank" rel="noopener noreferrer" class="">Laurent Broudoux</a> &amp; <a href="https://www.linkedin.com/in/artur-ciocanu/" target="_blank" rel="noopener noreferrer" class="">Artur Ciocanu</a>) from <a href="https://www.adobe.com/" target="_blank" rel="noopener noreferrer" class="">Adobe</a>.</li>
<li class=""><strong><a href="https://devoxx.be/" target="_blank" rel="noopener noreferrer" class="">Devoxx Belgium</a></strong>: <a href="https://m.devoxx.com/events/dvbe25/speaker/19062/laurent-broudoux" target="_blank" rel="noopener noreferrer" class="">two talks</a>, see the recording of the session “<a href="https://youtu.be/MrIyUJQjbeM?si=CuqCytHj8bQPybue" target="_blank" rel="noopener noreferrer" class="">Smart API sandboxes: why? what? how?</a>”.</li>
<li class=""><strong><a href="https://community.cncf.io/cloud-native-pune/" target="_blank" rel="noopener noreferrer" class="">Cloud Native Pune</a> Meetup</strong>: Thanks to <a href="https://www.linkedin.com/in/mahalle-pratik/" target="_blank" rel="noopener noreferrer" class="">Pratik Mahalle</a> for his talk “<a href="https://www.linkedin.com/posts/mahalle-pratik_and-thats-the-end-for-2025-i-had-the-opportunity-activity-7407051326209159168-pv4M" target="_blank" rel="noopener noreferrer" class="">From Chaos to Confidence: How Microcks Brings Order to Modern API Testing</a>”.</li>
</ul>
<p>And many more talks at: <a href="https://youtu.be/jKl8xOtTP1I?si=2kI5nMUfMv-_vTCh" target="_blank" rel="noopener noreferrer" class="">Cloud Nord 🇫🇷</a>, <a href="https://www.linkedin.com/feed/update/urn:li:activity:7384214924744622080/" target="_blank" rel="noopener noreferrer" class="">Amadeus Engineering Days</a>, <a href="https://www.linkedin.com/posts/microcks_meetup-microcks-opensource-activity-7340651386742714370-j0xh" target="_blank" rel="noopener noreferrer" class="">AXA 🇫🇷 meetups</a>… and more!</p>
<blockquote>
<p>👉 Follow us on <strong><a href="https://www.linkedin.com/company/microcks/" target="_blank" rel="noopener noreferrer" class="">LinkedIn</a></strong> to catch recordings and announcements.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-looking-ahead-2026">💡 Looking Ahead: 2026<a href="https://microcks.io/blog/recap-of-an-incredible-2025/#-looking-ahead-2026" class="hash-link" aria-label="Direct link to 💡 Looking Ahead: 2026" title="Direct link to 💡 Looking Ahead: 2026" translate="no">​</a></h2>
<p>Open source is not the easiest path, but it is <strong>the one we deeply believe in</strong>, and as we enter <strong>2026</strong>, our <strong>goals are clear</strong>:</p>
<ul>
<li class="">Continue <strong>growing</strong> the contributor and adopter base</li>
<li class=""><strong>Strengthen</strong> ecosystem integrations</li>
<li class=""><strong>Improve</strong> observability, scalability, and developer experience</li>
<li class="">Continuing discussions started at <strong><a href="https://github.com/cncf/maintainer-summit/discussions/59" target="_blank" rel="noopener noreferrer" class="">KubeCon NA 2025 Maintainer Summit</a></strong></li>
<li class="">And, <strong><a href="https://www.linkedin.com/feed/update/urn:li:activity:7408808744396038144/" target="_blank" rel="noopener noreferrer" class="">give back</a></strong> to the cloud native <strong>community</strong></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-a-major-milestone-ahead">🌱 A Major Milestone Ahead<a href="https://microcks.io/blog/recap-of-an-incredible-2025/#-a-major-milestone-ahead" class="hash-link" aria-label="Direct link to 🌱 A Major Milestone Ahead" title="Direct link to 🌱 A Major Milestone Ahead" translate="no">​</a></h3>
<p>One of the <strong>important objectives for 2026</strong> is our application to move <strong>Microcks from CNCF Sandbox</strong> to <strong>Incubation</strong>. We started this work more than a year ago, and we’re looking forward to reviews and collaboration with the <a href="https://www.cncf.io/people/technical-oversight-committee/" target="_blank" rel="noopener noreferrer" class="">CNCF TOC</a>.</p>
<blockquote>
<p>This step would be a <strong>huge milestone</strong> for the project, and we’ll keep you posted every step of the way. See all details on this GitHub issue: <a href="https://github.com/cncf/toc/issues/1552" target="_blank" rel="noopener noreferrer" class="">https://github.com/cncf/toc/issues/1552</a> 👀</p>
</blockquote>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-join-our-community-meetings">👥 Join Our Community Meetings<a href="https://microcks.io/blog/recap-of-an-incredible-2025/#-join-our-community-meetings" class="hash-link" aria-label="Direct link to 👥 Join Our Community Meetings" title="Direct link to 👥 Join Our Community Meetings" translate="no">​</a></h3>
<p>Don’t forget to join our <strong><a href="https://github.com/microcks/community/blob/main/JOIN-OUR-MEETINGS.md" target="_blank" rel="noopener noreferrer" class="">two monthly community meetings</a></strong>, designed to accommodate multiple time zones and open to everyone.</p>
<p>Thank you for being part of this journey.
Here’s to a <strong>healthy, innovative, and impactful 2026</strong> 🥂</p>
<p>Let’s keep building the future of API mocking and testing <strong>together</strong>.</p>]]></content:encoded>
            <category>Featured</category>
        </item>
        <item>
            <title><![CDATA[Microcks 1.13.0 release 🚀]]></title>
            <link>https://microcks.io/blog/microcks-1.13.0-release/</link>
            <guid>https://microcks.io/blog/microcks-1.13.0-release/</guid>
            <pubDate>Tue, 04 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[We are excited to announce today the 1.13.0 release of Microcks, the CNCF's open-source cloud-native tool for API Mocking and Testing!]]></description>
            <content:encoded><![CDATA[<p>We are excited to announce today the <code>1.13.0</code> release of Microcks, the <a href="https://landscape.cncf.io/?selected=microcks" target="_blank" rel="noopener noreferrer" class="">CNCF</a>'s open-source cloud-native tool for API Mocking and Testing! 🚀</p>
<p>This release brings exciting new features and enhancements that focus on improving the developer experience, debugging, and overall usability. We've listened to your feedback and are proud to deliver a version that makes working with Microcks even more intuitive and powerful.</p>
<p>As we recently celebrated <a href="https://www.linkedin.com/pulse/celebrating-10-years-microcks-journey-vision-open-source-kheddache-zopje/" target="_blank" rel="noopener noreferrer" class="">10 years of Microcks</a> and the ascent achieved, and as usability is the main theme, we found it natural to illustrate this release with a summit and a quiet, dark yet highly visible night. Here are the related highlights:</p>
<ul>
<li class="">A new <strong>Dark UI theme</strong>, <strong>Drag &amp; Drop</strong> zones, and <strong>Quick imports</strong> let you bend Microcks to your own preferences, style, and workflow!</li>
<li class="">Observability everywhere with the addition of <strong>Live Traces</strong> in the mocking engine - makes the tuning and debugging experience a breeze!</li>
<li class="">The integration of a <strong>JavaScript engine</strong> that lets you implement your own mock matching logic in a super user-friendly way - for both standard, <em>uber</em>, and native-compiled distributions of Microcks!</li>
</ul>
<p><img decoding="async" loading="lazy" alt="microcks-feature" src="https://microcks.io/assets/images/microcks-1.13.0-feature-f93d3e17698a120df7d6b93c51a3d285.png" width="1192" height="794" class="img_ev3q"></p>
<p>This new release is also the <strong>largest so far, with over 80 resolved issues and 12 contributors!</strong> Kudos to all of them 👏 and see the greetings in the notes below.</p>
<p>Let’s start with the most noticeable enhancements from a user perspective!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="dark-theme-and-ui-enhancements">Dark theme and UI enhancements<a href="https://microcks.io/blog/microcks-1.13.0-release/#dark-theme-and-ui-enhancements" class="hash-link" aria-label="Direct link to Dark theme and UI enhancements" title="Direct link to Dark theme and UI enhancements" translate="no">​</a></h2>
<p>For those who prefer a more subdued interface, we're excited to introduce a brand-new <strong>dark theme!</strong> This highly requested feature offers a comfortable viewing experience, particularly during extended coding sessions, and aligns with the aesthetics of modern development environments. Hit the top-right corner moon or sun icon, and you’ll switch the UI from light to dark theme:</p>
<p><img decoding="async" loading="lazy" alt="Microcks dark theme" src="https://microcks.io/assets/images/microcks-1.13.0-dark-theme-6a8b777d31a1df083a67dee827754b4c.png" width="1200" height="711" class="img_ev3q"></p>
<blockquote>
<p>Thanks a lot to <a href="https://github.com/Apoorva64" target="_blank" rel="noopener noreferrer" class="">Apoorva64</a> 🙏 for refactoring our stylesheets and introducing CSS variables that ease building this theme. By the way, we’re still looking for seasoned UI artist suggestions and help to polish it! 🎨</p>
</blockquote>
<p>To streamline the workflow of importing local files to Microcks, we have also updated the entire application to enable drag-and-drop functionality. Just drag files from your desktop or file explorer on the UI, and you’ll see it change like below:</p>
<p><img decoding="async" loading="lazy" alt="Drag-n-drop zone" src="https://microcks.io/assets/images/microcks-1.13.0-dnd-de41eb3c78c5a08c3f9dd041cffbe4ac.png" width="1618" height="939" class="img_ev3q"></p>
<p>Releasing your drag now directly opens up a <strong>Quick Import</strong> dialog prefilled with file information:</p>
<p><img decoding="async" loading="lazy" alt="quick import dialog" src="https://microcks.io/assets/images/microcks-1.13.0-quick-import-3b292573e5a0ee142dc788046fee7638.png" width="965" height="634" class="img_ev3q"></p>
<p>This <strong>Quick Import</strong> is also directly available from the top-right corner of the menu bar and also allows you to tell Microcks to directly download remote artifacts:</p>
<p><img decoding="async" loading="lazy" alt="quick download dialog" src="https://microcks.io/assets/images/microcks-1.13.0-quick-import-download-ac25556815e3b835113e47fb88a8a92b.png" width="951" height="534" class="img_ev3q"></p>
<p>Importing your API definitions and mock data is now faster and more intuitive, reducing the setup time and letting you get to testing quicker!</p>
<blockquote>
<p>Thanks again to <a href="https://github.com/Apoorva64" target="_blank" rel="noopener noreferrer" class="">Apoorva64</a> 🙏 for bringing these nice ideas and contributing it!</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="observability-with-live-traces">Observability with Live Traces<a href="https://microcks.io/blog/microcks-1.13.0-release/#observability-with-live-traces" class="hash-link" aria-label="Direct link to Observability with Live Traces" title="Direct link to Observability with Live Traces" translate="no">​</a></h2>
<p>When working with Microcks, users often faced the challenge of understanding why a request was matched (or not matched) and of debugging issues during dispatching. It can be sometimes difficult to understand the reasoning behind request/response matching or simply get access to the logs and identify the relevant parts.</p>
<p>Debugging and tuning your API mocks and tests just got a whole lot easier with the introduction of <strong>Live Traces</strong>. This powerful new feature provides real-time insights into how your mocks are being processed, allowing you to identify and resolve issues quickly. You can now see the exact flow of requests and responses, understand dispatcher decisions, and pinpoint any discrepancy in the logic.</p>
<p>A new <strong>Live Traces</strong> foldable panel is now available within each operation's details. You need to <strong>Connect</strong> first, and as soon as the mock endpoint is hit, you’ll receive new Trace details as illustrated below:</p>
<p><img decoding="async" loading="lazy" alt="live traces panel" src="https://microcks.io/assets/images/microcks-1.13.0-live-traces-8bc8b73517aa389453a7a7a93f2c964b.png" width="1580" height="693" class="img_ev3q"></p>
<p>A <strong>Trace</strong> can be expanded to review the full details of the request matching decision process:</p>
<p><img decoding="async" loading="lazy" alt="live traces details" src="https://microcks.io/assets/images/microcks-1.13.0-live-traces-details-9782cd84b944285d7a11fda7678ef0d6.png" width="1200" height="1032" class="img_ev3q"></p>
<p>Ever wondered which user or application was calling which mock endpoints within a specific orchestration? We got you covered as well! As the mocking engine is now instrumented, whatever the mock protocol, you can now visualize and collect the traces from a user perspective using the new <strong>Live Traces</strong> page from the left menu bar:</p>
<p><img decoding="async" loading="lazy" alt="live traces graph" src="https://microcks.io/assets/images/microcks-1.13.0-live-traces-graph-f67bea9bd8746a304c6bc1cee3bbfcb2.png" width="1200" height="683" class="img_ev3q"></p>
<p>The <strong>Live Traces</strong> feature is implemented by leveraging the <a href="https://opentelemetry.io/" target="_blank" rel="noopener noreferrer" class="">OpenTelemetry</a> model of distributed traces and spans. Actually, the entire Microcks engine has been reconfigured to contribute additional spans and events to provide all the details needed to follow and track the requests. As a consequence, this also means that these extra details are exported and made visible in your favorite OpenTelemetry stack and dashboards!</p>
<blockquote>
<p>Thanks again to <a href="https://github.com/Apoorva64" target="_blank" rel="noopener noreferrer" class="">Apoorva64</a> 🙏 for designing and implementing this! Your support for debugging and making it work with an external OTEL collector in the days before the release was much appreciated!</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-javascript-engine-integration">New JavaScript engine integration<a href="https://microcks.io/blog/microcks-1.13.0-release/#new-javascript-engine-integration" class="hash-link" aria-label="Direct link to New JavaScript engine integration" title="Direct link to New JavaScript engine integration" translate="no">​</a></h2>
<p>The existing <a class="" href="https://microcks.io/documentation/explanations/dispatching/#script-dispatcher"><code>SCRIPT dispatcher</code></a> is a super flexible way of adding smartness to your dispatching logic and simulating complex business behavior. Over the years, we heard about people <a class="" href="https://microcks.io/blog/extend-microcks-with-custom-libs/">extending scripting with libs</a>, performing complex computations for more dynamic responses. We also implemented <a class="" href="https://microcks.io/documentation/guides/usage/stateful-mocks/">the stateful mocks features</a> on top of it and made recent <a href="https://github.com/microcks/microcks/issues/1543" target="_blank" rel="noopener noreferrer" class="">huge performance improvements</a>. However, we had an issue. The <code>SCRIPT</code> dispatcher is not working on our new <a class="" href="https://microcks.io/blog/microcks-1.9.0-release/#reduced-bootstrap-time-with-graalvm">native-compiled container images we provided since Microcks 1.9</a>. What at first seems anecdotic, now becomes "a problem" because of the success of these images 😉 and more globally of the *uber *distribution <strong>(more than 60k fresh downloads just on October 2025 🚀 )</strong></p>
<p>We started explorations on this topic during the Spring, investigating what can be done to solve this issue, and it appears that Groovy would never be able to play well in native mode…</p>
<p>Thanks to <a href="https://www.linkedin.com/in/andrea-peruffo-32269178/" target="_blank" rel="noopener noreferrer" class="">Andrea Peruffo</a> 🙏, we discovered <a href="https://github.com/roastedroot/quickjs4j" target="_blank" rel="noopener noreferrer" class="">QuickJs4J</a> that brings the lightweight QuickJS JavaScript engine to both the JVM and the native-compiled worlds. By running code in a sandbox, QuickJs4J ensures memory safety, prevents system access, and offers portability and native-image friendliness. We decided to give it a try, and Andrea successfully implemented a solid integration!</p>
<p>You can now use our new JavaScript <code>JS</code> engine in all Microcks distributions! From the standard, full-featured one running on a JVM to the lightweight, <em>uber</em> distribution running as a native-compiled binary and starting in 200ms! <strong>Moreover</strong>, with the addition of JavaScript, <strong>Microcks now supports a truly mainstream scripting language.</strong></p>
<p>See how expressive a <code>JS</code> dispatching script can be:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> testCase </span><span class="token operator">=</span><span class="token plain"> mockRequest</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">getRequestHeader</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"testcase"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">info</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"testCase: "</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> testCase</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">testCase </span><span class="token operator">!==</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">undefined</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">switch</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">testCase</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">     </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">case</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"1"</span><span class="token operator">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"negative amount"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">     </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">case</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"2"</span><span class="token operator">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"null amount"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">     </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">case</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"3"</span><span class="token operator">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"positive amount"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">     </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">case</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"4"</span><span class="token operator">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"standard amount"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"standard amount"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div>
<p>And how easy it can be to manipulate persistent information to implement stateful mocks on Microcks:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> foo </span><span class="token operator">=</span><span class="token plain"> store</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">get</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"foo"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> bar </span><span class="token operator">=</span><span class="token plain"> store</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">put</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"bar"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"barValue"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">store</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">delete</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"baz"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div>
<blockquote>
<p>Check out <a class="" href="https://microcks.io/documentation/explanations/dispatching/#javascript-scripting">our updated documentation on JavaScript scripting</a> in Microcks to get you started! There’s no plan to discontinue the existing <code>SCRIPT</code> dispatcher, but we encourage you to rename your dispatcher to the new <code>GROOVY</code> for better clarity. Thanks again to <a href="https://github.com/andreaTP" target="_blank" rel="noopener noreferrer" class="">andreaTP</a> 🙏 for this great contribution!</p>
</blockquote>
<p>However, we know that integrating yet another engine would not solve all the usability issues we had with scripting. We heard how painful it could be to tune and troubleshoot this script. And then, we decided to combine our new <strong>Live Traces</strong> feature with the script editing experience!</p>
<p>When editing a <code>JS</code> (or a <code>GROOVY</code>)  script from the Microcks UI, you can now rely on embedded Live Traces to give you immediate feedback on whether your script is working correctly or not! Just save your script and hit the <strong>Try it now!</strong> play-style button you’ll find on available responses. The Microcks UI then immediately acts as a mock consumer, and you should see a new <strong>Trace</strong> appear below!</p>
<p><img decoding="async" loading="lazy" alt="JS editor try it" src="https://microcks.io/assets/images/microcks-1.13.0-js-try-15c0770aa4c4c79883f9b2e6d90e258a.png" width="1133" height="995" class="img_ev3q"></p>
<p>And the nice thing is that all the <code>log.info()</code> statements from the script are directly embedded into the <strong>Trace</strong> details! What if your script doesn’t compile or misbehaves? We got you covered here, displaying the corresponding Trace in red with failure details and complete stacktrace:</p>
<p><img decoding="async" loading="lazy" alt="JS editor error" src="https://microcks.io/assets/images/microcks-1.13.0-js-error-edcd0e1438bf228cf5e5e3f80db13396.png" width="1082" height="996" class="img_ev3q"></p>
<blockquote>
<p><strong>Tuning and troubleshooting custom scripts in Microcks has never been so easy!</strong> 🔥</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="other-improvements">Other improvements<a href="https://microcks.io/blog/microcks-1.13.0-release/#other-improvements" class="hash-link" aria-label="Direct link to Other improvements" title="Direct link to Other improvements" translate="no">​</a></h2>
<p>As mentioned in the introduction, this release is the largest in Microcks' history in terms of features and contributions. There are many improvements worth noting as well! Here’s a non-exhaustive list:</p>
<ul>
<li class="">Support of complex dependency resolution on Protobuf imports - see <a href="https://github.com/microcks/microcks/issues/449" target="_blank" rel="noopener noreferrer" class="">#449</a>,</li>
<li class="">Support of <code>mongodb+srv://</code> protocol for connecting to MongoDB Atlas - see <a href="https://github.com/microcks/microcks/issues/1791" target="_blank" rel="noopener noreferrer" class="">#1791</a>,</li>
<li class="">Support of AWS IRSA and pod identity for connecting to SQS and SNS - see <a href="https://github.com/microcks/microcks/issues/1789" target="_blank" rel="noopener noreferrer" class="">#1789</a> and <a href="https://github.com/microcks/microcks/issues/1790" target="_blank" rel="noopener noreferrer" class="">#1790</a>,</li>
<li class="">Support of <code>2025-06-18</code> protocol for MCP endpoints - see <a href="https://github.com/microcks/microcks/issues/1724" target="_blank" rel="noopener noreferrer" class="">#1724</a>,</li>
<li class="">New delay strategies to allow random latency simulation - see <a href="https://github.com/microcks/microcks/issues/1591" target="_blank" rel="noopener noreferrer" class="">#1591</a> and thanks to <a href="https://github.com/SebastienDegodez" target="_blank" rel="noopener noreferrer" class="">SebastienDegodez</a> 🙏 for the contribution,</li>
<li class="">Add <code>formData</code> definition support in OpenAPI - see <a href="https://github.com/microcks/microcks/issues/1668" target="_blank" rel="noopener noreferrer" class="">#1688</a> and thanks to <a href="https://github.com/varkart" target="_blank" rel="noopener noreferrer" class="">varkart</a> 🙏 for the contribution,</li>
<li class="">Add export of samples in <code>APIExamples</code> format - see <a href="https://github.com/microcks/microcks/issues/1639" target="_blank" rel="noopener noreferrer" class="">#1639</a>,</li>
<li class="">Support of defaults when evaluating null or blank values in templates - see <a href="https://github.com/microcks/microcks/issues/1667" target="_blank" rel="noopener noreferrer" class="">#1667</a>,</li>
<li class="">Add <code>cookie</code> definition support in OpenAPI - see <a href="https://github.com/microcks/microcks/issues/1626" target="_blank" rel="noopener noreferrer" class="">#1626</a></li>
</ul>
<blockquote>
<p>For the comprehensive list of changes and enhancements, please be sure to check <a href="https://github.com/microcks/microcks/milestone/54?closed=1" target="_blank" rel="noopener noreferrer" class="">the milestone details on GitHub</a>.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-coming-next">What’s coming next?<a href="https://microcks.io/blog/microcks-1.13.0-release/#whats-coming-next" class="hash-link" aria-label="Direct link to What’s coming next?" title="Direct link to What’s coming next?" translate="no">​</a></h2>
<p>As we conclude this huge release, we extend our heartfelt thanks to all the contributors and adopters. Your dedication, enthusiasm, and valuable contributions have significantly enriched the Microcks project.</p>
<p>Let’s continue moving forward with joy and fun, pushing Microcks to new summits! You can check and collaborate on our GitHub<a href="https://github.com/microcks/microcks/issues" target="_blank" rel="noopener noreferrer" class=""> issues</a> list and the project <a href="https://github.com/orgs/microcks/projects/1" target="_blank" rel="noopener noreferrer" class="">roadmap</a>. Please join us to shape the future!</p>
<p>Remember that we are an open community, which means you, too, can jump on board to make Microcks even greater! Come and say hi! on our <a href="https://github.com/microcks/microcks/discussions" target="_blank" rel="noopener noreferrer" class="">GitHub discussion</a> or <a href="https://microcks.io/discord-invite/" target="_blank" rel="noopener noreferrer" class="">Discord chat</a> 👻, send some love through <a href="https://github.com/microcks/microcks" target="_blank" rel="noopener noreferrer" class="">GitHub stars</a> ⭐️ or follow us on <a href="https://bsky.app/profile/microcks.io" target="_blank" rel="noopener noreferrer" class="">BlueSky</a>, <a href="https://x.com/microcksio" target="_blank" rel="noopener noreferrer" class="">X</a>, <a href="https://hachyderm.io/@microcksio@mastodon.social" target="_blank" rel="noopener noreferrer" class="">Mastodon</a>, <a href="https://www.linkedin.com/company/microcks/" target="_blank" rel="noopener noreferrer" class="">LinkedIn</a>, and our <a href="https://www.youtube.com/c/Microcks" target="_blank" rel="noopener noreferrer" class="">YouTube channel</a>!</p>
<p>Thanks for reading and supporting us! ❤️</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Beyond Code: Open Source, Mentorship and Microcks]]></title>
            <link>https://microcks.io/blog/beyond-code-open-source-mentorship/</link>
            <guid>https://microcks.io/blog/beyond-code-open-source-mentorship/</guid>
            <pubDate>Sat, 06 Sep 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Exploring the challenges of silent users in open source and how Microcks is building sustainability through community engagement.]]></description>
            <content:encoded><![CDATA[<p>Open source software proves that <strong>collective contribution creates collective value</strong>. However, as a contributor to <a href="https://microcks.io/" target="_blank" rel="noopener noreferrer" class="">Microcks</a>, I have observed a concerning pattern that threatens the sustainability of the project and countless others in the open source ecosystem.</p>
<p><img decoding="async" loading="lazy" alt="beyond code open source" src="https://microcks.io/assets/images/beyond-code-open-source-eab755de576ec070511c6bf06ee860fb.jpg" width="1200" height="800" class="img_ev3q">
<a href="https://www.pexels.com/photo/close-up-photo-of-people-holding-puzzle-pieces-6147381/" target="_blank" rel="noopener noreferrer" class=""><em>Photo by Diva Plavalaguna from Pexels</em></a></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-reality-behind-the-code">The Reality Behind the Code<a href="https://microcks.io/blog/beyond-code-open-source-mentorship/#the-reality-behind-the-code" class="hash-link" aria-label="Direct link to The Reality Behind the Code" title="Direct link to The Reality Behind the Code" translate="no">​</a></h2>
<p>For years, the Microcks team of contributors and maintainers has dedicated countless hours to creating, enhancing, and maintaining Microcks. They have handled complex bugs, responded to support requests, and continuously improved the platform to satisfy the expanding demands of API mocking and testing.</p>
<p>This work has been done <strong>without financial compensation</strong>, driven purely by passion for creating valuable tools for the developer community.</p>
<p>The numbers tell a story:</p>
<ul>
<li class=""><strong>Thousands of downloads</strong></li>
<li class=""><strong>Hundreds of GitHub stars</strong></li>
<li class="">A <strong>growing user base</strong> that spans startups to enterprise organizations</li>
</ul>
<p>Microcks has become integral to many development workflows, saving teams countless hours and enabling better API development practices.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-silent-users">The Silent Users<a href="https://microcks.io/blog/beyond-code-open-source-mentorship/#the-silent-users" class="hash-link" aria-label="Direct link to The Silent Users" title="Direct link to The Silent Users" translate="no">​</a></h2>
<p>Yet, despite this adoption, we've noticed something troubling: many users remain <strong>silent beneficiaries</strong>.</p>
<p>They download, deploy, and benefit from Microcks, but the response is often silent when we reach out for feedback, feature requests, or documentation help.</p>
<p>This creates a paradox: while usage metrics climb, <strong>lack of engagement</strong> makes it difficult to prioritize development, understand real-world pain points, or build the collaborative ecosystem that makes open source sustainable.</p>
<p>We find ourselves making decisions in a vacuum, unsure if we’re solving the right problems.</p>
<blockquote>
<p>This isn't about demanding gratitude. We know not everyone can contribute code, but there’s a vast middle ground between passive consumption and active development.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-cost-of-silence">The Cost of Silence<a href="https://microcks.io/blog/beyond-code-open-source-mentorship/#the-cost-of-silence" class="hash-link" aria-label="Direct link to The Cost of Silence" title="Direct link to The Cost of Silence" translate="no">​</a></h2>
<p>This one-sided relationship creates challenges:</p>
<ul>
<li class=""><strong>Sustainability concerns</strong> – When maintainers burn out or move on to other projects, there's often no one ready to step up. The knowledge and passion that built the project can disappear overnight.</li>
<li class=""><strong>Innovation stagnation</strong> – Without diverse input from real users, we're essentially developing in an echo chamber. We miss crucial use cases, overlook pain points, and may focus on features that sound good in theory but don't address real-world needs.</li>
<li class=""><strong>Community fragmentation</strong> – A healthy open source project builds a community, not just a user base. Without engaged users, we risk losing the collaborative spirit that makes open source powerful.</li>
<li class=""><strong>Recognition deficit</strong> – While we don't seek fame, visibility helps attract new contributors, secures funding opportunities, and validates the time we invest in the project.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="simple-ways-to-give-back">Simple Ways to Give Back<a href="https://microcks.io/blog/beyond-code-open-source-mentorship/#simple-ways-to-give-back" class="hash-link" aria-label="Direct link to Simple Ways to Give Back" title="Direct link to Simple Ways to Give Back" translate="no">​</a></h2>
<p>Contributing to Microcks (and any open source project) doesn’t require being a coding wizard. Here are meaningful ways to support the community:</p>
<ul>
<li class="">
<p><strong>Spread the word</strong>: Share your success stories, write blog posts about how Microcks solved your problems, or mention it in relevant discussions. Word-of-mouth is incredibly powerful.</p>
</li>
<li class="">
<p><strong>Engage authentically</strong>: Star the repository, participate in discussions, attend community calls, or join our Slack/Discord. Your presence and voice matter.</p>
</li>
<li class="">
<p><strong>Documentation contributions</strong>: Did you find something confusing? Noticed a gap in our docs? Even minor improvements to documentation help countless future users.</p>
</li>
<li class="">
<p><strong>Report issues thoughtfully</strong>: When you encounter bugs, report them with details. Good bug reports are contributions that help everyone.</p>
</li>
<li class="">
<p><strong>Answer questions</strong>: Share your knowledge if you see someone struggling with something you’ve figured out. Peer support strengthens the entire community.</p>
</li>
<li class="">
<p><strong>Join the adopter community</strong>: If Microcks helps your organization, join the public adopter list:  <a href="https://github.com/microcks/.github/blob/main/ADOPTERS.md" target="_blank" rel="noopener noreferrer" class="">https://github.com/microcks/.github/blob/main/ADOPTERS.md</a>.</p>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-sustainable-future">A Sustainable Future<a href="https://microcks.io/blog/beyond-code-open-source-mentorship/#a-sustainable-future" class="hash-link" aria-label="Direct link to A Sustainable Future" title="Direct link to A Sustainable Future" translate="no">​</a></h2>
<p>We’re not asking for charity,we’re asking for <strong>partnership</strong>.</p>
<p>Open source works best when it’s truly collaborative, when users become stakeholders in the project’s success. The most successful open source projects aren’t just tools; they’re communities of people who care about solving problems together.</p>
<p>Microcks has reached a critical juncture. We can continue growing as a community-driven project or remain a tool maintained by a few for the benefit of many. The choice isn’t ours alone, it belongs to everyone who has ever benefited from our work.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="your-turn--join-me-in-building-these-resources">Your Turn – Join Me in Building These Resources<a href="https://microcks.io/blog/beyond-code-open-source-mentorship/#your-turn--join-me-in-building-these-resources" class="hash-link" aria-label="Direct link to Your Turn – Join Me in Building These Resources" title="Direct link to Your Turn – Join Me in Building These Resources" translate="no">​</a></h2>
<p>If Microcks has helped you ship better software, meet deadlines, or solve API testing challenges, I have specific ways you can help make it even better for everyone. As part of my LFX mentorship project, I’m working on critical resources our community desperately needs, but I can’t complete them without your real-world insights.</p>
<p>Here’s how you can contribute right now:</p>
<ul>
<li class=""><strong>Share Your Deployment Details</strong> – Help build the <a href="https://github.com/microcks/community/issues/85" target="_blank" rel="noopener noreferrer" class="">Compatibility Matrix (#85)</a> by sharing which versions of Kubernetes, MongoDB, and Keycloak work with your Microcks setup. Your configuration details help others avoid compatibility headaches.</li>
<li class=""><strong>Contribute Performance Data</strong> – Join our <a href="https://github.com/microcks/community/issues/86" target="_blank" rel="noopener noreferrer" class="">Sizing Guide (#86)</a> by running our k6 benchmarks and sharing your results. Whether you’re running Microcks on a laptop or enterprise Kubernetes, your performance data helps teams right-size their deployments.</li>
<li class=""><strong>Share Security Solutions</strong> – If you’ve figured out how to secure Microcks mock endpoints with API gateways, please contribute to our <a href="https://github.com/microcks/community/issues/51" target="_blank" rel="noopener noreferrer" class="">Security Documentation (#51)</a>. Your Kong/ AWS API Gateway/ Traefik or NGINX configurations could save someone days of troubleshooting.</li>
</ul>
<p><b>The next time you see these issues or similar calls for help, don’t scroll past.</b> Your experience is precisely what we need to build resources that genuinely serve the community.</p>
<p>These are not just documentation requests, they’re <strong>opportunities</strong> to save others from repeating solved challenges.</p>
<p>👉 Explore our <a href="https://github.com/microcks/community" target="_blank" rel="noopener noreferrer" class="">community repository</a>. The community is waiting for your insights to help ensure these initiatives succeed.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-quote-from-the-maintainer">✨ Quote from the Maintainer<a href="https://microcks.io/blog/beyond-code-open-source-mentorship/#-quote-from-the-maintainer" class="hash-link" aria-label="Direct link to ✨ Quote from the Maintainer" title="Direct link to ✨ Quote from the Maintainer" translate="no">​</a></h2>
<blockquote>
<p>“As a maintainer of the Microcks project and mentor to Krishi during the 3-month LFX mentorship program, I was both glad and impressed to see how clearly she articulated one of the core challenges many open source projects face: the gap between being a good open source citizen and users who remain passive or silent.</p>
<br>
The project she worked on was a perfect example of something maintainers often can’t take on themselves, as our focus must remain on the project's core objectives. After all, Microcks is an open source initiative, not a commercial product. This means adopters and the community must take responsibility for their deployment environments and requirements.
</blockquote>
<br>
&gt; That’s exactly why Krishi initiated the community repository and installation documentation, which we hope the community will continue to maintain and grow. Sharing is caring.”
<br>
&gt; [Yacine Kheddache](https://microcks.io/author/yacine-kheddache/), **Microcks Maintainer**
<hr>
<p>The future of Microcks depends not just on <strong>code commits</strong>, but on <strong>community commits</strong>.</p>
<p>💡 Are you ready to make yours?</p>]]></content:encoded>
            <category>open-source</category>
            <category>mentorship</category>
            <category>microcks</category>
        </item>
        <item>
            <title><![CDATA[Microcks 1.12.0 release 🚀]]></title>
            <link>https://microcks.io/blog/microcks-1.12.0-release/</link>
            <guid>https://microcks.io/blog/microcks-1.12.0-release/</guid>
            <pubDate>Tue, 03 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[We are thrilled to announce today the 1.12.0 release of Microcks, the CNCF's open source cloud native tool for API Mocking and Testing!]]></description>
            <content:encoded><![CDATA[<p>We are thrilled to announce today the <code>1.12.0</code> release of Microcks, the <a href="https://landscape.cncf.io/?selected=microcks" target="_blank" rel="noopener noreferrer" class="">CNCF</a>'s open source cloud native tool for API Mocking and Testing! 🚀</p>
<p>This release received no less than <strong>51 new resolved issues</strong>. Kudos to all the people 👏 who helped along the way by writing code, commenting on issues, or writing posts. You’ll see that this release focuses on two big topics:</p>
<ul>
<li class="">The addition of Model Context Protocol (MCP) as a first-class citizen in Microcks. It allows all <strong>your existing mocks to be available as MCP-enabled endpoints</strong>.</li>
<li class="">A huge refresh of the frontend stack we were using - we made a <strong>giant leap from Angular 8 to Angular 19</strong>.</li>
</ul>
<p><img decoding="async" loading="lazy" alt="microcks-feature" src="https://microcks.io/assets/images/microcks-1.12.0-feature-e9cd0ef46f1205a35e88bfa723f87ea9.png" width="1200" height="794" class="img_ev3q"></p>
<p>Let’s do a review of what’s new on each one of our highlights without delay.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="mcp-enabled-mocks-for-all-your-apis">MCP-enabled mocks for all your APIs!<a href="https://microcks.io/blog/microcks-1.12.0-release/#mcp-enabled-mocks-for-all-your-apis" class="hash-link" aria-label="Direct link to MCP-enabled mocks for all your APIs!" title="Direct link to MCP-enabled mocks for all your APIs!" translate="no">​</a></h2>
<p>You know that API and AI are closely related and that tomorrow—and even today—LLMs and AI agents will be among the top consumers of your APIs. It becomes crucial to be able to check how AI Agents will reuse your API as tools!</p>
<p>Starting with version <code>1.12.0</code>, <strong>Microcks automatically translates your API mocks into <a href="https://modelcontextprotocol.io/" target="_blank" rel="noopener noreferrer" class="">Model Context Protocol</a> (or MCP) aware endpoints!</strong> A new MCP Server section in the mock properties gives you access to MCP-compatible endpoints to integrate your mocks with your favorite tool.</p>
<p><img decoding="async" loading="lazy" alt="mcp properties" src="https://microcks.io/assets/images/mcp-endpoints-3e9cf03f7668653cfa7d2281d47f943f.png" width="609" height="390" class="img_ev3q"></p>
<p>As you can see in the capture above, Microcks provides two different kinds of endpoints and transports:</p>
<ul>
<li class="">HTTP SSE Endpoint as defined in the <a href="https://modelcontextprotocol.io/specification/2024-11-05/basic/transports#http-with-sse" target="_blank" rel="noopener noreferrer" class="">2024-11-05</a> version of the protocol,</li>
<li class="">HTTP Streamable Endpoint as defined in the <a href="https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http" target="_blank" rel="noopener noreferrer" class="">2025-03-26</a> version of the protocol.</li>
</ul>
<p>Depending on the tool you’re using—we tested <a href="https://modelcontextprotocol.io/docs/tools/inspector" target="_blank" rel="noopener noreferrer" class="">MCP Inspector</a>, <a href="https://learning.postman.com/docs/postman-ai-agent-builder/overview/" target="_blank" rel="noopener noreferrer" class="">Postman</a>, <a href="https://claude.ai/" target="_blank" rel="noopener noreferrer" class="">Claude</a> or <a href="https://www.cherry-ai.com/" target="_blank" rel="noopener noreferrer" class="">Cherry Studio</a>—you’ll need one or the other endpoint based on how it supports MCP.</p>
<p>The best thing is that, thanks to Microcks' homogeneous support for all API styles and protocols, <strong>this is available for OpenAPI and GraphQL APIs as well as gRPC services!</strong></p>
<blockquote>
<p>Check <a class="" href="https://microcks.io/documentation/explanations/mcp-endpoints/">our documentation</a> with links to <a href="https://www.youtube.com/@Microcks/search?query=mcp" target="_blank" rel="noopener noreferrer" class="">our video demonstrations</a> and test it while it’s hot! 🔥 We’re looking forward to hearing from you!</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="frontend-stack-refresh">Frontend stack refresh<a href="https://microcks.io/blog/microcks-1.12.0-release/#frontend-stack-refresh" class="hash-link" aria-label="Direct link to Frontend stack refresh" title="Direct link to Frontend stack refresh" translate="no">​</a></h2>
<p>As introduced in this <a href="https://github.com/orgs/microcks/discussions/1458" target="_blank" rel="noopener noreferrer" class="">GitHub Discussion</a>, we have known that Microcks UI was at risk for many years now. We depended on the <a href="https://www.patternfly.org/" target="_blank" rel="noopener noreferrer" class="">PatternFly</a> design system's <a href="https://angular.dev/" target="_blank" rel="noopener noreferrer" class="">Angular</a> library, which was subsequently discontinued by the community in favor of a React Implementation.</p>
<p>This put us in a bad situation because many of pulled transitive dependencies from those foundations are now outdated with a lot of CVEs, as illustrated by the security vulnerabilities report of the frontend part:</p>
<p><img decoding="async" loading="lazy" alt="CVE before 1.12" src="https://microcks.io/assets/images/microcks-1.12.0-cve-before-14d955a5ea249fe2abffd3606f62b1d6.png" width="1200" height="1149" class="img_ev3q"></p>
<p>Having open discussions always brings fresh ideas and new perspectives! And as I was much more attracted by a complete rewrite, at first, I found the feedback of the community appealing:</p>
<ul>
<li class="">Angular was not that bad and dead and Angular 19 was a very different beast,</li>
<li class="">Existing Patternfly Look and Feel experience was still quite good - the only complaint being it was missing a dark theme 🎨,</li>
<li class="">Our 2005 architecture hypothesis (pure SPA architecture, no SSR, no real need for SEO) was confirmed.</li>
</ul>
<p>As a consequence, we adapted our strategy and <strong>decided to stick with Angular - processing to a major upgrade - and to update and <a href="https://slaptijack.com/programming/what-is-vendoring.html" target="_blank" rel="noopener noreferrer" class="">vendor</a> the Patternfly library</strong> to be able to control our future usage of it!</p>
<p>This leads us to major upgrades and tasks like:</p>
<ul>
<li class="">A Typescript upgrade (from version <code>3.5</code> to <code>5.7</code>),</li>
<li class="">An Angular upgrade (from version <code>8</code> to <code>19</code>),</li>
<li class="">The adoption of the <a href="https://vite.dev/" target="_blank" rel="noopener noreferrer" class="">Vite</a> build tool,</li>
<li class="">The <a href="https://slaptijack.com/programming/what-is-vendoring.html" target="_blank" rel="noopener noreferrer" class="">vendoring</a> of needed <a href="https://github.com/patternfly/patternfly-ng" target="_blank" rel="noopener noreferrer" class="">Patternfly NG</a> components,</li>
<li class="">Upgrade of very old libraries like <code>d3</code> or <code>c3</code>,</li>
<li class="">The replacement of the wizard component reusing the one from Material Angular Theme (🙏 thanks to <a href="https://github.com/soGit" target="_blank" rel="noopener noreferrer" class="">@soGit</a> for that),</li>
</ul>
<p>Most importantly, <strong>the number of vulnerabilities has dramatically dropped from 103 to 6</strong>, and I'm confident we can even reduce it by vendoring Patternfly CSS (only the NG component has been vendored at the moment). <strong>And this was our driver number 1 in engaging this refactoring!</strong></p>
<p>What does that mean to all the re-design opportunities and contribution ease we foresee by opening the debate here in this thread? Does it mean we're closing the topics and waiting until the next big maintenance issue to start everything again? Certainly not.</p>
<p>First, we'd be in a better position to welcome incremental enhancements! I think we have a lot on our plates:</p>
<ul>
<li class="">The current UI is too square. Would you like more rounded buttons?</li>
<li class="">Are you allergic to light themes, and would you prefer a dark theme?</li>
<li class="">Layout and fonts are too "classical" or too much enterprisey?</li>
</ul>
<p>With the <a href="https://slaptijack.com/programming/what-is-vendoring.html" target="_blank" rel="noopener noreferrer" class="">vendoring process</a>, we would have everything at hand to integrate incremental changes to make it look more modern and sexy to users. Please, use your best designing skills and propose new wireframes or Figma arts so that we can study things and build a look &amp; feel theme that represents and supports the Microcks brand! Consistency is key in this kind of change integration.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="community-amplification-">Community amplification 📣<a href="https://microcks.io/blog/microcks-1.12.0-release/#community-amplification-" class="hash-link" aria-label="Direct link to Community amplification 📣" title="Direct link to Community amplification 📣" translate="no">​</a></h2>
<p>We extend our heartfelt thanks to the community for amplifying Microcks' presence in recent events.</p>
<p>At <strong>KubeCon + CloudNativeCon Europe 2025</strong>, Microcks was featured in two insightful sessions:</p>
<ul>
<li class=""><a href="https://youtu.be/07RnkzSc6Jg?si=6Kf8zjDFvuGWzNQP" target="_blank" rel="noopener noreferrer" class="">From 0 to Production-Grade With Kubernetes Native Development</a> 🍿 by <a href="https://www.linkedin.com/in/vitalethomas/" target="_blank" rel="noopener noreferrer" class="">Thomas Vitale</a> and <a href="https://www.linkedin.com/in/kevindubois/" target="_blank" rel="noopener noreferrer" class="">Kevin Dubois</a> highlights Microcks' role in enhancing the developer experience with Kubernetes-native Java applications.</li>
<li class=""><a href="https://youtu.be/Es3DBj2UgIE?si=tuh_Ek_so8OcnwUu" target="_blank" rel="noopener noreferrer" class="">Platform Engineering Loves Security: Shift Down To Your Platform, Not Left To Your Developers!</a> 🍿 by <a href="https://www.linkedin.com/in/maximecoquerel/" target="_blank" rel="noopener noreferrer" class="">Maxime Coquerel</a> &amp; <a href="https://www.linkedin.com/in/mathieubenoitqc/" target="_blank" rel="noopener noreferrer" class="">Mathieu Benoit</a> emphasized the importance of integrating security and quality assurance into the platform layer, a strategy that aligns with Microcks' approach within the API lifecycle.</li>
</ul>
<p>Additionally, we were honored to present at the <strong><a href="https://www.youtube.com/live/pbla9IjikvM?si=2l1_PtmbJEo6Su7A" target="_blank" rel="noopener noreferrer" class="">Dapr Community Call</a></strong> 🍿 on May 14th, where we provided a teaser of the integration value between Microcks and Dapr.</p>
<p>Our collaboration culminated in a comprehensive session at <strong><a href="https://2025.springio.net/" target="_blank" rel="noopener noreferrer" class="">Spring I/O 2025</a></strong> 🍃 in Barcelona, where we discussed simplifying cloud native app testing across environments using Microcks and Dapr. Stay tuned for the <a href="https://www.youtube.com/@SpringIOConference" target="_blank" rel="noopener noreferrer" class="">recording</a>.</p>
<p>We are grateful for the community's support and enthusiasm, which continues to drive Microcks' evolution in the cloud native ecosystem.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-coming-next">What’s coming next?<a href="https://microcks.io/blog/microcks-1.12.0-release/#whats-coming-next" class="hash-link" aria-label="Direct link to What’s coming next?" title="Direct link to What’s coming next?" translate="no">​</a></h2>
<p>As we conclude the <a href="https://lfx.linuxfoundation.org/tools/mentorship/" target="_blank" rel="noopener noreferrer" class="">LFX Mentorship Program</a> Term 1, we extend our heartfelt thanks to all our <a href="https://www.linkedin.com/posts/microcks_opensource-activity-7302340683829268480-t1Ye?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAIPBbsBvINQZpsEFVoO75QoZ5wnJTDeh98" target="_blank" rel="noopener noreferrer" class="">mentees</a>. Your dedication, enthusiasm, and valuable contributions have significantly enriched the Microcks community. We hope this experience has been as rewarding for you as it has been for us.</p>
<p>We will eagerly prioritize items according to community feedback. You can check and collaborate via our list of <a href="https://github.com/microcks/microcks/issues" target="_blank" rel="noopener noreferrer" class="">issues on GitHub</a> and the project <a href="https://github.com/orgs/microcks/projects/1" target="_blank" rel="noopener noreferrer" class="">roadmap</a>. Please join us to shape the future!</p>
<p>Remember that we are an open community, which means you, too, can jump on board to make Microcks even greater! Come and say hi! on our <a href="https://github.com/microcks/microcks/discussions" target="_blank" rel="noopener noreferrer" class="">GitHub discussion</a> or <a href="https://microcks.io/discord-invite/" target="_blank" rel="noopener noreferrer" class="">Discord chat</a> 👻, send some love through <a href="https://github.com/microcks/microcks" target="_blank" rel="noopener noreferrer" class="">GitHub stars</a> ⭐️ or follow us on <a href="https://bsky.app/profile/microcks.io" target="_blank" rel="noopener noreferrer" class="">BlueSky</a>, <a href="https://x.com/microcksio" target="_blank" rel="noopener noreferrer" class="">X</a>, <a href="https://hachyderm.io/@microcksio@mastodon.social" target="_blank" rel="noopener noreferrer" class="">Mastodon</a>, <a href="https://www.linkedin.com/company/microcks/" target="_blank" rel="noopener noreferrer" class="">LinkedIn</a>, and our <a href="https://www.youtube.com/c/Microcks" target="_blank" rel="noopener noreferrer" class="">YouTube channel</a>!</p>
<p>Thanks for reading and supporting us! ❤️</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[BNP Paribas' IT Journey with Microcks]]></title>
            <link>https://microcks.io/blog/bnp-journey-with-microcks/</link>
            <guid>https://microcks.io/blog/bnp-journey-with-microcks/</guid>
            <pubDate>Mon, 26 May 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[As the world of finance undergoes rapid digital transformation, the need for innovation that aligns with sustainable practices has never been greater.]]></description>
            <content:encoded><![CDATA[<p>As the world of finance undergoes <strong>rapid digital transformation</strong>, the need for <strong>innovation</strong> that aligns with <strong>sustainable practices</strong> has never been greater. At <a href="https://personal-finance.bnpparibas/wp-content/uploads/sites/4/2026/05/pres_instit_bnppf_externe_en-1.pdf" target="_blank" rel="noopener noreferrer" class="">BNP Paribas</a>, one of the world's leading banking institutions, we are proud to be at the <a href="https://group.bnpparibas/en/our-commitments/innovation/open-innovation" target="_blank" rel="noopener noreferrer" class="">forefront</a> of this <a href="https://group.bnpparibas/en/our-commitments/transitions/energy-efficiency" target="_blank" rel="noopener noreferrer" class="">movement</a>.</p>
<p>Our French Retail Banking entity (BCEF) is driving this change, with <a href="https://microcks.io/" target="_blank" rel="noopener noreferrer" class="">Microcks</a>, a Cloud Native Computing Foundation (CNCF) <a class="" href="https://microcks.io/blog/microcks-a-thriving-year-in-the-cncf-sandbox/">Sandbox project</a>, playing an instrumental role.</p>
<p><img decoding="async" loading="lazy" alt="image BNP Paribas&amp;#39; IT Journey with Microcks" src="https://microcks.io/assets/images/bnp-journey-with-microcks-feature-747fca7570cd61d4ee8f414d5523395a.png" width="1200" height="793" class="img_ev3q"></p>
<p>In this post, we share our strategic and confident implementation of Microcks to mock internal APIs and <strong>offload mainframe core banking services</strong>. This approach has accelerated our development and validation processes and led to <strong>substantial financial savings</strong> and <strong>sustainability gains</strong>. This post explores how BNP Paribas leads the charge in greening the cloud.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="innovating-within-a-legacy-system"><strong>Innovating Within a Legacy System</strong><a href="https://microcks.io/blog/bnp-journey-with-microcks/#innovating-within-a-legacy-system" class="hash-link" aria-label="Direct link to innovating-within-a-legacy-system" title="Direct link to innovating-within-a-legacy-system" translate="no">​</a></h2>
<p>Like many large financial institutions, BNP Paribas operates in a <strong>complex infrastructure</strong> and highly <strong>regulated environment</strong>, including legacy systems such as mainframes. These mainframes are the backbone of our <strong>core banking services</strong>, processing millions of daily transactions. While our environment is reliable and secure, it presents challenges regarding agility, scalability, and cost-effectiveness in a cloud-first world.</p>
<p><strong>Nadji Berraf</strong> - Head of Software Expertise Center &amp; Cloud Leader at BNPP:</p>
<blockquote>
<p>Developing and validating new features or services on these mainframes can be time-consuming and resource-intensive. Each test or development cycle consumes significant computational power and storage, fueling costs, and energy consumption.</p>
</blockquote>
<p>To address these challenges, we needed a solution that would enable us to <strong>speed up</strong> our development processes while <strong>reducing</strong> the <strong>environmental impact</strong> and <strong>operational costs</strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-bnp-paribas-leverages-microcks"><strong>How BNP Paribas Leverages Microcks</strong><a href="https://microcks.io/blog/bnp-journey-with-microcks/#how-bnp-paribas-leverages-microcks" class="hash-link" aria-label="Direct link to how-bnp-paribas-leverages-microcks" title="Direct link to how-bnp-paribas-leverages-microcks" translate="no">​</a></h2>
<p>Microcks is an open source project designed to create mock or simulated versions of APIs and microservices. These mocks allow developers to test their code against realistic scenarios without accessing the production backend services.</p>
<p><strong>Patrick Jacob</strong> - Chapter Lead Automation Lab (BCEF IT – Center of Excellence for Software &amp; Design Authority):</p>
<blockquote>
<p>As a <a href="https://landscape.cncf.io/?selected=microcks" target="_blank" rel="noopener noreferrer" class="">CNCF Sandbox project</a>, Microcks is cloud native, making it ideal for modern IT infrastructures using Kubernetes that prioritize scalability, flexibility, and environmental sustainability.</p>
</blockquote>
<p>
    <img decoding="async" loading="lazy" src="https://microcks.io/images/blog/bnp-microcks%20deployment%20architecture.png" alt="image BNP Microcks deployment architecture at BNP Paribas" class="img_ev3q">
</p>
<p style="text-align:center">
    <em>Microcks deployment architecture at BNP Paribas.</em>
</p>
<p>Six units have access to Microcks (operational units of the French IT department):</p>
<p>✅ <strong>32 squads</strong> driving innovation</p>
<p>✅ <strong>29 applications</strong> seamlessly integrated</p>
<p>✅ <strong>356 mocks</strong> &amp; <strong>1628 API operations</strong> ensuring reliability</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-offloading-mainframe-core-banking-services"><strong>1. Offloading Mainframe Core Banking Services</strong><a href="https://microcks.io/blog/bnp-journey-with-microcks/#1-offloading-mainframe-core-banking-services" class="hash-link" aria-label="Direct link to 1-offloading-mainframe-core-banking-services" title="Direct link to 1-offloading-mainframe-core-banking-services" translate="no">​</a></h4>
<p>We use Microcks to <strong>offload traffic from our mainframe</strong> by <strong>mocking the banking services</strong> that are exposed via REST/HTTP APIs.</p>
<p>Previously, our developers and testers had to interact directly with the mainframe to validate API integrations or test new features. This process was slow and placed unnecessary strain on the mainframe.</p>
<p>
    <img decoding="async" loading="lazy" src="https://microcks.io/images/blog/bnp-core-banking-mocking-with-microcks.png" alt="image BNP Core Banking API Mocking with Microcks" class="img_ev3q">
</p>
<p style="text-align:center">
    <em>Core Banking API Mocking with Microcks.</em>
</p>
<p>With Microcks, we can <strong>create realistic mocks of our core banking services</strong> and allow our developers to build and test integrations without accessing the mainframe. This approach <strong>speeds up the development process</strong> and <strong>frees up mainframe resource</strong>s.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-accelerating-development-and-validation"><strong>2. Accelerating Development and Validation</strong><a href="https://microcks.io/blog/bnp-journey-with-microcks/#2-accelerating-development-and-validation" class="hash-link" aria-label="Direct link to 2-accelerating-development-and-validation" title="Direct link to 2-accelerating-development-and-validation" translate="no">​</a></h4>
<p>Time-to-market is crucial in the financial industry, where being the first to launch a new feature or service can provide a significant competitive advantage. The traditional development and validation processes, especially those dependent on legacy systems, can be slow.</p>
<p>Microcks enables us to simulate dynamic API endpoints, allowing our developers to test their code against realistic scenarios without waiting for backend services to become available. This parallel development approach <strong>reduces bottlenecks, speeds up the release cycle, <strong>and</strong> thoroughly tests new features before deployment.</strong></p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-performing-heavy-benchmarks-with-simulated-latency"><strong>3. Performing Heavy Benchmarks with Simulated Latency</strong><a href="https://microcks.io/blog/bnp-journey-with-microcks/#3-performing-heavy-benchmarks-with-simulated-latency" class="hash-link" aria-label="Direct link to 3-performing-heavy-benchmarks-with-simulated-latency" title="Direct link to 3-performing-heavy-benchmarks-with-simulated-latency" translate="no">​</a></h4>
<p>Benchmarking and stress testing are essential to ensure that our systems can handle high loads and unexpected spikes in demand. However, conducting these tests directly on the mainframe can be complex and costly.</p>
<p>Microcks allows us to <strong>simulate production-like</strong> conditions, <strong>including introducing <a class="" href="https://microcks.io/documentation/guides/usage/delays/">latency in API responses</a></strong>. Replicating mainframe behavior in a controlled environment ensures robust and reliable applications while <strong>correctly sizing production infrastructure</strong> resources.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-driving-sustainability-with-reduced-energy-consumption"><strong>4. Driving Sustainability with Reduced Energy Consumption</strong><a href="https://microcks.io/blog/bnp-journey-with-microcks/#4-driving-sustainability-with-reduced-energy-consumption" class="hash-link" aria-label="Direct link to 4-driving-sustainability-with-reduced-energy-consumption" title="Direct link to 4-driving-sustainability-with-reduced-energy-consumption" translate="no">​</a></h4>
<p>Sustainability is at the core of BNP Paribas' IT strategy. By offloading API requests from the mainframe and utilizing mocked services, we have <strong>significantly reduced the computational load</strong> on our legacy systems.</p>
<p>This reduction in mainframe usage not only <strong>cuts operational costs</strong> but also significantly <strong>decreases energy consumption</strong>, contributing to a <strong>reduction in carbon footprint</strong> and supporting the organization's sustainability and green IT goals.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="overcoming-challenges-on-the-path-to-success"><strong>Overcoming Challenges on the Path to Success</strong><a href="https://microcks.io/blog/bnp-journey-with-microcks/#overcoming-challenges-on-the-path-to-success" class="hash-link" aria-label="Direct link to overcoming-challenges-on-the-path-to-success" title="Direct link to overcoming-challenges-on-the-path-to-success" translate="no">​</a></h2>
<p>Implementing new technology within a large, established organization like BNP Paribas is challenging. However, the benefits of adopting Microcks far outweighed any initial hurdles.</p>
<p>
    <img decoding="async" loading="lazy" src="https://microcks.io/images/blog/bnp-how-microcks-fits-in-pipelines.png" alt="image BNP How Microcks fits in BNP Paribas CI/CD pipelines" class="img_ev3q">
</p>
<p style="text-align:center">
    <em>How Microcks fits in BNP Paribas CI/CD pipelines.</em>
</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-integrating-with-existing-systems"><strong>1. Integrating with Existing Systems</strong><a href="https://microcks.io/blog/bnp-journey-with-microcks/#1-integrating-with-existing-systems" class="hash-link" aria-label="Direct link to 1-integrating-with-existing-systems" title="Direct link to 1-integrating-with-existing-systems" translate="no">​</a></h4>
<p>Although Microcks works seamlessly with modern systems, we needed to carefully plan to ensure compatibility with our highly secure and controlled on-premises private cloud. So, one of our first challenges involved integrating Microcks with our existing infrastructure.</p>
<p>By <strong>collaborating closely with the Microcks community</strong> and leveraging the project's <strong>extensive documentation</strong>, we successfully integrated Microcks into our environment.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-ensuring-realistic-mocking"><strong>2. Ensuring Realistic Mocking</strong><a href="https://microcks.io/blog/bnp-journey-with-microcks/#2-ensuring-realistic-mocking" class="hash-link" aria-label="Direct link to 2-ensuring-realistic-mocking" title="Direct link to 2-ensuring-realistic-mocking" translate="no">​</a></h4>
<p>Another challenge was ensuring that the mocked APIs were realistic enough to be helpful. We needed to replicate the behavior of our core banking services accurately, including handling edge cases and unexpected inputs. Microcks' support for <strong>dynamic and stateful mocks proved invaluable</strong>, allowing us to create <strong>highly realistic simulations</strong> that meet our exacting standards.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-educating-the-team"><strong>3. Educating the Team</strong><a href="https://microcks.io/blog/bnp-journey-with-microcks/#3-educating-the-team" class="hash-link" aria-label="Direct link to 3-educating-the-team" title="Direct link to 3-educating-the-team" translate="no">​</a></h4>
<p>Adopting a new tool requires buy-in from our development and testing teams. We invested in training and workshops based on <a class="" href="https://microcks.io/documentation/">Microcks documentation</a> to ensure our teams were comfortable using Microcks and fully understood its benefits. This investment paid off as our <strong>teams quickly recognized the advantages of mocked services</strong> over dedicated platforms for every test.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="realized-benefits-financial-savings-and-sustainability-gains"><strong>Realized Benefits: Financial Savings and Sustainability Gains</strong><a href="https://microcks.io/blog/bnp-journey-with-microcks/#realized-benefits-financial-savings-and-sustainability-gains" class="hash-link" aria-label="Direct link to realized-benefits-financial-savings-and-sustainability-gains" title="Direct link to realized-benefits-financial-savings-and-sustainability-gains" translate="no">​</a></h2>
<p>Adopting Microcks has brought several tangible benefits to BNP Paribas.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-significant-cost-savings"><strong>1. Significant Cost Savings</strong><a href="https://microcks.io/blog/bnp-journey-with-microcks/#1-significant-cost-savings" class="hash-link" aria-label="Direct link to 1-significant-cost-savings" title="Direct link to 1-significant-cost-savings" translate="no">​</a></h4>
<p>We have <strong>substantially saved costs by reducing our reliance on mainframe systems</strong> for development and testing. Mainframe operations are expensive, and by offloading a significant portion of this workload to Microcks, we have <strong>considerably reduced our operational costs</strong>.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-accelerated-development-cycles"><strong>2. Accelerated Development Cycles</strong><a href="https://microcks.io/blog/bnp-journey-with-microcks/#2-accelerated-development-cycles" class="hash-link" aria-label="Direct link to 2-accelerated-development-cycles" title="Direct link to 2-accelerated-development-cycles" translate="no">​</a></h4>
<p>Microcks has enabled us to <strong>accelerate and helped cut our development and testing cycles by two-thirds</strong>. This agility and the <strong>ability to deploy mock sandboxes everywhere,</strong> ready to use, have allowed us to quickly bring new features to market, providing us with a <strong>competitive edge in the fast-paced financial industry</strong>.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-enhanced-sustainability"><strong>3. Enhanced Sustainability</strong><a href="https://microcks.io/blog/bnp-journey-with-microcks/#3-enhanced-sustainability" class="hash-link" aria-label="Direct link to 3-enhanced-sustainability" title="Direct link to 3-enhanced-sustainability" translate="no">​</a></h4>
<p>One of the most significant benefits of adopting Microcks is <strong>reducing energy consumption</strong>. By minimizing the use of mainframe resources, we have <strong>significantly reduced our carbon footprint</strong>, directly contributing to our <strong>sustainability goals</strong>. This reduction supports our broader corporate environmental responsibility strategy and <strong>reinforces BNP Paribas’s position as a leader in sustainable IT practices</strong>.</p>
<p>By early 2025, <strong>32 squads</strong> had onboarded, with 10 squads relying on Microcks daily. Over <strong>500 developers and testers</strong> actively optimized APIs using the platform.</p>
<p><strong>Proven at scale</strong> with real-world usage:</p>
<p>✅ Over <strong>2.5 million API calls</strong> per week</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion-a-success-story-in-sustainable-it"><strong>Conclusion: A Success Story in Sustainable IT</strong><a href="https://microcks.io/blog/bnp-journey-with-microcks/#conclusion-a-success-story-in-sustainable-it" class="hash-link" aria-label="Direct link to conclusion-a-success-story-in-sustainable-it" title="Direct link to conclusion-a-success-story-in-sustainable-it" translate="no">​</a></h2>
<p>BNP Paribas' journey with Microcks is a <strong>testament to the power of innovative technology</strong> in driving <strong>business success and sustainability</strong>. By leveraging Microcks to mock internal APIs, offload mainframe services, and simulate production-like conditions, we have <strong>accelerated</strong> our development processes and achieved <strong>significant financial savings</strong> and <strong>sustainability gains</strong>.</p>
<p>As a Cloud Native Computing Foundation project, Microcks continues to play a pivotal role in our IT strategy, helping us meet our goals of agility, cost-efficiency, and environmental responsibility. This initiative demonstrates how the <strong>financial industry can embrace cloud native technologies</strong> to achieve a greener, more <strong>sustainable future</strong>.</p>
<p>Our experience with Microcks offers valuable insights and inspiration for organizations looking to balance innovation with sustainability. By adopting similar strategies, businesses can reduce their environmental impact while enhancing their competitive edge in the digital age.</p>
<p>Microcks is more than just a tool; it is a <strong>key enabler of BNP Paribas' sustainable IT journey</strong>, a journey that others in the financial world can learn from and follow!</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Microcks 1.11.1 release 🚀]]></title>
            <link>https://microcks.io/blog/microcks-1.11.1-release/</link>
            <guid>https://microcks.io/blog/microcks-1.11.1-release/</guid>
            <pubDate>Mon, 10 Mar 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Less than two months after the previous release, we are thrilled to announce this brand-new Microcks version!]]></description>
            <content:encoded><![CDATA[<p>Less than two months after the previous release, we are thrilled to announce this brand-new Microcks version! Please welcome the <code>1.11.1</code> release of Microcks, the <a href="https://landscape.cncf.io/?selected=microcks" target="_blank" rel="noopener noreferrer" class="">CNCF</a>'s open source cloud native tool for API Mocking and Testing, 🙌</p>
<p>As we benefit from an upgraded technical stack with the previous release, this <code>1.11.1</code> allowed us to focus on usage and performance optimizations. It received no less than <strong>22 new resolved issues</strong> that concentrate on three different areas:</p>
<ul>
<li class="">The  streamlining of our <strong>AI Copilot features</strong> to allow using it at Scale,</li>
<li class="">The tuning of the <strong>Uber distribution container images</strong> to achieve un-precedent startup times that will bring developers joy when used with <a class="" href="https://microcks.io/documentation/guides/usage/developing-testcontainers/">Testcontainers</a>,</li>
<li class="">The optimization of our <strong>CI/CD pipeline</strong> to reduce build time, energy consumption, and feedback loop for contributors.</li>
</ul>
<p><img decoding="async" loading="lazy" alt="microcks-feature" src="https://microcks.io/assets/images/microcks-1.11.1-feature-1537d50ccbb599b2dfc782b505d8417e.png" width="1200" height="799" class="img_ev3q"></p>
<p>Kudos to our community 👏, and let’s dive in without further ado.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ai-copilot-at-scale">AI Copilot at Scale!<a href="https://microcks.io/blog/microcks-1.11.1-release/#ai-copilot-at-scale" class="hash-link" aria-label="Direct link to AI Copilot at Scale!" title="Direct link to AI Copilot at Scale!" translate="no">​</a></h2>
<p>AI Copilot is present in Microcks for a few releases but it was more of an an experiment. We’ve worked a lot on making things more robust, enhancing the LLM prompts and response analysis (see issue <a href="https://github.com/microcks/microcks/issues/1507" target="_blank" rel="noopener noreferrer" class="">#1507</a>) and we now streamline its usage.</p>
<p>We focused on the following user story that is now a breeze with Microcks:</p>
<ul>
<li class="">As a user, load a raw spec in Microcks (it could be OpenAPI, AsyncAPI, gRPC, or GraphQL): no mocks are available.</li>
<li class="">Hit the <strong>AI Copilot</strong> button and Microcks will generate realistic samples for all the operations and response codes. This is done asynchronously and enhances your API definition with ready-to-use mocks!</li>
<li class="">Filter and export those samples: as an <a class="" href="https://microcks.io/documentation/references/examples/">APIExamples</a> artifact or as an <a href="https://spec.openapis.org/overlay/v1.0.0.html" target="_blank" rel="noopener noreferrer" class="">OpenAPI Overlay</a> artifact for REST APIs,</li>
<li class="">Share this artifact with your teammates, partners, or customers,</li>
<li class="">Allow them to build rich sandboxes with Microcks and reuse samples for API-drift testing!</li>
</ul>
<p>Better than a long speech, we recorded a video to demonstrate this:</p>
<div class="video-embed"><iframe src="https://www.youtube-nocookie.com/embed/1VtcGGu8Ib0" title="YouTube video" loading="lazy" allow="accelerometer; encrypted-media; picture-in-picture" allowfullscreen=""></iframe></div>
<blockquote>
<p>This feature will lower the entry bar and bring tremendous acceleration in the adoption of mocking! We’re looking forward to hearing from you on this! BTW, it’s also the first time we recorded such a demonstration, let us know if you like it and want more! 🙏</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="faster-uber-distribution-startup">Faster Uber distribution startup<a href="https://microcks.io/blog/microcks-1.11.1-release/#faster-uber-distribution-startup" class="hash-link" aria-label="Direct link to Faster Uber distribution startup" title="Direct link to Faster Uber distribution startup" translate="no">​</a></h2>
<p>The Uber container images received two important optimizations with this <code>1.11.1</code> release.</p>
<p>The most significant one is for the <strong>Uber Async Minion</strong> container image which is in charge of asynchronous features support in Microcks. We now distribute a new flavor of this image which uses <a href="https://www.graalvm.org/latest/reference-manual/native-image/" target="_blank" rel="noopener noreferrer" class="">GraalVM native compilation</a>. Just append <code>-native</code> to the image name and see the enhancements:</p>
<ul>
<li class="">From 1.4 sec to 140 ms startup time: <strong>10x startup boost!</strong></li>
<li class="">From 217 MB to 136 MB: a <strong>35% reduction in image size!</strong></li>
</ul>
<div align="center">
<blockquote class="bluesky-embed" data-bluesky-uri="at://did:plc:7wu3yjlwkk74od55bj6jxspd/app.bsky.feed.post/3lht7w2e7x22w" data-bluesky-cid="bafyreihc6i5drrpikofscd7uq3vqjqrmg2zhrqnsdig62i7zrygtthjxuq"><p lang="">🚅 @quarkus.io + @graalvm.org are magic 🎩  We applied native compilation to @microcks.io #Async component and got a 10x startup boost! 🔥 
</p><p>From 1.4 sec down to 140 ms! Just append <code>-native</code> to the image name. It's gonna be awesome with #testcontainers 🧊<br><br><a href="https://bsky.app/profile/did:plc:7wu3yjlwkk74od55bj6jxspd/post/3lht7w2e7x22w?ref_src=embed" target="_blank" rel="noopener noreferrer" class="">[image or embed]</a></p>— Laurent Broudoux (<a href="https://bsky.app/profile/did:plc:7wu3yjlwkk74od55bj6jxspd?ref_src=embed" target="_blank" rel="noopener noreferrer" class="">@lbroudoux.bsky.social</a>) <a href="https://bsky.app/profile/did:plc:7wu3yjlwkk74od55bj6jxspd/post/3lht7w2e7x22w?ref_src=embed" target="_blank" rel="noopener noreferrer" class="">February 10, 2025 at 2:13 PM</a></blockquote><p></p>
</div>
<p>The main <strong>Uber</strong> container image also improves the startup time by enabling the <a href="https://docs.spring.io/spring-framework/reference/core/aot.html" target="_blank" rel="noopener noreferrer" class="">Ahead Of Time compilation</a> of the underlying Spring Application. While the image size remains the same, we measured a startup time reduction of roughly <strong>10%—from 2.5 sec to 2.1 sec</strong>.</p>
<blockquote>
<p>These optimizations bring dramatic enhancements to the developer’s experience when using Microcks on your laptop - typically with <a class="" href="https://microcks.io/documentation/guides/usage/developing-testcontainers/">Testcontainers</a>. Remember that the <strong>Uber</strong> container image already comes with the <code>-native</code> flavor and very low startup time (~ 300ms), but people who needed <a class="" href="https://microcks.io/documentation/references/container-images/#microcks-uber">Microcks full features</a> will also be covered with this enhancements on JVM-based flavor.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="optimized-cicd-pipeline">Optimized CI/CD pipeline<a href="https://microcks.io/blog/microcks-1.11.1-release/#optimized-cicd-pipeline" class="hash-link" aria-label="Direct link to Optimized CI/CD pipeline" title="Direct link to Optimized CI/CD pipeline" translate="no">​</a></h2>
<p>Even if the CI/CD pipeline optimizations are not directly visible from the end-users point of view, this is a crucial topic that ensures that Microcks contributors can deliver new features faster and with better confidence!</p>
<p>Those optimizations were executed in two steps. The first one focused on reducing the global build time by optimizing the GitHub runners used in the workflow. We previously used <code>amd64</code> only runners and Docker’s<a href="https://www.qemu.org/" target="_blank" rel="noopener noreferrer" class=""> QEMU</a> emulation support when building <code>arm64</code> container images. We had a very long build time and a workflow that was far from optimized on the energy consumption level. 🪫</p>
<p>Thanks to<a href="https://github.blog/news-insights/product-news/arm64-on-github-actions-powering-faster-more-efficient-build-systems/" target="_blank" rel="noopener noreferrer" class=""> GitHub's new Arm64 runners</a>, we have been able to remove this emulation layer and reduce the build time <strong>from 1h15 to less than 27 minutes!</strong> 🔋</p>
<p><img decoding="async" loading="lazy" alt="Arm64 runner benefits" src="https://microcks.io/assets/images/microcks-1.11.1-arm64-runner-08c47d1f35c7a1fb8ee84d445bb0f279.png" width="1200" height="904" class="img_ev3q"></p>
<p>The second optimization step targeted the contributor’s workflow. We suffered from inappropriate error reports because some steps of the workflow were triggered even if it was not possible or necessary to execute them.</p>
<p>Contributors now have more precise contribution feedback—no more expected errors—and faster—in <strong>less than 7 minutes!</strong></p>
<p><img decoding="async" loading="lazy" alt="CI pipeline optimizations" src="https://microcks.io/assets/images/microcks-1.11.1-ci-optimizations-0a5668305165561cb87f83a409567aad.png" width="1910" height="714" class="img_ev3q"></p>
<blockquote>
<p>This topic was also the opportunity to receive the 1st contribution of <a href="https://github.com/inosmeet" target="_blank" rel="noopener noreferrer" class="">Meet Soni</a> 🙏 one of <a href="https://www.linkedin.com/posts/microcks_opensource-activity-7302340683829268480-t1Ye?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAIPBbsBvINQZpsEFVoO75QoZ5wnJTDeh98" target="_blank" rel="noopener noreferrer" class="">Microcks LFX Mentorship program mentees</a> 😉</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-coming-next">What’s coming next?<a href="https://microcks.io/blog/microcks-1.11.1-release/#whats-coming-next" class="hash-link" aria-label="Direct link to What’s coming next?" title="Direct link to What’s coming next?" translate="no">​</a></h2>
<p>As announced a few weeks ago, Microcks is starting an exciting new phase of its growth by welcoming 7 mentees for the next 3 months in the <a href="https://www.linkedin.com/posts/microcks_opensource-activity-7302340683829268480-t1Ye?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAIPBbsBvINQZpsEFVoO75QoZ5wnJTDeh98" target="_blank" rel="noopener noreferrer" class="">LFX Mentorship program</a>! Expect a boost on topics like the CLI, the testing workflows, the <a href="https://hub.microcks.io/" target="_blank" rel="noopener noreferrer" class="">Microcks Hub</a>, or the documentation!</p>
<p>We will eagerly prioritize items according to community feedback. You can check and collaborate via our list of <a href="https://github.com/microcks/microcks/issues" target="_blank" rel="noopener noreferrer" class="">issues on GitHub</a> and the project <a href="https://github.com/orgs/microcks/projects/1" target="_blank" rel="noopener noreferrer" class="">roadmap</a>. Please join us to shape the future!</p>
<p>Remember that we are an open community, which means you, too, can jump on board to make Microcks even greater! Come and say hi! on our <a href="https://github.com/microcks/microcks/discussions" target="_blank" rel="noopener noreferrer" class="">GitHub discussion</a> or <a href="https://microcks.io/discord-invite/" target="_blank" rel="noopener noreferrer" class="">Discord chat</a> 👻, send some love through <a href="https://github.com/microcks/microcks" target="_blank" rel="noopener noreferrer" class="">GitHub stars</a> ⭐️ or follow us on <a href="https://bsky.app/profile/microcks.io" target="_blank" rel="noopener noreferrer" class="">BlueSky</a>, <a href="https://twitter.com/microcksio" target="_blank" rel="noopener noreferrer" class="">Twitter</a>, <a href="https://hachyderm.io/@microcksio@mastodon.social" target="_blank" rel="noopener noreferrer" class="">Mastodon</a>, <a href="https://www.linkedin.com/company/microcks/" target="_blank" rel="noopener noreferrer" class="">LinkedIn</a>, and our <a href="https://www.youtube.com/c/Microcks" target="_blank" rel="noopener noreferrer" class="">YouTube channel</a>!</p>
<p>Thanks for reading and supporting us! ❤️</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Microcks 1.11.0 release 🚀]]></title>
            <link>https://microcks.io/blog/microcks-1.11.0-release/</link>
            <guid>https://microcks.io/blog/microcks-1.11.0-release/</guid>
            <pubDate>Wed, 22 Jan 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Start fresh this New Year and welcome the 1.11.0 release of Microcks, the CNCF’s open-source cloud-native API Mocking and Testing tool!]]></description>
            <content:encoded><![CDATA[<p>Start fresh this New Year and welcome the <code>1.11.0</code> release of Microcks, the <a href="https://landscape.cncf.io/?selected=microcks" target="_blank" rel="noopener noreferrer" class="">CNCF</a>’s open-source cloud-native API Mocking and Testing tool!</p>
<p>With over <strong>60 resolved issues</strong> and <strong>12 contributors</strong>, this is one of the biggest releases! Kudos to all the people 👏 who helped along the way by writing code, commenting on issues, or writing posts. Check our greetings and notes below.</p>
<p>This release had no specific theme at the beginning but reviewing the content, we realized it was mainly about validation &amp; traceability:</p>
<ul>
<li class=""><strong>Validation on mocks</strong> with new controls on input requests and new gRPC error management;</li>
<li class=""><strong>Validation and Traceability of the way we build Microcks</strong> with huge enhancements related to the security of the software supply chain!</li>
</ul>
<p><img decoding="async" loading="lazy" alt="microcks-feature" src="https://microcks.io/assets/images/microcks-1.11.0-feature-23c875099672eaa4d8534a02a12baf83.png" width="1200" height="793" class="img_ev3q"></p>
<p>Without further ado, let’s review the latest updates for each of our key highlights.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="validation-on-mocks">Validation on mocks<a href="https://microcks.io/blog/microcks-1.11.0-release/#validation-on-mocks" class="hash-link" aria-label="Direct link to Validation on mocks" title="Direct link to Validation on mocks" translate="no">​</a></h2>
<p>It’s a common concern to lower the entry barrier when providing mocks so that people can easily discover and play around with your API endpoints. For that, Microcks only uses a subset of incoming request elements to try to find a matching mock response. This is great for a quick start but this also means that all the non-matching elements - like query parameters or body information - can be totally false without any raised concern on the consumer side 🤔</p>
<p>The <a class="" href="https://microcks.io/documentation/guides/usage/mocks-constraints/">Constraints</a> feature is typically there to avoid this, but until today, it was an opt-in option you had to explicitly set by adding constraints to your mocks via the Web console or the API only.</p>
<p>With this new <code>1.11.0</code>, <strong>we drastically enhanced the way that Constraints can be set and applied</strong> to prevent your API consumers from being blind to their own errors.</p>
<p>1️⃣ The <a class="" href="https://microcks.io/documentation/guides/usage/mocks-constraints/">Parameters Constraints</a> corresponding to <code>required</code> elements in query or headers are now automatically inferred and applied at runtime. Just try calling a Microcks mock missing a required header and you’ll now receive a <code>400</code> response indicating a malformed request,</p>
<p>2️⃣ All the other constraints - type, regular expression, recopy, etc. - can now be specified in your OpenAPI or YAML artifacts using our <a class="" href="https://microcks.io/documentation/references/artifacts/openapi-conventions/#openapi-extensions">OpenAPI extension</a> or our own <a class="" href="https://microcks.io/documentation/references/metadata/#api-metadata-properties">APIMetadata format</a>. You no longer need to issue an API call or connect to the console.</p>
<p>What about body payload? Applying full body payload validation on each incoming request can be impactful on behavior for existing users but also on performance. That’s why <strong>we also introduced new validation-enabled mock endpoints</strong> with this version!</p>
<p>From the small toggle next to the <strong>Mock URL</strong> you can now ask for the <code>valid</code> endpoint option:</p>
<p><img decoding="async" loading="lazy" alt="mock-endpoint-validation" src="https://microcks.io/assets/images/microcks-1.11.0-validation-162f11f05201ad0e3bbe8d5d36b10454.png" width="725" height="331" class="img_ev3q"></p>
<p>Just issue an invalid call to this endpoint - changing the price to a string for example - and you’ll see the validation in action:</p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-X</span><span class="token plain"> PATCH </span><span class="token string" style="color:rgb(255, 121, 198)">'http://localhost:8080/rest-valid/API+Pastries/0.0.1/pastries/Eclair+Cafe'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-H</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'Accept: application/json'</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-H</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'Content-Type: application/json'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-d</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'{ "price": "2.6" }'</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-v</span><br></div></code></pre></div></div>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">..</span><span class="token plain">.</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token operator">&lt;</span><span class="token plain"> HTTP/1.1 </span><span class="token number">400</span><span class="token plain"> </span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">..</span><span class="token plain">.</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">instance </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">type</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> does not match any allowed primitive </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">type</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">allowed: </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"integer"</span><span class="token plain">,</span><span class="token string" style="color:rgb(255, 121, 198)">"number"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain">%</span><br></div></code></pre></div></div>
<blockquote>
<p>This new validation option is available for both REST and SOAP endpoints. The <a href="https://grpc.io/" target="_blank" rel="noopener noreferrer" class="">gRPC</a> endpoint already embeds this body payload validation, which is mandatory for Protobuffer serialization.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="grpc-enhancements">gRPC enhancements<a href="https://microcks.io/blog/microcks-1.11.0-release/#grpc-enhancements" class="hash-link" aria-label="Direct link to gRPC enhancements" title="Direct link to gRPC enhancements" translate="no">​</a></h2>
<p><a href="https://grpc.io/" target="_blank" rel="noopener noreferrer" class="">gRPC</a> is quickly gaining popularity as it offers an efficient alternative to text message serialization in performance-critical situations. With this <code>1.11.0</code>, Microcks enhanced its gRPC mocking and testing support thanks to awesome contributions by <a href="https://github.com/anika-apel" target="_blank" rel="noopener noreferrer" class="">Anika Apel</a> 🙏 and <a href="https://github.com/camaral" target="_blank" rel="noopener noreferrer" class="">Caio Amaral</a> 🙏</p>
<p>1️⃣ Microcks now supports using gRPC metadata (or headers) into the <code>SCRIPT</code> dispatcher. This allows you to simply use the <code>mockRequest.getRequestHeaders()</code> function to access gRPC metadata and define smart dispatching rules using them,</p>
<p>2️⃣ It also supports injecting gRPC headers into test requests when contract-testing implementation endpoints. The headers you specify - either through the Web console, the <a class="" href="https://microcks.io/documentation/guides/automation/cli/">Microcks CLI</a>, an <a class="" href="https://microcks.io/documentation/guides/automation/api/">API call</a>, or your favorite <a class="" href="https://microcks.io/blog/testcontainers-modules-0.3/">Testcontainers module</a> - are passed to the endpoint under test and become dynamic elements of the tests,</p>
<p>3️⃣ And it also relates to validation - you’ll now have the capability to mock gRPC failure responses as well! Oftentimes, one wants to simulate edge cases in order to verify the application behavior and simulating errors can be a handful too! It’s now possible to do so and it’s even easier using our new <a class="" href="https://microcks.io/documentation/references/examples/#requestresponse-based-api">APIExamples</a> format simply specifying the <code>status</code> of a gRPC response 😉</p>
<blockquote>
<p>In addition to those awesome contributions, our friends at <a href="https://bitso.com/" target="_blank" rel="noopener noreferrer" class="">Bitso</a> have also crafted a very interesting blog post on <a href="https://medium.com/bitso-engineering/isolated-local-development-environment-with-microcks-70c8ff291950" target="_blank" rel="noopener noreferrer" class="">how they’re using Microcks to setup isolated local development</a> for their Spring Boot gRPC developers. A must-read! 🤩</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="secured-software-supply-chain">Secured Software Supply Chain<a href="https://microcks.io/blog/microcks-1.11.0-release/#secured-software-supply-chain" class="hash-link" aria-label="Direct link to Secured Software Supply Chain" title="Direct link to Secured Software Supply Chain" translate="no">​</a></h2>
<p>As in most software projects, the way we build Microcks is not the most glamorous part of it! But as an open-source project, part of an exposed foundation like the <a href="https://landscape.cncf.io/?selected=microcks" target="_blank" rel="noopener noreferrer" class="">CNCF</a>, and being used in mission-critical organizations like Banks, Telcos, and Public Governmental organizations, the software supply chain integrity is a major concern 🤔</p>
<p>The <code>1.11.0</code> release <strong>has been entirely built with this in mind</strong>, applying the best practices from the community and especially from the <a href="https://slsa.dev/" target="_blank" rel="noopener noreferrer" class="">SLSA</a> project (for Supply-chain Levels for Software Artifacts).</p>
<p>What changes have been introduced? What traceability, auditability and integrity guarantees are we providing? Well, that’s a lot! Here’s a non-exhaustive list of new practices and guarantees we introduced:</p>
<ul>
<li class="">We settled the <a href="https://clomonitor.io/docs/topics/checks/#dependencies-policy" target="_blank" rel="noopener noreferrer" class="">dependencies management policy</a>, <a href="https://clomonitor.io/docs/topics/checks/#dependency-update-tool-from-openssf-scorecard" target="_blank" rel="noopener noreferrer" class="">dependencies update tools</a>, and <a href="https://github.com/ossf/security-insights-spec/blob/v1.0.0/specification.md" target="_blank" rel="noopener noreferrer" class="">security insights</a>,</li>
<li class="">We removed <a href="https://clomonitor.io/docs/topics/checks/#dangerous-workflow-from-openssf-scorecard" target="_blank" rel="noopener noreferrer" class="">dangerous workflows</a> by reviewing <a href="https://clomonitor.io/docs/topics/checks/#token-permissions-from-openssf-scorecard" target="_blank" rel="noopener noreferrer" class="">CI/CD permissions</a> and dependencies,</li>
<li class="">We fully <a href="https://github.com/microcks/microcks/issues/1468" target="_blank" rel="noopener noreferrer" class="">automated the release process</a> so that change can’t appear without a formal review,</li>
<li class="">We now generate a <a href="https://clomonitor.io/docs/topics/checks/#software-bill-of-materials-sbom" target="_blank" rel="noopener noreferrer" class="">Software Bill of Materials</a> (SBOM) for each package we release,</li>
<li class="">We are also <a href="https://clomonitor.io/docs/topics/checks/#signed-releases-from-openssf-scorecard" target="_blank" rel="noopener noreferrer" class="">signing released packages</a> and their checksums so that it’s easy to check their integrity.</li>
</ul>
<p style="margin:0px;line-height:0.8rem">&nbsp;</p>
<p>The Microcks project also provides a bunch of <strong>container images</strong> and we’ve done similar things for them:</p>
<ul>
<li class="">
<p>The images we provide are now all <a href="https://www.sigstore.dev/" target="_blank" rel="noopener noreferrer" class="">signed using Sigstore</a>,</p>
</li>
<li class="">
<p>Attached as image layers, we also provide:</p>
<ul>
<li class="">A <a href="https://slsa.dev/spec/v1.0/provenance#v02" target="_blank" rel="noopener noreferrer" class="">SLSA Provenance</a> attestation that can attest that the container comes from our CI/CD process,</li>
<li class="">A <a href="https://spdx.dev/" target="_blank" rel="noopener noreferrer" class="">SPDX SBOM</a> attestation that tracks all the dependent layers in the image</li>
</ul>
</li>
<li class="">
<p>We became a <code>Verified</code> and <code>Official</code> publisher on <a href="https://artifacthub.io/packages/search?org=microcks&amp;sort=relevance&amp;page=1" target="_blank" rel="noopener noreferrer" class="">ArtifactHub.io</a>, the CNCF official artifact repository.</p>
</li>
</ul>
<p>Whouah! This was a <strong>long-run task that spans the six last months</strong> and has been tracked in issue <a href="https://github.com/microcks/microcks/issues/1201" target="_blank" rel="noopener noreferrer" class="">#1201</a>. This has been done not just for the main Microcks packages but for all the packages coming from all the GitHub repositories in the <a href="https://github.com/microcks" target="_blank" rel="noopener noreferrer" class="">Microcks organization</a>! To help us monitor that daily, we have set the <a href="https://clomonitor.io/projects/cncf/microcks" target="_blank" rel="noopener noreferrer" class="">CLO Monitor tooling</a> that you can also use to track our progress 😎</p>
<blockquote>
<p>As a Microcks end-user, you would be particularly interested in the process of checking the integrity of downloaded container images. The <a class="" href="https://microcks.io/documentation/references/container-images/#software-supply-chain-security">Software Supply Chain Security documentation</a> details how things are structured and can be easily checked using standard tools like <code>docker</code>, <code>cosign</code>, or <code>oras</code>.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="improvements-that-are-worth-noting">Improvements that are worth noting<a href="https://microcks.io/blog/microcks-1.11.0-release/#improvements-that-are-worth-noting" class="hash-link" aria-label="Direct link to Improvements that are worth noting" title="Direct link to Improvements that are worth noting" translate="no">​</a></h2>
<p>Aside from the major changes listed above, here are some other improvements that are worth being aware of. Without any specific priorities:</p>
<ul>
<li class="">We now support embedded Avro schema and schema registry integration for AsyncAPI - See issue <a href="https://github.com/microcks/microcks/issues/1422" target="_blank" rel="noopener noreferrer" class="">#1422</a></li>
<li class="">We now support multi-templating in AsyncAPI channel names - See issue <a href="https://github.com/microcks/microcks/issues/1399" target="_blank" rel="noopener noreferrer" class="">#1339</a></li>
<li class="">We fixed a permission issue when deploying MongoDB on certain Kubernetes distro - See issue <a href="https://github.com/microcks/microcks/issues/1420" target="_blank" rel="noopener noreferrer" class="">#1420</a></li>
<li class="">We fixed all the documentation links in the Web console - See issue <a href="https://github.com/microcks/microcks/issues/1350" target="_blank" rel="noopener noreferrer" class="">#1350</a></li>
<li class="">We provide a new fallback notation for templating - See issue <a href="https://github.com/microcks/microcks/issues/1446" target="_blank" rel="noopener noreferrer" class="">#1446</a></li>
</ul>
<p>And many more… The full release notes with all changes can be found <a href="https://github.com/microcks/microcks/releases/tag/1.11.0" target="_blank" rel="noopener noreferrer" class="">here</a>.</p>
<blockquote>
<p>⚠️ <em><strong>Warning</strong></em><br><br></p>
<p>With the release <code>1.11.0</code>, <strong>we decommissioned the <a href="https://github.com/microcks/microcks-ansible-operator" target="_blank" rel="noopener noreferrer" class="">Microcks Ansible Operator</a></strong> that will no longer work if you choose Microcks <code>1.11.0</code> or <code>latest</code> as your Microcks version. As a consequence, we recommend not to change the Microcks version in your existing <code>MicrocksInstall</code> Custom-Resource and pin it to <code>1.10.1</code> if you temporarily want to stick with this operator.<br><br></p>
<p>We now <strong>provide a <a href="https://github.com/microcks/microcks-operator" target="_blank" rel="noopener noreferrer" class="">new Microcks Operator</a> that is more lightweight, performant with more features</strong> in a 100% GitOps oriented way. The new Microcks Operator has been used in production for months by different adopter and we're confident it behaves well.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-coming-next">What’s coming next?<a href="https://microcks.io/blog/microcks-1.11.0-release/#whats-coming-next" class="hash-link" aria-label="Direct link to What’s coming next?" title="Direct link to What’s coming next?" translate="no">​</a></h2>
<p>As usual, we will eagerly prioritize items according to community feedback. You can check and collaborate via our list of <a href="https://github.com/microcks/microcks/issues" target="_blank" rel="noopener noreferrer" class="">issues on GitHub</a> and the project <a href="https://github.com/orgs/microcks/projects/1" target="_blank" rel="noopener noreferrer" class="">roadmap</a>.</p>
<p>More than ever, we want to involve community members in design discussions and start some discussions about significant changes regarding <a href="https://github.com/orgs/microcks/discussions/1458" target="_blank" rel="noopener noreferrer" class="">Microcks UI Future</a> or our <a href="https://github.com/orgs/microcks/discussions/1463" target="_blank" rel="noopener noreferrer" class="">Participation to LFX mentorship programs</a>. Please join us to shape the future!</p>
<p>Remember that we are an open community, which means you, too, can jump on board to make Microcks even greater! Come and say hi! on our <a href="https://github.com/microcks/microcks/discussions" target="_blank" rel="noopener noreferrer" class="">GitHub discussion</a> or <a href="https://microcks.io/discord-invite/" target="_blank" rel="noopener noreferrer" class="">Discord chat</a> 👻, send some love through <a href="https://github.com/microcks/microcks" target="_blank" rel="noopener noreferrer" class="">GitHub stars</a> ⭐️ or follow us on <a href="https://bsky.app/profile/microcks.io" target="_blank" rel="noopener noreferrer" class="">BlueSky</a>, <a href="https://twitter.com/microcksio" target="_blank" rel="noopener noreferrer" class="">Twitter</a>, <a href="https://hachyderm.io/@microcksio@mastodon.social" target="_blank" rel="noopener noreferrer" class="">Mastodon</a>, <a href="https://www.linkedin.com/company/microcks/" target="_blank" rel="noopener noreferrer" class="">LinkedIn</a>, and our <a href="https://www.youtube.com/c/Microcks" target="_blank" rel="noopener noreferrer" class="">YouTube channel</a>!</p>
<p>Thanks for reading and supporting us! ❤️</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Announcing Testcontainers Modules 0.3]]></title>
            <link>https://microcks.io/blog/testcontainers-modules-0.3/</link>
            <guid>https://microcks.io/blog/testcontainers-modules-0.3/</guid>
            <pubDate>Wed, 15 Jan 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[To start the 2025 Year fresh, we're delighted to announce the release of the new series of our Testcontainers Modules 🧊!]]></description>
            <content:encoded><![CDATA[<p>To start the 2025 Year fresh, we're delighted to announce the release of the new series of our <a href="https://www.testcontainers.com/" target="_blank" rel="noopener noreferrer" class="">Testcontainers</a>
Modules 🧊! <a href="https://testcontainers.com/modules/microcks" target="_blank" rel="noopener noreferrer" class="">Microcks modules</a> are language-specific libraries that enable embedding Microcks into
your unit tests with lightweight, throwaway instances thanks to containers.</p>
<p>The <code>0.3</code> series is a major step forward that completes the set of features and elevates Microcks as <strong>a fully featured mocking library for development purposes</strong>.
It can be used with different testing styles (classicist, mockist, state-based, and interaction-based) and provides features for all major
languages and all kinds of API!</p>
<p><img decoding="async" loading="lazy" alt="testcontainers modules 0.3 feature" src="https://microcks.io/assets/images/testcontainers-modules-0.3-feature-f7c903ef5f468ed451ef707b99197839.png" width="1200" height="795" class="img_ev3q"></p>
<div align="center" style="padding-bottom:40px"><legend><small><i>Photo by Alexandre Boucey on Unsplash</i></small></legend></div>
<p>The <code>0.3</code> versions are coincident releases made last week on the three main languages we currently support: <a href="https://github.com/microcks/microcks-testcontainers-java" target="_blank" rel="noopener noreferrer" class="">Java ☕️</a>,
<a href="https://github.com/microcks/microcks-testcontainers-node" target="_blank" rel="noopener noreferrer" class="">NodeJS/Typescript</a> and <a href="https://github.com/microcks/microcks-testcontainers-go" target="_blank" rel="noopener noreferrer" class="">Golang</a>.
With those new releases, we now have complete feature parity among the three different technology stacks! We plan to add the same features to
the upcoming <a href="https://github.com/microcks/microcks-testcontainers-dotnet" target="_blank" rel="noopener noreferrer" class="">.NET module</a> that we added to our portfolio in December 2024.</p>
<p>Let's introduce the new features of those releases that complete the picture!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-inside">What's inside?<a href="https://microcks.io/blog/testcontainers-modules-0.3/#whats-inside" class="hash-link" aria-label="Direct link to What's inside?" title="Direct link to What's inside?" translate="no">​</a></h2>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="1️⃣-interaction-checks">1️⃣ Interaction checks<a href="https://microcks.io/blog/testcontainers-modules-0.3/#1%EF%B8%8F%E2%83%A3-interaction-checks" class="hash-link" aria-label="Direct link to 1️⃣ Interaction checks" title="Direct link to 1️⃣ Interaction checks" translate="no">​</a></h4>
<p>If you spend some time reading about Test Driven Development, you may know that it exists two main school of thought: the <em>Classicist</em> and the <em>Mockist</em>.
(more on this in <a href="https://medium.com/@adrianbooth/test-driven-development-wars-detroit-vs-london-classicist-vs-mockist-9956c78ae95f" target="_blank" rel="noopener noreferrer" class="">this excellent article</a>)</p>
<p>Until now, Microcks Testcontainers integration was <em>Classicist</em> in the sense that it was focused on providing canned responses when the mocks
endpoints were called. With this <code>0.3</code> release, we now also have a <em>Mockist</em> approach in the case you want to check the interactions of your
component under test with a dependant API.</p>
<p>You can now call <code>verify()</code> or <code>getServiceInvocationsCount()</code> on a Microcks container to check whether an API dependency has actually been
called - or not. This is a super powerful way to ensure that your application logic (when to interact with an API) and access policies (caching,
no caching, etc.) are correctly implemented and use the mock endpoints only when required!</p>
<p><img decoding="async" loading="lazy" alt="testcontainers modules 0.3 interaction" src="https://microcks.io/assets/images/testcontainers-modules-0.3-interaction-9537dc6a68dfc161ce32223eb55b53ca.png" width="1035" height="657" class="img_ev3q"></p>
<p>A big shout out to <a href="https://github.com/pierrechristinimsa" target="_blank" rel="noopener noreferrer" class="">pierrechirstinimsa</a> 🙏 who contributed this one for <a href="https://github.com/microcks/microcks-testcontainers-java/pull/121" target="_blank" rel="noopener noreferrer" class="">our Java module</a> 🎉</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="2️⃣-access-to-messages-in-synchronous-api-contract-testing">2️⃣ Access to <code>messages</code> in synchronous API contract-testing<a href="https://microcks.io/blog/testcontainers-modules-0.3/#2%EF%B8%8F%E2%83%A3-access-to-messages-in-synchronous-api-contract-testing" class="hash-link" aria-label="Direct link to 2️⃣-access-to-messages-in-synchronous-api-contract-testing" title="Direct link to 2️⃣-access-to-messages-in-synchronous-api-contract-testing" translate="no">​</a></h4>
<p>The second thing we added in this release is the ability to retrieve exchanged messages when doing contract-testing. Different
<a class="" href="https://microcks.io/documentation/references/test-endpoints/#test-runner">contract-testing runners</a> already exists in Microcks but they're
mainly focused on <strong>syntactical conformance</strong> checking. However, we know that there are <a href="https://medium.com/@lbroudoux/different-levels-of-api-contract-testing-with-microcks-ccc0847f8c97" target="_blank" rel="noopener noreferrer" class="">multiple levels of contract testing</a>.</p>
<p>The new <code>getMessagesForTestCase()</code> function on Microcks container allows you to retrieve the requests and responses that were used during an
operation tests case. You can then use them to perform extra checks more related to <strong>business conformance</strong>; validating, for example, that
data retrieval or transformation logic is  correctly implemented.</p>
<p><img decoding="async" loading="lazy" alt="testcontainers modules 0.3 messages" src="https://microcks.io/assets/images/testcontainers-modules-0.3-messages-2eeaca0d74019397a5274398b141c2b4.png" width="1051" height="677" class="img_ev3q"></p>
<p>These extra checks can be done <em>manually</em> directly in the programming language of your tests but you can also delegate them
to frameworks like <a href="https://cucumber.io/" target="_blank" rel="noopener noreferrer" class="">Cucumber</a> which are written in plain language by business experts; for running acceptance tests!</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="3️⃣-access-to-events-in-asynchronous-eda-contract-testing">3️⃣ Access to <code>events</code> in asynchronous EDA contract-testing<a href="https://microcks.io/blog/testcontainers-modules-0.3/#3%EF%B8%8F%E2%83%A3-access-to-events-in-asynchronous-eda-contract-testing" class="hash-link" aria-label="Direct link to 3️⃣-access-to-events-in-asynchronous-eda-contract-testing" title="Direct link to 3️⃣-access-to-events-in-asynchronous-eda-contract-testing" translate="no">​</a></h4>
<p>Finally, we also added a way to do the same thing for asynchronous events received during a contract test on an asynchronous broker.</p>
<p>Until now, Microcks <code>ASYNC_API_SCHEMA</code> tests allowed you to check that events were fired, correctly sent, read back from - let say - an
<a href="https://kafka.apache.org/" target="_blank" rel="noopener noreferrer" class="">Apache Kafka</a> topic and valid regarding a schema. But what about the content of this event? Was it really related
to the business function call that fired it?</p>
<p>The new <code>getEventMessagesForTestCase()</code> function allow you to retrieve those events that were read from the broker topic and - here again -
perform extra checks. Typically, you can validate that the data from the event is correctly correlated to the original data that triggered the
event emission.</p>
<p><img decoding="async" loading="lazy" alt="testcontainers modules 0.3 events" src="https://microcks.io/assets/images/testcontainers-modules-0.3-events-66f0b6593370367d17af4c426a0b644a.png" width="1376" height="695" class="img_ev3q"></p>
<blockquote>
<p>💡 <em>In the the case of EDA, those checks are also tightly related to interaction checks; and this is a situation we faced during the development of the
supporting demo application! Once we added them, we realized that our Kafka producer has a flushing issue and that we received more messages than we
expected! Due to a <a href="https://github.com/microcks/microcks-testcontainers-go-demo/blob/main/internal/service/order_event_publisher.go#L85" target="_blank" rel="noopener noreferrer" class="">too low timeout configuration</a>,
events were not sent at the right time, introducing de-synchronization and collisions! 💥</em></p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="enthusiastic">Enthusiastic?<a href="https://microcks.io/blog/testcontainers-modules-0.3/#enthusiastic" class="hash-link" aria-label="Direct link to Enthusiastic?" title="Direct link to Enthusiastic?" translate="no">​</a></h2>
<p>We hope this walkthrough has made you enthusiastic about this new set of features in Microcks Testcontainers <code>0.3</code>! The best thing is that you don't have
to wait another Microcks release to test them out as they're are leveraging APIs and features that are present for a long time in Microcks core!</p>
<p>If you want to learn them and see them in action, we have completed our demonstration application and tutorials on Testcontainers Modules as well!
You just have to check the following links:</p>
<ul>
<li class="">
<p><strong>For Java ☕️:</strong> <a href="https://github.com/microcks/microcks-testcontainers-java-spring-demo/blob/main/step-4-write-rest-tests.md#-bonus-step---check-the-mock-endpoints-are-actually-used" target="_blank" rel="noopener noreferrer" class="">How to check the mock endpoints are actually used</a>, <a href="https://github.com/microcks/microcks-testcontainers-java-spring-demo/blob/main/step-4-write-rest-tests.md#-bonus-step---verify-the-business-conformance-of-order-service-api-in-pure-java" target="_blank" rel="noopener noreferrer" class="">How to verify the business conformance of a synchronous API</a>, and <a href="https://github.com/microcks/microcks-testcontainers-java-spring-demo/blob/main/step-5-write-async-tests.md#-bonus-step---verify-the-event-content" target="_blank" rel="noopener noreferrer" class="">How to verify the event content for an asynchronous API</a></p>
</li>
<li class="">
<p><strong>For NodeJS/TypeScript:</strong> <a href="https://github.com/microcks/microcks-testcontainers-node-nest-demo/blob/main/step-4-write-rest-tests.md#-bonus-step---check-the-mock-endpoints-are-actually-used" target="_blank" rel="noopener noreferrer" class="">How to check the mock endpoints are actually used</a>, <a href="https://github.com/microcks/microcks-testcontainers-node-nest-demo/blob/main/step-4-write-rest-tests.md#-bonus-step---verify-the-business-conformance-of-order-service-api-in-pure-java" target="_blank" rel="noopener noreferrer" class="">How to verify the business conformance of a synchronous API</a>, and <a href="https://github.com/microcks/microcks-testcontainers-node-nest-demo/blob/main/step-5-write-async-tests.md#-bonus-step---verify-the-event-content" target="_blank" rel="noopener noreferrer" class="">How to verify the event content for an asynchronous API</a></p>
</li>
<li class="">
<p><strong>For Golang:</strong> <a href="https://github.com/microcks/microcks-testcontainers-go-demo/blob/main/step-4-write-rest-tests.md#-bonus-step---check-the-mock-endpoints-are-actually-used" target="_blank" rel="noopener noreferrer" class="">How to check the mock endpoints are actually used</a>, <a href="https://github.com/microcks/microcks-testcontainers-go-demo/blob/main/step-4-write-rest-tests.md#-bonus-step---verify-the-business-conformance-of-order-service-api-in-pure-java" target="_blank" rel="noopener noreferrer" class="">How to verify the business conformance of a synchronous API</a>, and <a href="https://github.com/microcks/microcks-testcontainers-go-demo/blob/main/step-5-write-async-tests.md#-bonus-step---verify-the-event-content" target="_blank" rel="noopener noreferrer" class="">How to verify the event content for an asynchronous API</a></p>
</li>
</ul>
<p>As usual, we’re eager for community feedback: come and discuss on our <a href="https://microcks.io/discord-invite/" target="_blank" rel="noopener noreferrer" class="">Discord chat</a> 👻</p>
<p>Thanks for reading and supporting us!</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Recap of an Amazing 2024, and ready to go for 2025!]]></title>
            <link>https://microcks.io/blog/recap-of-an-amazing-2024/</link>
            <guid>https://microcks.io/blog/recap-of-an-amazing-2024/</guid>
            <pubDate>Mon, 13 Jan 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[As we wrap up 2024, we at Microcks want to express our gratitude to our adopters, sponsors, partners, and community members.]]></description>
            <content:encoded><![CDATA[<p>As we wrap up 2024, we at <a href="https://microcks.io/" target="_blank" rel="noopener noreferrer" class="">Microcks</a> want to express our gratitude to our <strong>adopters</strong>, <strong>sponsors</strong>, <strong>partners</strong>, and <strong>community members</strong>. Your unwavering support and engagement have been the foundation of our success, making this year nothing short of remarkable. We've achieved significant milestones such as more <strong>community implication</strong>, <strong>stronger ecosystem collaboration</strong>, and significant <strong>communication contributions</strong> and <strong>amplification</strong> from our members.</p>
<p><img decoding="async" loading="lazy" alt="recap of an amazing 2024 feature" src="https://microcks.io/assets/images/recap-of-an-amazing-2024-feature-aa5ec44dc77eb3c07c2a0e30a8a92394.png" width="1200" height="796" class="img_ev3q"></p>
<p>This year has been transformative, marked by <strong>growth</strong>, <strong>innovation</strong>, and a <strong>sense of community</strong> that fuels our journey. Here's a look at some key highlights as we enter 2025.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-microcks-in-numbers">🚀 Microcks in Numbers<a href="https://microcks.io/blog/recap-of-an-amazing-2024/#-microcks-in-numbers" class="hash-link" aria-label="Direct link to 🚀 Microcks in Numbers" title="Direct link to 🚀 Microcks in Numbers" translate="no">​</a></h2>
<p>2024 has been a year of outstanding achievements:</p>
<ul>
<li class="">Over <strong>140k downloads for December 2024</strong>, consistently growing every month and <strong>600k+ downloads in the last year</strong>!</li>
<li class="">A surge in community engagement with <strong>2600+</strong> <a href="https://www.linkedin.com/company/microcks" target="_blank" rel="noopener noreferrer" class="">LinkedIn followers</a>, gaining over <strong>1100 followers</strong> in 2024.</li>
<li class="">We have almost <strong>1500 GitHub stars</strong> on our <a href="https://github.com/microcks/microcks" target="_blank" rel="noopener noreferrer" class="">main repository</a>, a growth of <strong>+500 this year</strong>, reflecting the increasing interest in Microcks.</li>
<li class="">We welcomed <strong>21 public adopters</strong> (+10 this year!) and <strong>28 private adopters</strong> we know of. We encourage private adopters to join our <a href="https://github.com/microcks/.github/blob/main/ADOPTERS.md" target="_blank" rel="noopener noreferrer" class="">public list</a> to showcase their use of Microcks.</li>
<li class="">Expanded globally with new users across <strong>LATAM</strong> and <strong>APAC</strong> regions, emphasizing our <strong>growing international footprint</strong>, as highlighted by the Google Analytics data below for the microcks.io website over the past year.</li>
</ul>
<p><img decoding="async" loading="lazy" alt="recap of an amazing 2024 google analytics" src="https://microcks.io/assets/images/recap-of-an-amazing-2024-google-analytics-f7605c8e42e88b232ed7f792a29ade2b.png" width="1200" height="742" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-community-contributions-the-heart-of-microcks">🙌 Community Contributions: The Heart of Microcks<a href="https://microcks.io/blog/recap-of-an-amazing-2024/#-community-contributions-the-heart-of-microcks" class="hash-link" aria-label="Direct link to 🙌 Community Contributions: The Heart of Microcks" title="Direct link to 🙌 Community Contributions: The Heart of Microcks" translate="no">​</a></h2>
<p>Our community constantly amazes us with its contributions, driving innovation and expanding Microcks' possibilities. Adopters and users actively contributed ideas and implementations, enabling new capabilities for the Microcks platform.</p>
<p>A special shoutout to <a href="https://www.axa.com/en" target="_blank" rel="noopener noreferrer" class=""><strong>AXA France</strong></a> and <a href="https://fr.linkedin.com/in/sebastien-degodez" target="_blank" rel="noopener noreferrer" class="">Sebastien Degodez</a>, who has become the maintainer of the <a href="https://github.com/microcks/microcks-testcontainers-dotnet" target="_blank" rel="noopener noreferrer" class="">Testcontainers .Net library</a>, expanding our ecosystem to our <a href="https://www.linkedin.com/pulse/how-microcks-fit-unify-inner-outer-loops-cloud-native-kheddache/" target="_blank" rel="noopener noreferrer" class="">shift-left approach</a> for <a href="https://developer.microsoft.com/en-us/" target="_blank" rel="noopener noreferrer" class="">Microsoft</a> developers 👉 <a href="https://testcontainers.com/modules/microcks/" target="_blank" rel="noopener noreferrer" class="">https://testcontainers.com/modules/microcks/</a></p>
<p><strong>Contributor Growth</strong>: 2024 saw significant contributors' growth, demonstrating our community's enthusiasm and commitment. According to devstats, Microcks had <a href="https://microcks.devstats.cncf.io/d/22/prs-authors-table?orgId=1&amp;var-period_name=Last%20year&amp;var-repogroup_name=All" target="_blank" rel="noopener noreferrer" class="">60 contributors</a> in 2024. These include committers from <a href="https://microcks.devstats.cncf.io/d/5/companies-table?orgId=1&amp;var-period_name=Last%20year&amp;var-metric=contributions" target="_blank" rel="noopener noreferrer" class="">25 organizations</a> such as Google, Red Hat, Catena Clearing, Vinted, Adeo, Bancolumbia, OPT New Caledonia and so on.</p>
<p><img decoding="async" loading="lazy" alt="recap of an amazing 2024 devstats" src="https://microcks.io/assets/images/recap-of-an-amazing-2024-devstats-a0b4ddf11bd76b6d4dbc79585cb9067b.png" width="1200" height="622" class="img_ev3q"></p>
<p>👉 <a href="https://microcks.devstats.cncf.io/d/8/dashboards?orgId=1&amp;refresh=15m&amp;from=now-1y&amp;to=now-1h" target="_blank" rel="noopener noreferrer" class="">Explore more stats here.</a></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-ecosystem-collaborations-stronger-together">🌟 Ecosystem Collaborations: Stronger Together<a href="https://microcks.io/blog/recap-of-an-amazing-2024/#-ecosystem-collaborations-stronger-together" class="hash-link" aria-label="Direct link to 🌟 Ecosystem Collaborations: Stronger Together" title="Direct link to 🌟 Ecosystem Collaborations: Stronger Together" translate="no">​</a></h2>
<p>2024 was a banner year for partnerships and collaborations that pushed the boundaries of what's possible.</p>
<h6 class="anchor anchorTargetStickyNavbar_Vzrq" id="kubecon--cloudnativecon-na"><a href="https://www.linkedin.com/pulse/reflections-kubecon-na-2024-salt-lake-city-above-clouds-kheddache-lupke/?trackingId=1jl%2BmdKoReiQepSJClxNPQ%3D%3D" target="_blank" rel="noopener noreferrer" class=""><strong>KubeCon + CloudNativeCon NA</strong></a><a href="https://microcks.io/blog/recap-of-an-amazing-2024/#kubecon--cloudnativecon-na" class="hash-link" aria-label="Direct link to kubecon--cloudnativecon-na" title="Direct link to kubecon--cloudnativecon-na" translate="no">​</a></h6>
<p>At Salt Lake City, we announced an exciting new partnership with <a href="https://traefik.io/" target="_blank" rel="noopener noreferrer" class=""><strong>Traefik Labs</strong></a>. We deliver <a href="https://traefik.io/solutions/api-mocking/?ref=traefik.io" target="_blank" rel="noopener noreferrer" class=""><strong>Sandbox as a service</strong></a> with a fully GitOps-automated approach to Kubernetes. This collaboration showcases the seamless integration of Traefik's API Gateway with Microcks' API mocking and testing capabilities 👉 <a href="https://traefik.io/press/traefik-labs-launches-api-sandbox-as-a-service-and-strengthens-kubernetes-gateway-api-leadership/" target="_blank" rel="noopener noreferrer" class="">Read more here.</a></p>
<p><a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/co-located-events/appdevelopercon/" target="_blank" rel="noopener noreferrer" class=""><strong>AppDeveloperCon</strong></a> synergies with the <a href="https://quarkus.io/" target="_blank" rel="noopener noreferrer" class=""><strong>Quarkus</strong></a> community during day 0 of KubeCon + CloudNativeCon NA. See the recording our the talk done with <a href="https://www.linkedin.com/in/daniel-oh-083818112/" target="_blank" rel="noopener noreferrer" class="">Daniel Oh</a> (Java Champion, CNCF Ambassador, Developer Advocate at <a href="https://www.redhat.com/" target="_blank" rel="noopener noreferrer" class="">Red Hat</a>) 👉 <em>“Streamlining Cloud-Native Development: <a href="https://youtu.be/PeQyAVJo52I?si=NdNL8bps2JXaY3ub" target="_blank" rel="noopener noreferrer" class="">Simplifying Dependencies and Testing with Microcks</a>”.</em></p>
<h6 class="anchor anchorTargetStickyNavbar_Vzrq" id="bumpsh-partnership"><strong>Bump.sh Partnership</strong><a href="https://microcks.io/blog/recap-of-an-amazing-2024/#bumpsh-partnership" class="hash-link" aria-label="Direct link to bumpsh-partnership" title="Direct link to bumpsh-partnership" translate="no">​</a></h6>
<p>We teamed up with <a href="http://bump.sh/" target="_blank" rel="noopener noreferrer" class=""><strong>Bump.sh</strong></a><strong>,</strong> which revolutionized how developers work with API specifications. Combining Bump's sleek documentation tools with Microcks' robust mocking and testing capabilities offers a well-connected, efficient workflow 👉 <a href="https://bump.sh/blog/microcks-bump-sh-testing-mocking-docs" target="_blank" rel="noopener noreferrer" class="">Check out the details.</a></p>
<h6 class="anchor anchorTargetStickyNavbar_Vzrq" id="observability-with-grafana-labs"><strong>Observability with Grafana Labs</strong><a href="https://microcks.io/blog/recap-of-an-amazing-2024/#observability-with-grafana-labs" class="hash-link" aria-label="Direct link to observability-with-grafana-labs" title="Direct link to observability-with-grafana-labs" translate="no">​</a></h6>
<p>Working with <a href="https://www.linkedin.com/in/alainpham/" target="_blank" rel="noopener noreferrer" class=""><strong>Alain Pham</strong></a> from <a href="https://grafana.com/" target="_blank" rel="noopener noreferrer" class=""><strong>Grafana Labs</strong></a>, we introduced observability at scale for Microcks using <a href="https://opentelemetry.io/" target="_blank" rel="noopener noreferrer" class="">OpenTelemetry</a>, showcasing how modern monitoring tools can empower API testing workflows 👉<a class="" href="https://microcks.io/blog/observability-for-microcks-at-scale/">Blog post here.</a></p>
<h6 class="anchor anchorTargetStickyNavbar_Vzrq" id="collaboration-with-api-evangelist"><strong>Collaboration with API Evangelist</strong><a href="https://microcks.io/blog/recap-of-an-amazing-2024/#collaboration-with-api-evangelist" class="hash-link" aria-label="Direct link to collaboration-with-api-evangelist" title="Direct link to collaboration-with-api-evangelist" translate="no">​</a></h6>
<p>Partnering with <a href="https://www.linkedin.com/in/kinlane" target="_blank" rel="noopener noreferrer" class=""><strong>Kin Lane</strong></a>, the <a href="https://apievangelist.com/" target="_blank" rel="noopener noreferrer" class="">API Evangelist</a>, we explored a new schema for defining <a class="" href="https://microcks.io/documentation/references/examples/">API examples</a>. This initiative enhances the specification of reusable examples, fostering interoperability and opening doors for broader collaboration in the open source ecosystem 👉 <a href="https://apievangelist.com/2024/12/13/a-new-spec-just-for-your-api-examples/" target="_blank" rel="noopener noreferrer" class="">Learn more about this specification.</a></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="️-communication-contributions">🗣️ Communication Contributions<a href="https://microcks.io/blog/recap-of-an-amazing-2024/#%EF%B8%8F-communication-contributions" class="hash-link" aria-label="Direct link to 🗣️ Communication Contributions" title="Direct link to 🗣️ Communication Contributions" translate="no">​</a></h2>
<p>Adopters and partners have played a crucial role in spreading the word about Microcks through talks, events, and blog posts.</p>
<p>Notable highlights include:</p>
<ul>
<li class=""><a href="https://www.linkedin.com/in/ludovic-pourrat/" target="_blank" rel="noopener noreferrer" class="">Ludovic Pourrat</a> from <a href="https://www.lombardodier.com/home.html" target="_blank" rel="noopener noreferrer" class=""><strong>Lombard Odier</strong></a> sharing their journey in <em>"Revolutionizing API Strategy: <a class="" href="https://microcks.io/blog/lombard-odier-revolutionizing-api-strategy/">Lombard Odier's Success Story with Microcks</a>."</em></li>
<li class=""><a href="https://www.linkedin.com/in/s%c3%a9bastien-fraigneau-82826a2/" target="_blank" rel="noopener noreferrer" class="">Sebastien Fraigneau</a> from <a href="https://www.assurance-maladie.ameli.fr/" target="_blank" rel="noopener noreferrer" class=""><strong>CNAM</strong></a> detailing their collaboration with “<em>Microcks for <a class="" href="https://microcks.io/blog/cnam-soap-service-mocking/">automated SOAP service mocking</a>”.</em></li>
<li class=""><a href="https://www.linkedin.com/in/julienbreux/" target="_blank" rel="noopener noreferrer" class="">Julien Breux</a> from <a href="https://cloud.google.com/" target="_blank" rel="noopener noreferrer" class=""><strong>Google</strong></a>, at <a href="https://www.conf42.com/" target="_blank" rel="noopener noreferrer" class="">Conf42</a> Tech Conference for a talk on “<a href="https://www.conf42.com/Golang_2024_Julien_Breux_test_testcontainers_container" target="_blank" rel="noopener noreferrer" class=""><em>Testing with Testcontainers in Go!</em></a>”.</li>
<li class=""><a href="https://www.linkedin.com/in/leon-nunes/" target="_blank" rel="noopener noreferrer" class="">Leon Nunes</a> from <a href="http://solo.io/" target="_blank" rel="noopener noreferrer" class=""><strong>Solo.io</strong></a>, meetup in Bangkok regarding <em>“<a href="https://youtu.be/wOTescSFiA4?si=zhukQ42lNv3W8rds" target="_blank" rel="noopener noreferrer" class="">Mocking GraphQL with Microcks and Gloo Platform</a>”.</em></li>
<li class=""><a href="https://www.linkedin.com/in/hugoguerrero/" target="_blank" rel="noopener noreferrer" class="">Hugo Guerrero</a> from <a href="https://www.redhat.com/en" target="_blank" rel="noopener noreferrer" class=""><strong>Red Hat</strong></a>, during <a href="https://community.cncf.io/kcd-guadalajara/" target="_blank" rel="noopener noreferrer" class="">KCD Guadalajara</a> on Microcks journey in Spanish <em>“<a href="https://youtu.be/wpS7ZrEeIi4?si=DRBA-Ytj4h9sVd44" target="_blank" rel="noopener noreferrer" class="">Llevando tu Proyecto de Hobby a la Cloud Native Computing Foundation</a>”.</em></li>
<li class="">...and many more, apologies to the ones I missed in this brief recap!</li>
</ul>
<blockquote>
<p>These stories inspire us and highlight the various ways Microcks is making a meaningful impact in the real world, while also encouraging community members to contribute to enhancing the project's visibility and promotion.</p>
</blockquote>
<p>In 2024, we introduced <strong>two monthly community meetings</strong>, scheduled to accommodate different time zones. These sessions are <a href="https://github.com/microcks/community/blob/main/JOIN-OUR-MEETINGS.md" target="_blank" rel="noopener noreferrer" class="">open to everyone</a>, so feel free to join us live!</p>
<p>👉 <a href="https://www.youtube.com/c/Microcks/live" target="_blank" rel="noopener noreferrer" class="">Watch the recording of previous sessions</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-looking-ahead-2025-and-beyond"><strong>💡 Looking Ahead: 2025 and Beyond</strong><a href="https://microcks.io/blog/recap-of-an-amazing-2024/#-looking-ahead-2025-and-beyond" class="hash-link" aria-label="Direct link to -looking-ahead-2025-and-beyond" title="Direct link to -looking-ahead-2025-and-beyond" translate="no">​</a></h3>
<p>2024 was a year of hard work, camaraderie, and innovation. But we're not stopping here. In 2025, exciting news and activities are lined up to make Microcks the <strong>#1 open source solution for API and microservices mocking and testing</strong> and <strong>level up within the Cloud Native Computing Foundation</strong> (<a href="https://www.cncf.io/?s=microcks" target="_blank" rel="noopener noreferrer" class="">CNCF</a>).</p>
<p>Stay tuned for announcements, new features, and opportunities to collaborate and grow.<br>
Thank you for being part of this incredible journey. Here's to a happy, healthy, and prosperous 2025! 🥂</p>
<p><strong>Let's make the cloud native future even brighter together.</strong></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Revolutionizing API Strategy: Lombard Odier's Success Story with Microcks]]></title>
            <link>https://microcks.io/blog/lombard-odier-revolutionizing-api-strategy/</link>
            <guid>https://microcks.io/blog/lombard-odier-revolutionizing-api-strategy/</guid>
            <pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Lombard Odier is a global wealth and asset manager.]]></description>
            <content:encoded><![CDATA[<p><a href="https://www.lombardodier.com/home/about-us/la-maison.html" target="_blank" rel="noopener noreferrer" class="">Lombard Odier</a> is a global wealth and asset manager. For over 225 years and through more than 40 financial crises, the Group has aligned itself with the long-term interests of private and institutional clients. It has a strong balance sheet with a CET1 ratio of 31.7% and a Fitch rating of AA-, the highest possible rating for a bank of its size.</p>
<p><img decoding="async" loading="lazy" alt="lombard odier revolutionizing api stratgey feature" src="https://microcks.io/assets/images/lombard-odier-revolutionizing-api-stratgey-feature-67acd3149a169a0d02ec97e150bf85a7.png" width="1200" height="794" class="img_ev3q"></p>
<p>Structured as an independent partnership, Lombard Odier is solely owned by its Managing Partners. This governance model allows the Bank to remain completely client-focused and innovative at the highest level in the organisation.</p>
<p>Lombard Odier has quickly recognized APIs' pivotal role in modern IT strategies, to foster agility and innovation, Lombard Odier embarked on a transformative journey, integrating <a href="https://microcks.io/" target="_blank" rel="noopener noreferrer" class="">Microcks</a> as a cornerstone in its API lifecycle management.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="adding-mock-and-sandbox-as-a-service-capability">Adding Mock and Sandbox as a Service Capability<a href="https://microcks.io/blog/lombard-odier-revolutionizing-api-strategy/#adding-mock-and-sandbox-as-a-service-capability" class="hash-link" aria-label="Direct link to Adding Mock and Sandbox as a Service Capability" title="Direct link to Adding Mock and Sandbox as a Service Capability" translate="no">​</a></h3>
<p>One of Lombard Odier's IT strategies for accelerating its transformation program is the incorporation of a mock and a sandbox as a service capability within its API strategy. Recognizing the importance of testing and iterating without disrupting their live APIs, they leveraged Microcks to integrate mock services seamlessly. This approach allows developers to experiment, refine, and perfect their APIs in a controlled environment, ensuring a smooth and transparent transition to production.</p>
<p><img decoding="async" loading="lazy" alt="lombard odier api sandbox" src="https://microcks.io/assets/images/lombard-odier-api-sandbox-d743197b5aaccc90f1b79f903829c673.png" width="1200" height="589" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="apiops-approach-the-driving-force">APIOps Approach: The Driving Force<a href="https://microcks.io/blog/lombard-odier-revolutionizing-api-strategy/#apiops-approach-the-driving-force" class="hash-link" aria-label="Direct link to APIOps Approach: The Driving Force" title="Direct link to APIOps Approach: The Driving Force" translate="no">​</a></h3>
<p>Lombard Odier adopts an entire APIOps approach, treating APIs as products and orchestrating their development, deployment, maintenance, and operability. This approach aligns perfectly with Microcks' capabilities, making it the linchpin of their API strategy. Through Microcks, Lombard Odier brings agility and efficiency to their APIOps pipeline, from design to deployment.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-for-multiple-specifications-and-protocols">Support for Multiple Specifications and Protocols<a href="https://microcks.io/blog/lombard-odier-revolutionizing-api-strategy/#support-for-multiple-specifications-and-protocols" class="hash-link" aria-label="Direct link to Support for Multiple Specifications and Protocols" title="Direct link to Support for Multiple Specifications and Protocols" translate="no">​</a></h3>
<p>Lombard Odier operates in a diverse technology landscape, employing various specifications and protocols to cater to different use cases. Microcks seamlessly integrates with <a href="https://spec.openapis.org/" target="_blank" rel="noopener noreferrer" class="">OpenAPI</a>, <a href="https://www.asyncapi.com/" target="_blank" rel="noopener noreferrer" class="">AsyncAPI</a>, <a href="https://graphql.org/" target="_blank" rel="noopener noreferrer" class="">GraphQL</a>, and <a href="https://grpc.io/" target="_blank" rel="noopener noreferrer" class="">gRPC</a>, providing a unified platform for managing this diverse set of APIs. This flexibility ensures that Lombard Odier can choose the best tool for the job while maintaining a consistent and efficient API management process.</p>
<p><img decoding="async" loading="lazy" alt="lombard odier multi protocols" src="https://microcks.io/assets/images/lombard-odier-multi-protocols-a51b1e7a928ddc67ee6f8f8342786ef1.png" width="1200" height="436" class="img_ev3q"></p>
<p><strong>A Testimonial from Ludovic Pourrat, Head of API Management at Lombard Odier.</strong>
In the ever-evolving landscape of API management, Lombard Odier stands out as a trailblazer in embracing cutting-edge technologies to drive innovation and growth.</p>
<blockquote>
<p>Microcks is a robust open source tool that has become an essential solution for Lombard Odier. It enables us to <strong>manage, maintain, and automate the lifecycle</strong> of our extensive API ecosystem efficiently. At the heart of our remarkable journey, Microcks has become a key asset that achieves the right balance between innovation and stability, empowering developers with fast iterations of their APIs.</p>
</blockquote>
<p><strong>The Numbers Speak: Managing Over 2000 API Endpoints with Less Than 200 Developers.</strong>
Microcks' scalability and efficiency are evident in Lombard Odier's achievement of managing over 2000 API endpoints with a lean team of fewer than 200 developers.</p>
<p>Microcks' ability to streamline workflows, automate testing in our CI/CD pipelines, and enhance collaboration ultimately allows Lombard Odier to scale its API operations seamlessly.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://microcks.io/blog/lombard-odier-revolutionizing-api-strategy/#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>Lombard Odier's success story with Microcks exemplifies the transformative power of embracing modern API management practices. By integrating <strong>a mock and sandbox as a service capability</strong>, adopting a complete APIOps approach, and leveraging Microcks' support for various specifications and protocols, Lombard Odier has not only streamlined its API lifecycle but has also set the stage for continuous innovation and development efficiency.</p>
<p>As organizations worldwide grapple with the complexities of API management, Lombard Odier's journey is an inspiring testament to the impact of adopting the right tools and strategies. Microcks, as a central player in their API ecosystem, has proven its worth in driving efficiency, agility, and sustained success.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Microcks 1.10.0 release 🚀]]></title>
            <link>https://microcks.io/blog/microcks-1.10.0-release/</link>
            <guid>https://microcks.io/blog/microcks-1.10.0-release/</guid>
            <pubDate>Wed, 07 Aug 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[We are excited to announce today the 1.10.0 release of Microcks, the CNCF's open-source cloud-native tool for API Mocking and Testing, ready for summer ☀️…]]></description>
            <content:encoded><![CDATA[<p>We are excited to announce today the <code>1.10.0</code> release of Microcks, the <a href="https://landscape.cncf.io/?selected=microcks" target="_blank" rel="noopener noreferrer" class="">CNCF</a>'s open-source cloud-native tool for API Mocking and Testing, ready for summer ☀️ vacations! 🚀</p>
<p>For this release, we received help from <strong>4 new code committers</strong> and from dozens of others who opened, contributed to, and reviewed <strong>46 issues</strong>. Most of them are adopters! Kudos to all of them 👏, and see the greetings in the notes below.</p>
<p><code>1.10.0</code> release brings you a wave of new features, including <strong>Stateful mocks support</strong>, a <strong>new lightweight API Examples specification format</strong>, tons of <strong>enhancements in the Uber and Native distributions</strong>, and a <strong>big refresh on installation dependencies</strong>.</p>
<p><img decoding="async" loading="lazy" alt="microcks-feature" src="https://microcks.io/assets/images/microcks-1.10.0-feature-9c4a2f38c66cb242a65e4d1692aa4bb8.png" width="1200" height="794" class="img_ev3q"></p>
<p>Let's review the latest updates for our key highlights without further ado.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="welcome-stateful-mocks">Welcome, stateful mocks!<a href="https://microcks.io/blog/microcks-1.10.0-release/#welcome-stateful-mocks" class="hash-link" aria-label="Direct link to Welcome, stateful mocks!" title="Direct link to Welcome, stateful mocks!" translate="no">​</a></h2>
<p>Microcks has allowed specifying <a class="" href="https://microcks.io/documentation/explanations/dynamic-content/">dynamic mock content</a> using expressions since the early days. Those features help translate an API's dynamic behavior and provide meaningful simulations.</p>
<p>But sometimes, you may need to provide even more realistic behavior, and that’s where stateful mocks may be of interest. <strong>Stateful mocks are a game-changer in the pursuit of an  even smartest mocking experience.</strong> You can now experience enhanced realism in your API simulations and free your creativity!</p>
<p>However, automatically turning mocks into stateful simulations is impossible, as numerous design guidelines need to be considered. At Microcks, we put this power in the user’s hand, providing powerful primitives like <code>scripts</code>, <code>store</code>, <code>requestContext</code>, and <a class="" href="https://microcks.io/documentation/references/templates/">template expressions</a> to manage persistence where it makes sense for your simulations. This feature is now available at your convenience via the <code>store</code> service that is directly usable from scripts like this:</p>
<div class="language-groovy codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-groovy codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">store</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">put</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token interpolation-string string" style="color:rgb(255, 121, 198)">"my-key"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token interpolation-string string" style="color:rgb(255, 121, 198)">"Any value represented as a String"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">def</span><span class="token plain"> value </span><span class="token operator">=</span><span class="token plain"> store</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">get</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token interpolation-string string" style="color:rgb(255, 121, 198)">"my-key"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">store</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">delete</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token interpolation-string string" style="color:rgb(255, 121, 198)">"my-key"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div>
<blockquote>
<p>Check our new <a class="" href="https://microcks.io/documentation/guides/usage/stateful-mocks/">Configuring stateful mocks</a> how-to guide, which takes you through a real use case of managing a shopping cart where customers' items are persisted during the process.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-new-api-examples-specification-format">A new API Examples specification format<a href="https://microcks.io/blog/microcks-1.10.0-release/#a-new-api-examples-specification-format" class="hash-link" aria-label="Direct link to A new API Examples specification format" title="Direct link to A new API Examples specification format" translate="no">​</a></h2>
<p>While Microcks' motto is not to reinvent the wheel and reuse standard artifacts (see <a class="" href="https://microcks.io/documentation/references/artifacts/">artifacts reference</a>), we think <code>1.10.0</code> may be the right time to introduce our own specification format, fully driven by the goal of importing mock datasets into Microcks.</p>
<p><code>APIExamples</code> can be seen as a lightweight, general-purpose specification that solely serves the need to provide mock datasets. The goal of this specification is to keep the Microcks adoption curve very smooth for both development teams and non-developers. The files are simple YAML and aim to be very easy to understand and edit.</p>
<p>Moreover, the description is independent of the API protocol! We’re rather attached to describing examples depending on the API interaction style: Request/Response based or Event-driven/Asynchronous.</p>
<p>As a sample, you’ll see below the <code>APIExamples</code> snippet for our <a class="" href="https://microcks.io/documentation/tutorials/first-grpc-mock/">gRPC mock tutorial</a>, but it would be rather the same when dealing with a REST API:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token key atrule">apiVersion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> mocks.microcks.io/v1alpha1</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">kind</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> APIExamples</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">metadata</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> org.acme.petstore.v1.PetstoreService</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> v1</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">operations</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">getPets</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token key atrule">All Pets</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">     </span><span class="token key atrule">request</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">       </span><span class="token key atrule">body</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">""</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">     </span><span class="token key atrule">response</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">       </span><span class="token key atrule">body</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">         </span><span class="token key atrule">pets</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">           </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">1</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">             </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Zaza</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">           </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">2</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">             </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Tigress</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">           </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">3</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">             </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Maki</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">           </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">4</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">             </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Toufik</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">searchPets</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token key atrule">k pets</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">     </span><span class="token key atrule">request</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">       </span><span class="token key atrule">body</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">|</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">         </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token key atrule">"name"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"k"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">     </span><span class="token key atrule">response</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">       </span><span class="token key atrule">body</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">|</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">         </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">         </span><span class="token key atrule">"pets"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">           </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">             </span><span class="token key atrule">"id"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">             </span><span class="token key atrule">"name"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Maki"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">           </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">           </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">             </span><span class="token key atrule">"id"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">4</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">             </span><span class="token key atrule">"name"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Toufik"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">           </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">         </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<p>This format is intended for use as a secondary artifact. It would be a companion to our existing <a class="" href="https://microcks.io/documentation/references/metadata/">APIMetada format</a> but dedicated to API Examples.</p>
<blockquote>
<p>Be sure to read our <a class="" href="https://microcks.io/documentation/references/examples/">API Examples Format</a> reference documentation that details the different properties available and how to use this format for different types of APIs.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="uber-and-native-images-enhancements">Uber and Native images enhancements<a href="https://microcks.io/blog/microcks-1.10.0-release/#uber-and-native-images-enhancements" class="hash-link" aria-label="Direct link to Uber and Native images enhancements" title="Direct link to Uber and Native images enhancements" translate="no">​</a></h2>
<p>Introduced in recent Microcks releases, <a class="" href="https://microcks.io/blog/microcks-1.8.0-release/#welcome-uber-image"><code>microcks-uber</code></a> distribution and its <a class="" href="https://microcks.io/blog/microcks-1.9.0-release/#reduced-bootstrap-time-with-graalvm">GraalVM native variant</a> are perfectly well-adapted for a quick evaluation or for an ephemeral usage via libraries like <a href="https://testcontainers.com/" target="_blank" rel="noopener noreferrer" class="">Testcontainers</a>. However, they were still a bit behind the regular distribution in terms of features covered.</p>
<p>Starting with <code>1.10.0</code>, we reduced this feature gap a lot by making:</p>
<ul>
<li class=""><a href="https://mqtt.org/" target="_blank" rel="noopener noreferrer" class="">MQTT</a> and <a href="https://www.rabbitmq.com/" target="_blank" rel="noopener noreferrer" class="">RabbitMQ/AMQP</a> protocols available to the Uber distribution,</li>
<li class=""><a href="https://grpc.io/" target="_blank" rel="noopener noreferrer" class="">gRPC</a> features and full templating features work into the Native-variant of this Uber distribution.</li>
</ul>
<p>The long-term goal we’re pursuing and are close to achieving is full feature parity between the regular/uber/uber-native distributions—except for some structural ones that would be impossible to port. Typically, the Groovy <code>SCRIPT</code> feature is not available in native mode, as dynamic evaluation is, by definition, antagonistic to static compilation.</p>
<blockquote>
<p>If you want to learn more about feature gap reduction and associated changesets, please refer to <a href="https://github.com/microcks/microcks/issues/1239" target="_blank" rel="noopener noreferrer" class="">#1239</a> for MQTT support, <a href="https://github.com/microcks/microcks/issues/1240" target="_blank" rel="noopener noreferrer" class="">#1240</a> for RabbitMQ support, <a href="https://github.com/microcks/microcks/issues/1227" target="_blank" rel="noopener noreferrer" class="">#1227</a> for gRPC testing features support, and <a href="https://github.com/microcks/microcks/issues/1226" target="_blank" rel="noopener noreferrer" class="">#1226</a> for templating features support.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="dependencies-and-installation-upgrade">Dependencies and installation upgrade<a href="https://microcks.io/blog/microcks-1.10.0-release/#dependencies-and-installation-upgrade" class="hash-link" aria-label="Direct link to Dependencies and installation upgrade" title="Direct link to Dependencies and installation upgrade" translate="no">​</a></h2>
<p>While considering upgrading to <code>1.10.0</code>, you should also carefully plan your update based on your setup. We’ve made significant updates to external container dependencies, including MongoDB, Keycloak, and their associated Postgres databases.</p>
<p>These are noticeable changes you should take care of:</p>
<ul>
<li class="">The <code>centos/mongodb-36-centos7</code> that was no longer maintained for 3 years has been replaced by the <code>library/mongo:4.4.29</code> that is 3 months old and still updated,</li>
<li class="">The <code>quay.io/keycloak/keycloak:22.0.3</code> has reported CVEs and has been replaced by the fresher <code>quay.io/keycloak/keycloak:24.0.4</code>,</li>
<li class="">The <code>centos/postgresql-95-centos7:latest</code> has not been updated in 5 years and has been replaced by a fresher <code>library/postgres:16.3-alpine</code> updated 12 days ago.</li>
</ul>
<p>Unfortunately, updating MongoDB and Postgres engines cannot be done without breaking things. That’s why <strong>we recommend not rolling in-place upgrades of existing installations but rather proceeding with care</strong>: exporting and backing up your data from MongoDB and Postgres before importing it into new instances. This can be done with low-level tools (like <a href="https://www.mongodb.com/docs/database-tools/mongodump/" target="_blank" rel="noopener noreferrer" class="">mongodump</a> and <a href="https://www.postgresql.org/docs/current/app-pgdump.html" target="_blank" rel="noopener noreferrer" class="">pg_dump</a>) or at an application level (using <a class="" href="https://microcks.io/documentation/guides/administration/snapshots/">Microcks snapshots </a>or <a href="https://www.keycloak.org/server/importExport#_exporting_a_realm_to_a_file" target="_blank" rel="noopener noreferrer" class="">Keycloak realm exports</a>).</p>
<blockquote>
<p>⚠️ <em>Warning</em></p>
<p>Be cautious: the dependencies Microcks proposes during installation are provided for convenience only. Our take is that <em>you shouldn't rely on them for crucial "production" workloads; instead, use an external component</em>. You can override the default image OR completely disable the installation of external dependencies in our Helm Chart or Operator.</p>
</blockquote>
<p>In addition to these upgrades, we also changed how you can customize the images and external dependency artifacts in our Helm Chart. Where we previously had a single <code>image</code> field for each component (the main one, postman, keycloak, mongo, etc), we have split these single fields into multiple properties <code>registry</code>, <code>repository</code>, <code>tag</code> or <code>digest</code> as illustrated below:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token key atrule">image</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">registry</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> quay.io</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">repository</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> microcks/microcks</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">tag</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> nightly</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  digest</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><br></div></code></pre></div></div>
<p>This change brings the benefits of:</p>
<ul>
<li class="">Being aligned with community best practices regarding image customization - other communities like <a href="https://github.com/open-telemetry/opentelemetry-helm-charts/blob/main/charts/opentelemetry-collector/values.yaml#L165-L172$" target="_blank" rel="noopener noreferrer" class="">OpenTelemetry</a>, <a href="https://github.com/strimzi/strimzi-kafka-operator/blob/main/helm-charts/helm3/strimzi-kafka-operator/values.yaml#L15-L19" target="_blank" rel="noopener noreferrer" class="">Strimzi</a> or <a href="https://github.com/jaegertracing/helm-charts/blob/main/charts/jaeger/values.yaml#L25-L31" target="_blank" rel="noopener noreferrer" class="">Jaeger</a> are following the same conventions,</li>
<li class="">Allowing easier customization for people using a corporate registry as a cache or wanting to pin the artifact coordinates to an immutable digest.</li>
</ul>
<blockquote>
<p>Thanks to <a href="https://github.com/rquinio1A" target="_blank" rel="noopener noreferrer" class="">Romain Quinio</a> 🙏 from <a href="https://github.com/AmadeusITGroup" target="_blank" rel="noopener noreferrer" class="">Amadeus IT Group</a> for bringing this enhancement suggestion to the discussion! You can check the original <a href="https://github.com/microcks/microcks/issues/1211" target="_blank" rel="noopener noreferrer" class="">#1211</a> issue.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="community-amplification">Community amplification<a href="https://microcks.io/blog/microcks-1.10.0-release/#community-amplification" class="hash-link" aria-label="Direct link to Community amplification" title="Direct link to Community amplification" translate="no">​</a></h2>
<p>The Microcks community continues to grow and make waves in the tech world! Here are some of our latest highlights:</p>
<h6 class="anchor anchorTargetStickyNavbar_Vzrq" id="-talk-from-hugo-guerrero-at-riviera-dev-2024">🎤 Talk from <a href="https://www.linkedin.com/in/hugoguerrero/" target="_blank" rel="noopener noreferrer" class="">Hugo Guerrero</a> at <a href="https://rivieradev.fr/" target="_blank" rel="noopener noreferrer" class="">Riviera DEV</a> 2024<a href="https://microcks.io/blog/microcks-1.10.0-release/#-talk-from-hugo-guerrero-at-riviera-dev-2024" class="hash-link" aria-label="Direct link to -talk-from-hugo-guerrero-at-riviera-dev-2024" title="Direct link to -talk-from-hugo-guerrero-at-riviera-dev-2024" translate="no">​</a></h6>
<p>We are thrilled to share that Hugo (<a href="https://www.redhat.com/" target="_blank" rel="noopener noreferrer" class="">Red Hat</a>) presented an outstanding talk at Riviera DEV 2024! His session featured a great demo showcasing Microcks' <a href="https://www.linkedin.com/pulse/how-microcks-fit-unify-inner-outer-loops-cloud-native-kheddache/" target="_blank" rel="noopener noreferrer" class="">shift-left approach</a> using <a href="https://quarkus.io/extensions/io.github.microcks.quarkus/quarkus-microcks/" target="_blank" rel="noopener noreferrer" class="">Quarkus</a> and <a href="https://testcontainers.com/modules/microcks/" target="_blank" rel="noopener noreferrer" class="">Testcontainers</a>. Check out his <a href="https://www.linkedin.com/posts/hugoguerrero_rivieradev-rivieradev-quarkusworldtour-activity-7218572716658888704-6mVO" target="_blank" rel="noopener noreferrer" class="">LinkedIn post</a> for more details.</p>
<h6 class="anchor anchorTargetStickyNavbar_Vzrq" id="-microcks-mentioned-as-an-alternative-to-wiremock">📝 Microcks Mentioned as an Alternative to WireMock<a href="https://microcks.io/blog/microcks-1.10.0-release/#-microcks-mentioned-as-an-alternative-to-wiremock" class="hash-link" aria-label="Direct link to 📝 Microcks Mentioned as an Alternative to WireMock" title="Direct link to 📝 Microcks Mentioned as an Alternative to WireMock" translate="no">​</a></h6>
<p>Microcks has been highlighted in <a href="https://speedscale.com/" target="_blank" rel="noopener noreferrer" class="">Speedscale</a>'s blog post as a top alternative to WireMock. We're proud to be recognized among the top 5 WireMock alternatives:</p>
<p><a href="https://speedscale.com/blog/wiremock-alternatives/" target="_blank" rel="noopener noreferrer" class="">https://speedscale.com/blog/wiremock-alternatives/</a></p>
<h6 class="anchor anchorTargetStickyNavbar_Vzrq" id="-microcks-joins-the-camara-project">🌐 Microcks Joins the <a href="https://camaraproject.org/" target="_blank" rel="noopener noreferrer" class="">CAMARA Project</a><a href="https://microcks.io/blog/microcks-1.10.0-release/#-microcks-joins-the-camara-project" class="hash-link" aria-label="Direct link to -microcks-joins-the-camara-project" title="Direct link to -microcks-joins-the-camara-project" translate="no">​</a></h6>
<p>Microcks, a Cloud Native Computing Foundation (<a href="https://landscape.cncf.io/?selected=microcks" target="_blank" rel="noopener noreferrer" class="">CNCF</a>) Sandbox project, is now officially listed as a member of the CAMARA Project, an initiative by <a href="https://www.linuxfoundation.org/press/linux-foundation-telco-api-project-camara-graduates-to-funded-model-with-strong-industry-commitment" target="_blank" rel="noopener noreferrer" class="">The Linux Foundation</a>! 🎉</p>
<p><a href="https://camara.landscape2.io/" target="_blank" rel="noopener noreferrer" class="">https://camara.landscape2.io/</a></p>
<h6 class="anchor anchorTargetStickyNavbar_Vzrq" id="-member-of-cncf-app-development-working-group">🚀 Member of CNCF <a href="https://tag-app-delivery.cncf.io/" target="_blank" rel="noopener noreferrer" class="">App Development Working Group</a><a href="https://microcks.io/blog/microcks-1.10.0-release/#-member-of-cncf-app-development-working-group" class="hash-link" aria-label="Direct link to -member-of-cncf-app-development-working-group" title="Direct link to -member-of-cncf-app-development-working-group" translate="no">​</a></h6>
<p>As a CNCF project, Microcks is proud to join the App Development Working Group within the CNCF TAG App Delivery. This initiative aims to bridge the gap between developers and CNCF projects that directly impact daily workflows 🙌</p>
<p><a href="https://www.cncf.io/blog/2024/07/05/a-new-app-development-wg-has-now-been-launched/" target="_blank" rel="noopener noreferrer" class="">https://www.cncf.io/blog/2024/07/05/a-new-app-development-wg-has-now-been-launched/</a></p>
<h6 class="anchor anchorTargetStickyNavbar_Vzrq" id="-shoutout-to-java-dominicano-community">📢 Shoutout to <a href="https://jconfdominicana.org/" target="_blank" rel="noopener noreferrer" class="">Java Dominicano Community</a><a href="https://microcks.io/blog/microcks-1.10.0-release/#-shoutout-to-java-dominicano-community" class="hash-link" aria-label="Direct link to -shoutout-to-java-dominicano-community" title="Direct link to -shoutout-to-java-dominicano-community" translate="no">​</a></h6>
<p>A massive thank you to the Java Dominicano community and a special shoutout to <a href="https://eudriscabrera.com/" target="_blank" rel="noopener noreferrer" class="">Eudris Cabrera </a>for his outstanding <a href="https://www.youtube.com/live/hYMYPqSuPh4?si=CHZugCtEDPyWmMKI&amp;t=19" target="_blank" rel="noopener noreferrer" class="">talk and demo</a> on Microcks! 🌟</p>
<h6 class="anchor anchorTargetStickyNavbar_Vzrq" id="-microcks-hits-2000-followers-on-linkedin">🎉 Microcks Hits <a href="https://www.linkedin.com/feed/update/urn:li:share:7213576968112349184/" target="_blank" rel="noopener noreferrer" class="">2000+ Followers</a> on LinkedIn!<a href="https://microcks.io/blog/microcks-1.10.0-release/#-microcks-hits-2000-followers-on-linkedin" class="hash-link" aria-label="Direct link to -microcks-hits-2000-followers-on-linkedin" title="Direct link to -microcks-hits-2000-followers-on-linkedin" translate="no">​</a></h6>
<p>We are excited to announce that we have reached over 2000 followers on LinkedIn! Join us to stay updated on the latest news and updates about Microcks. <a href="https://www.linkedin.com/company/microcks/" target="_blank" rel="noopener noreferrer" class="">Follow Us</a> on LinkedIn.</p>
<blockquote>
<p>Stay tuned for more updates, and continue to be a part of our journey as we grow and innovate together!</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-coming-next">What’s coming next?<a href="https://microcks.io/blog/microcks-1.10.0-release/#whats-coming-next" class="hash-link" aria-label="Direct link to What’s coming next?" title="Direct link to What’s coming next?" translate="no">​</a></h2>
<p>As usual, we will prioritize items based on community feedback. You can check and collaborate via our list of <a href="https://github.com/microcks/microcks/issues" target="_blank" rel="noopener noreferrer" class="">issues on GitHub</a> and the project <a href="https://github.com/orgs/microcks/projects/1" target="_blank" rel="noopener noreferrer" class="">roadmap</a>.</p>
<p>More than ever, we want to involve community members in design discussions and start a discussion about significant additions to <a href="https://github.com/orgs/microcks/discussions/1039" target="_blank" rel="noopener noreferrer" class="">OpenAPI callbacks, webhooks, and AsyncAPI</a> in Microcks. Please join us to shape the future!</p>
<p>Remember that we are an open community, which means you, too, can jump on board to make Microcks even greater! Come and say hi! on our <a href="https://github.com/microcks/microcks/discussions" target="_blank" rel="noopener noreferrer" class="">GitHub discussion</a> or <a href="https://microcks.io/discord-invite/" target="_blank" rel="noopener noreferrer" class="">Discord chat</a> 👻, send some love through <a href="https://github.com/microcks/microcks" target="_blank" rel="noopener noreferrer" class="">GitHub stars</a> ⭐️ or follow us on <a href="https://x.com/microcksio" target="_blank" rel="noopener noreferrer" class="">X</a>, <a href="https://hachyderm.io/@microcksio@mastodon.social" target="_blank" rel="noopener noreferrer" class="">Mastodon</a>, <a href="https://www.linkedin.com/company/microcks/" target="_blank" rel="noopener noreferrer" class="">LinkedIn</a>, and our <a href="https://www.youtube.com/c/Microcks" target="_blank" rel="noopener noreferrer" class="">YouTube channel</a>!</p>
<p>Thanks for reading and supporting us! ❤️</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[A Thriving year in the CNCF Sandbox and Its Transformative Impacts]]></title>
            <link>https://microcks.io/blog/microcks-a-thriving-year-in-the-cncf-sandbox/</link>
            <guid>https://microcks.io/blog/microcks-a-thriving-year-in-the-cncf-sandbox/</guid>
            <pubDate>Mon, 24 Jun 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[In the ever-evolving landscape of open-source software, achieving recognition and support from reputable foundations can be a game-changer for projects.]]></description>
            <content:encoded><![CDATA[<p>In the <strong>ever-evolving landscape</strong> of <strong>open-source software</strong>, achieving <strong>recognition</strong> and <strong>support</strong> from <strong>reputable foundations can be a game-changer</strong> for projects. This was precisely the case for <a href="https://microcks.io/" target="_blank" rel="noopener noreferrer" class="">Microcks</a>, an <strong>innovative API mocking and testing project</strong>. When Microcks joined the <a href="https://www.cncf.io/" target="_blank" rel="noopener noreferrer" class="">CNCF</a> (Cloud Native Computing Foundation) Sandbox a year ago, opportunities opened. In this blog post, we'll delve into Microcks's exciting journey as it embraced its <a href="https://landscape.cncf.io/?selected=microcks" target="_blank" rel="noopener noreferrer" class="">CNCF Sandbox</a> status and explore the profound positive impacts the project experienced in its <strong>first year within the foundation</strong>.</p>
<p style="text-align:center">
<img decoding="async" loading="lazy" src="https://microcks.io/images/blog/microcks-contributors.png" alt="Microcks: A Thriving year in the CNCF Sandbox and Its Transformative Impacts" class="img_ev3q">
    <em><a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/" target="_blank" rel="noopener noreferrer" class="">KubeCon EU 2024</a> at the Microcks Project Pavilion booth, showcasing core contributors from Red Hat (<a href="https://www.linkedin.com/in/hugoguerrero/" target="_blank" rel="noopener noreferrer" class="">Hugo Guerrero</a>), Google (<a href="https://www.linkedin.com/in/julienbreux/" target="_blank" rel="noopener noreferrer" class="">Julien Breux</a>) and Microcks core maintainers (<a href="https://www.linkedin.com/in/laurentbroudoux/" target="_blank" rel="noopener noreferrer" class="">Laurent Broudoux</a> &amp; <a href="https://www.linkedin.com/in/yacinekheddache/" target="_blank" rel="noopener noreferrer" class="">Yacine Kheddache</a>).</em>
</p>
<p><strong>Microcks' Integration into the CNCF Sandbox: A Milestone of Success</strong></p>
<p>Microcks took a <strong>significant step forward</strong> by becoming part of the <strong>CNCF Sandbox</strong>, a space dedicated to nurturing early-stage cloud-native projects. The CNCF, well-known for supporting and promoting cloud-native technologies, provided Microcks with a platform that validated its potential and exposed it to a <strong>vast community of developers</strong>, <strong>enterprises</strong>, and <strong>enthusiasts</strong>. This integration was marked by Microcks' announcement in the blog post titled "<a class="" href="https://microcks.io/blog/microcks-joining-cncf-sandbox/">Microcks Joining CNCF Sandbox</a>", a testament to our community dedication and ambition.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-1-year-transformation-positive-impacts-on-microcks">The 1-Year Transformation: Positive Impacts on Microcks<a href="https://microcks.io/blog/microcks-a-thriving-year-in-the-cncf-sandbox/#the-1-year-transformation-positive-impacts-on-microcks" class="hash-link" aria-label="Direct link to The 1-Year Transformation: Positive Impacts on Microcks" title="Direct link to The 1-Year Transformation: Positive Impacts on Microcks" translate="no">​</a></h2>
<p><strong>1. Rapid Growth and Adoption</strong></p>
<p>One of the most visible impacts of Microcks' inclusion in the CNCF Sandbox is its <strong>exponential growth</strong>. This growth is vividly evident in the <a href="https://github.com/microcks/.github/blob/main/ADOPTERS.md" target="_blank" rel="noopener noreferrer" class="">ADOPTERS.md</a> file on Microcks' GitHub repository. This file is a directory of organizations and projects that have embraced Microcks as part of their development workflow. Over the first year, the <strong>list of adopters expanded significantly</strong>, reflecting <strong>the rising popularity</strong> and <strong>utility of the Microcks project</strong>.</p>
<ul>
<li class="">Public adopters have grown from <strong>1 to 16</strong> in just a year, spanning various verticals and geographies! 🌍🚀😊</li>
<li class="">Private adopters (companies who are not yet listed publicly but are in touch with the community) now include <strong>more than 20 organizations</strong>... 🚀🤝😊</li>
</ul>
<blockquote>
<p>Moving from private to public adopters is a small contribution that makes a big impact. It greatly helps the project gain momentum and credibility. Your support is truly important for our growth! 🌟🙏</p>
</blockquote>
<p>As enterprises and developers integrated Microcks into their development lifecycle practices, it became evident that the <strong>CNCF affiliation increased the project's visibility</strong> and <strong>instilled higher trust among our community users</strong>. Being part of the CNCF family inherently brings a sense of credibility and reliability, a factor that likely contributed to Microcks' rapid adoption.</p>
<p>Keep discovering by reading adopters' testimonials:</p>
<ul>
<li class=""><a class="" href="https://microcks.io/blog/cnam-soap-service-mocking/">CNAM Partners with Microcks for Automated SOAP Service Mocking</a></li>
<li class=""><a class="" href="https://microcks.io/blog/extend-microcks-with-custom-libs/">Extend Microcks with custom libs and code</a></li>
<li class=""><a class="" href="https://microcks.io/blog/jb-hunt-mock-it-till-you-make-it/">J.B. Hunt: Mock It till You Make It with Microcks</a></li>
</ul>
<p><strong>2. Embracing the "Shift Left" Paradigm</strong></p>
<p>Microcks' tenure in the CNCF Sandbox has reinforced the <strong>importance of the "shift left" approach to software development</strong>. The "shift left" <a href="https://developer.paypal.com/community/blog/shiftleft-softwareqa/" target="_blank" rel="noopener noreferrer" class="">paradigm</a> emphasizes addressing issues as early in the development cycle as possible, reducing the chances of critical problems emerging in later stages. In Microcks’ context, this translates to incorporating API mocking and testing right from the outset of development.</p>
<p>The shift left approach was expertly outlined in the informative article "<a href="https://medium.com/itnext/mocking-and-contract-testing-in-your-inner-loop-with-microcks-part-1-easy-environment-setup-dcd0f4355231" target="_blank" rel="noopener noreferrer" class="">Mocking and Contract Testing in Your Inner Loop with Microcks</a>". This piece elaborates on how Microcks' inner loop focus empowers developers to mock APIs and run contract tests early in their development cycle. This leads to <strong>swifter identification</strong> and <strong>resolution of issues</strong>, allowing <strong>developers</strong> to <strong>iterate more efficiently</strong> and ultimately <strong>deliver higher-quality</strong> software.</p>
<p><strong>Metrics for <a href="https://testcontainers.com/modules/microcks/" target="_blank" rel="noopener noreferrer" class="">Testcontainers Microcks’ module</a> downloads and usage are rapidly increasing</strong>, demonstrating the need and enthusiasm of developers: 🌟</p>
<ul>
<li class="">From 500 downloads in Q4 2023 🚀</li>
<li class="">To over <strong>2K downloads in May 2024</strong> 🎉</li>
</ul>
<p><strong>The same goes for our popular <a href="https://www.docker.com/blog/get-started-with-the-microcks-docker-extension-for-api-mocking-and-testing/" target="_blank" rel="noopener noreferrer" class="">Docker Desktop Extension</a></strong>: listed among the top <a href="https://dzone.com/articles/docker-desktop-extensions-every-developer-must-try" target="_blank" rel="noopener noreferrer" class="">extensions every developer must try</a> and <strong>installed over 6.4K times</strong>! 🚀🌟😊</p>
<p>⏩ Very easy and straightforward to start with Microcks in <strong>3 mins</strong>, watch: <br>
<a href="https://youtu.be/E8rjUwznO-Q?si=6R6gwWnp74oNc3XV" target="_blank" rel="noopener noreferrer" class="">Getting Started with Microcks Docker Desktop Extension</a></p>
<p>Since day one, the Microcks project has been robust and efficient in managing <strong>all kinds of API use cases</strong> for your outer loop. Based on adopters and community feedback, we now have a lighter and faster version of Microcks named <a href="https://github.com/microcks/microcks/tree/1.9.x/distro/uber" target="_blank" rel="noopener noreferrer" class="">microcks-uber</a>. By packaging our Microcks Java application into a platform-native binary using <a href="https://www.graalvm.org/latest/reference-manual/native-image/" target="_blank" rel="noopener noreferrer" class="">GraalVM native</a> and <a href="https://docs.spring.io/spring-boot/docs/current/reference/html/native-image.html" target="_blank" rel="noopener noreferrer" class="">Spring Boot AOT</a> compilation, we've achieved an incredible <strong>startup time of just 300 milliseconds</strong>, consuming very few resources!</p>
<p>We are now the <strong>ultimate tool</strong> to <strong>bridge the gap</strong> between <strong>development on a laptop</strong> and <strong>centralized, highly scalable operations on Kubernetes</strong>. 🚀💻🌐
<img decoding="async" loading="lazy" alt="How Microcks fit and unify Inner and Outer Loops for cloud-native Development" src="https://microcks.io/assets/images/microcks-inner-outer-loop-03fa506de470e38139b14c6074509ef3.png" width="1200" height="835" class="img_ev3q"></p>
<p>See our article regarding: <br>
“<a href="https://www.linkedin.com/pulse/how-microcks-fit-unify-inner-outer-loops-cloud-native-kheddache/" target="_blank" rel="noopener noreferrer" class="">How Microcks fit and unify Inner and Outer Loops for cloud-native Development</a>” 💡</p>
<p><strong>3. Better Together: Eco-System Orientation</strong></p>
<p>The CNCF Sandbox status brings a <strong>sense of camaraderie</strong> and the opportunity to be part of a <strong>broader ecosystem</strong>. This "better together" <strong>mindset</strong> encourages projects to explore <strong>integrations and collaborations</strong> that enrich the <strong>developer experience</strong>.</p>
<p>Microcks' alignment with the CNCF <strong>ecosystem</strong> is a testament to this ethos. The project isn't just about standalone functionality and fitting into the larger cloud-native landscape. Microcks demonstrates its commitment to creating a <strong>seamless developer experience</strong> within the CNCF ecosystem by promoting compatibility with other <strong>cloud-native technologies</strong>.</p>
<p>Explore our <strong>ecosystem partnerships</strong> by discovering key articles and videos highlighting our <strong>collaborations</strong> with <a class="" href="https://microcks.io/blog/observability-for-microcks-at-scale/">OpenTelemetry and Grafana Labs</a>, <a href="https://www.youtube.com/watch?v=s0I8ZPOvDKE" target="_blank" rel="noopener noreferrer" class="">Testcontainers</a>, <a href="https://www.docker.com/blog/get-started-with-the-microcks-docker-extension-for-api-mocking-and-testing/" target="_blank" rel="noopener noreferrer" class="">Docker</a>, <a class="" href="https://microcks.io/blog/backstage-integration-launch/">Backstage</a>, <a href="https://ubuntu.com/blog/microk8s-addon-microcks" target="_blank" rel="noopener noreferrer" class="">Canonical</a>,<a href="https://www.linkedin.com/posts/microcks_opensource-community-activity-7163612076710572034-t09-/" target="_blank" rel="noopener noreferrer" class=""> Red Hat</a>, <a href="https://about.gitlab.com/blog/2023/09/27/microcks-and-gitlab-part-one/" target="_blank" rel="noopener noreferrer" class="">GitLab</a>, <a href="https://www.linkedin.com/posts/microcks_kubecon-cloudnativecon-cloudnative-activity-7176925670155943937-WE1f/" target="_blank" rel="noopener noreferrer" class="">Solo.io</a> and more if you <a class="" href="https://microcks.io/community/">follow us</a> ;-)</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="microcks-by-the-numbers-and-key-metrics">Microcks, by the numbers and key metrics<a href="https://microcks.io/blog/microcks-a-thriving-year-in-the-cncf-sandbox/#microcks-by-the-numbers-and-key-metrics" class="hash-link" aria-label="Direct link to Microcks, by the numbers and key metrics" title="Direct link to Microcks, by the numbers and key metrics" translate="no">​</a></h2>
<p>Microcks maintainers, care about <strong>metrics</strong> and are committed to <strong>continuous improvement</strong>. We're excited to share how we've leveled up our <strong>contributions</strong> and <strong>community engagement</strong> through CNCF metrics. Our diversity of contributors, contributions growth, and GitHub activity have all shown remarkable progress. Dive into the details and explore our journey using the <a href="https://microcks.devstats.cncf.io/" target="_blank" rel="noopener noreferrer" class="">CNCF DevStats</a>, Linux Foundation <a href="https://insights.lfx.linuxfoundation.org/foundation/cncf/overview/github?project=microcks&amp;routedFrom=Github&amp;bestPractice=false" target="_blank" rel="noopener noreferrer" class="">Insights</a>, and some great help from our friends at <a href="https://bitergia.com/" target="_blank" rel="noopener noreferrer" class="">Bitergia</a>, where you can double-check the data or dig deeper into our success story. <strong>Let's celebrate our growth and the power of open-source collaboration!</strong> 🎉</p>
<p><strong>Worldwide diversity of contributors</strong>, with <strong>notable contributions growth</strong> from <strong>APAC (mainly China)</strong> over the last 12 months: 🌍</p>
<p><img decoding="async" loading="lazy" alt="Worldwide diversity of contributors, with notable contributions growth" src="https://microcks.io/assets/images/contribs-geographical-distribution-5f2ee4b48c001fe292ce0f828f6df984.png" width="1200" height="456" class="img_ev3q"></p>
<p><strong>More and more contributions</strong> are coming from organizations that <strong>rely on Microcks</strong> and have decided to <strong>participate in project maintenance and evolution</strong> to <strong>secure and invest in their supply chain</strong>. 😊</p>
<p><img decoding="async" loading="lazy" alt="More and more contributions" src="https://microcks.io/assets/images/organization-leaderboard-contributors-f064a23a4dd6a1b18d32e676315dd03b.png" width="1176" height="1270" class="img_ev3q"></p>
<p><strong>Net Newly Attracted Affiliations</strong>: <strong>25 new organizations</strong> with developers <strong>actively participating in the Community</strong>! 🚀</p>
<p><img decoding="async" loading="lazy" alt="Net Newly Attracted Affiliations" src="https://microcks.io/assets/images/microcks-one-year-later-affliations-40f459049ec9b72e5e7eae84821daf7d.png" width="1200" height="750" class="img_ev3q"></p>
<p><strong>Git Overview</strong> 🚀 <strong>910 commits</strong> this year vs. <strong>486 commits</strong> last year 📈</p>
<p><img decoding="async" loading="lazy" alt="Git Overview" src="https://microcks.io/assets/images/microcks-910-commits-one-year-later-17823d200161ef45c49cb64bf79beff0.png" width="1200" height="608" class="img_ev3q"></p>
<p><strong>Attracted New Developers Continue to Rise!</strong> 🌟 The growth has skyrocketed since we joined the CNCF! 😊</p>
<p><img decoding="async" loading="lazy" alt="Attracted New Developers Continue to Rise" src="https://microcks.io/assets/images/new-developers-continue-to-rise-89f053507ca84a2eed458b6c08a981ad.png" width="1200" height="750" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://microcks.io/blog/microcks-a-thriving-year-in-the-cncf-sandbox/#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>Microcks' <strong>journey within the CNCF Sandbox</strong> has been nothing short of <strong>transformative</strong>. From achieving <strong>remarkable growth</strong> and <strong>adoption</strong> to embracing the <strong>shift left approach</strong> and contributing to a <strong>better-together ecosystem</strong>, the project's trajectory has been infused with energy, innovation, and a collaborative spirit. This one-year period highlighted the inherent advantages of being part of a foundation that champions cloud-native technologies and encourages projects to reach new heights.</p>
<p>As the open-source community continues to evolve, success stories like Microcks remind us of the immense value that foundation affiliations can bring. By fostering an environment of support, collaboration, and growth, foundations like the CNCF provide projects with the tools they need to make a lasting impact on the world of software development. With its remarkable journey thus far, <strong>Microcks is a shining example of how a project's affiliation with the proper foundation can propel it to new heights of success and innovation</strong>.</p>
<p><strong>Stay tuned</strong> as Microcks gears up to <strong>elevate within the CNCF</strong>! We're excited to announce our plans to submit and launch the qualification process to <strong>become an incubating project</strong> in the foundation during our second year! 👀</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[CNAM Partners with Microcks for Automated SOAP Service Mocking]]></title>
            <link>https://microcks.io/blog/cnam-soap-service-mocking/</link>
            <guid>https://microcks.io/blog/cnam-soap-service-mocking/</guid>
            <pubDate>Mon, 03 Jun 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[With over 2,500 employees, the Caisse Nationale de l’Assurance Maladie CNAM is the operational "headquarters" of France's compulsory health insurance system.]]></description>
            <content:encoded><![CDATA[<p>With over 2,500 employees, the Caisse Nationale de l’Assurance Maladie <a href="https://www.assurance-maladie.ameli.fr/" target="_blank" rel="noopener noreferrer" class="">CNAM</a> is the operational "headquarters" of France's compulsory health insurance system. We play a pivotal role in ensuring access to <strong>healthcare for all French citizens</strong>, overseeing and funding health insurance coverage for employees and their families.</p>
<p><img decoding="async" loading="lazy" alt="image cnam accelerating healthcare" src="https://microcks.io/assets/images/cnam-accelerating-healthcare-736bb09b047c73d2bd420b66cacbbce9.png" width="1200" height="733" class="img_ev3q"></p>
<p>Additionally, we coordinate with and assist the local organizations within our network, which consists of <strong>164 entities deployed nationally</strong>, regionally, and locally throughout France. We rely on <a href="https://nordicapis.com/apis-101-what-is-soap-simple-object-access-protocol/" target="_blank" rel="noopener noreferrer" class="">SOAP</a> (Simple Object Access Protocol) for our historical and mission-critical legacy systems to facilitate seamless information exchange among these organizations.</p>
<p>
    <img decoding="async" loading="lazy" src="https://microcks.io/images/blog/reseau-cnam.png" alt="image reseau cnam" class="img_ev3q">
</p>
<p style="text-align:center">
    <em>Source (🇫🇷): <a href="https://www.assurance-maladie.ameli.fr/qui-sommes-nous/organisation/reseau-proximite" target="_blank" rel="noopener noreferrer" class="">https://www.assurance-maladie.ameli.fr/qui-sommes-nous/organisation/reseau-proximite</a></em>
</p>
<p>At CNAM, we manage <strong>hundreds of services</strong> that process a significant data flow daily, with each potentially relying on others. In our development and testing phases, we depend on <strong>thousands of simulations</strong> representing different versions of each service. Throughout all project phases, multiple individuals or groups utilize these simulations, contributing to our extensive use of datasets. This poses <strong>challenges</strong> in maintaining and accelerating testing, validation, interoperability, and conformance at scale.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="apis-and-web-services-at-cnam">APIs and web services at CNAM<a href="https://microcks.io/blog/cnam-soap-service-mocking/#apis-and-web-services-at-cnam" class="hash-link" aria-label="Direct link to APIs and web services at CNAM" title="Direct link to APIs and web services at CNAM" translate="no">​</a></h2>
<p>With a diverse ecosystem of healthcare organizations and systems, <strong>interoperability is critical</strong> to ensuring that data can be exchanged and understood across different platforms. APIs provide standardized interfaces that allow disparate systems to communicate and share data effectively and securely, regardless of the underlying technology stack.</p>
<p>By exposing functionalities through APIs, CNAM can <strong>automate</strong> various processes and workflows, increasing efficiency and reducing manual effort. This <strong>automation streamlines</strong> administrative tasks, reduces errors, and frees up resources to focus on more critical aspects of healthcare delivery.</p>
<p>CNAM relies on <strong>SOAP</strong> for its legacy systems, which are <strong>mission-critical</strong> for its operations. APIs and web services enable the integration of these legacy systems with modern applications and technologies, ensuring that CNAM can <strong>leverage its existing infrastructure while embracing innovation</strong>.</p>
<p>As CNAM's network continues to evolve and grow, APIs provide <strong>scalability</strong> and <strong>flexibility</strong> to adapt to changing requirements and accommodate new technologies and services. This agility allows CNAM to <strong>respond quickly to emerging healthcare challenges and opportunities</strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="benefits-of-the-solution">Benefits of the Solution<a href="https://microcks.io/blog/cnam-soap-service-mocking/#benefits-of-the-solution" class="hash-link" aria-label="Direct link to Benefits of the Solution" title="Direct link to Benefits of the Solution" translate="no">​</a></h2>
<p>CNAM previously used a homemade mocking solution, which was statically built and required consumers to provide business examples and behavior. This approach consumes many infrastructure resources and generates drift, disparities, and non-reusable assets between organizations within the ecosystem.</p>
<blockquote>
<p>During our research for an API mocking and testing solution, we discovered Microcks and immediately embraced its open-source, community-driven, and very innovative approach to managing all kinds of APIs using the same facilities, including SOAP, which is mandatory for our systems.</p>
</blockquote>
<blockquote>
<p>We also realized the power and advantages of moving from a consumer to a provider-driven approach. We recognized many of our pains of being 100% consumer-driven for all our business datasets and examples in <a href="https://medium.com/@lbroudoux/microcks-and-pact-for-api-contract-testing-3e0e7d4516ca" target="_blank" rel="noopener noreferrer" class="">the article from Laurent Broudoux</a>. It has completely changed our mindset and the way we are now using mocking and sandboxes in our development lifecycle.</p>
</blockquote>
<p>At CNAM, we have chosen <strong>Microcks to accelerate and automate</strong> the simulation (mocking) of our <em><strong>450 SOAP services and more than 100 Oracle Tuxedo processing and transaction systems exposed via SOAP</strong></em>. Our usage of Microcks replaces the existing internal solution and offers several benefits tailored to our needs.</p>
<ol>
<li class="">
<p><strong>Accelerated and Automated Simulation</strong>: Microcks <strong>accelerates</strong> and <strong>automates</strong> the simulation (mocking) of CNAM's extensive suite services and data processing systems. This streamlines our internal processes and reduces manual effort, leading to faster development cycles.</p>
</li>
<li class="">
<p><strong>Reuse of Existing Datasets</strong>: By leveraging Microcks, we can <strong>reuse existing datasets</strong>, eliminating the need to recreate mocks for each service. This not only saves time but also ensures <strong>consistency</strong> across different testing scenarios.</p>
</li>
<li class="">
<p><strong>Fully Automated Sandboxes as a Service</strong>: Microcks empowers us to provide fully <strong>automated sandboxes</strong> to all consumers, <strong>accelerating</strong> development and testing workflows.</p>
</li>
<li class="">
<p><strong>Self-Service Mock Generation</strong>: With Microcks, we enable <strong>self-service</strong> mock generation for API consumers, <strong>empowering developers</strong> to iterate quickly and test their applications effectively.</p>
</li>
</ol>
<p>
    <img decoding="async" loading="lazy" src="https://microcks.io/images/blog/cnam-mock-admin-web-app.png" alt="image cnam mock admin web app" class="img_ev3q">
</p>
<p style="text-align:center">
    <em>CNAM Mock admin web application workflow.</em>
</p>
<blockquote>
<p>Using the Mock Admin application based on Microcks has significantly streamlined our testing processes. Its intuitive interface and flexibility allowed us to create customized mocks to simulate complex and mission-critical scenarios, crucial for our automated tests with the <a href="https://gnius.esante.gouv.fr/en/regulations/regulation-profiles/french-national-ehealth-id-ins" target="_blank" rel="noopener noreferrer" class="">INS and SNGI</a> databases. Microcks has demonstrated exceptional reliability and performance, enhancing the quality of our tests and allowing us to detect anomalies early in our development and validation process.
<br>
<br>
<em>Laurent Fontaine</em>, <strong>Application Owner</strong> at <em>CNAM</em></p>
</blockquote>
<p>The datasets imported in Microcks are formatted as CSV files, containing various information such as letters, words, phrases, numbers, tables, or regular expressions (regex).</p>
<p>
    <img decoding="async" loading="lazy" src="https://microcks.io/images/blog/csv-formatted-cnam-dataset.png" alt="image csv formatted cnam dataset" class="img_ev3q">
</p>
<p style="text-align:center">
    <em>CSV-formatted CNAM dataset and Microcks dynamic custom dispatch.</em>
</p>
<p>This structure demonstrates that the first column acts as a discriminator value, the last column specifies the response name, and the remaining columns inject mock data into the response context.</p>
<p>Overall, Microcks' <strong>self-service</strong> and <strong>on-demand</strong> capabilities enable us to <strong>speed up</strong> complex development and validation processes, ensuring efficient and reliable healthcare services for all stakeholders (including non-technical associates using XLS and CSV files to provide business examples). Additionally, it <strong>reduces infrastructure size and consumption, aligning with our sustainability objectives</strong>.</p>
<p>Finally, we're extensively leveraging Microcks' <strong>extensibility and custom libraries</strong> in the API dispatching process. This has been detailed in a technical blog post titled:<br>
"<a class="" href="https://microcks.io/blog/extend-microcks-with-custom-libs/">Extend Microcks with custom libs and code</a>".</p>
<blockquote>
<p>By leveraging existing datasets and libraries, we seamlessly integrate business and functional behavior validation into Microcks mocks, enabling dynamic generation. This not only enhances efficiency and accuracy but also significantly reduces time to market and improves delivery timelines.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="next-objective-test-automation">Next objective: test automation<a href="https://microcks.io/blog/cnam-soap-service-mocking/#next-objective-test-automation" class="hash-link" aria-label="Direct link to Next objective: test automation" title="Direct link to Next objective: test automation" translate="no">​</a></h2>
<p>Initially, we primarily used Microcks for mocking services, but now we are working to expand its usage to include comprehensive testing capabilities. This transition will significantly advance our <strong>testing strategy</strong>, allowing us to achieve greater efficiency, reliability, and agility in the CNAM software development lifecycle.</p>
<p>With Microcks' support for <strong>non-regression tests</strong> and <strong>validation</strong>, we can ensure that any changes or updates to our APIs do not introduce regressions or break existing functionality. By automating these tests within our existing <strong>CI/CD pipeline</strong>, we will be able to identify and address issues <strong>early</strong> in the development process, <strong>minimizing the risk</strong> of introducing bugs or defects into production environments.</p>
<p>Automated testing <strong>reduces manual quality assurance effort</strong> and enables <strong>faster feedback loops</strong>, allowing developers to iterate more <strong>quickly</strong> and <strong>confidently</strong> to improve overall development velocity.</p>
<p>
    <img decoding="async" loading="lazy" src="https://microcks.io/images/blog/cnam-automation-tests-pipeline.png" alt="image cnam automation tests pipeline" class="img_ev3q">
</p>
<p style="text-align:center">
    <em>CNAM Mock admin web application to Microcks’ automation tests pipeline.</em>
</p>
<p>This step is essential for our progress, <strong>paving the way for additional opportunities</strong> to enrich our development lifecycle with Microcks now that the solution is in production.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="contributing-to-open-source">Contributing to Open-Source<a href="https://microcks.io/blog/cnam-soap-service-mocking/#contributing-to-open-source" class="hash-link" aria-label="Direct link to Contributing to Open-Source" title="Direct link to Contributing to Open-Source" translate="no">​</a></h2>
<p>At CNAM, we are vested in <strong>contributing</strong> to the open-source Microcks community upstream for several compelling reasons.</p>
<p>Firstly, in alignment with the French and European governments' open-source directive and its emphasis on <strong>digital sovereignty</strong>, We recognize the <strong>strategic importance</strong> of <strong>investing in</strong> and <strong>actively participating in open-source projects</strong>. By contributing to Microcks, CNAM not only strengthens its own digital sovereignty but also contributes to the broader ecosystem of open-source solutions, which are <strong>essential for the success of our mission and objectives</strong>.</p>
<p>By actively participating in Microcks' development and enhancement, we can contribute to the project's direction, tailor its features and functionalities to suit CNAM's needs better and guarantee the <strong>longevity</strong> and <strong>sustainability of our supply chain</strong>. This ensures that <strong>Microcks</strong> remains a <strong>dependable</strong> and <strong>effective</strong> tool in our software development processes.</p>
<p>Moreover, by participating in an open-source project like Microcks, CNAM employees can enhance their <strong>skills</strong>, collaborate with a diverse <strong>community of developers</strong>, and <strong>contribute to advancing technology</strong> in their field. This can lead to increased job satisfaction, professional growth, and a <strong>sense of pride in contributing to a project that positively impacts both CNAM</strong> and the <strong>broader software development community</strong>.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Microcks 1.9.1 release 🚀]]></title>
            <link>https://microcks.io/blog/microcks-1.9.1-release/</link>
            <guid>https://microcks.io/blog/microcks-1.9.1-release/</guid>
            <pubDate>Thu, 23 May 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Just two months after the previous release, we are thrilled to announce this brand-new Microcks version!]]></description>
            <content:encoded><![CDATA[<p>Just two months after the previous release, we are thrilled to announce this brand-new Microcks version! Please welcome the <code>1.9.1</code> release of Microcks, the Open-source cloud-native tool for API Mocking and Testing 🙌</p>
<p>With no less than 30 newly resolved issues, this release is special as it is the first to have so many issues directly contributed by community users! <strong>25 evolutions out of 30 directly come from them!</strong> Kudos to our community 👏, and see greetings along the notes below.</p>
<p><img decoding="async" loading="lazy" alt="microcks-feature" src="https://microcks.io/assets/images/microcks-1.9.1-feature-622d9b9b177a890550ba691dab336927.png" width="1169" height="773" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-proxy-features">New Proxy features<a href="https://microcks.io/blog/microcks-1.9.1-release/#new-proxy-features" class="hash-link" aria-label="Direct link to New Proxy features" title="Direct link to New Proxy features" translate="no">​</a></h2>
<p>Aside from the numerous enhancements we'll discuss just after, this release's main new feature is the addition of Proxy behavior, which <a href="https://github.com/Afanas10101111" target="_blank" rel="noopener noreferrer" class="">Nikolay Afanasyev</a> introduced in <a class="" href="https://microcks.io/blog/new-proxy-features-1.9.1/">this blog post</a>.</p>
<p>As stated in this post, <code>1.9.1</code> comes with two new dispatchers called <code>PROXY</code> and <code>PROXY_FALLBACK</code>. While <code>PROXY</code> is a simple passthrough to an external backend service, <code>PROXY_FALLBACK</code> handles a bit more logic and allows to call the external backend service only if Microcks doesn’t find a matching mock response at first.</p>
<blockquote>
<p>One great thing is that this new proxy logic has been implemented consistently for REST, SOAP and GraphQL APIs in Microcks. Check the full blog post for <a class="" href="https://microcks.io/blog/new-proxy-features-1.9.1/">more details</a>. Thanks again, <a href="https://github.com/Afanas10101111" target="_blank" rel="noopener noreferrer" class="">Nikolay</a>! 🙏</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="noticeable-enhancements">Noticeable enhancements<a href="https://microcks.io/blog/microcks-1.9.1-release/#noticeable-enhancements" class="hash-link" aria-label="Direct link to Noticeable enhancements" title="Direct link to Noticeable enhancements" translate="no">​</a></h2>
<p>Below is a list of noticeable enhancements and shootouts to people who contributed them without order or preference.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="templating-of-responses-headers">Templating of responses’ headers<a href="https://microcks.io/blog/microcks-1.9.1-release/#templating-of-responses-headers" class="hash-link" aria-label="Direct link to Templating of responses’ headers" title="Direct link to Templating of responses’ headers" translate="no">​</a></h3>
<p>This enhancement lets you specify response header values using Microcks specific <code>{{ }}</code> template notation. The <code>{{ }}</code> notation is a placeholder that can be replaced with dynamic values. You can use it to return random values (think of a UUID as a transaction or correlation identifier) or request-based values. It was, for example, used to implement <a class="" href="https://microcks.io/blog/mocking-oidc-redirect/">OpenID Connect mocks</a>.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token key atrule">headers</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">'Location'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">schema</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> string</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token key atrule">examples</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">     </span><span class="token key atrule">generic</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">       </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"{{ request.params[redirect_uri] }}?state={{ request.params[state] }}&amp;code={{ uuid() }}"</span><br></div></code></pre></div></div>
<blockquote>
<p>Check <a href="https://github.com/microcks/microcks/issues/1097" target="_blank" rel="noopener noreferrer" class="">#1097</a> for more details on this, and thanks again to <a href="https://github.com/Afanas10101111" target="_blank" rel="noopener noreferrer" class="">Nikolay</a> 🙏 for the initial discussion and Pull Request.</p>
</blockquote>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="json-pointers-extended-usage">JSON pointers extended usage<a href="https://microcks.io/blog/microcks-1.9.1-release/#json-pointers-extended-usage" class="hash-link" aria-label="Direct link to JSON pointers extended usage" title="Direct link to JSON pointers extended usage" translate="no">​</a></h3>
<p>This enhancement allows you to reference arrays or array elements in mock responses - still using the <code>{{ }}</code> notation placeholder. Arrays or their elements will be directly serialized as JSON and integrated as such into the response body. For example, you can use this template:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"allBooks"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> request.body/books </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"firstBook"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> request.body/</span><span class="token number">0</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<p>to get results like:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"allBooks"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"title"</span><span class="token operator">:</span><span class="token string" style="color:rgb(255, 121, 198)">"Title 1"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token property">"author"</span><span class="token operator">:</span><span class="token string" style="color:rgb(255, 121, 198)">"Jane Doe"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"title"</span><span class="token operator">:</span><span class="token string" style="color:rgb(255, 121, 198)">"Title 2"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token property">"author"</span><span class="token operator">:</span><span class="token string" style="color:rgb(255, 121, 198)">"John Doe"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"firstBook"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"title"</span><span class="token operator">:</span><span class="token string" style="color:rgb(255, 121, 198)">"Title 1"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token property">"author"</span><span class="token operator">:</span><span class="token string" style="color:rgb(255, 121, 198)">"Jane Doe"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<blockquote>
<p>Check <a href="https://github.com/microcks/microcks/pull/1139" target="_blank" rel="noopener noreferrer" class="">#1139</a> for more details on this, and thank <a href="https://github.com/azplanlos" target="_blank" rel="noopener noreferrer" class="">Andreas Zöllner</a> 🙏 for proposing and writing this enhancement.</p>
</blockquote>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="object-query-parameters-support">Object query parameters support<a href="https://microcks.io/blog/microcks-1.9.1-release/#object-query-parameters-support" class="hash-link" aria-label="Direct link to Object query parameters support" title="Direct link to Object query parameters support" translate="no">​</a></h3>
<p>This enhancement adds support for serializing an object's properties as request parameters. It follows the serialization rules for <code>style: form</code> parameters with <code>explode: true</code>, which translates in OpenAPI by having a query parameter of <code>object</code> type.</p>
<p>So typically, you may define a <code>GET /users?name=Alex&amp;age=44</code> endpoint where the query parameter is a <code>User</code> object. How cool! 😎</p>
<blockquote>
<p>Check <a href="https://github.com/microcks/microcks/issues/1143" target="_blank" rel="noopener noreferrer" class="">#1143</a> for more details, and thanks to <a href="https://github.com/Snorkell" target="_blank" rel="noopener noreferrer" class="">Samuel Antoine</a> 🙏 for proposing and writing this enhancement.</p>
</blockquote>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="webapp-enhancements-and-linting">Webapp enhancements and linting<a href="https://microcks.io/blog/microcks-1.9.1-release/#webapp-enhancements-and-linting" class="hash-link" aria-label="Direct link to Webapp enhancements and linting" title="Direct link to Webapp enhancements and linting" translate="no">​</a></h3>
<p>While functional, the Microcks web app undoubtedly needs more love and enhancements as it is not the expertise field of original maintainers 😉 Thanks to community contribution, we’re now in better shape and have people still seeking improvements.</p>
<p>We have some noticeable improvements here:</p>
<ul>
<li class="">Selecting/deselecting operations when launching a test can now be done with a single checkbox,</li>
<li class="">Broken unit tests have been removed from the codebase,</li>
<li class="">Broken links to documentation have been fixed,</li>
<li class="">Linting of application and refactoring for better standard respect has been applied,</li>
<li class="">Analyses on how we could move to fresher dependencies or frameworks are coming.</li>
</ul>
<blockquote>
<p>Check <a href="https://github.com/microcks/microcks/issues/1153" target="_blank" rel="noopener noreferrer" class="">#1153</a>, <a href="https://github.com/microcks/microcks/issues/1163" target="_blank" rel="noopener noreferrer" class="">#1163</a>, <a href="https://github.com/microcks/microcks/issues/1166" target="_blank" rel="noopener noreferrer" class="">#1166</a> and <a href="https://github.com/microcks/microcks/issues/1171" target="_blank" rel="noopener noreferrer" class="">#1171</a> contributions by <a href="https://github.com/soGit" target="_blank" rel="noopener noreferrer" class="">Siarhei Saroka</a> 🙏 for more details.</p>
</blockquote>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="more-tests">More Tests<a href="https://microcks.io/blog/microcks-1.9.1-release/#more-tests" class="hash-link" aria-label="Direct link to More Tests" title="Direct link to More Tests" translate="no">​</a></h3>
<p>Contributing to an Open Source project is not only a matter of writing code. Starting with documentation and adding new tests is a great way to get hands-on experience. As Microcks becomes a critical tool for many organizations, increasing the coverage of our test suite is essential.</p>
<p>We moved from <a href="https://sonarcloud.io/project/activity?graph=coverage&amp;id=microcks_microcks" target="_blank" rel="noopener noreferrer" class="">36.8% coverage on January 1st to 48.4%</a> as of today! This is great progress for a code base of nearly 12K lines of code, and we can still get even better!</p>
<blockquote>
<p>Check <a href="https://github.com/microcks/microcks/issues/1128" target="_blank" rel="noopener noreferrer" class="">#1128</a>, <a href="https://github.com/microcks/microcks/issues/1130" target="_blank" rel="noopener noreferrer" class="">#1130</a> and <a href="https://github.com/microcks/microcks/issues/1150" target="_blank" rel="noopener noreferrer" class="">#1150</a> for awesome contributions on tests by <a href="https://github.com/mcruzdev" target="_blank" rel="noopener noreferrer" class="">Matheus Cruz</a> 🙏</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="documentation-refactoring-effort">Documentation refactoring effort<a href="https://microcks.io/blog/microcks-1.9.1-release/#documentation-refactoring-effort" class="hash-link" aria-label="Direct link to Documentation refactoring effort" title="Direct link to Documentation refactoring effort" translate="no">​</a></h2>
<p>We also want to take the opportunity of this release notes post to announce a significant refactoring effort on documentation. As stated above, Microcks has become critical and attracts more and more newcomers. The documentation needs to be reorganized to better assist with onboarding and help users find what they’re looking for.</p>
<p>We came up with a new approach to the documentation structure exposed <a href="https://github.com/microcks/microcks.io/issues/81" target="_blank" rel="noopener noreferrer" class="">in this GitHub thread</a>. Our main goal is to clarify the categorization of information between Tutorials, Guides, Explanations, and Reference materials. We want to make it easier and faster for newcomers to find valuable information depending on where they are in their learning process. We also want to make it easier for community users to contribute new content easily.</p>
<p>For all of that, we need your help! So, if you are or would love to be a Tech Writer and want to contribute to this cool Open Source project, please join us and share your recipes and experiences to improve our documentation!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-coming-next">What’s coming next?<a href="https://microcks.io/blog/microcks-1.9.1-release/#whats-coming-next" class="hash-link" aria-label="Direct link to What’s coming next?" title="Direct link to What’s coming next?" translate="no">​</a></h2>
<p>As usual, we will eagerly prioritize items according to community feedback. You can check and collaborate via our list of <a href="https://github.com/microcks/microcks/issues" target="_blank" rel="noopener noreferrer" class="">issues on GitHub</a> and the project <a href="https://github.com/orgs/microcks/projects/1" target="_blank" rel="noopener noreferrer" class="">roadmap</a>.</p>
<p>Remember that we are an open community, which means you, too, can jump on board to make Microcks even greater! Come and say hi! on our <a href="https://github.com/microcks/microcks/discussions" target="_blank" rel="noopener noreferrer" class="">GitHub discussion</a> or <a href="https://microcks.io/discord-invite/" target="_blank" rel="noopener noreferrer" class="">Discord chat</a> 👻, send some love through <a href="https://github.com/microcks/microcks" target="_blank" rel="noopener noreferrer" class="">GitHub stars</a> ⭐️ or follow us on <a href="https://twitter.com/microcksio" target="_blank" rel="noopener noreferrer" class="">Twitter</a>, <a href="https://hachyderm.io/@microcksio@mastodon.social" target="_blank" rel="noopener noreferrer" class="">Mastodon</a>, <a href="https://www.linkedin.com/company/microcks/" target="_blank" rel="noopener noreferrer" class="">LinkedIn</a>, and our <a href="https://www.youtube.com/c/Microcks" target="_blank" rel="noopener noreferrer" class="">YouTube channel</a>!</p>
<p>Thanks for reading and supporting us! ❤️</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Introducing new Proxy features in Microcks 1.9.1]]></title>
            <link>https://microcks.io/blog/new-proxy-features-1.9.1/</link>
            <guid>https://microcks.io/blog/new-proxy-features-1.9.1/</guid>
            <pubDate>Mon, 13 May 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[We all know about the many benefits of Microcks, which makes it an excellent tool for the software development process.]]></description>
            <content:encoded><![CDATA[<p>We all know about the many benefits of Microcks, which makes it an excellent tool for the software development process. When I first started using it, everything went smoothly. However, there is no limit to QA's expectations 😊</p>
<p>Recently, a quality assurance specialist approached me with a request: "The mocks work fine, but we need to implement a new testing scenario. Every third or random response should be a mock-up, while the rest should be from the actual service..."</p>
<p>To achieve this, we could use an external load balancer, for example. Additionally, we would need a new configuration point for the balancer, its behavior, and so on... This is not the Samurai way 😊</p>
<p><img decoding="async" loading="lazy" alt="new-proxy-features-1.9.1-feature" src="https://microcks.io/assets/images/new-proxy-features-1.9.1-feature-53e1b228978fb2e0812ee9a5fe9843a0.png" width="1200" height="796" class="img_ev3q"></p>
<p>Luckily, Microcks is an open-source project with an active community. After discussing the <a href="https://github.com/microcks/microcks/issues/1100" target="_blank" rel="noopener noreferrer" class="">issue</a> with Laurent, we created two dispatchers to provide simple and advanced proxy logic available for REST, SOAP, and GraphQL protocols.</p>
<p>Those two new dispatchers - to be released in the <code>1.9.1</code> version of Microcks - are called <code>PROXY</code> and <code>PROXY_FALLBACK</code>. While <code>PROXY</code> acts exactly as its name suggests, you’ll see that <code>PROXY_FALLBACK</code> handles a bit more logic and allows handling advanced use cases. Let’s dive into the explanations!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-new-proxy-behaviors">The new PROXY behaviors<a href="https://microcks.io/blog/new-proxy-features-1.9.1/#the-new-proxy-behaviors" class="hash-link" aria-label="Direct link to The new PROXY behaviors" title="Direct link to The new PROXY behaviors" translate="no">​</a></h2>
<p>The simple <code>PROXY</code> dispatcher simply changes the base URL of the Microcks and makes a call to the real backend service.</p>
<p><img decoding="async" loading="lazy" alt="new-proxy-features-1.9.1-proxy" src="https://microcks.io/assets/images/new-proxy-features-1.9.1-proxy-45028f3c13457c6bfc283faaf486dc25.png" width="1200" height="623" class="img_ev3q"></p>
<p>Enabling the <code>PROXY</code> dispatcher is a per-operation setting. That means that within the same API, you may have some operations that use regular mocks and others that just delegate API calls to a real backend system. Your client still calls the Microcks endpoints though - allowing you a smooth transition from mocked inexistent operation to ready-ones on a real implementation.</p>
<p>The advanced <code>PROXY_FALLBACK</code> dispatcher works similarly to the <a class="" href="https://microcks.io/documentation/explanations/dispatching/#fallback-dispatcher"><code>FALLBACK</code> dispatcher</a>, but with one key difference: when no matching response is found within the Microcks’ dataset, instead of returning a fallback response, it changes the base URL of the request and makes a call to the real service.</p>
<p><img decoding="async" loading="lazy" alt="new-proxy-features-1.9.1-proxy-fallback" src="https://microcks.io/assets/images/new-proxy-features-1.9.1-proxy-fallback-96c1d97281e4eef35b6d20a47011133b.png" width="1200" height="638" class="img_ev3q"></p>
<p>Here again, enabling this proxy mechanism is a per-operation setting that allows you to mix different behaviors in the same Microcks API endpoints. Hence, you can use regular mocks, or try to proxy a request when nothing is found on the Microcks’ side or always proxy to the real backend.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-do-we-enable-them">How do we enable them?<a href="https://microcks.io/blog/new-proxy-features-1.9.1/#how-do-we-enable-them" class="hash-link" aria-label="Direct link to How do we enable them?" title="Direct link to How do we enable them?" translate="no">​</a></h2>
<p>Dispatcher configuration in Microcks is a per-operation setting, so enabling <code>PROXY</code> or <code>PROXY_FALLBACK</code> must be done at the operation level. There are many ways to set up this part in Microcks - overriding the inferred default dispatching mechanism, you can: use the UI, use the API, use a Metadata artifact, or use API specification extensions like we did just below.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="proxy"><code>PROXY</code><a href="https://microcks.io/blog/new-proxy-features-1.9.1/#proxy" class="hash-link" aria-label="Direct link to proxy" title="Direct link to proxy" translate="no">​</a></h4>
<p>To enable the <code>PROXY</code> dispatching, we only need to specify <code>PROXY</code> as the <code>dispatcher</code> and the base URL of the actual service as the  <code>dispatcherRules</code>:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token key atrule">x-microcks-operation</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">dispatcher</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> PROXY</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">dispatcherRules</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> http</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">//external.net/myService/v1</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="proxy_fallback"><code>PROXY_FALLBACK</code><a href="https://microcks.io/blog/new-proxy-features-1.9.1/#proxy_fallback" class="hash-link" aria-label="Direct link to proxy_fallback" title="Direct link to proxy_fallback" translate="no">​</a></h4>
<p>The configuration of the <code>PROXY_FALLBACK</code> dispatcher is similar to that of the <code>FALLBACK</code> dispatcher. However, instead of the <code>fallback</code> key and its value which refers to the response name, we have the <code>proxyUrl</code> key with the base URL of the actual service as its value:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token key atrule">x-microcks-operation</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">dispatcher</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> PROXY_FALLBACK</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">dispatcherRules</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">|</span><span class="token scalar string" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token scalar string" style="color:rgb(255, 121, 198)">    {</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token scalar string" style="color:rgb(255, 121, 198)">      "dispatcher": "URI_PARTS",</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token scalar string" style="color:rgb(255, 121, 198)">      "dispatcherRules": "name",</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token scalar string" style="color:rgb(255, 121, 198)">      "proxyUrl": "http://external.net/myService/v1/"</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token scalar string" style="color:rgb(255, 121, 198)">    }</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="myriad-of-opportunities">Myriad of opportunities!<a href="https://microcks.io/blog/new-proxy-features-1.9.1/#myriad-of-opportunities" class="hash-link" aria-label="Direct link to Myriad of opportunities!" title="Direct link to Myriad of opportunities!" translate="no">​</a></h2>
<p>So, now we have two more ways to customize Microcks' behavior. Why would we need this?</p>
<p>We can now set up Microcks' URL for our client application and switch between mocking and calling the actual backend service by turning on/off the proxy dispatcher in the Microcks UI without any changes to the client application configuration.</p>
<p>And if we need some kind of automated, exotic logic, we can use the power of the <a class="" href="https://microcks.io/documentation/explanations/dispatching/#script-dispatcher"><code>SCRIPT</code> dispatcher</a>, which the <code>PROXY_FALLBACK</code> dispatcher wraps. This is the approach I took to implement the behavior that the QA engineer requested.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token key atrule">x-microcks-operation</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">dispatcher</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> PROXY_FALLBACK</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">dispatcherRules</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">|</span><span class="token scalar string" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token scalar string" style="color:rgb(255, 121, 198)">    {</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token scalar string" style="color:rgb(255, 121, 198)">      "dispatcher": "SCRIPT",</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token scalar string" style="color:rgb(255, 121, 198)">      "dispatcherRules": "if (new Random().nextInt(3) == 0) { return 'mock'; }",</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token scalar string" style="color:rgb(255, 121, 198)">      "proxyUrl": "http://external.net/myService/v1/"</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token scalar string" style="color:rgb(255, 121, 198)">    }</span><br></div></code></pre></div></div>
<p>I really hope this new feature will be helpful. Based on my own experience, I would say that the contribution process is easy and comfortable. The journey from an idea to the finished feature has been a pleasant experience for me. So If you have any ideas on making Microcks more powerful, please feel free to share your thoughts with the community!</p>]]></content:encoded>
        </item>
    </channel>
</rss>