<?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: Gaspard Kirira</title>
    <description>The latest articles on DEV Community by Gaspard Kirira (@gkirira).</description>
    <link>https://dev.to/gkirira</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3967462%2F3bccaddb-7af7-49d9-a4dc-22a7fd294519.jpeg</url>
      <title>DEV Community: Gaspard Kirira</title>
      <link>https://dev.to/gkirira</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gkirira"/>
    <language>en</language>
    <item>
      <title>C++ Needs Better Tooling Around the Project, Not Only Around Compilation</title>
      <dc:creator>Gaspard Kirira</dc:creator>
      <pubDate>Thu, 09 Jul 2026 21:09:49 +0000</pubDate>
      <link>https://dev.to/gkirira/c-needs-better-tooling-around-the-project-not-only-around-compilation-2n9n</link>
      <guid>https://dev.to/gkirira/c-needs-better-tooling-around-the-project-not-only-around-compilation-2n9n</guid>
      <description>&lt;p&gt;In many C++ projects, the code is not always the hardest part.&lt;/p&gt;

&lt;p&gt;The real difficulty often appears around the project itself. A team needs to know where private packages are published, which version was used, which lockfile belongs to which machine, who changed something, why a build failed, and who has access to the workspace.&lt;/p&gt;

&lt;p&gt;These details matter because they affect how a project is built, shared, reviewed, and maintained. But in many teams, they are not kept in one clear place. They end up scattered across local machines, CI logs, terminal history, GitHub issues, private folders, and team messages.&lt;/p&gt;

&lt;p&gt;At the beginning, this can feel manageable. A small team can remember what changed, which dependency was updated, or why a build failed last week. But as the project grows, memory is no longer enough. The workspace becomes harder to understand, builds become harder to reproduce, and important context becomes easy to lose.&lt;/p&gt;

&lt;p&gt;That is the problem Softadastra Cloud is being built to address.&lt;/p&gt;

&lt;p&gt;Softadastra Cloud is a C++ cloud workspace for Vix projects, private packages, and build activity. It is designed to give C++ teams a clear place to manage the context that lives around the code.&lt;/p&gt;

&lt;p&gt;This includes private package publishing, package versions, lockfiles, build reports, workspace members, access permissions, notifications, and project activity.&lt;/p&gt;

&lt;p&gt;The goal is not to replace the developer’s machine. C++ developers should still be able to work locally, control their environment, and build their projects in the way that makes sense for them.&lt;/p&gt;

&lt;p&gt;With Vix, the developer keeps control locally. With Softadastra Cloud, the team gets a shared layer for visibility, history, and coordination.&lt;/p&gt;

&lt;p&gt;A workspace should make it easier to answer simple but important questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What changed?&lt;/li&gt;
&lt;li&gt;Which package version is being used?&lt;/li&gt;
&lt;li&gt;Which build failed?&lt;/li&gt;
&lt;li&gt;Who has access?&lt;/li&gt;
&lt;li&gt;What happened while I was away?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Softadastra Cloud is meant to answer these questions without turning the workflow into something heavy or noisy. It should feel simple, serious, and useful for real C++ work.&lt;/p&gt;

&lt;p&gt;Not just another dashboard full of buttons. Not just a backend panel. A workspace where a C++ developer can quickly understand the state of a project and know what needs attention.&lt;/p&gt;

&lt;p&gt;Softadastra Cloud is still in active development, but the direction is becoming clear.&lt;/p&gt;

&lt;p&gt;C++ needs better tooling around the workflow, not only around compilation.&lt;/p&gt;

&lt;p&gt;Softadastra Cloud is one step in that direction.&lt;/p&gt;

</description>
      <category>softadastra</category>
      <category>vixcpp</category>
      <category>cpp</category>
    </item>
    <item>
      <title>Building my official developer profile around Softadastra and Vix.cpp</title>
      <dc:creator>Gaspard Kirira</dc:creator>
      <pubDate>Sun, 05 Jul 2026 23:11:50 +0000</pubDate>
      <link>https://dev.to/gkirira/building-my-official-developer-profile-around-softadastra-and-vixcpp-1ig5</link>
      <guid>https://dev.to/gkirira/building-my-official-developer-profile-around-softadastra-and-vixcpp-1ig5</guid>
      <description>&lt;p&gt;I created a new official profile page for my work:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gaspardkirira.softadastra.com" rel="noopener noreferrer"&gt;https://gaspardkirira.softadastra.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The goal of this page is simple. I wanted one clear place that connects my identity as the founder of Softadastra with the projects I am building, especially Vix.cpp.&lt;/p&gt;

&lt;p&gt;Vix.cpp is a modern C++ runtime for building fast and reliable applications. The project started from a problem I kept seeing in C++ development: as projects grow, the difficulty is not only the language itself. The real pressure often comes from project structure, dependencies, builds, modules, diagnostics and the work needed to keep a project reliable across machines and teams.&lt;/p&gt;

&lt;p&gt;Softadastra is the company I am building around that direction. Its focus is C++ tooling. The goal is to create practical tools that make serious C++ development easier to organize, maintain and deliver.&lt;/p&gt;

&lt;p&gt;This profile page is not meant to be a portfolio full of every small detail. It is meant to be a canonical public page for my work. It explains who I am, what Softadastra is, what Vix.cpp is, and how the current projects fit together.&lt;/p&gt;

&lt;p&gt;The site is intentionally simple. It is built with static HTML, CSS and JavaScript. No framework was needed for the first version because the main goal is readability, speed and clarity. Search engines should be able to understand the page easily, and developers should be able to read it without noise.&lt;/p&gt;

&lt;p&gt;The current direction around Softadastra is also becoming clearer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vix.cpp is the local workflow for C++ applications.&lt;/li&gt;
&lt;li&gt;Rix is the unified userland library layer for Vix.cpp.&lt;/li&gt;
&lt;li&gt;Softadastra Cloud is the project operations platform for C++ teams using Vix.&lt;/li&gt;
&lt;li&gt;Ivi.php is a fast, simple PHP framework for APIs and SPAs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For Softadastra Cloud, the idea is especially important:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Vix works locally. Softadastra Cloud organizes the team layer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That means workspaces, private packages, lockfile history, build reports, diagnostics, CI profiles and permissions. The goal is to reduce the operational stress of modern C++ projects, especially when the project becomes bigger than one developer or one machine.&lt;/p&gt;

&lt;p&gt;This is still a long journey, but creating this official page is one small step toward making the work easier to understand from the outside.&lt;/p&gt;

&lt;p&gt;I will continue improving Vix.cpp, writing more about C++ tooling, and building Softadastra around the problems that matter in real developer workflows.&lt;/p&gt;

&lt;p&gt;Official profile:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gaspardkirira.softadastra.com" rel="noopener noreferrer"&gt;https://gaspardkirira.softadastra.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vix.cpp:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/vixcpp/vix" rel="noopener noreferrer"&gt;https://github.com/vixcpp/vix&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gaspardkirira</category>
      <category>vixcpp</category>
      <category>softadastra</category>
      <category>cpp</category>
    </item>
    <item>
      <title>Vix.cpp vs Drogon vs Crow: a local benchmark of the v2.7.0 HTTP runtime</title>
      <dc:creator>Gaspard Kirira</dc:creator>
      <pubDate>Tue, 30 Jun 2026 06:41:12 +0000</pubDate>
      <link>https://dev.to/gkirira/vixcpp-vs-drogon-vs-crow-a-local-benchmark-of-the-v270-http-runtime-355p</link>
      <guid>https://dev.to/gkirira/vixcpp-vs-drogon-vs-crow-a-local-benchmark-of-the-v270-http-runtime-355p</guid>
      <description>&lt;h1&gt;
  
  
  Vix.cpp vs Drogon vs Crow: a local benchmark of the v2.7.0 HTTP runtime
&lt;/h1&gt;

&lt;p&gt;Vix.cpp v2.7.0 is moving forward, and one of the things I wanted to validate more seriously before pushing this release further was the HTTP runtime.&lt;/p&gt;

&lt;p&gt;Vix.cpp is not only a web framework. It is a C++ application platform and developer toolkit around real native C++ projects. The goal is to make C++ development more direct: create a project, run it, build it, test it, install SDK profiles, use modules, package applications, and prepare them for production without losing the native C++ model.&lt;/p&gt;

&lt;p&gt;But even if Vix.cpp is broader than a web framework, the HTTP runtime still has to be fast.&lt;/p&gt;

&lt;p&gt;So I decided to compare it with two known C++ web frameworks: &lt;strong&gt;Drogon&lt;/strong&gt; and &lt;strong&gt;Crow&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Drogon is one of the strongest references in high-performance C++ web development. Crow is also well known because it gives C++ developers a simple and lightweight way to write web services.&lt;/p&gt;

&lt;p&gt;That makes this comparison useful.&lt;/p&gt;

&lt;p&gt;Not because Vix.cpp is trying to become Drogon or Crow, but because developers need a clear idea of where Vix.cpp stands when the discussion is about C++ HTTP performance.&lt;/p&gt;

&lt;p&gt;Website: &lt;a href="https://vixcpp.com" rel="noopener noreferrer"&gt;https://vixcpp.com&lt;/a&gt;&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/image-url-here" 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/image-url-here" alt="Vix.cpp benchmark comparison with Drogon and Crow" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The benchmark context
&lt;/h2&gt;

&lt;p&gt;This benchmark was not run on a cloud server.&lt;/p&gt;

&lt;p&gt;It was not run on a dedicated bare-metal benchmark machine.&lt;/p&gt;

&lt;p&gt;It was run locally on my laptop, the same machine I use for development.&lt;/p&gt;

&lt;p&gt;The machine was an HP EliteBook running Linux on x86_64 with 8 CPU threads.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Platform        : linux
Architecture    : x86_64
Kernel version  : 6.17.0-35-generic
Hostname        : softadastra-HP-EliteBook-x360-1030-G3
CPU count       : 8
Page size       : 4096 bytes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That detail matters because the goal of this benchmark was not to claim a universal performance result.&lt;/p&gt;

&lt;p&gt;The goal was more practical.&lt;/p&gt;

&lt;p&gt;I wanted to see how Vix.cpp behaves on the same machine, with the same benchmark pressure, against two known C++ web frameworks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmark command
&lt;/h2&gt;

