Vix.cpp v2.5.3

Vix.cpp v2.5.3 is a major workflow and diagnostics release. This release introduces vix replay, opt-in execution recording, stronger runtime diagnostics, a new incremental build graph foundation, cleaner test and check output, and a dedicated development session engine for vix dev. The focus of this release is observability. Vix.cpp is not only improving how projects build and run. It is also improving how failures are captured, explained, replayed, and debugged.

Execution replay

Vix.cpp v2.5.3 introduces the new vix replay command group.

The goal of replay is to make previous Vix executions inspectable and reproducible. A recorded run stores execution metadata and logs locally under .vix/runs/.

A recorded execution can include:

run.json
stdout.log
stderr.log
combined.log

The first replay workflow includes:

vix replay last
vix replay failed
vix replay show
vix replay list
vix replay clean

Replay support works for both project runs and single-file script runs. Recording is now explicit. Normal vix run executions no longer create replay data automatically. Users must opt in with:

vix run main.cpp --replay

or:

vix run --replay

This keeps normal runs clean while still giving developers a precise tool when they need to inspect or reproduce an execution.

Runtime diagnostics

Vix.cpp v2.5.3 significantly improves runtime error diagnostics. The release adds shared runtime location helpers for extracting file:line:column locations and printing runtime code frames. It also adds source-based fallback hints when logs do not provide an exact user frame. This improves diagnostics for sanitizer and non-sanitizer crashes, including double free, iterator invalidation, segmentation faults, aborts, out-of-range errors, mutex errors, condition variable failures, thread errors, span issues, and std::string_view misuse. The runtime error pipeline now avoids printing raw crash logs before friendly Vix diagnostics. That matters because raw allocator or sanitizer output is useful, but it should not be the first thing most developers see. Vix now tries to present a focused diagnostic first, with a location, a code frame, and one useful hint.

Sanitizer workflow

This release improves sanitizer-driven script execution. ThreadSanitizer support is now available through:

vix run main.cpp --tsan

Runtime diagnostics for script sanitizer runs are also more precise. For example, vix run file.cpp --san and CMake fallback script runs can now show code frames for crashes such as double free. When sanitizer logs do not provide a clean user location, Vix attempts to point to suspicious source lines such as delete, delete[], or free(). This makes sanitizer output more useful without forcing users to manually scan long raw logs.

Incremental build graph foundation

Vix.cpp v2.5.3 adds a new incremental build graph foundation for vix build. This foundation includes build nodes, build tasks, dependency file parsing, object cache metadata, build graph persistence, and a parallel build scheduler. The build graph can import real build information from:

compile_commands.json
build.ninja

compile_commands.json gives Vix access to real compile commands generated by CMake/Ninja. build.ninja gives Vix visibility into archive, link, copy, install, and utility edges. This is an important architectural step because Vix build intelligence should be based on the real native build graph, not guessed project structure. The target-aware graph executor is still guarded and experimental. CMake/Ninja remains the stable execution path, and graph execution is protected behind:

VIX_GRAPH_EXECUTOR

This keeps the release safe while preparing Vix for deeper no-op, incremental, and target-aware build decisions.

Build diagnostics

Vix.cpp v2.5.3 improves the default vix build experience. Build output is now cleaner, and detailed internal information such as graph state, artifact cache metadata, project paths, and CMake variables is hidden unless debug logging is enabled. The build command also receives a unified diagnostic style for CMake, compiler, linker, sanitizer, runtime, and template-related errors. The default build path was also improved to focus on the main project target instead of always rebuilding the full all target. When developers need the full CMake behavior, they can still request it explicitly:

vix build --build-target all

This improves no-op and focused rebuild performance while keeping the full build available.

Compiler and template diagnostics

Vix.cpp v2.5.3 improves compile-time error rules with shorter messages, focused hints, code frames, and consistent at: output. Template diagnostics also receive important improvements. The release adds cleaner diagnostics for concepts, coroutine awaiters, invalid overrides, object slicing, downcasts, and template substitution failures. This matters because advanced C++ errors are often technically correct but difficult to read. Vix does not replace the compiler. It adds a higher-level diagnostic layer that helps users find the relevant part of the error faster.

