<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Atharva Kusumbia</title>
    <description>The latest articles on DEV Community by Atharva Kusumbia (@athrvk).</description>
    <link>https://dev.to/athrvk</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3974789%2F64c8ef46-54c6-47cc-90d1-882d8d619244.jpg</url>
      <title>DEV Community: Atharva Kusumbia</title>
      <link>https://dev.to/athrvk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/athrvk"/>
    <language>en</language>
    <item>
      <title>I was tired of running two tools to test one API - so I built one.</title>
      <dc:creator>Atharva Kusumbia</dc:creator>
      <pubDate>Wed, 10 Jun 2026 02:30:00 +0000</pubDate>
      <link>https://dev.to/athrvk/i-was-tired-of-running-two-tools-to-test-one-api-so-i-built-one-4mjd</link>
      <guid>https://dev.to/athrvk/i-was-tired-of-running-two-tools-to-test-one-api-so-i-built-one-4mjd</guid>
      <description>&lt;p&gt;Every time I changed an API endpoint, the ritual was the same.&lt;/p&gt;

&lt;p&gt;Build the request in Postman. Confirm it works. Then re-describe the&lt;br&gt;
&lt;em&gt;exact same endpoint&lt;/em&gt; in a k6 script to see if it held under load. Two tools. Two configs. Two places to forget to update.&lt;/p&gt;

&lt;p&gt;The load test always drifted out of sync with what I'd actually built - which is a great way to ship a regression you "tested." And lately there's a second tax: my client wants an account, and my endpoints sync to &lt;em&gt;someone else's&lt;/em&gt; cloud.&lt;/p&gt;
&lt;h2&gt;
  
  
  These were never two problems
&lt;/h2&gt;

&lt;p&gt;Building a request and breaking it are the same workflow. The only reason they live in two tools is that no GUI client could push real load - Electron and Node.js hit a wall long before the network does.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;&lt;a href="https://github.com/athrvk/vayu" rel="noopener noreferrer"&gt;Vayu&lt;/a&gt;&lt;/strong&gt;: a REST/GraphQL client and a native load tester in one desktop app. The request builder feels like Postman. Underneath it is a C++20 engine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F92qq6hjhtbm156eyuvg1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F92qq6hjhtbm156eyuvg1.png" alt="Live load-test dashboard" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  "Native speed" - show me
&lt;/h2&gt;

&lt;p&gt;Fair. Same mock server, same MacBook Pro M3 Pro, matched concurrency,&lt;br&gt;
measured from the CLI:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Client&lt;/th&gt;
&lt;th&gt;req/s @ 128 conns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;wrk&lt;/td&gt;
&lt;td&gt;56,802&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;vegeta&lt;/td&gt;
&lt;td&gt;53,811&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vayu&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;52,825&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;~93% of &lt;code&gt;wrk&lt;/code&gt; and on par with &lt;code&gt;vegeta&lt;/code&gt; - from inside the GUI you build requests in, with the dashboard streaming metrics the whole time. The &lt;a href="https://github.com/athrvk/vayu/blob/main/docs/engine/benchmarks.md" rel="noopener noreferrer"&gt;full methodology and a one-command reproduction script are here&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  The part I care about most
&lt;/h2&gt;

&lt;p&gt;No account. No cloud. No telemetry. Every byte stays on your machine - so it works behind corporate firewalls and on air-gapped networks where SaaS clients simply can't.&lt;/p&gt;
&lt;h2&gt;
  
  
  How it works (briefly)
&lt;/h2&gt;