&lt;p&gt;Each framework was tested with a simple endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/bench
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The benchmark command was the same:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wrk &lt;span class="nt"&gt;-t8&lt;/span&gt; &lt;span class="nt"&gt;-c800&lt;/span&gt; &lt;span class="nt"&gt;-d30s&lt;/span&gt; &lt;span class="nt"&gt;--latency&lt;/span&gt; http://127.0.0.1:8080/bench
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;8 wrk threads
800 concurrent connections
30 seconds duration
latency distribution enabled
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The server runtime was also configured around 8 threads where applicable.&lt;/p&gt;

&lt;p&gt;This benchmark does not include database access, JSON serialization, authentication, templates, file serving, middleware chains, TLS, or application logic.&lt;/p&gt;

&lt;p&gt;It is a simple HTTP runtime benchmark.&lt;/p&gt;

&lt;p&gt;That makes it limited, but still useful.&lt;/p&gt;

&lt;p&gt;A runtime that wants to support real C++ applications should at least show that it can handle a simple high-concurrency HTTP endpoint correctly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Drogon result
&lt;/h2&gt;

&lt;p&gt;Drogon was the fastest in raw throughput in this run.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Running 30s test @ http://127.0.0.1:8080/bench
  8 threads and 800 connections

Thread Stats   Avg      Stdev     Max   +/- Stdev
  Latency     6.38ms    4.61ms  94.29ms   72.13%
  Req/Sec    14.51k     3.71k   37.65k    74.49%

Latency Distribution
  50%    5.49ms
  75%    8.64ms
  90%   12.03ms
  99%   21.16ms

3461890 requests in 30.06s, 498.53MB read
Requests/sec: 115151.01
Transfer/sec: 16.58MB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important number here is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Drogon: 115,151.01 requests/sec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a strong result, and it confirms why Drogon is usually treated as one of the serious references for C++ HTTP performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vix.cpp result
&lt;/h2&gt;

&lt;p&gt;Vix.cpp came very close to Drogon in raw throughput.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Running 30s test @ http://127.0.0.1:8080/bench
  8 threads and 800 connections

Latency:
  Avg:   7.31ms
  Stdev: 16.26ms
  Max:   606.15ms

Latency Distribution:
  50%:  6.51ms
  75%:  7.59ms
  90%:  8.73ms
  99%: 12.19ms

Requests:
  3,386,276 requests in 30.09s
  112,539.11 requests/sec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The throughput result was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Vix.cpp: 112,539.11 requests/sec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For me, the most interesting part is not only that Vix.cpp reached 112k requests per second.&lt;/p&gt;

&lt;p&gt;The more important signal is the p99 latency.&lt;/p&gt;

&lt;p&gt;At 800 concurrent connections, Vix.cpp stayed at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;p99: 12.19ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the best p99 latency result in this local run.&lt;/p&gt;

&lt;h2&gt;
  
  
  Crow result
&lt;/h2&gt;

&lt;p&gt;Crow also stayed fast, but it was behind both Drogon and Vix.cpp in this benchmark.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Running 30s test @ http://127.0.0.1:8080/bench
  8 threads and 800 connections

Thread Stats   Avg      Stdev     Max   +/- Stdev
  Latency     8.30ms    5.31ms  92.21ms   80.21%
  Req/Sec    11.76k     2.54k   30.21k    72.62%

Latency Distribution
  50%    7.21ms
  75%   10.40ms
  90%   14.72ms
  99%   26.76ms

2809917 requests in 30.10s, 324.25MB read
Requests/sec: 93339.82
Transfer/sec: 10.77MB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The throughput result was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Crow: 93,339.82 requests/sec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Crow remains simple and useful, especially for small C++ web services, but in this specific benchmark it was behind Drogon and Vix.cpp.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Requests/sec&lt;/th&gt;
&lt;th&gt;Avg latency&lt;/th&gt;
&lt;th&gt;P50&lt;/th&gt;
&lt;th&gt;P90&lt;/th&gt;
&lt;th&gt;P99&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Drogon&lt;/td&gt;
&lt;td&gt;115,151.01&lt;/td&gt;
&lt;td&gt;6.38 ms&lt;/td&gt;
&lt;td&gt;5.49 ms&lt;/td&gt;
&lt;td&gt;12.03 ms&lt;/td&gt;
&lt;td&gt;21.16 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vix.cpp&lt;/td&gt;
&lt;td&gt;112,539.11&lt;/td&gt;
&lt;td&gt;7.31 ms&lt;/td&gt;
&lt;td&gt;6.51 ms&lt;/td&gt;
&lt;td&gt;8.73 ms&lt;/td&gt;
&lt;td&gt;12.19 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Crow&lt;/td&gt;
&lt;td&gt;93,339.82&lt;/td&gt;
&lt;td&gt;8.30 ms&lt;/td&gt;
&lt;td&gt;7.21 ms&lt;/td&gt;
&lt;td&gt;14.72 ms&lt;/td&gt;
&lt;td&gt;26.76 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The comparison in one paragraph
&lt;/h2&gt;

&lt;p&gt;On this local benchmark, Drogon is slightly ahead in raw throughput with &lt;code&gt;115,151.01 requests/sec&lt;/code&gt;, Vix.cpp stays very close with &lt;code&gt;112,539.11 requests/sec&lt;/code&gt;, and Crow reaches &lt;code&gt;93,339.82 requests/sec&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The most interesting part for Vix.cpp is the latency distribution: Vix.cpp had the best p99 latency in this run with &lt;code&gt;12.19ms&lt;/code&gt;, compared to &lt;code&gt;21.16ms&lt;/code&gt; for Drogon and &lt;code&gt;26.76ms&lt;/code&gt; for Crow.&lt;/p&gt;

&lt;p&gt;That is the comparison I want people to remember.&lt;/p&gt;

&lt;p&gt;Drogon is still ahead in raw throughput.&lt;/p&gt;

&lt;p&gt;Vix.cpp is very close to Drogon.&lt;/p&gt;

&lt;p&gt;Vix.cpp is ahead of Crow in this run.&lt;/p&gt;

&lt;p&gt;And Vix.cpp has the best p99 latency in this benchmark.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the numbers mean
&lt;/h2&gt;

&lt;p&gt;The raw throughput result is close between Drogon and Vix.cpp.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Drogon : 115,151.01 req/s
Vix.cpp: 112,539.11 req/s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That difference is around &lt;code&gt;2.27%&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For a project like Vix.cpp, that matters because Vix.cpp is not only trying to expose HTTP routes. It also carries a bigger platform direction around the CLI, SDK profiles, modules, registry workflow, project commands, diagnostics, and production preparation.&lt;/p&gt;

&lt;p&gt;So being close to Drogon at the HTTP runtime level is a good sign.&lt;/p&gt;

&lt;p&gt;Compared to Crow, the difference is larger.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Vix.cpp: 112,539.11 req/s
Crow   :  93,339.82 req/s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is around &lt;code&gt;20.57%&lt;/code&gt; more requests per second for Vix.cpp in this local run.&lt;/p&gt;

&lt;p&gt;But again, the result I care about most is the p99 latency.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Vix.cpp: 12.19ms
Drogon : 21.16ms
Crow   : 26.76ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Throughput is easy to look at because it gives one big number.&lt;/p&gt;

&lt;p&gt;Latency is more interesting because it shows how the runtime behaves under pressure, especially near the tail.&lt;/p&gt;

&lt;p&gt;A runtime can look good on average and still feel unstable when the tail latency grows too much.&lt;/p&gt;

&lt;p&gt;In this run, Vix.cpp showed a strong p99 result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why compare Vix.cpp with Drogon and Crow?
&lt;/h2&gt;

&lt;p&gt;Because those are the names people already know.&lt;/p&gt;

&lt;p&gt;When someone talks about C++ web frameworks, Drogon and Crow usually come up quickly.&lt;/p&gt;

&lt;p&gt;That is normal.&lt;/p&gt;

&lt;p&gt;Drogon has a strong performance reputation.&lt;/p&gt;

&lt;p&gt;Crow has a simple and familiar style.&lt;/p&gt;

&lt;p&gt;So if Vix.cpp is going to be taken seriously as a modern C++ application platform, it needs to stand next to the tools developers already recognize.&lt;/p&gt;

&lt;p&gt;This comparison is not about attacking Drogon or Crow.&lt;/p&gt;

&lt;p&gt;Both are valuable C++ projects.&lt;/p&gt;

&lt;p&gt;The point is to show that Vix.cpp is not only about developer experience. It is also moving in a competitive runtime direction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vix.cpp is not just another C++ web framework
&lt;/h2&gt;

&lt;p&gt;This part is important.&lt;/p&gt;

&lt;p&gt;Drogon and Crow are mainly focused on the web framework question:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;How do I build a C++ web service?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vix.cpp is trying to answer a wider question:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;How do I build, run, test, package, extend, and maintain a real native C++ application?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That difference matters because most C++ friction does not come from the language alone.&lt;/p&gt;

&lt;p&gt;It also comes from everything around the language.&lt;/p&gt;

&lt;p&gt;Project setup.&lt;/p&gt;

&lt;p&gt;Build configuration.&lt;/p&gt;

&lt;p&gt;Dependency workflow.&lt;/p&gt;

&lt;p&gt;Running examples.&lt;/p&gt;

&lt;p&gt;Testing.&lt;/p&gt;

&lt;p&gt;Packaging.&lt;/p&gt;

&lt;p&gt;Installing runtime profiles.&lt;/p&gt;

&lt;p&gt;Checking the environment.&lt;/p&gt;

&lt;p&gt;Preparing a project for production.&lt;/p&gt;

&lt;p&gt;Keeping the workflow understandable as the application grows.&lt;/p&gt;

&lt;p&gt;Vix.cpp exists around that problem.&lt;/p&gt;

&lt;p&gt;The HTTP runtime is one piece of it, but it is an important piece because modern applications often need APIs, services, realtime features, internal dashboards, tools, and backend workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this benchmark does not prove
&lt;/h2&gt;

&lt;p&gt;This benchmark does not prove that Vix.cpp is always faster than Drogon.&lt;/p&gt;

&lt;p&gt;It does not prove that Vix.cpp is always faster than Crow.&lt;/p&gt;

&lt;p&gt;It does not prove that one framework is better for every workload.&lt;/p&gt;

&lt;p&gt;A real application can change the result completely depending on what it does.&lt;/p&gt;

&lt;p&gt;Database queries can dominate everything.&lt;/p&gt;

&lt;p&gt;JSON serialization can change the profile.&lt;/p&gt;

&lt;p&gt;TLS can change the cost.&lt;/p&gt;

