Skip to content

Commit ce57a2b

Browse files
committed
Vix.cpp v2.9.0
1 parent 0124992 commit ce57a2b

1 file changed

Lines changed: 114 additions & 7 deletions

File tree

‎vix-site/src/content/blog/changelog/v2.9.0.md‎

Lines changed: 114 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
---
22
title: "Vix.cpp v2.9.0"
3-
description: "Vix.cpp v2.9.0 clarifies responsibility across the build system, networking, SDK packaging, and mobile platform support."
3+
description: "Vix.cpp v2.9.0 clarifies ownership across the build system, dependency management, networking, SDK packaging, and mobile platform support."
44
date: 2026-09-17
55
---
66

77
# Vix v2.9.0
88

9-
Vix v2.9.0 is a release about ownership.
9+
Vix.cpp v2.9.0 is a release about ownership.
1010

11-
As Vix has grown, several parts of the system had started doing work that belonged somewhere else. The build layer reconstructed information already owned by CMake and Ninja. SDK consumers could inherit machine-level requirements for dependencies that existed only because a Vix module used them internally. An asynchronous HTTP API still had places where the underlying work was not consistently asynchronous. Mobile support risked becoming useful only if Vix tried to replace the native toolchains that already understand Android and iOS best.
11+
As Vix has grown, several parts of the system had started doing work that belonged somewhere else. The build layer reconstructed information already owned by CMake and Ninja. Dependency management needed a clearer separation between what a project requests and what was actually resolved. SDK consumers could inherit machine-level requirements for dependencies that existed only because a Vix module used them internally. An asynchronous HTTP API still had places where the underlying work was not consistently asynchronous. Mobile support risked becoming useful only if Vix tried to replace the native toolchains that already understand Android and iOS best.
1212

1313
v2.9.0 addresses these problems by making the boundaries clearer.
1414

15-
Vix should own project intent, modules, dependency selection, toolchain configuration, diagnostics, and the developer experience. Build backends should own the concrete compilation graph and incremental execution. Internal dependencies should remain internal when Vix can reasonably package them. Platform capabilities should remain platform capabilities. An asynchronous API should stay asynchronous across the entire operation.
15+
Vix should own project intent, dependency intent, dependency resolution, toolchain configuration, diagnostics, and the developer experience. Build backends should own the concrete compilation graph and incremental execution. Internal dependencies should remain internal when Vix can reasonably package them. Platform capabilities should remain platform capabilities. An asynchronous API should stay asynchronous across the entire operation.
1616

17-
The result is a release that removes unnecessary work from the normal development loop, strengthens the networking stack, makes SDKs more self-contained, and adds practical Android and iOS project support without hiding the native platforms underneath.
17+
The result is a release that removes unnecessary work from the normal development loop, makes dependency resolution more reproducible, strengthens the networking stack, makes SDKs more self-contained, and adds practical Android and iOS project support without hiding the native platforms underneath.
1818

1919
## Build: let each layer own the work it understands
2020

@@ -50,6 +50,86 @@ The principle behind these changes is simple:
5050

5151
> Vix should add value to the build, not add work to the build.
5252
53+
## Dependencies: Vix can manage dependencies for CMake projects
54+
55+
A project should not have to replace its build system just to get a better dependency workflow.
56+
57+
v2.9.0 significantly expands `vix install` around that idea.
58+
59+
Vix dependencies can now be added directly from Git repositories and used by ordinary CMake projects. The project can keep its existing `CMakeLists.txt` and native CMake targets while Vix manages dependency intent, resolution, locking, integrity, and local materialization.
60+
61+
For example:
62+
63+
```bash
64+
vix install https://github.com/vixcpp/async \
65+
--tag v1.2.1 \
66+
--target vix::async
67+
```
68+
69+
The dependency becomes part of the project manifest:
70+
71+
```toml
72+
[dependencies.async]
73+
git = "https://github.com/vixcpp/async"
74+
tag = "v1.2.1"
75+
target = "vix::async"
76+
```
77+
78+
Vix then resolves that request to an exact revision and records the reproducible result in `vix.lock`, including the resolved commit and package integrity metadata.
79+
80+
This creates an important separation:
81+
82+
- `vix.app` describes what the project requests
83+
- `vix.lock` records the exact dependency graph that was resolved
84+
85+
A project can therefore express a human-readable dependency such as a Git tag while still reproducing the exact commit selected at resolution time.
86+
87+
Dependencies are materialized through Vix's local package store and exposed back to the project through generated CMake integration. Vix can also understand exported CMake targets, subdirectories, header-only packages, CMake options, and transitive dependency relationships.
88+
89+
The important part is that CMake remains CMake.
90+
91+
A project can continue to define its library normally:
92+
93+
```cmake
94+
add_library(vix_stress STATIC ...)
95+
96+
target_link_libraries(
97+
vix_stress
98+
PRIVATE
99+
vix::requests
100+
vix::async
101+
)
102+
```
103+
104+
while Vix takes responsibility for obtaining and resolving the packages that provide those targets.
105+
106+
Vix Stress already uses this model. It remains a standalone CMake project while declaring Vix dependencies separately:
107+
108+
```toml
109+
[dependencies.async]
110+
git = "https://github.com/vixcpp/async"
111+
tag = "v1.2.1"
112+
target = "vix::async"
113+
114+
[dependencies.requests]
115+
git = "https://github.com/vixcpp/requests"
116+
tag = "v1.2.1"
117+
target = "vix::requests"
118+
119+
[dependencies.tests]
120+
git = "https://github.com/vixcpp/tests"
121+
tag = "v0.1.1"
122+
target = "vix::tests"
123+
```
124+
125+
The lockfile records exact commits and integrity metadata for those dependencies, making the installed graph reproducible rather than merely remembering a floating repository reference.
126+
127+
The goal is not to make CMake projects stop being CMake projects.
128+
129+
The goal is to give them a simpler dependency contract:
130+
131+
> Describe what the project needs, lock what was resolved, and let Vix materialize it.
132+
53133
## Requests: asynchronous from beginning to end
54134