&lt;p&gt;A native C++ engine runs as a local sidecar; the Electron UI talks to it over local HTTP. The UI never blocks on the request load, so it stays responsive even at tens of thousands of req/s.&lt;/p&gt;
&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Free, open source, runs on macOS, Windows, and Linux (one-command install on Mac). If the two-tool tax has ever bitten you, I'd love your honest feedback - ⭐ the repo, open an issue, tell me where it breaks.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/athrvk" rel="noopener noreferrer"&gt;
        athrvk
      &lt;/a&gt; / &lt;a href="https://github.com/athrvk/vayu" rel="noopener noreferrer"&gt;
        vayu
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Open-source API client with a native C++ load-testing engine. Postman-style requests + k6-level load tests in one local app
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Vayu — REST/GraphQL Client and Native Load Tester, in One Desktop App&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Build a request like you do in Postman. Load test the same endpoint at tens of thousands of requests per second — driven by a native C++ engine. Fully local. No account, no cloud, no quotas.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Vayu is a free, open source desktop app for Windows, macOS, and Linux that merges two tools API teams normally split: a full REST + GraphQL request builder with collections, environments, and scripting, and a high-throughput load tester powered by a C++20 engine. The request UI will feel familiar coming from Postman or Insomnia — but underneath, a native event loop pushes load-test throughput that Electron + Node.js clients cannot reach, with every byte staying on your machine.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/athrvk/vayu/releases/latest" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b63f3adb87c006cd5949fd33c42760d4e65481c841bac1cd53afd450a418fe42/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f61746872766b2f76617975" alt="Latest Release"&gt;&lt;/a&gt;
&lt;a href="https://github.com/athrvk/vayu/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7aafcc56940b446d869505889ffb0a6447a1868c2e912673dbccef5f565578c7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4147504c2d2d332e302532302532362532304170616368652d2d322e302d626c75652e737667" alt="License"&gt;&lt;/a&gt;
&lt;a href="https://github.com/athrvk/vayu/releases" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1e93b866da33d7e3e202cb3127e9e94e902aa550dee535c19ff793c82f7f7706/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f706c6174666f726d2d57696e646f77732532302537432532306d61634f532532302537432532304c696e75782d6c69676874677265792e737667" alt="Platform"&gt;&lt;/a&gt;
&lt;a href="https://github.com/athrvk/vayu" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/12b856c0fea28510a58b2b2856ad882cdb9e60203232c3cc75778b449d7d5a84/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f61746872766b2f766179753f7374796c653d736f6369616c266c6162656c3d53746172" alt="GitHub stars"&gt;&lt;/a&gt;
&lt;a href="https://github.com/athrvk/vayu/issues" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c7113c1fdb9a8e185a38a08deea22efd0da8e94fc6f391883096e20b9efa4852/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6973737565732f61746872766b2f766179753f7374796c653d736f6369616c266c6162656c3d497373756573" alt="GitHub issues"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/55cc94b98a508b8e3f832c3da737f265ec544e2d7cc360cbeaf718054c751915/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f432b2b2d32302d626c75653f6c6f676f3d63706c7573706c7573"&gt;&lt;img src="https://camo.githubusercontent.com/55cc94b98a508b8e3f832c3da737f265ec544e2d7cc360cbeaf718054c751915/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f432b2b2d32302d626c75653f6c6f676f3d63706c7573706c7573" alt="C++"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/97fc638db3dd58f0590d3cc254cd7a8a65369aad17049aba215575dd3ec55dcb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547970655363726970742d352d626c75653f6c6f676f3d74797065736372697074"&gt;&lt;img src="https://camo.githubusercontent.com/97fc638db3dd58f0590d3cc254cd7a8a65369aad17049aba215575dd3ec55dcb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547970655363726970742d352d626c75653f6c6f676f3d74797065736372697074" alt="TypeScript"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/e60320c5d99fc86fbe369cd429977c14ff9bfe8990faa535ffe5587ceb2c8ee3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656163742d31392d3631444146423f6c6f676f3d7265616374"&gt;&lt;img src="https://camo.githubusercontent.com/e60320c5d99fc86fbe369cd429977c14ff9bfe8990faa535ffe5587ceb2c8ee3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656163742d31392d3631444146423f6c6f676f3d7265616374" alt="React"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/21e11da464f9133bec398b581f955d5e0600b54204535c0f11c639ab63e20438/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f456c656374726f6e2d34322d3437383438463f6c6f676f3d656c656374726f6e"&gt;&lt;img src="https://camo.githubusercontent.com/21e11da464f9133bec398b581f955d5e0600b54204535c0f11c639ab63e20438/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f456c656374726f6e2d34322d3437383438463f6c6f676f3d656c656374726f6e" alt="Electron"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;See it in action&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/athrvk/vayu/docs/images/vayu-loadtest.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fathrvk%2Fvayu%2FHEAD%2Fdocs%2Fimages%2Fvayu-loadtest.png" alt="Load test dashboard"&gt;&lt;/a&gt;
&lt;em&gt;The load-test dashboard. Throughput, latency percentiles, and error counters stream live from the C++ engine while the UI stays responsive.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/athrvk/vayu" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>opensource</category>
      <category>performance</category>
      <category>webdev</category>
      <category>cpp</category>
    </item>
  </channel>
</rss>