&lt;p&gt;Middleware can add overhead.&lt;/p&gt;

&lt;p&gt;Logging can slow down hot paths.&lt;/p&gt;

&lt;p&gt;Memory allocation patterns can become more important than routing.&lt;/p&gt;

&lt;p&gt;Static files, request bodies, WebSocket traffic, cache layers, and business logic can all change the final behavior.&lt;/p&gt;

&lt;p&gt;So this benchmark should be read honestly.&lt;/p&gt;

&lt;p&gt;It is a simple local HTTP benchmark.&lt;/p&gt;

&lt;p&gt;Nothing more.&lt;/p&gt;

&lt;p&gt;But it is still a useful signal.&lt;/p&gt;

&lt;p&gt;It shows that the current Vix.cpp HTTP runtime is already competitive on a basic high-concurrency endpoint.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the p99 result matters to me
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;112k req/s&lt;/code&gt; number is nice.&lt;/p&gt;

&lt;p&gt;It looks good in a table.&lt;/p&gt;

&lt;p&gt;It is easy to share.&lt;/p&gt;

&lt;p&gt;But the p99 latency matters more to me because it gives a better signal about the runtime behavior under load.&lt;/p&gt;

&lt;p&gt;In this benchmark, Vix.cpp did not only process many requests.&lt;/p&gt;

&lt;p&gt;It kept the p99 latency lower than both Drogon and Crow.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Vix.cpp p99: 12.19ms
Drogon p99 : 21.16ms
Crow p99   : 26.76ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That does not mean Vix.cpp will always win p99 in every situation.&lt;/p&gt;

&lt;p&gt;But it does mean the v2.7.0 runtime direction is promising.&lt;/p&gt;

&lt;p&gt;And that is what I wanted to verify.&lt;/p&gt;

&lt;h2&gt;
  
  
  The current position of Vix.cpp
&lt;/h2&gt;

&lt;p&gt;After this benchmark, I would describe the current position like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Drogon is still slightly ahead in raw throughput.
Vix.cpp is very close to Drogon.
Vix.cpp is ahead of Crow in this local run.
Vix.cpp has the best p99 latency in this benchmark.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is a good place for Vix.cpp v2.7.0 to be.&lt;/p&gt;

&lt;p&gt;Especially because Vix.cpp is still growing as a full platform, not only as an HTTP router.&lt;/p&gt;

&lt;p&gt;The goal is not to win one chart and stop there.&lt;/p&gt;

&lt;p&gt;The goal is to keep building a C++ workflow that feels modern while staying native, fast, and understandable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What comes next
&lt;/h2&gt;

&lt;p&gt;This benchmark is only one step.&lt;/p&gt;

&lt;p&gt;The next useful tests should be more realistic.&lt;/p&gt;

&lt;p&gt;I want to test:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;different concurrency levels,&lt;/li&gt;
&lt;li&gt;longer benchmark durations,&lt;/li&gt;
&lt;li&gt;JSON responses,&lt;/li&gt;
&lt;li&gt;larger response bodies,&lt;/li&gt;
&lt;li&gt;route-heavy applications,&lt;/li&gt;
&lt;li&gt;WebSocket workloads,&lt;/li&gt;
&lt;li&gt;middleware-heavy endpoints,&lt;/li&gt;
&lt;li&gt;file serving,&lt;/li&gt;
&lt;li&gt;real application endpoints,&lt;/li&gt;
&lt;li&gt;different machines,&lt;/li&gt;
&lt;li&gt;and different compiler configurations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That will give a better picture than a single Hello World benchmark.&lt;/p&gt;

&lt;p&gt;But this first comparison is still important because it gives a clean baseline.&lt;/p&gt;

&lt;p&gt;Before testing complex applications, the runtime should behave well on the simplest endpoint.&lt;/p&gt;

&lt;p&gt;Here, Vix.cpp does.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final result
&lt;/h2&gt;

&lt;p&gt;The final result of this local benchmark is simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Drogon : 115,151.01 req/s
Vix.cpp: 112,539.11 req/s
Crow   :  93,339.82 req/s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the p99 latency result is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Vix.cpp: 12.19ms
Drogon : 21.16ms
Crow   : 26.76ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So the fair conclusion is this:&lt;/p&gt;

&lt;p&gt;Vix.cpp v2.7.0 is very close to Drogon in raw throughput, ahead of Crow in this run, and shows the best p99 latency on this local benchmark.&lt;/p&gt;

&lt;p&gt;That is a strong signal for the current direction of the HTTP runtime.&lt;/p&gt;

&lt;p&gt;Vix.cpp is still growing, but the foundation is becoming stronger.&lt;/p&gt;

&lt;p&gt;The goal remains the same: make C++ development feel more direct, more modern, and more reliable without hiding the power of the language.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;p&gt;Website: &lt;a href="https://vixcpp.com" rel="noopener noreferrer"&gt;https://vixcpp.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Documentation: &lt;a href="https://docs.vixcpp.com" rel="noopener noreferrer"&gt;https://docs.vixcpp.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Registry: &lt;a href="https://registry.vixcpp.com" rel="noopener noreferrer"&gt;https://registry.vixcpp.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Engineering notes: &lt;a href="https://blog.vixcpp.com" rel="noopener noreferrer"&gt;https://blog.vixcpp.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;
GitHub: &lt;a href="https://github.com/vixcpp/vix" rel="noopener noreferrer"&gt;https://github.com/vixcpp/vix&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vixcpp</category>
      <category>drogon</category>
      <category>crow</category>
      <category>cpp</category>
    </item>
    <item>
      <title>Vix.cpp v2.7.0 is out: a stronger foundation for native C++ applications</title>
      <dc:creator>Gaspard Kirira</dc:creator>
      <pubDate>Tue, 30 Jun 2026 06:02:19 +0000</pubDate>
      <link>https://dev.to/gkirira/vixcpp-v270-is-out-a-stronger-foundation-for-native-c-applications-o53</link>
      <guid>https://dev.to/gkirira/vixcpp-v270-is-out-a-stronger-foundation-for-native-c-applications-o53</guid>
      <description>&lt;h1&gt;
  
  
  Vix.cpp v2.7.0 is out: a stronger foundation for native C++ applications
&lt;/h1&gt;

&lt;p&gt;Vix.cpp v2.7.0 is out.&lt;/p&gt;

&lt;p&gt;This release is an important foundation point for the project. Vix.cpp has been growing for more than a year, with the same goal from the beginning: make modern C++ application development more direct without taking away the native C++ model.&lt;/p&gt;

&lt;p&gt;Vix.cpp is not a new language. It is not a replacement for CMake. It is not trying to hide the compiler or the native toolchain.&lt;/p&gt;

&lt;p&gt;It is a runtime and developer toolkit around real C++ applications: create a project, run it, build it, test it, check it, install SDK profiles, manage dependencies, package the result, and prepare it for production.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed in v2.7.0
&lt;/h2&gt;

&lt;p&gt;The v2.7.0 release brings together a lot of work across the CLI, SDK workflow, modules, diagnostics, release packaging, installer, and website direction.&lt;/p&gt;

&lt;p&gt;The important part is not only that Vix.cpp has more pieces now. The important part is that those pieces are starting to hold together as one platform.&lt;/p&gt;

&lt;p&gt;Vix.cpp now has a clearer split between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the CLI bootstrap,&lt;/li&gt;
&lt;li&gt;SDK profiles,&lt;/li&gt;
&lt;li&gt;runtime modules,&lt;/li&gt;
&lt;li&gt;registry workflow,&lt;/li&gt;
&lt;li&gt;project commands,&lt;/li&gt;
&lt;li&gt;diagnostics,&lt;/li&gt;
&lt;li&gt;examples,&lt;/li&gt;
&lt;li&gt;CI and tests,&lt;/li&gt;
&lt;li&gt;release verification,&lt;/li&gt;
&lt;li&gt;and real application validation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The installer now focuses on installing the CLI first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://vixcpp.com/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;irm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://vixcpp.com/install.ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then SDK profiles are installed through the CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vix upgrade &lt;span class="nt"&gt;--sdk&lt;/span&gt; list
vix upgrade &lt;span class="nt"&gt;--sdk&lt;/span&gt; info web
vix upgrade &lt;span class="nt"&gt;--sdk&lt;/span&gt; web
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This keeps the first installation smaller and makes the SDK layer explicit.&lt;/p&gt;

&lt;h2&gt;
  
  
  SDK profiles
&lt;/h2&gt;

&lt;p&gt;One of the important directions in v2.7.0 is the SDK profile workflow.&lt;/p&gt;

&lt;p&gt;Different C++ applications do not need the same runtime surface. A small CLI tool, a web backend, a data application, a P2P system, a game-oriented project, or an agent workflow have different requirements.&lt;/p&gt;

&lt;p&gt;So Vix.cpp separates the CLI from the SDK layer.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vix upgrade &lt;span class="nt"&gt;--sdk&lt;/span&gt; web info
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;shows the modules and system dependencies for the web profile.&lt;/p&gt;

&lt;p&gt;The web profile is meant for APIs, realtime applications, backend services, middleware, WebSocket, validation, crypto, WebRPC, and requests.&lt;/p&gt;

&lt;p&gt;The data profile is focused on database, ORM, key-value storage, and cache workflows.&lt;/p&gt;

&lt;p&gt;This makes Vix.cpp easier to install, easier to validate, and easier to reason about as the platform grows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vix CLI
&lt;/h2&gt;

&lt;p&gt;The CLI remains the main entry point into the Vix.cpp workflow.&lt;/p&gt;

&lt;p&gt;A C++ project can be created and started through one command surface:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vix new app
&lt;span class="nb"&gt;cd &lt;/span&gt;app
vix dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A single C++ file can still be run directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vix run main.cpp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the project workflow stays consistent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vix build
vix run
vix tests
vix check
vix &lt;span class="nb"&gt;fmt
&lt;/span&gt;vix pack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The goal is not to turn C++ into a scripting language. The goal is to remove repeated workflow friction around C++ applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vix Note
&lt;/h2&gt;

&lt;p&gt;Vix Note is also part of the developer experience.&lt;/p&gt;

&lt;p&gt;It gives C++ developers a visual space for executable notes, examples, experiments, and diagnostics while keeping the normal Vix workflow underneath.&lt;/p&gt;

&lt;p&gt;Start it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vix note
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is useful for documenting ideas, testing examples, and working with project notes in a way that stays close to the actual C++ workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance signal
&lt;/h2&gt;