Test workflow

Vix.cpp v2.5.3 improves vix tests with Vix-native output styling. The test command now has a cleaner header, progress line, success summary, and failure diagnostics. It also extracts failed test names and useful error messages instead of dumping raw runner output by default.

The release adds:

vix tests --raw
vix tests --test <name|pattern>
vix tests -R <name|pattern>

vix tests --raw keeps raw internal test runner output available when needed. Filtered test execution makes it easier to run one test or a subset of tests while keeping the command aligned with familiar CTest-style workflows.

Check workflow

Vix.cpp v2.5.3 improves vix check. The command now uses cleaner Vix-native output with progress lines, timing summaries, and reduced default noise. For project mode, sanitizer checks now validate the sanitizer build by default without forcing runtime execution. Runtime validation remains explicit through:

vix check --san --run

Script mode also receives cleaner output for:

vix check file.cpp

and:

vix check file.cpp --san

Successful CMake and Ninja logs no longer leak into normal output during checks.

Development session engine

Vix.cpp v2.5.3 adds a dedicated vix dev session engine. The new development flow includes target-aware rebuild orchestration and a DevFileIndex for faster file watching using filtered file indexing, modification time, and file size comparisons. The dev watcher now ignores build folders, .git, .vix, docs, generated output, and unrelated files. Dev rebuild output now uses real Ninja progress instead of a fake spinner animation. Terminal output is cleared before application restarts, which prevents stale application output from mixing with rebuild output. The result is a cleaner and more reliable development loop.

Dedicated threadpool and kv modules

Vix.cpp v2.5.3 moves the thread pool implementation out of core and into the dedicated threadpool module. It also adds kv as a dedicated Vix module for durable local-first key-value storage. This improves module boundaries and prepares the runtime for cleaner dependency ownership. Core should not own every runtime facility directly. Moving threadpool and kv into standalone modules makes the architecture easier to maintain and package.

Highlights

  • Added vix replay for recording, inspecting, listing, cleaning, and replaying previous executions.
  • Added replay support for project runs and single-file script runs.
  • Added local replay storage under .vix/runs/.
  • Added vix replay last, vix replay failed, vix replay show, vix replay list, and vix replay clean.
  • Added opt-in replay recording through vix run --replay.
  • Added opt-in OpenAPI/docs mode through vix run --docs.
  • Added --tsan support for ThreadSanitizer script runs.
  • Added shared runtime error location helpers and runtime code frames.
  • Improved sanitizer and non-sanitizer crash diagnostics.
  • Added the incremental build graph foundation for vix build.
  • Added compile database import from compile_commands.json.
  • Added Ninja build edge import from build.ninja.
  • Added a guarded target-aware graph executor.
  • Added BuildStyle for consistent build output and diagnostics.
  • Added Vix-native output styling for vix tests.
  • Added vix tests --raw.
  • Added filtered test execution through vix tests --test and vix tests -R.
  • Added Vix-native output styling for vix check.
  • Added a dedicated vix dev session engine.
  • Added DevFileIndex for faster dev-mode file watching.
  • Added threadpool as a dedicated Vix module.
  • Added kv as a dedicated Vix module for durable local-first key-value storage.

Compatibility

Vix.cpp v2.5.3 introduces no breaking changes. Replay recording is now opt-in. Normal vix run executions no longer create .vix/runs/ unless --replay is passed. OpenAPI/docs mode is now opt-in. Documentation generation for vix run is disabled by default unless --docs is passed. CMake/Ninja remains the stable default build execution path. The experimental graph executor is guarded behind:

VIX_GRAPH_EXECUTOR

The full CMake all build remains available through:

vix build --build-target all

Notes

Vix.cpp v2.5.3 is an important step toward a more observable C++ runtime workflow. The release improves how Vix records executions, explains runtime crashes, formats compiler and template errors, manages test output, checks projects, watches files, and prepares future incremental builds. The deeper direction is clear: Vix is becoming a C++ development environment where build, run, test, check, dev, diagnostics, and replay are part of one coherent workflow.