55135
An asynchronous HTTP API is only truly asynchronous if the entire request path remains asynchronous.
@@ -167,6 +247,8 @@ Many of the changes in v2.9.0 come from the same observation: complexity grows w
167247

168248
If Vix and Ninja both maintain the incremental compilation graph, one of them is doing unnecessary work.
169249

250+
If Vix resolves a project dependency but the build system still has to rediscover where it came from and what exact revision was selected, ownership is unclear.
251+
170252
If Vix bundles an implementation dependency but the consumer must still install and configure that same dependency independently, ownership is unclear.
171253

172254
If an API is called asynchronous but part of its internal path blocks, its abstraction and its behavior disagree.
@@ -177,11 +259,36 @@ v2.9.0 reduces those overlaps.
177259

178260
Vix still does a lot, but the goal is not for Vix to own every part of the machine. The goal is for Vix to own the parts where it can provide a simpler, more reliable programming model, and compose correctly with the parts that already have a clear owner.
179261

262+
## What's next: Vix 3
263+
264+
v2.9.0 closes an important chapter for Vix 2.
265+
266+
Many of the changes in this release came from looking again at decisions that were reasonable when Vix was smaller, but became harder to justify as the project grew. The duplicated build work, dependency ownership, SDK boundaries, and the relationship between Vix abstractions and native platforms are all examples of lessons that will influence the next major version.
267+
268+
The next step is Vix 3.
269+
270+
Vix 3 is not intended to be a larger collection of modules or another layer of abstractions. It is an opportunity to revisit the foundations of Vix with the implementation experience gained from Vix 2.
271+
272+
The goal is to reduce the number of concepts users need to understand, make the remaining concepts more composable, and move complexity into places where Vix can own it reliably.
273+
274+
That means questioning assumptions that have accumulated over time: how projects describe what they need, how dependencies are owned and distributed, where the boundary between Vix and the C++ toolchain should live, and which parts of common C++ development can be made simpler without hiding the language or the machine.
275+
276+
Some of the work in v2.9.0 already points in that direction.
277+
278+
The build system now has clearer ownership boundaries. `vix install` separates dependency intent from reproducible resolution and can integrate those dependencies into existing CMake projects. SDK dependencies are becoming capabilities rather than machine setup instructions. Installed artifacts are treated as part of the public contract. Platform integrations preserve the native systems underneath them instead of trying to replace them.
279+
280+
Vix 3 will continue from those principles.
281+
282+
Its design is still being worked out, and early ideas should not become promises before they have been properly tested. The objective is not to add features for the sake of a major version number.
283+
284+
It is to take what Vix has taught us so far and use it to build a smaller, clearer, and more durable foundation for what comes next.
285+
180286
## Summary
181287

182-
Vix v2.9.0 improves four major areas:
288+
Vix v2.9.0 improves five major areas:
183289

184290
- the ordinary build path does less duplicated work and leaves incremental execution to CMake and Ninja
291+
- `vix install` can manage reproducible Git dependencies for existing CMake projects through `vix.app` and `vix.lock`
185292
- `vix::requests` has a stronger fully asynchronous path, connection reuse, and streaming response support
186293
- SDKs are more self-contained and more faithful to the capabilities users actually select
187294
- `vix::ui` can generate and drive practical Android and iOS projects while preserving native toolchains
@@ -190,4 +297,4 @@ The release also strengthens the installed SDK as a tested public contract rathe
190297

191298
More broadly, v2.9.0 is less about making Vix own more of the system and more about making it own the right parts of the system.
192299

193-
That direction will continue to shape how Vix evolves.
300+
That direction will continue into Vix 3.

0 commit comments

Comments
 (0)