&lt;p&gt;For v2.7.0, I also ran a local HTTP benchmark on my laptop.&lt;/p&gt;

&lt;p&gt;This was not a cloud server or a dedicated benchmark machine. It was an HP EliteBook running Linux on x86_64 with 8 CPU threads.&lt;/p&gt;

&lt;p&gt;The benchmark command was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wrk &lt;span class="nt"&gt;-t8&lt;/span&gt; &lt;span class="nt"&gt;-c800&lt;/span&gt; &lt;span class="nt"&gt;-d30s&lt;/span&gt; &lt;span class="nt"&gt;--latency&lt;/span&gt; http://127.0.0.1:8080/bench
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;3,386,276 requests in 30.09s
112,539.11 requests/sec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The latency distribution was also encouraging:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Avg: 7.31ms
p50: 6.51ms
p75: 7.59ms
p90: 8.73ms
p99: 12.19ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result I care about most here is not only the &lt;code&gt;112k req/s&lt;/code&gt;. At 800 concurrent connections, keeping p99 around &lt;code&gt;12.19ms&lt;/code&gt; is a good signal for the current HTTP runtime direction.&lt;/p&gt;

&lt;p&gt;This is still an early local benchmark. More testing is needed across different endpoints, concurrency levels, machines, and realistic workloads. But for the v2.7.0 direction, it is a good sign.&lt;/p&gt;

&lt;h2&gt;
  
  
  Registry direction
&lt;/h2&gt;

&lt;p&gt;Vix.cpp also has a registry workflow.&lt;/p&gt;

&lt;p&gt;The registry is intentionally simple at this stage. It is based on a transparent package index instead of requiring an expensive backend cloud service before the ecosystem needs one.&lt;/p&gt;

&lt;p&gt;That matters because Vix.cpp is maintained by Softadastra, and the project has to grow with discipline.&lt;/p&gt;

&lt;p&gt;The goal is to make package discovery, installation, updates, local store management, and publishing part of the normal Vix workflow without making the infrastructure heavier than necessary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pico and real validation
&lt;/h2&gt;

&lt;p&gt;Vix.cpp is not being validated only through isolated examples.&lt;/p&gt;

&lt;p&gt;Pico is a real application built with Vix.cpp. It exists to keep the runtime honest by bringing the pieces together inside a working application: routing, middleware, persistence, diagnostics, runtime behavior, and the workflow around them.&lt;/p&gt;

&lt;p&gt;This is important because a platform can look good in examples and still fail when real application concerns meet each other.&lt;/p&gt;

&lt;p&gt;Pico helps test whether Vix.cpp holds together as real software.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens after v2.7.0
&lt;/h2&gt;

&lt;p&gt;After v2.7.0, the direction is clear.&lt;/p&gt;

&lt;p&gt;The focus is no longer to keep adding more modules and more surface area.&lt;/p&gt;

&lt;p&gt;The next phase is about depth:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;improve existing modules,&lt;/li&gt;
&lt;li&gt;strengthen the registry workflow,&lt;/li&gt;
&lt;li&gt;improve SDK installation,&lt;/li&gt;
&lt;li&gt;expand tests,&lt;/li&gt;
&lt;li&gt;improve CI coverage,&lt;/li&gt;
&lt;li&gt;refine diagnostics,&lt;/li&gt;
&lt;li&gt;improve documentation,&lt;/li&gt;
&lt;li&gt;make releases cleaner,&lt;/li&gt;
&lt;li&gt;and keep validating Vix.cpp through real applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This does not mean Vix.cpp is waiting to become stable later. Vix.cpp is already usable.&lt;/p&gt;

&lt;p&gt;The next phase is about maturity.&lt;/p&gt;

&lt;p&gt;New features can still happen, but they should earn their place. A feature belongs in Vix.cpp when it improves the existing workflow, strengthens an existing module, or solves a practical problem for real C++ applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Vix.cpp
&lt;/h2&gt;

&lt;p&gt;Linux and macOS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://vixcpp.com/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Windows PowerShell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;irm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://vixcpp.com/install.ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vix upgrade &lt;span class="nt"&gt;--sdk&lt;/span&gt; list
vix upgrade &lt;span class="nt"&gt;--sdk&lt;/span&gt; info web
vix upgrade &lt;span class="nt"&gt;--sdk&lt;/span&gt; web
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;p&gt;Website: &lt;a href="https://vixcpp.com" rel="noopener noreferrer"&gt;https://vixcpp.com&lt;/a&gt;&lt;br&gt;
Documentation: &lt;a href="https://docs.vixcpp.com" rel="noopener noreferrer"&gt;https://docs.vixcpp.com&lt;/a&gt;&lt;br&gt;
Registry: &lt;a href="https://registry.vixcpp.com" rel="noopener noreferrer"&gt;https://registry.vixcpp.com&lt;/a&gt;&lt;br&gt;
Engineering notes: &lt;a href="https://blog.vixcpp.com" rel="noopener noreferrer"&gt;https://blog.vixcpp.com&lt;/a&gt;&lt;br&gt;
GitHub: &lt;a href="https://github.com/vixcpp/vix" rel="noopener noreferrer"&gt;https://github.com/vixcpp/vix&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vix.cpp v2.7.0 is a foundation release.&lt;/p&gt;

&lt;p&gt;The goal remains simple: make C++ development feel more direct, more modern, and more reliable without hiding the power of the language.&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>news</category>
      <category>softwaredevelopment</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Vix.cpp v2.7.0 benchmark: 112k req/s locally on an HP EliteBook</title>
      <dc:creator>Gaspard Kirira</dc:creator>
      <pubDate>Thu, 25 Jun 2026 10:02:33 +0000</pubDate>
      <link>https://dev.to/gkirira/vixcpp-v270-benchmark-112k-reqs-locally-on-an-hp-elitebook-3np1</link>
      <guid>https://dev.to/gkirira/vixcpp-v270-benchmark-112k-reqs-locally-on-an-hp-elitebook-3np1</guid>
      <description>&lt;h1&gt;
  
  
  Vix.cpp v2.7.0 benchmark: 112k req/s locally on an HP EliteBook
&lt;/h1&gt;

&lt;p&gt;I have been working on the &lt;code&gt;v2.7.0&lt;/code&gt; release of &lt;strong&gt;Vix.cpp&lt;/strong&gt;, and I wanted to share a small benchmark from the current release build.&lt;/p&gt;

&lt;p&gt;This benchmark was not done on a cloud server or a dedicated benchmark machine. It was run locally on my laptop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Machine
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Platform        : linux
Architecture    : x86_64
Kernel version  : 6.17.0-35-generic
Hostname        : softadastra-HP-EliteBook-x360-1030-G3
CPU count       : 8
Page size       : 4096 bytes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Build mode
&lt;/h2&gt;

&lt;p&gt;The project was built in release mode with benchmark mode enabled:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vix build &lt;span class="nt"&gt;--preset&lt;/span&gt; release &lt;span class="nt"&gt;--build-target&lt;/span&gt; all &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nt"&gt;--clean&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nt"&gt;-DVIX_BENCH_MODE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ON
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The server was running with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Vix.cpp v2.6.0
Threads: 8/8
Mode: run
Status: ready
HTTP: http://localhost:8080/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The benchmark endpoint was simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://127.0.0.1:8080/bench
&lt;span class="c"&gt;# OK&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Benchmark command
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wrk &lt;span class="nt"&gt;-t8&lt;/span&gt; &lt;span class="nt"&gt;-c800&lt;/span&gt; &lt;span class="nt"&gt;-d30s&lt;/span&gt; &lt;span class="nt"&gt;--latency&lt;/span&gt; http://127.0.0.1:8080/bench
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Running 30s test @ http://127.0.0.1:8080/bench
  8 threads and 800 connections

Latency:
  Avg:   7.31ms
  Stdev: 16.26ms
  Max:   606.15ms

Latency Distribution:
  50%:  6.51ms
  75%:  7.59ms
  90%:  8.73ms
  99%: 12.19ms

Requests:
  3,386,276 requests in 30.09s
  112,539.11 requests/sec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Notes
&lt;/h2&gt;

&lt;p&gt;The result I care about most here is not only the &lt;code&gt;112k req/s&lt;/code&gt;, but also the latency distribution.&lt;/p&gt;

&lt;p&gt;At 800 concurrent connections, the p99 latency stayed around &lt;code&gt;12.19ms&lt;/code&gt;, which is a good signal for the current direction of the HTTP runtime.&lt;/p&gt;

&lt;p&gt;This is still an early benchmark, and I will continue testing with different concurrency levels, different endpoints, and more realistic workloads.&lt;/p&gt;

&lt;p&gt;For now, this is a good sign for the &lt;code&gt;v2.7.0&lt;/code&gt; release direction.&lt;/p&gt;

&lt;p&gt;The goal with Vix.cpp is simple: make C++ development feel simpler, faster, and more modern without hiding the power of the language.&lt;/p&gt;

</description>
      <category>vixcpp</category>
      <category>vix</category>
      <category>softadastra</category>
      <category>cpp</category>
    </item>
    <item>
      <title>Softadastra is Becoming The C++ Tooling Company</title>
      <dc:creator>Gaspard Kirira</dc:creator>
      <pubDate>Sun, 21 Jun 2026 09:43:31 +0000</pubDate>
      <link>https://dev.to/gkirira/softadastra-is-becoming-the-c-tooling-company-1emn</link>
      <guid>https://dev.to/gkirira/softadastra-is-becoming-the-c-tooling-company-1emn</guid>
      <description>&lt;h1&gt;
  
  
  Softadastra is Becoming The C++ Tooling Company
&lt;/h1&gt;

&lt;p&gt;Softadastra is changing direction.&lt;/p&gt;

&lt;p&gt;For a long time, the company explored different ideas around software, infrastructure, platforms, and developer products. Each idea had value, but over time one problem became more important than the rest.&lt;/p&gt;

&lt;p&gt;Developer tools are still too dependent on perfect conditions.&lt;/p&gt;

&lt;p&gt;Many modern tools are designed with an invisible assumption: the internet is fast, stable, and always available. That assumption works well in some parts of the world, but it does not represent the reality of many developers.&lt;/p&gt;

&lt;p&gt;In many environments, especially across parts of Africa, the internet can become slow without warning. A connection can drop so low that downloading a dependency, reading documentation, installing a package, or using a cloud service becomes difficult.&lt;/p&gt;

&lt;p&gt;When that happens, the problem is no longer just the code.&lt;/p&gt;

&lt;p&gt;The environment around the code becomes part of the problem.&lt;/p&gt;

&lt;p&gt;That reality has shaped the new direction of Softadastra.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;Modern software development often depends on many external layers.&lt;/p&gt;

&lt;p&gt;A developer creates a project, installs dependencies, configures a build system, connects tools, searches through documentation, runs tests, reads compiler errors, prepares a package, and eventually ships the software.&lt;/p&gt;

&lt;p&gt;When everything works, this process feels normal.&lt;/p&gt;

&lt;p&gt;But when the network is unstable, the machine is limited, or the tooling is too fragmented, even simple work can become unnecessarily hard.&lt;/p&gt;

&lt;p&gt;Softadastra believes developer tooling should be built with more respect for those conditions.&lt;/p&gt;

&lt;p&gt;Tools should not assume that every developer is working with perfect infrastructure. They should help developers keep control of their workflow, understand what is happening, and move faster without fighting the environment.&lt;/p&gt;

&lt;p&gt;That is one reason C++ became the center of this direction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why C++
&lt;/h2&gt;

&lt;p&gt;C++ is powerful, mature, and still deeply important in systems, performance-critical software, embedded environments, infrastructure, desktop applications, game engines, and developer tools.&lt;/p&gt;

&lt;p&gt;But the experience around C++ can still feel difficult.&lt;/p&gt;

&lt;p&gt;Starting a project is not always simple. Build systems can be confusing. Error messages can be hard to understand. Packaging can feel disconnected. Many parts of the workflow require experience before the developer can even become productive.&lt;/p&gt;

&lt;p&gt;Softadastra does not want to make C++ less powerful.&lt;/p&gt;

&lt;p&gt;Softadastra wants to make the experience around C++ better.&lt;/p&gt;

&lt;p&gt;That means helping developers create projects faster, build with more clarity, understand errors sooner, test with less friction, package software more cleanly, and work with tools that feel connected instead of scattered.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vix.cpp as the foundation
&lt;/h2&gt;

&lt;p&gt;Vix.cpp is becoming the foundation of this direction.&lt;/p&gt;

&lt;p&gt;The goal of Vix.cpp is to provide a modern tooling ecosystem around C++ development. It is not only about one command-line tool or one framework. It is about building a coherent developer experience around C++.&lt;/p&gt;

&lt;p&gt;Softadastra wants Vix.cpp to help developers move from idea to working software with fewer obstacles.&lt;/p&gt;

&lt;p&gt;A developer should be able to create a project, build it, test it, inspect errors, manage modules, package the result, and understand the structure of the project without feeling lost in disconnected tools.&lt;/p&gt;

&lt;p&gt;This is the kind of experience Softadastra wants to build.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built from a different reality
&lt;/h2&gt;

&lt;p&gt;Softadastra is not choosing this direction because C++ tooling sounds trendy.&lt;/p&gt;

&lt;p&gt;The direction comes from a real environment.&lt;/p&gt;

&lt;p&gt;When developers build from places where infrastructure is not always reliable, they learn to value control. They learn to value tools that are native, direct, understandable, and less dependent on perfect network conditions.&lt;/p&gt;

&lt;p&gt;That perspective matters.&lt;/p&gt;

&lt;p&gt;The world does not need more developer tools that only work well in ideal environments. It also needs tools designed by people who understand what it means to build when the conditions are not perfect.&lt;/p&gt;

&lt;p&gt;Softadastra wants to bring that perspective into C++ tooling.&lt;/p&gt;

&lt;h2&gt;
  
  
  The mission
&lt;/h2&gt;

&lt;p&gt;Softadastra now has a clear mission:&lt;/p&gt;

&lt;p&gt;To simplify C++ development.&lt;/p&gt;

&lt;p&gt;That mission will guide the company’s work going forward.&lt;/p&gt;

&lt;p&gt;Softadastra will focus on tools, workflows, documentation, diagnostics, packaging, and developer experience around C++.&lt;/p&gt;

&lt;p&gt;The company is no longer trying to become many things at once.&lt;/p&gt;

&lt;p&gt;Softadastra is becoming The C++ Tooling Company.&lt;/p&gt;

&lt;p&gt;And Vix.cpp is the foundation of that future.&lt;/p&gt;

</description>
      <category>softadastra</category>
    </item>
    <item>
      <title>Vix.cpp v2.6.3: Stability, Benchmarks, and a Stronger C++ Runtime</title>
      <dc:creator>Gaspard Kirira</dc:creator>
      <pubDate>Fri, 19 Jun 2026 11:22:19 +0000</pubDate>
      <link>https://dev.to/gkirira/vixcpp-v263-stability-benchmarks-and-a-stronger-c-runtime-45p1</link>
      <guid>https://dev.to/gkirira/vixcpp-v263-stability-benchmarks-and-a-stronger-c-runtime-45p1</guid>
      <description>&lt;h1&gt;
  
  
  Vix.cpp v2.6.3: Stability, Benchmarks, and a Stronger C++ Runtime
&lt;/h1&gt;

&lt;p&gt;Vix.cpp v2.6.3 is now available.&lt;/p&gt;

&lt;p&gt;This release is not about adding a huge new feature.&lt;/p&gt;

&lt;p&gt;It is about making the foundation stronger.&lt;/p&gt;

&lt;p&gt;Vix.cpp is a modern C++ runtime and developer toolkit for building real applications with native C++. It provides a workflow around C++ projects: running files, creating projects, building, testing, packaging, working with modules, and preparing applications for production.&lt;/p&gt;

&lt;p&gt;With v2.6.3, the focus is stability.&lt;/p&gt;

&lt;p&gt;This release improves the Core runtime, shutdown behavior, HTTP sessions, benchmark infrastructure, CI coverage, sanitizer support, module tests, JSON behavior, and several CLI workflows.&lt;/p&gt;

&lt;p&gt;The goal is simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stabilize the runtime
measure performance
strengthen CI
make failures easier to trust
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why this release matters
&lt;/h2&gt;

&lt;p&gt;A C++ runtime is not only about API design.&lt;/p&gt;

&lt;p&gt;It also has to answer difficult engineering questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the server shut down correctly?&lt;/li&gt;
&lt;li&gt;Are async operations cancelled safely?&lt;/li&gt;
&lt;li&gt;Do pending tasks finish or get lost?&lt;/li&gt;
&lt;li&gt;Can test failures be trusted?&lt;/li&gt;
&lt;li&gt;Can benchmarks be repeated?&lt;/li&gt;
&lt;li&gt;Does CI test the right source files?&lt;/li&gt;
&lt;li&gt;Do sanitizer builds link and run correctly?&lt;/li&gt;
&lt;li&gt;Can developers run existing CMake projects without fighting the CLI?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vix.cpp v2.6.3 focuses on these areas.&lt;/p&gt;

&lt;p&gt;It is the kind of release that makes the project less flashy, but more serious.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better &lt;code&gt;vix run&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;vix run&lt;/code&gt; is one of the most important commands in Vix.cpp.&lt;/p&gt;

&lt;p&gt;It can run a project, a single C++ file, a &lt;code&gt;.vix&lt;/code&gt; manifest, a binary, and other runtime targets.&lt;/p&gt;

&lt;p&gt;In v2.6.3, executable resolution is more reliable for CMake projects.&lt;/p&gt;

&lt;p&gt;Before, some projects could fail when the generated binary name did not match the project folder name.&lt;/p&gt;

&lt;p&gt;Now &lt;code&gt;vix run&lt;/code&gt; can resolve runnable executables more generically.&lt;/p&gt;

&lt;p&gt;This also improves project watch mode, because the development workflow no longer assumes that the output binary must have the same name as the directory.&lt;/p&gt;

&lt;p&gt;This matters for real CMake projects.&lt;/p&gt;

&lt;p&gt;Not every C++ project is generated by Vix. Vix should work with existing C++ projects too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better &lt;code&gt;vix tests&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Long-running test suites need good progress output.&lt;/p&gt;

&lt;p&gt;v2.6.3 improves &lt;code&gt;vix tests&lt;/code&gt; so it can show clearer progress during long CTest runs.&lt;/p&gt;

&lt;p&gt;The output can now show useful state such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;completed
total
running
elapsed time
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This release also fixes interruption handling.&lt;/p&gt;

&lt;p&gt;When the user presses &lt;code&gt;Ctrl+C&lt;/code&gt;, Vix now treats it as a user interruption instead of reporting it as a normal test failure.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;A test failure means the code is wrong.&lt;/p&gt;

&lt;p&gt;A user interruption means the user stopped the run.&lt;/p&gt;

&lt;p&gt;The CLI should not confuse those two situations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core lifecycle fixes
&lt;/h2&gt;

&lt;p&gt;One of the most important parts of this release is Core lifecycle stability.&lt;/p&gt;

&lt;p&gt;The Core module is the foundation used by Vix HTTP applications. It connects the public application API with routing, sessions, async I/O, runtime execution, server lifecycle, middleware, requests, responses, and configuration.&lt;/p&gt;

&lt;p&gt;v2.6.3 improves shutdown behavior across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;vix::App&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;HTTP server lifecycle&lt;/li&gt;
&lt;li&gt;runtime executor shutdown&lt;/li&gt;
&lt;li&gt;async TCP services&lt;/li&gt;
&lt;li&gt;scheduler shutdown paths&lt;/li&gt;
&lt;li&gt;pending coroutine operations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some of the important lifecycle fixes include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;App::close()&lt;/code&gt; is now terminal, idempotent, and safe before or after &lt;code&gt;listen()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;App::wait()&lt;/code&gt; now closes the running server on signal-stop paths.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;App::listen()&lt;/code&gt; prevents closed app instances from being restarted accidentally.&lt;/li&gt;
&lt;li&gt;HTTP server shutdown ordering is safer.&lt;/li&gt;
&lt;li&gt;The accept loop is allowed to drain before stopping the async I/O context.&lt;/li&gt;
&lt;li&gt;TCP listener teardown is safer.&lt;/li&gt;
&lt;li&gt;Server readiness is marked only after the accept loop starts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not cosmetic changes.&lt;/p&gt;

&lt;p&gt;They make the runtime more predictable under tests, shutdown races, signal stops, and sanitizer instrumentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  HTTP session hardening
&lt;/h2&gt;

&lt;p&gt;v2.6.3 also improves HTTP session behavior.&lt;/p&gt;

&lt;p&gt;The release fixes parsing and error-response edge cases for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;malformed requests&lt;/li&gt;
&lt;li&gt;invalid content lengths&lt;/li&gt;
&lt;li&gt;oversized payloads&lt;/li&gt;
&lt;li&gt;unexpected EOF bodies&lt;/li&gt;
&lt;li&gt;case-insensitive &lt;code&gt;Connection: close&lt;/code&gt; handling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A framework is easy to test when every request is valid.&lt;/p&gt;

&lt;p&gt;Real servers need to behave correctly when clients send bad data, partial data, or edge-case protocol input.&lt;/p&gt;

&lt;p&gt;This release makes that layer stronger.&lt;/p&gt;

&lt;h2&gt;
  
  
  Async shutdown improvements
&lt;/h2&gt;

&lt;p&gt;Async shutdown bugs can be difficult to reproduce.&lt;/p&gt;

&lt;p&gt;They often appear only under sanitizers, Valgrind, slow CI machines, or very specific timing conditions.&lt;/p&gt;

&lt;p&gt;v2.6.3 improves async TCP shutdown behavior by making close paths safer.&lt;/p&gt;

&lt;p&gt;The async TCP stream now cancels pending operations, shuts down the socket, and closes it safely.&lt;/p&gt;

&lt;p&gt;The async TCP listener now cancels and closes the acceptor through the Asio executor.&lt;/p&gt;

&lt;p&gt;Pending accepts keep the acceptor alive until completion handlers finish.&lt;/p&gt;

&lt;p&gt;The scheduler shutdown behavior is also improved so pending coroutine handles are not silently destroyed before completion paths can run.&lt;/p&gt;

&lt;p&gt;This helps make the runtime safer when applications stop quickly or when tests force lifecycle edge cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Runtime executor fixes
&lt;/h2&gt;

&lt;p&gt;The runtime executor also receives important fixes.&lt;/p&gt;

&lt;p&gt;Pending posted tasks are now drained before workers stop.&lt;/p&gt;

&lt;p&gt;Idle detection now tracks accepted in-flight tasks before they begin execution.&lt;/p&gt;

&lt;p&gt;This avoids a dangerous class of runtime bugs where the executor could appear idle while work had already been accepted but had not started yet.&lt;/p&gt;

&lt;p&gt;The runtime worker shutdown path was also improved when yielding tasks are being rescheduled.&lt;/p&gt;

&lt;p&gt;This makes task execution and shutdown more deterministic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Official Core benchmark suite
&lt;/h2&gt;

&lt;p&gt;v2.6.3 adds an official benchmark suite for Vix Core.&lt;br&gt;
This is one of the most important changes in the release.&lt;br&gt;
Performance should not be based on feelings.&lt;br&gt;
It should be measured, stored, compared, and protected.&lt;/p&gt;

&lt;p&gt;The Core benchmark suite covers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;runtime.task
runtime.queue
runtime.scheduler
runtime.worker

executor.submit
executor.post
executor.metrics

router.match
router.registration

http.request
http.response

session.fake_transport

app.route_registration
app.group_registration
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The release also adds shared benchmark utilities for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;median time&lt;/li&gt;
&lt;li&gt;mean time&lt;/li&gt;
&lt;li&gt;operations per second&lt;/li&gt;
&lt;li&gt;warmup iterations&lt;/li&gt;
&lt;li&gt;measured samples&lt;/li&gt;
&lt;li&gt;JSON report generation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This gives Vix.cpp a repeatable performance workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Official v2.6.3 benchmark baseline
&lt;/h2&gt;

&lt;p&gt;The official Core v2.6.3 Release benchmark baseline is stored under:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;modules/core/benchmarks/baselines/v2.6.3/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The baseline was generated in Release mode on Linux x86_64 with GCC 13.3.0.&lt;/p&gt;

&lt;p&gt;Benchmark comparison uses:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;median_ops_per_sec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Higher is better.&lt;/p&gt;

&lt;p&gt;Default thresholds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WARN = -5%
FAIL = -10%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The benchmark workflow includes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;scripts/run_core_benchmarks.sh
scripts/compare_core_benchmarks.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That means future changes can be compared against a known baseline.&lt;/p&gt;

&lt;p&gt;If performance improves, it is visible.&lt;br&gt;
If performance regresses, it is visible.&lt;/p&gt;

&lt;p&gt;That is the point.&lt;/p&gt;
&lt;h2&gt;
  
  
  Release builds for real measurements
&lt;/h2&gt;

&lt;p&gt;v2.6.3 also documents an important rule:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dev/debug = compile, test, debug
release   = measure performance
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Debug builds are useful for development.&lt;br&gt;
They are not useful for official performance numbers.&lt;br&gt;
Official benchmark baselines should come from Release builds only.&lt;br&gt;
This is the kind of rule that keeps performance discussions honest.&lt;/p&gt;
&lt;h2&gt;
  
  
  Stricter CI
&lt;/h2&gt;

&lt;p&gt;v2.6.3 strengthens CI in several areas.&lt;/p&gt;

&lt;p&gt;Core now has stricter coverage for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;debug/runtime builds&lt;/li&gt;
&lt;li&gt;sanitizer builds&lt;/li&gt;
&lt;li&gt;Valgrind memory checks&lt;/li&gt;
&lt;li&gt;static analysis&lt;/li&gt;
&lt;li&gt;benchmark builds&lt;/li&gt;
&lt;li&gt;package export validation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The release also improves sanitizer coverage for Core lifecycle, shutdown, executor, session, server, and app behavior.&lt;/p&gt;

&lt;p&gt;This matters because lifecycle bugs in C++ are often invisible until sanitizers or memory tools run the code under different timing conditions.&lt;/p&gt;
&lt;h2&gt;
  
  
  Better static analysis scope
&lt;/h2&gt;

&lt;p&gt;Strict static analysis is useful only when it analyzes the right code.&lt;/p&gt;

&lt;p&gt;v2.6.3 improves static analysis scope so third-party files, generated files, examples, benchmarks, and tests are not treated as blocking project source analysis.&lt;/p&gt;

&lt;p&gt;This prevents vendored dependencies or disabled optional backends from blocking the release with irrelevant warnings.&lt;/p&gt;

&lt;p&gt;The goal is not to make CI weaker.&lt;br&gt;
The goal is to make CI stricter where it matters.&lt;/p&gt;

&lt;p&gt;Blocking analysis now focuses on project source files and module implementation sources.&lt;/p&gt;

&lt;p&gt;Style-only findings can still be reported separately without blocking the release.&lt;/p&gt;
&lt;h2&gt;
  
  
  Broader module test coverage
&lt;/h2&gt;

&lt;p&gt;v2.6.3 improves module-level test coverage across the Vix ecosystem.&lt;/p&gt;

&lt;p&gt;SECURITY_CI now builds and runs tests inside module directories instead of relying only on root-level test discovery.&lt;/p&gt;

&lt;p&gt;This is important because many modules keep their tests close to the module itself.&lt;/p&gt;

&lt;p&gt;The release also improves sanitizer-ready test coverage across modules such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;async
cache
conversion
crypto
env
error
fs
game
io
json
kv
log
middleware
os
path
p2p
process
sync
template
tests
threadpool
time
validation
webrpc
websocket
agent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes the whole project more reliable as a modular C++ codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  JSON fixes
&lt;/h2&gt;

&lt;p&gt;The JSON module receives an important JPath parsing fix.&lt;/p&gt;

&lt;p&gt;Paths after bracket segments now parse correctly.&lt;/p&gt;

&lt;p&gt;Examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;users[0].email
["complex.key"].value
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The release also improves JSON module testing, benchmark coverage, examples, and documentation.&lt;/p&gt;

&lt;p&gt;This matters because JSON is a core part of many backend and tooling workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Threadpool determinism
&lt;/h2&gt;

&lt;p&gt;The threadpool module receives several deterministic behavior fixes.&lt;/p&gt;

&lt;p&gt;v2.6.3 improves future handling for pre-cancelled and queued-cancelled tasks so they resolve deterministically instead of hanging.&lt;/p&gt;

&lt;p&gt;Cancellation paths now report cancellation through the associated future.&lt;/p&gt;

&lt;p&gt;Tests were also fixed so they do not assume asynchronous work finishes immediately after posting.&lt;/p&gt;

&lt;p&gt;That is important.&lt;/p&gt;

&lt;p&gt;Threadpool tests should prove behavior, not depend on timing luck.&lt;/p&gt;

&lt;h2&gt;
  
  
  Highlights
&lt;/h2&gt;

&lt;p&gt;Here are the main highlights of Vix.cpp v2.6.3:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improved Core lifecycle and shutdown behavior.&lt;/li&gt;
&lt;li&gt;Fixed HTTP session edge cases.&lt;/li&gt;
&lt;li&gt;Improved async TCP close and shutdown behavior.&lt;/li&gt;
&lt;li&gt;Fixed runtime executor shutdown and idle detection.&lt;/li&gt;
&lt;li&gt;Added the official Core benchmark suite.&lt;/li&gt;
&lt;li&gt;Added the official Core v2.6.3 benchmark baseline.&lt;/li&gt;
&lt;li&gt;Added benchmark run and comparison scripts.&lt;/li&gt;
&lt;li&gt;Improved &lt;code&gt;vix run&lt;/code&gt; executable discovery.&lt;/li&gt;
&lt;li&gt;Improved &lt;code&gt;vix tests&lt;/code&gt; progress and interruption handling.&lt;/li&gt;
&lt;li&gt;Fixed JSON JPath parsing after bracket segments.&lt;/li&gt;
&lt;li&gt;Strengthened Core test layout.&lt;/li&gt;
&lt;li&gt;Expanded sanitizer coverage across modules.&lt;/li&gt;
&lt;li&gt;Improved static analysis scope.&lt;/li&gt;
&lt;li&gt;Fixed sanitizer linking for module tests.&lt;/li&gt;
&lt;li&gt;Made threadpool cancellation behavior more deterministic.&lt;/li&gt;
&lt;li&gt;Improved CI so it is strict without blocking on irrelevant files.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this matters for C++
&lt;/h2&gt;

&lt;p&gt;C++ gives developers performance and control.&lt;/p&gt;

&lt;p&gt;But building real applications in C++ often requires a lot of repeated infrastructure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;build workflows&lt;/li&gt;
&lt;li&gt;test workflows&lt;/li&gt;
&lt;li&gt;runtime diagnostics&lt;/li&gt;
&lt;li&gt;dependency management&lt;/li&gt;
&lt;li&gt;packaging&lt;/li&gt;
&lt;li&gt;production checks&lt;/li&gt;
&lt;li&gt;benchmark tracking&lt;/li&gt;
&lt;li&gt;CI configuration&lt;/li&gt;
&lt;li&gt;module boundaries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vix.cpp exists to make that application layer more consistent.&lt;/p&gt;

&lt;p&gt;v2.6.3 is a step toward that goal.&lt;br&gt;
It makes Vix.cpp less fragile and more measurable.&lt;br&gt;
It also makes the project more honest.&lt;br&gt;
If performance changes, benchmarks should show it.&lt;br&gt;
If shutdown breaks, tests should catch it.&lt;/p&gt;

&lt;p&gt;If CI fails, it should fail for the right reason.&lt;/p&gt;
&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;p&gt;GitHub repository:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/vixcpp/vix" rel="noopener noreferrer"&gt;https://github.com/vixcpp/vix&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Release notes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.vixcpp.com/posts/changelog/v2.6.3" rel="noopener noreferrer"&gt;https://blog.vixcpp.com/posts/changelog/v2.6.3&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Core benchmark baseline article:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.vixcpp.com/posts/vix-core/vix-core-benchmark-baseline-v263" rel="noopener noreferrer"&gt;https://blog.vixcpp.com/posts/vix-core/vix-core-benchmark-baseline-v263&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Documentation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.vixcpp.com" rel="noopener noreferrer"&gt;https://docs.vixcpp.com&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Final note
&lt;/h2&gt;

&lt;p&gt;Vix.cpp v2.6.3 is not a flashy release.&lt;/p&gt;

&lt;p&gt;It is an engineering release.&lt;/p&gt;

&lt;p&gt;It improves the parts of a C++ runtime that must be trustworthy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;runtime stability
shutdown behavior
tests
benchmarks
CI
sanitizers
diagnostics
module reliability
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the long-term direction of Vix.cpp:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;native C++
modern workflow
measured performance
strict CI
production-oriented reliability
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;C++ deserves serious tooling.&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>news</category>
      <category>performance</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Building an Official Performance Baseline for Vix.cpp Core v2.6.3</title>
      <dc:creator>Gaspard Kirira</dc:creator>
      <pubDate>Tue, 16 Jun 2026 07:38:26 +0000</pubDate>
      <link>https://dev.to/gkirira/building-an-official-performance-baseline-for-vixcpp-core-v263-amh</link>
      <guid>https://dev.to/gkirira/building-an-official-performance-baseline-for-vixcpp-core-v263-amh</guid>
      <description>&lt;h1&gt;
  
  
  Vix.cpp Core v2.6.3: Official Benchmark Baseline
&lt;/h1&gt;

&lt;p&gt;Today I reached an important milestone with Vix.cpp Core.&lt;/p&gt;

&lt;p&gt;For the first time, I now have an official benchmark baseline for &lt;strong&gt;Vix.cpp Core v2.6.3&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This baseline was generated in &lt;strong&gt;Release mode&lt;/strong&gt; on &lt;strong&gt;Linux x86_64&lt;/strong&gt; using &lt;strong&gt;GCC 13.3.0&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;p&gt;I do not want to say “Vix is fast” only because it feels fast on my machine.&lt;/p&gt;

&lt;p&gt;I want performance to be measured, tracked, compared, and protected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;When building a C++ framework, performance can easily regress without being noticed.&lt;/p&gt;

&lt;p&gt;You change a router function.&lt;br&gt;
You improve an executor.&lt;br&gt;
You refactor request parsing.&lt;br&gt;
You clean up response serialization.&lt;/p&gt;

&lt;p&gt;Everything still compiles.&lt;br&gt;
All tests still pass.&lt;/p&gt;

&lt;p&gt;But maybe the router is now 15% slower.&lt;br&gt;
Maybe request construction got heavier.&lt;br&gt;
Maybe the runtime scheduler is doing more work than before.&lt;/p&gt;

&lt;p&gt;Without benchmarks, you may not see it.&lt;/p&gt;

&lt;p&gt;With a baseline, every future change can be compared against a known reference.&lt;/p&gt;

&lt;p&gt;That is why I started building the official Vix.cpp Core benchmark suite.&lt;/p&gt;
&lt;h2&gt;
  
  
  What is currently benchmarked
&lt;/h2&gt;

&lt;p&gt;The benchmark suite currently covers several parts of Vix.cpp Core:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;runtime queues&lt;/li&gt;
&lt;li&gt;runtime scheduler&lt;/li&gt;
&lt;li&gt;runtime workers&lt;/li&gt;
&lt;li&gt;executor submit/post&lt;/li&gt;
&lt;li&gt;executor metrics&lt;/li&gt;
&lt;li&gt;router matching&lt;/li&gt;
&lt;li&gt;router registration&lt;/li&gt;
&lt;li&gt;HTTP request handling&lt;/li&gt;
&lt;li&gt;HTTP response generation&lt;/li&gt;
&lt;li&gt;fake transport sessions&lt;/li&gt;
&lt;li&gt;app route registration&lt;/li&gt;
&lt;li&gt;app group registration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This gives me visibility across both low-level primitives and higher-level web framework behavior.&lt;/p&gt;
&lt;h2&gt;
  
  
  Some results from the v2.6.3 baseline
&lt;/h2&gt;

&lt;p&gt;Here are some numbers from the current Release baseline.&lt;/p&gt;
&lt;h3&gt;
  
  
  Runtime
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;runtime.queue/try_steal_empty                    132.6M ops/sec
runtime.queue/push_pop                            49.6M ops/sec
runtime.worker/steal_callback_complete_tasks       9.3M ops/sec
runtime.scheduler/submit_affinity_tasks            1.07M ops/sec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Router
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;router.match/static_route          9.37M ops/sec
router.match/nested_static_route   8.17M ops/sec
router.match/param_route           5.67M ops/sec
router.match/nested_param_route    3.91M ops/sec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This is useful because it shows the natural cost difference between static routes and parameterized routes.&lt;/p&gt;

&lt;p&gt;A static route is faster.&lt;br&gt;
A nested parameterized route is more expensive.&lt;br&gt;
That is expected, but now it is measured.&lt;/p&gt;
&lt;h3&gt;
  
  
  Executor
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;executor.metrics/idle_reads        112.2M ops/sec
executor.submit/task_complete        465K ops/sec
executor.post/void_tasks             397K ops/sec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The executor benchmarks help track the cost of scheduling work, posting tasks, reading metrics, and handling different task execution paths.&lt;/p&gt;
&lt;h3&gt;
  
  
  HTTP
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http.request/default_construct       10.7M ops/sec
http.request/json_cached_access      15.7M ops/sec
http.response/to_http_string_json    1.02M ops/sec
http.response/to_http_string_text     547K ops/sec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;These benchmarks help protect the request and response layer, which is critical for Vix.cpp web applications.&lt;/p&gt;
&lt;h3&gt;
  
  
  Session
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;session.fake_transport/single_get_health      146K ops/sec
session.fake_transport/keep_alive_pipeline    248K ops/sec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This gives a higher-level view of request processing using an in-memory fake transport.&lt;/p&gt;

&lt;p&gt;It is not the same as a real network benchmark, but it is very useful for tracking framework overhead without depending on external network noise.&lt;/p&gt;
&lt;h2&gt;
  
  
  Build mode matters
&lt;/h2&gt;

&lt;p&gt;One important lesson: official benchmarks must not be generated from a debug/dev build.&lt;/p&gt;

&lt;p&gt;A dev build is useful for testing and debugging, but not for official performance numbers.&lt;/p&gt;

&lt;p&gt;For Vix.cpp Core, the rule is now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dev / debug = compile, test, debug
release     = measure performance
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The official baseline must come from a Release build.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I want to use this
&lt;/h2&gt;

&lt;p&gt;From now on, when I make a serious change inside Vix.cpp Core, I can run the benchmarks again and compare them against the v2.6.3 baseline.&lt;/p&gt;

&lt;p&gt;If performance improves, I can prove it.&lt;br&gt;
If performance gets worse, I can see it.&lt;br&gt;
If a regression appears, it should not be ignored.&lt;/p&gt;

&lt;p&gt;This changes the development workflow.&lt;/p&gt;

&lt;p&gt;It moves performance from opinion to evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I care about this
&lt;/h2&gt;

&lt;p&gt;Vix.cpp is not only a C++ experiment for me.&lt;/p&gt;

&lt;p&gt;I want it to become a serious foundation for building web services, runtime systems, tooling, and production applications.&lt;/p&gt;

&lt;p&gt;For that, tests are not enough.&lt;br&gt;
Documentation is not enough.&lt;br&gt;
The framework also needs measurable performance discipline.&lt;br&gt;
Benchmarks help create that discipline.&lt;br&gt;
They make the project more honest.&lt;br&gt;
They make future changes safer.&lt;br&gt;
They make performance visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thought
&lt;/h2&gt;

&lt;p&gt;Performance should not be based on feelings.&lt;/p&gt;

&lt;p&gt;It should be measured.&lt;br&gt;
It should be tracked.&lt;br&gt;
It should be protected.&lt;/p&gt;

&lt;p&gt;This v2.6.3 benchmark baseline is one step in that direction.&lt;/p&gt;

&lt;p&gt;Vix.cpp is moving forward.&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>performance</category>
      <category>benchmarking</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Vix.cpp v2.6.2: C++ Developer Toolkit Release with Windows SDK Installer Fix</title>
      <dc:creator>Gaspard Kirira</dc:creator>
      <pubDate>Thu, 11 Jun 2026 08:57:19 +0000</pubDate>
      <link>https://dev.to/gkirira/vixcpp-v262-c-developer-toolkit-release-with-windows-sdk-installer-fix-5gf9</link>
      <guid>https://dev.to/gkirira/vixcpp-v262-c-developer-toolkit-release-with-windows-sdk-installer-fix-5gf9</guid>
      <description>&lt;h1&gt;
  
  
  Vix.cpp v2.6.2: C++ Developer Toolkit Release with Windows SDK Installer Fix
&lt;/h1&gt;

&lt;p&gt;C++ development should not feel fragile from the first install step.&lt;/p&gt;

&lt;p&gt;Today, we released &lt;strong&gt;Vix.cpp v2.6.2&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This release is focused on stability, packaging, registry workflows, dependency management, and better diagnostics around the commands developers use every day.&lt;/p&gt;

&lt;p&gt;Vix.cpp is a modern C++ runtime and developer toolkit. The goal is to make C++ more practical for real projects: build, run, test, install dependencies, publish packages, deploy services, and debug issues with clearer feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  Windows SDK installer fix
&lt;/h2&gt;

&lt;p&gt;One important fix in this release is the Windows SDK installer.&lt;/p&gt;

&lt;p&gt;A user reported that the PowerShell installer was failing with a &lt;code&gt;Not Found&lt;/code&gt; error while trying to download:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vix-sdk-windows-x86_64.zip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The report was correct.&lt;/p&gt;

&lt;p&gt;The installer was trying to install the Windows SDK, but the release pipeline was not publishing the Windows SDK archive. It was publishing the Linux SDK asset, but not the Windows one.&lt;/p&gt;

&lt;p&gt;This is fixed in &lt;strong&gt;v2.6.2&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The Windows SDK archive is now built, packaged, checksummed, signed, and uploaded as part of the release.&lt;/p&gt;

&lt;p&gt;So this should now work correctly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;irm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://vixcpp.com/install.ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also force the version explicitly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;VIX_VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"v2.6.2"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;irm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://vixcpp.com/install.ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Better dependency workflows
&lt;/h2&gt;

&lt;p&gt;This release also improves several registry and dependency commands.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;vix update&lt;/code&gt; now respects version constraints declared in &lt;code&gt;vix.json&lt;/code&gt;. It no longer blindly resolves direct dependencies to the latest registry version when a project has already declared constraints.&lt;/p&gt;

&lt;p&gt;It also avoids reprocessing every dependency when only some dependencies actually need updates.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;vix install&lt;/code&gt; now reports only dependencies that were actually installed or relinked. This makes the output much clearer, especially when working with an existing &lt;code&gt;vix.lock&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;vix list&lt;/code&gt; and &lt;code&gt;vix outdated&lt;/code&gt; now show direct project dependencies by default. If you want the full locked dependency graph, you can still use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vix list &lt;span class="nt"&gt;--all&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vix outdated &lt;span class="nt"&gt;--all&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes the default output more useful for normal project maintenance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better &lt;code&gt;vix run&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;vix run&lt;/code&gt; now works better with generic CMake projects.&lt;/p&gt;

&lt;p&gt;Before, it could assume that the executable name matched the folder or project name. That is not always true.&lt;/p&gt;

&lt;p&gt;Now it detects and runs the executable produced by the build, which makes &lt;code&gt;vix run&lt;/code&gt; more useful outside of perfectly shaped Vix projects too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better diagnostics
&lt;/h2&gt;

&lt;p&gt;v2.6.2 also improves diagnostics in multiple places.&lt;/p&gt;

&lt;p&gt;CMake errors with multi-line &lt;code&gt;message(FATAL_ERROR ...)&lt;/code&gt; output are now displayed more clearly instead of being collapsed into unreadable one-line messages.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;vix tests&lt;/code&gt; failure output is now easier to understand. Failed test names, source locations, focused error messages, and compact code frames are summarized better.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;vix.app&lt;/code&gt; also gives clearer errors when &lt;code&gt;.vix/vix_deps.cmake&lt;/code&gt; is missing or when a required resource does not exist.&lt;/p&gt;

&lt;p&gt;The goal is simple: when something fails, the tool should help you understand the problem faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Registry and package improvements
&lt;/h2&gt;

&lt;p&gt;This release improves transitive registry dependency propagation.&lt;/p&gt;

&lt;p&gt;For example, packages like &lt;code&gt;rix/rix&lt;/code&gt; can expose dependencies such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rix/csv
rix/debug
rix/auth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;without forcing every application to list all of them manually.&lt;/p&gt;

&lt;p&gt;This is important for the direction of the Vix and Rix ecosystem.&lt;/p&gt;

&lt;p&gt;Rix is the official package namespace for optional Vix.cpp libraries in the Vix registry. As more packages are added, dependency propagation needs to feel reliable and predictable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Crypto helpers
&lt;/h2&gt;

&lt;p&gt;v2.6.2 also adds new crypto helpers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;constant-time byte comparison helpers&lt;/li&gt;
&lt;li&gt;PBKDF2-HMAC-SHA256 password hashing and verification helpers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are small but important building blocks for security-sensitive code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this release matters
&lt;/h2&gt;

&lt;p&gt;Not every release needs to be about a big visible feature.&lt;/p&gt;

&lt;p&gt;Sometimes the important work is making the normal workflow more reliable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;install
build
run
test
install dependencies
update dependencies
publish packages
deploy
debug
repeat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is what v2.6.2 is about.&lt;/p&gt;

&lt;p&gt;Vix.cpp is still moving toward the same goal: a modern C++ runtime and developer toolkit that is practical for real applications, not just demos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;p&gt;GitHub repo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/vixcpp/vix" rel="noopener noreferrer"&gt;https://github.com/vixcpp/vix&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Release:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/vixcpp/vix/releases/tag/v2.6.2" rel="noopener noreferrer"&gt;https://github.com/vixcpp/vix/releases/tag/v2.6.2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Website:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://vixcpp.com" rel="noopener noreferrer"&gt;https://vixcpp.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>news</category>
      <category>showdev</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Why I Started Building Vix.cpp</title>
      <dc:creator>Gaspard Kirira</dc:creator>
      <pubDate>Thu, 04 Jun 2026 04:35:14 +0000</pubDate>
      <link>https://dev.to/gkirira/why-i-started-building-vixcpp-1fem</link>
      <guid>https://dev.to/gkirira/why-i-started-building-vixcpp-1fem</guid>
      <description>&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%2Fm4co90tksjy0jghm1zsj.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%2Fm4co90tksjy0jghm1zsj.png" alt=" " width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Why I Started Building Vix.cpp
&lt;/h1&gt;

&lt;p&gt;C++ is one of the most powerful programming languages in the world.&lt;/p&gt;

&lt;p&gt;It powers databases, browsers, operating systems, game engines, financial systems, and countless performance-critical applications.&lt;/p&gt;

&lt;p&gt;Yet many developers still struggle with the same problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project setup is often more complicated than writing code.&lt;/li&gt;
&lt;li&gt;Dependency management is fragmented.&lt;/li&gt;
&lt;li&gt;Build workflows vary from project to project.&lt;/li&gt;
&lt;li&gt;New developers face a steep learning curve before they can build real applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After working on multiple C++ projects, I kept running into the same question:&lt;/p&gt;

&lt;p&gt;Why is it easier to start a project in many modern languages than in C++?&lt;/p&gt;

&lt;p&gt;That question eventually led me to start building Vix.cpp.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Vix.cpp?
&lt;/h2&gt;

&lt;p&gt;Vix.cpp is a modern C++ runtime and developer toolkit.&lt;/p&gt;

&lt;p&gt;The goal is not to replace C++.&lt;/p&gt;

&lt;p&gt;The goal is to make building applications in C++ simpler, faster, and more productive.&lt;/p&gt;

&lt;p&gt;With Vix.cpp, developers get a unified workflow for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating projects&lt;/li&gt;
&lt;li&gt;Managing dependencies&lt;/li&gt;
&lt;li&gt;Running applications&lt;/li&gt;
&lt;li&gt;Building releases&lt;/li&gt;
&lt;li&gt;Running tests&lt;/li&gt;
&lt;li&gt;Formatting code&lt;/li&gt;
&lt;li&gt;Packaging software&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All while staying fully compatible with the existing C++ ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why another tool?
&lt;/h2&gt;

&lt;p&gt;Most C++ developers spend a significant amount of time dealing with infrastructure around their code.&lt;/p&gt;

&lt;p&gt;Build configuration.&lt;br&gt;
Dependency setup.&lt;br&gt;
Project structure.&lt;br&gt;
Tool integration.&lt;/p&gt;

&lt;p&gt;These things are important, but they should not slow down application development.&lt;/p&gt;

&lt;p&gt;Vix.cpp aims to reduce that friction.&lt;/p&gt;

&lt;p&gt;Instead of spending time wiring tools together, developers can focus on building software.&lt;/p&gt;

&lt;h2&gt;
  
  
  The philosophy behind Vix.cpp
&lt;/h2&gt;

&lt;p&gt;Several ideas guide the project:&lt;/p&gt;

&lt;h3&gt;
  
  
  Keep C++ native
&lt;/h3&gt;

&lt;p&gt;Vix.cpp does not try to invent a new language.&lt;/p&gt;

&lt;p&gt;Developers still write standard C++.&lt;/p&gt;

&lt;h3&gt;
  
  
  Make the common path simple
&lt;/h3&gt;

&lt;p&gt;Many tasks should require a single command instead of multiple configuration steps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stay compatible
&lt;/h3&gt;

&lt;p&gt;Existing compilers, libraries, and tooling should continue to work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Improve developer experience
&lt;/h3&gt;

&lt;p&gt;Good tooling helps developers move faster without sacrificing control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current status
&lt;/h2&gt;

&lt;p&gt;Vix.cpp already includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A modern CLI workflow&lt;/li&gt;
&lt;li&gt;Package management&lt;/li&gt;
&lt;li&gt;Project templates&lt;/li&gt;
&lt;li&gt;Build automation&lt;/li&gt;
&lt;li&gt;Testing workflows&lt;/li&gt;
&lt;li&gt;Formatting tools&lt;/li&gt;
&lt;li&gt;JSON support&lt;/li&gt;
&lt;li&gt;Database tooling&lt;/li&gt;
&lt;li&gt;REPL support&lt;/li&gt;
&lt;li&gt;AI tooling experiments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project continues to evolve every week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking forward
&lt;/h2&gt;

&lt;p&gt;Vix.cpp is still early in its journey.&lt;br&gt;
There is a lot left to build.&lt;br&gt;
But the vision remains simple:&lt;/p&gt;

&lt;p&gt;Make C++ development more accessible, productive, and enjoyable while keeping the power and performance that make C++ unique.&lt;/p&gt;

&lt;p&gt;If that sounds interesting to you, I'd love to hear your thoughts.&lt;/p&gt;

&lt;p&gt;GitHub:&lt;br&gt;
&lt;a href="https://github.com/vixcpp/vix" rel="noopener noreferrer"&gt;https://github.com/vixcpp/vix&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Documentation:&lt;br&gt;
&lt;a href="https://docs.vixcpp.com" rel="noopener noreferrer"&gt;https://docs.vixcpp.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>cpp</category>
      <category>productivity</category>
      <category>vixcpp</category>
    </item>
  </channel>
</rss>
