All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
Fix header-only dependency handling in vix run
-
Fixed incorrect linking of header-only dependencies in auto-generated CMake
The CLI no longer attempts to link all inferred dependency aliases blindly.
-
Detect compiled dependencies using
CMakeLists.txtOnly dependencies that define build targets are treated as compiled libraries.
-
Link only valid CMake targets
Uses
if(TARGET ...)to ensure safe and correct linking during build. -
Avoid linking header-only libraries
Header-only packages without CMake targets are no longer passed to
target_link_libraries, preventing build errors. -
Fixed runtime error
target_link_libraries(... gk::pdf) target not foundThis restores full support for header-only packages while maintaining correct behavior for compiled dependencies.
Improved dependency handling for compiled packages
-
Fixed
vix rundependency handling for compiled librariesDependencies are now correctly integrated into CMake with proper
add_subdirectoryordering, ensuring reliable builds. -
Load dependencies from
vix.lockThe CLI now uses the lockfile as the source of truth instead of relying on header-only detection, improving determinism and correctness.
-
Support for
header-and-sourcepackagesPackages that include both headers and source files are now treated as compiled libraries and handled correctly during build.
-
Improved initialization order for dependencies
Ensures correct build order for interdependent modules such as
core,wal,store, and others. -
Enhanced
ScriptCMakereliabilityBetter handling of non header-only dependencies, making builds more robust across different package types.
Improved command UX and dependency detection
-
Standardized help output across commands (
add,remove,new,p2p)All commands now follow a consistent structure with:
- clear usage
- practical examples
- explanation of what happens
-
Switched to product-style CLI help
Help messages are now easier to read and more developer-friendly, improving onboarding and daily usage.
-
Improved overall CLI readability and developer experience
- cleaner output
- more consistent formatting
- better command interactions
-
Fixed dependency install detection
The
vix depscommand no longer incorrectly reports "up to date" on first install. -
Ensured consistent behavior across all CLI commands
Improved install experience and cache management
-
Simplified and cleaner output for
vix install -
Reduced noise and improved readability during dependency installation
-
New
vix cachecommandManage local cache directly from the CLI:
vix cacheThis introduces better control over cached packages and improves developer workflows.
- General UX improvements across CLI commands
- More consistent output formatting
- Better feedback during operations
- Smoother command interactions
Deterministic dependency installation
-
Introduced deterministic dependency resolution for
vix installDependencies are now installed in a fully predictable and reproducible way, ensuring consistent builds across environments.
-
Improved registry integration
- Better handling of dependency graphs
- More reliable installs across machines and CI environments
-
Submodule synchronization improvements
- Ensures correct versions are resolved and linked during installation
- Add
vix.jsonfor all modules, enabling registry and package management. - Introduce universal header-and-source support for core modules.
- New CLI utilities for publishing, syncing, and displaying tips in registry workflows.
- Low-level async runtime improvements (scheduler, coroutines, timers, thread pool).
- Enhanced HTTP caching engine with pluggable stores, policies, and keying strategies.
- Extended crypto primitives: AEAD, HMAC, KDF, signatures, and random utilities.
- DB module improvements: pool, drivers, transactions, migrations.
- WebSocket & P2P enhancements: client/server support, edge sync, discovery, transport layers.
- Middleware & P2P HTTP: routing, session, pipeline, and security modules.
- Validation header-only improvements: schemas, rules, and error handling.
- CLI
Ui.hppimproved tip display formatting. - Core printing and reflection system refined for runtime debugging.
- JSON module: release v1.10.0 with registry integration.
- Minor API adjustments in ORM, sync, utils, and net modules.
- Bug fixes and header/source consistency across modules.
- Registry publish errors: local registry tips added when
pull --ff-onlyfails. - WebRPC and validation publishing conflicts resolved.
- Various module header/source mismatches corrected.
- Version 1.43.0 consolidates registry, package management, and module release workflow.
- All modules now include a
vix.jsonfor Vix package system integration. - Developers should run
vix registry syncbefore publishing new versions to avoid pull conflicts.
New universal printing system
Added a powerful type-aware printing engine inspired by Python's print().
The new vix::print module can render most common C++ types automatically:
- STL containers (
vector,map,set, etc.) - tuples and pairs
std::optionalstd::variant- smart pointers
- chrono types
- filesystem paths
- nested structures
Example:
#include <vix/print.hpp>
vix::print(42, "hello", std::vector{1,2,3});Additional utilities:
vix::pprint()– multi-line pretty printingvix::sprint()– format values to stringvix::print_each()– iterate and display rangesvix::print_table()– map-style table displayvix::print_stats()– numeric container statisticsvix::print_diff()/vix::print_check()– debugging helpers
The system is extensible via:
operator<<- ADL
vix_format(...) vix::formatter<T>specialization
Added new printing examples:
examples/print/
Improved interactive navigation
Interactive menus now support both arrow keys and Vim-style navigation.
| Action | Keys |
|---|---|
| Up | ↑ or k |
| Down | ↓ or j |
| Confirm | Enter or l |
| Cancel | Esc, h, q |
| Toggle | Space |
| Toggle all | a |
This improves usability on compact keyboards and Vim-style workflows.
-
feat(cli): support
vix new .(in-place project scaffold)You can now scaffold a Vix project directly in the current directory:
vix new .If the directory is not empty, Vix prompts before overwriting template files.
-
feat(cli): support npm-style scoped packages (
@namespace/name)Vix now supports scoped package names similar to npm:
vix add @vix/http vix add @gaspardkirira/api_app
This enables clearer ecosystem organization and registry namespaces.
vix tests now automatically configures and builds the project when CTest is not ready.
- Automatically runs
vix check --testsif the build directory does not exist - Automatically builds when
CTestTestfile.cmakeis missing - Re-resolves the preset build directory after auto-build
- Preserves the selected preset to avoid mismatched build directories
vix testsworks on fresh clones without requiring a manualvix check- Removes unnecessary friction in the test workflow
- Improves overall CLI robustness
Vix now supports automatic version resolution when adding packages.
vix add namespace/nameand Vix will resolve the latest version automatically. This release also improves transitive dependency installation and ensures vix.lock correctly pins the resolved commit for deterministic builds.
You can now use libraries installed from the Vix registry directly inside a single .cpp file:
vix run server.cpp --auto-deps- Automatically detects installed dependencies in
.vix/deps - Injects the correct
-Iinclude paths - Avoids duplicate include flags
- No
CMakeLists.txtrequired
vix run src/server.cpp --auto-deps=upIn addition to the script directory, Vix can now search for .vix/deps in parent directories.
Useful for nested layouts and running scripts from subfolders.
- Introduced
AutoDepsMode(None,Local,Up) - Proper validation and error handling for invalid
--auto-depsvalues - Improved
vix run --helpdocumentation - Cleaner separation between runtime args (
--args) and compiler flags (--)
- Generate a rich registry entry when publishing a new package:
- Adds structured
apimetadata (format,generatedBy,updatedAt) - Includes
constraints,dependencies,exports,maintainers, andquality - Derives defaults from
vix.jsonwhen available
- Adds structured
- Automatically refreshes
api.updatedAton every publish - Keeps backward compatibility with existing registry entries
- Ensures
versionsis always a valid object before insertion
Registry entries are now:
- More consistent
- Self-describing
- Future-proof for tooling and validation
- Closer to production-grade metadata from first publish
- publish: always include published version (
tag+commit) inside registry entryversionsfield
Registry validation requires a non-empty versions object.
Previously, vix publish created a registry entry with:
{
"versions": {}
}This caused the validate_registry_pr workflow to fail before auto-merge.
- Registry PRs are now immediately valid
- Auto-merge works reliably without manual intervention
- No need to manually patch
index/*.json registry_index_from_tagsremains compatible
Publishing a new library version is now fully automated and stable.
- CLI: improve
vix publishmessaging when triggering registry index updates - Better feedback after tag push and registry workflow trigger
- Clearer output when version is already registered
- Confirmed fully automatic tag-driven registry workflow
- Auto PR creation + auto-merge stabilized using bot token
- Minor CLI output refinements
- No breaking changes
vix unpublishcommand Allows package owners to remove an existing registry entry in a controlled way.- Full CLI integration for unpublish flow (dispatch + command wiring).
- Tag-driven registry compatibility (CLI aligned with automated
index_from_tagsworkflow).
- Registry sync stability (
vix registry sync) with stricter reset and checkout handling. - Publish / remove flows aligned with Git tag–based version indexing.
- CLI registry commands hardened for consistency with automated GitHub Actions pipeline.
- Registry index now derives owner/repo from
repo.urlinstead of namespace. - Improved compatibility with automated registry version generation from Git tags.
- CLI prepared for fully automated registry maintenance workflow.
This release strengthens the reliability of the Vix Registry and completes the tag-driven publication lifecycle.
- CLI (new) : Generate modern
vix.jsonfor header-only libraries. - Replace deprecated
repofield withrepository. - Set
typeto"header-only"for--libtemplate. - Add
include,keywords, andauthorsfields to generated manifest.
This is a patch release improving CLI scaffolding consistency with the Vix Registry specification. No runtime behavior changes.
- CLI (Doctor): Fix MSVC build failure (
which_vixnot declared on Windows). - Removed duplicate
<vix/utils/Env.hpp>include. - Added missing
<cstdio>include for_popen/popenusage. - Minor MSVC compatibility adjustments.
This is a patch release focused on Windows/MSVC build stability. No runtime behavior changes.
- Silenced MSVC warnings in CLI module:
- C4505 (unreferenced static functions removed)
- C4189 (unused local variable)
- Scoped Unix-only helpers under
#ifndef _WIN32to avoid Windows-only compilation warnings. - Removed deprecated
std::getenvusage in CLI commands in favor ofvix::utils::vix_getenv(MSVC C4996 clean).
- Cleaner cross-platform compilation (Windows + Linux/macOS).
- More deterministic Windows builds (no internal linkage noise).
- Safer environment variable handling in
doctor,upgrade, anduninstall.
- Minor CLI refactoring to ensure functions are only compiled where used.
- No behavioral changes.
This release introduces a complete install lifecycle for the Vix CLI, including environment diagnostics, secure upgrades, uninstall logic, and install metadata tracking.
Environment and install health checker.
- Detects OS and architecture
- Detects current binary location
- Reads
install.jsonmetadata - Checks PATH consistency
- Verifies required tools (curl/wget, tar, sha256, etc.)
- Optional GitHub latest release check (
--online) - JSON output mode (
--json) - Proper exit codes for CI usage
Example:
vix doctor
vix doctor --online
vix doctor --json --onlineSecure binary upgrade mechanism.
- Resolves latest tag from GitHub
- Verifies sha256
- Verifies minisign (when available)
- Atomic install (tmp + move)
- Writes structured
install.jsonmetadata - Preserves install directory
Example:
vix upgradeRobust uninstall command.
- Removes current binary
- Supports
--allto remove all detected binaries in PATH - Supports
--purgeto delete local store/cache - Gracefully handles permission errors
- Provides sudo hint when required
- Post-check detects remaining binaries in PATH
Example:
vix uninstall
vix uninstall --all --purgeUpgrades now generate structured metadata:
{
"repo": "vixcpp/vix",
"version": "v1.35.0",
"installed_version": "v1.35.0",
"installed_at": "...",
"os": "linux",
"arch": "x86_64",
"install_dir": "...",
"download_bytes": 0,
"asset_url": "..."
}This enables:
- Reliable diagnostics (
doctor) - PATH validation
- Upgrade comparison
- Future telemetry-safe tooling
The CLI help output is now structured and linked:
- Section-based layout
- Quick start block
- Install lifecycle commands surfaced
- Documentation links included
- Registry link added
Improves discoverability and developer experience.
This release does not modify runtime modules.
Changes are isolated to the CLI module.
Vix.cpp continues to move toward a fully self-managed, production-grade runtime.
v1.22.13: sync cli/middleware/p2p and extend middleware example
- update submodules: cli, middleware, p2p
- tweak umbrella CMakeLists for module sync/build stability
- update examples/mega_middleware_routes.cpp
- Fixed release and CI failures caused by missing
spdlog::spdlog_header_onlyon clean environments. - Added a robust FetchContent fallback for header-only spdlog to ensure reproducible builds.
- Stabilized cross-compilation and GitHub Actions release workflows.
- Utils module now auto-fetches spdlog in header-only mode when not provided by the system.
- Preserved ABI safety by enforcing header-only logging dependencies.
- No runtime behavior changes.
- No API breakage.
- This release only improves build reliability and release stability.
- cmake(umbrella): fix Asio detection and fallback handling
- Ensure standalone Asio is correctly detected from
third_party/asio - Prevent hard failure when Asio is missing on CI runners
- Centralize Asio include path via
vix::thirdparty_asiointerface target - Stabilize P2P build by fixing Asio integration at umbrella level
- Ensure standalone Asio is correctly detected from
-
p2p: fix Asio integration
- Asio is now strictly provided by the umbrella build
- Remove implicit
<asio.hpp>includes and non-deterministic paths - Reliable builds in local, CI, and downstream projects
-
core: fix header guard in
Request.hpp- Prevent collisions and undefined behavior in modular builds
- Clarify umbrella vs standalone responsibilities
- Deterministic and reproducible CMake configuration
- core: unify core modules and clarify responsibilities
- build: harmonize CMake and package configuration
- modules: sync cache, cli, db, net, p2p, and sync
- GitHub release workflow
- Security layout structure
- Advanced middleware routing example
- Clarify scope and non-goals
- Document Vix Console contract and logging separation
Release focus: developer experience, runtime safety, and clear separation between dev console and production logging.
Introduces a Node.js–inspired, zero-config runtime console available directly via:
#include <vix/console.hpp>
vix::console.log("Hello");Designed for developer-facing output with strict runtime guarantees.
- Console works immediately after
#include - No init calls
- No setup required
- Default level:
info debugOFF by defaultlog == infowarn/error→stderrlog/info/debug→stdout
- If a level is filtered, the call is near-zero cost
- No message construction
- No allocation
- No lock
- No I/O
- Each console call emits a single atomic line
- Supports:
VIX_CONSOLE_LEVELNO_COLORVIX_COLOR
- Environment is read once (startup / first use)
- Behavior is fixed afterward
- Prevents accidental performance collapse from excessive
log/infousage warnanderrorare never suppressed
- Clearly defines:
- Scope
- Guarantees
- Constraints
- Non-goals
vix::console→ runtime / developer outputvix::utils::Logger→ production logging, structured output
- No
console.table - No
console.group - No
console.time - No
console.count
Advanced debugging and observability belong to vix::utils::Logger.
- Vix Console is intentionally not a production logger
- Borrows Node.js developer trust
- Enforces C++ runtime discipline
- Designed to be safe even if developers do not read documentation
docs(core): document Vix Console contract and integrate core console moduledocs(console): clarify scope, non-goals, and logger separation
- chore(cli): bump CLI submodule to v1.19.12 (cleaner sanitizer output, unified timeout logic, refined code frames)
- docs/examples: add
examples/vix_routes_showcase.cpp(HTTP routes + query params showcase)
This release stabilizes the new DB core module, improves CLI runtime output, and fixes several build/link issues across modules.
- DB/ORM separation is now fully aligned:
vix::dbis the low-level core layer,vix::ormremains optional sugar on top. - CLI runtime output and error UX were refined to be clearer and less noisy.
- Improved reliability for MySQL detection/linking in diverse environments.
- Fix: prevent duplicate runtime logs in some failure paths.
- Improve: runtime error detectors and diagnostics formatting.
- Improve: UX cleanup for run/dev flows (clearer output, less noise).
- Fix: CMake/source/linkage issues across DB drivers.
- Fix: MySQL Connector/C++ discovery via fallback alias target (more robust CI/local setups).
- Improve: driver linkage consistency and feature flag reporting.
- Introduced
vix::dbas a core module and decoupled ORM tooling/drivers accordingly. - Synced submodules after DB/ORM compatibility fixes.
- If you enable
ORM, it automatically impliesDB. - If MySQL is enabled, ensure Connector/C++ is available (the fallback alias helps when CMake configs are missing).
- Introduce Python-like compiler error rendering with code frames
(file:line:column + surrounding context) - Highlight only the faulty line with a red caret (
^) for instant readability - Safely truncate very long lines with UTF-8–aware ellipsis
- Add precise, Vix-style hints for common mistakes
(e.g.
Response::json()misuse) - Hide verbose alternative diagnostics unless log level is
debugortrace - Improve
run/ script error reporting for clearer, actionable diagnostics
- Restore live Ninja progress output (
[x/y %]) during builds - Filter noisy compiler command output in live mode
- Keep full raw build logs in
build.logfor post-mortem diagnostics - Let
ErrorHandlerdisplay structured, human-readable errors on failure - Introduce progress-only build output mode
- Fix unused variables and header warnings in build pipeline
- Minor internal cleanups to support improved error UX
- No breaking changes
Introduction d’un layout app-first pour les modules Vix :
- Includes explicites et sûrs
- Règles de linkage claires et déterministes
- Préparation à un écosystème modulaire stable et scalable
- Nouveau
vix depscommand pour inspecter et gérer les dépendances - Correction du flux registry pour les dépendances transitives
- Meilleure cohérence entre registry local, store projet et modules
- Registry plus robuste pour les projets multi-modules
- Amélioration UX des commandes liées aux dépendances
- Base solide pour le futur workflow registry publish / consume
Clarification nette entre :
-
Modules applicatifs
-
Modules système
-
Dépendances registry
-
Réduction des comportements implicites (includes / link automatiques)
- CLI :
depscommand - Inspection claire des dépendances projet
- Support du registry dans le graphe de dépendances
- Correction du workflow de résolution des dépendances registry
- Stabilisation du store projet lors des ajouts / suppressions de deps
- Registry publish workflow
- Commande CLI dédiée pour publier vers le registry Vix
- Préparation du pipeline : développeur → registry → consommateurs
- Bump CLI pour intégrer le workflow registry publish
- Nettoyage interne du flux release
sync,search,add- Fonctionnement 100 % offline-first après synchronisation
- Dépendances isolées par projet
- Nettoyage et GC du store
- Couleurs unifiées
- Helpers UI partagés
- Sorties plus lisibles et cohérentes
- Ajustements release et tooling
- Stabilisation du pipeline de versioning
- Suivi correct des vendored CMake deps
- Correction des erreurs d’installation chez les développeurs
- Bump CLI associé
- Major architectural cleanup and modular extraction
- P2P stack now fully decoupled from core
- Cache, net, and sync promoted to first-class modules
- Clear dependency layering across the ecosystem
-
net Low-level networking primitives and reachability utilities (connectivity probing, network helpers).
-
cache Standalone HTTP cache engine with pluggable stores (memory, LRU, file-based).
-
sync Offline-first synchronization engine (WAL, outbox, retries, sync workers).
- Removed embedded cache and sync implementations
- Core now focuses strictly on:
- HTTP server
- routing
- request / response lifecycle
- sessions & configuration
- Much cleaner public surface and faster compile times
- Explicit dependency on cache (no implicit coupling)
- JSON and utils remain optional
- Scoped strictly to HTTP middleware pipeline
- Extensive smoke test coverage restored and stabilized
Integrated v0.5.1 (latest)
- Removed dependency on
vix::core - Requires
vix::netonly sync,cache, andutilsare optional- Cleaner, modular build
- Internal refactors (discovery, node, router)
- Complete secure transport layer (Phase 6)
- Encrypted envelopes with AEAD
- Per-peer session keys derived from handshake
- Replay protection using nonce counters
- Decrypt-before-dispatch logic
- Handshake & control messages kept plaintext
- Foundation for secure WAL / Outbox sync (Phase 6.6)
- AEAD support (encrypt + authenticate)
- Extended envelope format (nonce + auth tag)
- Session key storage per peer
- Secure channels with nonce tracking
- NullCrypto implementation for development
- HTTP bootstrap service for peer discovery
- Bootstrap.hpp and BootstrapHttp.cpp
- Extended node lifecycle for bootstrap integration
- Manual test registry added
net ├─ cache ├─ sync └─ p2p └─ (optional sync integration)
core └─ middleware └─ cache (required)
This release establishes a clean, scalable foundation for:
- offline-first sync
- secure edge routing
- future P2P + WAL integration
- long-term maintainability
- CLI (run): Reuse the last successful build preset instead of defaulting to
dev-ninja, ensuring consistent behavior betweenvix buildandvix run. - CLI (run): Cleaned up script build error handling to provide clearer and more actionable diagnostics.
- CLI (run): Improved logging of environment declarations during script execution for better debugging and transparency.
- More predictable run flow after builds across presets.
- Smoother iterative workflows (build → run) with fewer surprises.
No breaking changes. This release focuses on stability and correctness of the CLI build/run pipeline.
-
CLI: Fixed
--linker lld|moldintegration.- Fast linker flags are now applied via
CMAKE_*_LINKER_FLAGS(EXE,SHARED,MODULE) to ensure the selected linker is reliably used at link time. - Removed incorrect propagation of linker flags through
CMAKE_C_FLAGS/CMAKE_CXX_FLAGS, preventing CMake “unused variables” warnings and inconsistent behavior.
- Fast linker flags are now applied via
-
CLI: Improved
run/buildflow integration.- Unified preset and build-directory resolution across
RunDetail,RunFlow, andRunCommand. - Fixed edge cases that could lead to missing helper symbols or mismatched build state during execution.
- Unified preset and build-directory resolution across
- Cleaner and more predictable linker configuration under CMake.
- Improved robustness of the CLI execution pipeline.
- No breaking changes.
This release focuses on CLI correctness, toolchain reliability, and a more stable execution model when using fast linkers and advanced build configurations.
- core: remove logger context and console synchronization from HTTP access logs, reducing contention under load
- utils: snapshot
spdloglogger instances to avoid global mutex contention and improve logging throughput
- cli(run): remove capture-based configure phase and switch to live execution for more predictable runtime behavior
- cli: clean and stabilize CMake output during configure while keeping build and run steps intact
- cli: remove dead helpers left after the build UX rewrite
- Internal cleanup across
cli,core, andutilsmodules - No breaking changes
This release focuses on runtime performance, log scalability, and CLI robustness, especially under high load and iterative development workflows.
-
CMake / Packaging
- Fixed
find_package(Vix)failures caused by missingBoost::filesystem/Boost::systemtargets. - Ensured all required dependencies are resolved before loading
VixTargets.cmake. - Removed deprecated
FindBoostbehavior in exported configs (CMP0167-safe). - Stabilized consumer builds on macOS (AppleClang + Homebrew Boost) and Linux.
- Fixed
-
Core
- Removed
Boost::filesystemfromvix::corepublic link interface. - Restricted Boost dependency to
Boost::systemonly (Asio / Beast). - Updated HTTP server internals and headers accordingly.
- Prevented Boost symbols from leaking into consumer CMake targets.
- Removed
-
WebSocket
- Cleaned
vix::websocketexported link interface. - Fixed missing
Boost::systemtarget errors in downstream applications. - Improved module behavior with modern CMake dependency resolution.
- Cleaned
- More robust umbrella CMake configuration for multi-module installs.
- Clearer separation between internal dependencies and public API surface.
- Better cross-platform developer experience when using:
find_package(Vix CONFIG REQUIRED)
-
vix build --target <triple>: cross-compilation support with auto-generated CMake toolchain.- Automatically generates
vix-toolchain.cmake - Passes
CMAKE_TOOLCHAIN_FILEandVIX_TARGET_TRIPLE - Cache-safe: reuses build directories when configuration is unchanged
- Compatible with
--preset,--static,--clean
- Automatically generates
-
Optional
--sysroot <path>support for cross builds- Enables proper discovery of target libraries (e.g. zlib)
- Designed for real cross environments (ARM, embedded, SBCs)
- Smarter build directory reuse via configuration signatures
- More explicit error messages when cross toolchains or sysroots are missing
vix installcommand to install/setup a Vix project or.vixpkgartifact.- Middleware integrated into the default Vix runtime (works out-of-the-box).
- A full set of middleware-focused examples:
- Auth (API key, JWT, RBAC)
- CORS (basic/strict)
- CSRF (strict + demos)
- Rate limiting (servers + pipeline demos)
- IP filtering (servers + pipeline demos)
- Body limit
- Compression
- HTTP cache
- ETag
- Security headers
- Static files
- JSON/form/multipart parsing
- Group builder examples
- Updated CMake configuration and
VixConfig.cmaketo expose the middleware stack correctly for downstream projects. - Updated README/docs to reflect the new install workflow and middleware usage.
- No breaking changes expected.
- Fully isolated the REPL from CLI commands (
build,run,check,tests,verify) - Disabled execution of CLI commands and flags inside the REPL
- Removed CLI flags from REPL autocompletion to avoid misleading suggestions
- Disabled
help <command>and CLI command listing inside the REPL - Improved REPL UX consistency with a sandboxed, Bun/Deno-like experience
- The REPL is now a pure interactive sandbox for:
- math expressions
- variables
- JSON literals
print / printlnVixAPI (cd,cwd,env,args,exit, etc.)
- All project-related CLI commands must now be executed outside the REPL
- Removed remaining runtime dependencies between the REPL and the CLI dispatcher
- Simplified REPL command completion logic
-
REPL is now the default mode Running
vixstarts the interactive shell automatically (no morevix repl). -
Modern runtime experience Behavior aligned with Python, Node.js, and Deno.
- Default interactive REPL when running
vix - Dedicated
README_REPL.mdwith:- Math expressions
- Variables
- JSON usage
print/println- Built-in
VixAPI examples
- Improved CLI documentation (
docs/modules/cli.md)
- REPL argument evaluation:
- Correct handling of string literals
- Math expressions with variables
- Mixed arguments (
println("x =", x+1))
- REPL execution flow stability
- Error messages clarity in interactive mode
- Overall CLI UX consistency
- Removed
vix replas a required entry point - REPL is now the primary interaction mode
- CLI documentation updated to reflect new behavior
- REPL flow refactoring and cleanup
- Better separation between CLI dispatcher and REPL runtime
- Documentation structure improvements
- JSON literals must be strictly valid JSON
(
{"key":"value"}, not{key, value})
vix check: validate a project or compile a single.cppfile without execution.vix tests: run project tests (alias ofvix check --tests).vix verify: verify packaged artifacts and signatures.- CLI reference documentation (
docs/vix-cli-help.md). - Pull Request template to standardize contributions.
- Improved global CLI help output formatting and readability.
- Updated README with clearer CLI usage and script mode examples.
- Updated security testing documentation with realistic, tool-based practices.
- Improved contributing guidelines and code of conduct.
- Deprecated
SECURITY.mdin favor of a more accurate security testing guide.
- This release significantly improves CLI usability, testing workflow, and project governance.
- Recommended upgrade for all users relying on the Vix CLI.
- Fixed
vix packpotentially blocking when minisign required interactive input. - Prevented unintended blocking behavior when signing is auto-detected.
- Integrated new CLI signing modes from vix-cli v1.9.2:
--sign=auto(default, non-blocking)--sign=never--sign=required(fail-fast, explicit)
- More predictable and professional packaging workflow.
- Clear separation between optional and mandatory cryptographic signing.
- Improved developer experience for CI/CD and non-interactive environments.
- Updated
modules/clito the latest version. - Improved
vix packuser experience:- Minisign password prompt is now visible when
--verboseis enabled. - Prevents silent blocking during package signing.
- Minisign password prompt is now visible when
- Added
vix verifycommand:- Manifest v2 validation.
- Payload digest verification.
- Optional minisign signature verification.
- Auto-detection of
dist/<name>@<version>packages.
- Improved CLI help output:
- Clearer command grouping.
- Better descriptions for
packandverify. - More practical usage examples.
- Clear separation between signed and unsigned packages.
- Environment-based key discovery:
VIX_MINISIGN_SECKEYfor package signing.VIX_MINISIGN_PUBKEYfor signature verification.
- More robust verification feedback and strict modes.
- Smoother packaging and verification workflow.
- More predictable CLI behavior with explicit output.
- Improved diagnostics in verbose mode.
This release focuses on polishing the CLI, strengthening package security, and delivering a professional packaging & verification workflow for Vix.
- New CLI command:
vix pack. - Package a Vix project into
dist/<name>@<version>/. - Optional
.vixpkgarchive generation. - Manifest v2 (
vix.manifest.v2) with:- Package metadata (name, version, kind, license).
- ABI detection (OS, architecture).
- Toolchain information (C++ compiler, standard, CMake).
- Layout flags (include, src, lib, modules, README).
- Exports and dependencies from
vix.toml.
- Payload integrity via SHA256 content digest.
- Stable payload hashing excluding generated files.
- Optional Ed25519 signature using
minisign:meta/payload.digestmeta/payload.digest.minisig- Secret key via
VIX_MINISIGN_SECKEY.
- CLI help updated to include
vix pack. - Internal CLI and middleware refactoring to support packaging flow.
- Signing is optional and enabled only when
minisignis available. - Manifest generation avoids self-referential hashing.
- Fixed ORM migrator build after driver abstraction refactor.
- Replaced deprecated MySQL connection APIs with the factory-based
Connectioninterface. - Fixed CI failures caused by abstract
Connectioninstantiation. - Ensured the migrator compiles correctly when database drivers are disabled.
- Fixed JSON umbrella integration:
<vix.hpp>now reliably exposesvix::jsonbuilders (o,a,kv). - Fixed missing
OrderedJsontype in coreRequestHandler. - Fixed compilation errors in examples relying on implicit JSON availability.
- Fixed
vix_jsonCMake include paths for both build-tree and install-tree usage.
- Improved Core ↔ JSON module boundary consistency.
- Stabilized umbrella build (
vix::vix) dependency propagation.
- No breaking API changes.
- Existing applications continue to work without modification.
- core/http: fixed
RequestHandlerbuild failures by using the localOrderedJsonalias and preventing name lookup from resolving to POSIX::send()(now usesthis->send()internally). - json: improved unified include header
vix/json.hppand ensuredOrderedJsonexposure is consistent across the JSON module.
Release date: 2025-12-17
- Finalized HTTP GET cache system across core and middleware.
- Integrated cache as a first-class middleware in the request pipeline.
- Added comprehensive cache and middleware tests.
- Achieved strict warning-free builds (
-Weffc++) across all modules.
- Completed HTTP cache implementation (Memory, File, LRU stores).
- Introduced cache utilities (
CacheKey, HTTP header helpers). - Clean integration with
HTTPServer,Router, andSession. - Added HTTP cache middleware for transparent GET caching.
- Added periodic middleware support for timed/background tasks.
- Middleware pipeline refined and stabilized.
- Enforced strict warning hygiene with
-Weffc++. - Fixed:
- sign-conversion warnings
- ignored return values (
chdir,setenv, etc.) [[nodiscard]]API misuse in examples
- Isolated GCC/libstdc++ false positives (
std::regex) without masking project warnings. - Improved and unified CMake configuration across all modules.
- Added and stabilized HTTP cache smoke tests.
- Added middleware-level tests validating cache behavior.
- Improved test CMake configuration for consistency.
coremiddlewarecliwebsocketormutilsjson
- No breaking API changes.
- Focus on correctness, performance, and long-term maintainability.
- Stable foundation for upcoming offline-first and sync/WAL features.
- New ORM migrations engine with file-based
.up.sql/.down.sqlsupport - Internal migrator tool (
vix_orm_migrator) used by the CLI vix ormcommand with subcommands:migraterollbackstatus
- Support for CLI flags:
--db,--dir,--host,--user,--pass,--steps
- Environment-based configuration via
VIX_ORM_* - Automatic project root and migrations directory detection
- New ORM documentation:
- Migrations overview
- Batch insert
- Repository & QueryBuilder examples
- Application-level ORM workflow (no longer tied to ORM module paths)
- ORM examples moved from source tree to documentation
- ORM usage clarified to always target application databases
- CLI help improved with full ORM usage examples
- README updated to reflect new ORM & CLI capabilities
- Logger initialization issues (
static auto& logger) across:- core
- utils
- middleware
- websocket
- CMake linkage inconsistencies between modules
- Incorrect default database usage during migrations (
vixdbvs app DB) - Rollback failures caused by mismatched migration directories
- Legacy ORM example source files
- Deprecated ORM documentation pages
- Old migrate_init example binaries
- Databases must be created manually before running migrations
- Migrations are now strictly application-scoped
- Fixed SQLite integration in WebSocket module (missing includes, symbols, WAL usage).
- Fixed
SqliteMessageStorecompilation errors with propersqlite3.husage. - Split WebSocket router implementation into
.cpp(no implementation in headers). - Fixed Long Polling and WebSocket bridge consistency.
- ORM examples are now automatically disabled when MySQL support is OFF.
- Prevented MySQL-dependent ORM examples from breaking default builds.
- Improved umbrella CMake example filtering logic.
- Safer linking of optional modules (ORM, WebSocket).
- Reduced header coupling and improved compile hygiene.
- More robust optional-feature handling (SQLite / MySQL / ORM).
- Add SQLite-based message store with WAL support (
SqliteMessageStore) - Introduce long-polling fallback for unstable or offline-first environments
- Improve WebSocket client lifecycle (reconnect, heartbeat, write queue)
- Fix header/source separation issues (remove cpp logic from headers)
- Normalize message payload handling using typed JSON
{ type, payload } - Improve router and server API consistency
- Internal cleanup and error-handling improvements
- Fix CMake integration issues when used from umbrella Vix project
- Ensure ORM targets are correctly exported and linkable by Vix apps
- Minor build-system cleanups
- Synchronize
websocketandormmodules with umbrella repository - Improve build stability and warning cleanup
- Stable ORM support:
vix::ormis now cleanly exported and linkable from external applications. - Simplified application CMake: apps only link what they use (
vix::vix,vix::orm). - Improved developer experience with
vix new,vix build, andvix dev.
- Exported
vix::ormtarget via the mainVixTargetsumbrella. - Robust MySQL Connector/C++ detection with fallback imported target.
- Cleaner README template generated by
vix new. - Explicit ORM opt-in in application CMake (
target_link_libraries(app PRIVATE vix::orm)).
- ORM no longer forces MySQL dependencies on core-only applications.
- Application CMake templates are now minimal and predictable.
- CLI scaffolding aligns with real-world usage (
vix dev, ORM optional). - Internal CMake logic cleaned and normalized across modules.
- Undefined references to
sql::mysql::get_driver_instance(). - Broken CMake detection when MySQL is installed without config files.
- Incorrect or obsolete ORM CMake config exports.
- Inconsistent ORM behavior between installed and local builds.
- Obsolete
VixOrmConfig.cmake.in. - Redundant MySQL pre-seeding logic in generated applications.
feat(orm): full ORM integration into Vix build system for v1.12.4
- Connected vix::orm to the top-level CMakeLists for correct package export.
- Updated VixConfig.cmake.in to export ORM targets (vix::orm, drivers, includes).
- Refreshed ORM examples: batch_insert_tx, transactions, migrations, querybuilder, error handling.
- Updated CLI generator (vix new) to support ORM-ready application templates.
- Synced new commits across modules/orm and modules/cli to match the 1.12.4 API.
v1.12.4: major examples overhaul + core/cli/websocket sync
• Examples refactor: - Removed outdated examples (CRUD, ORM demos, legacy error-handling, trace_route, etc.) - Introduced new structured example layout: examples/http/ examples/http_crud/ examples/http_ws/ examples/orm/ examples/websocket/ - Added EXAMPLES_README.md and WebSocket example readme - Updated main.cpp with new Request/Response API
• WebSocket module: - Updated advanced + simple examples to new Runtime API - Added chat_room, simple_server, simple_client - Updated examples/websocket CMakeLists
• Core updates: - Improved Request/Response facade - Updated App.cpp, RequestHandler, Config, and umbrella headers - Synced module changes with the new HTTP DX
• CLI updates: - Integrated core/websocket changes for dev/run modes
• Root project: - Updated top-level CMakeLists.txt - Cleaned README for v1.12.4
This version brings a unified example structure and prepares Vix for the new DX-first API.
- New
vix devworkflow for full applications (not only single-file scripts). - Automatic project hot-reload using
run_project_watchfor CMake-based Vix apps. - Brand-new
DevCommand(vix dev) integrated into the CLI. - Spinner-based progress indicators for Configure / Build steps.
- Improved detection between script mode and project mode.
RunCommandrouting now supports watch mode for full project runs.- Unified dev experience:
vix devnow forwards to the correct execution flow with consistent UX. - Cleaner CLI output and improved developer hints/messages.
- Watcher not triggering correctly for some CMake-based projects.
- Missing includes and namespace issues inside the CLI module.
- Several small UX inconsistencies (e.g., duplicate “Ctrl+C” messages).
chore: prepare v1.12.2 (stdout auto-config, CLI refinements, submodule bumps)
This release improves stdout behavior, developer experience, and aligns all submodules with the latest work.
🧩 Core
- Added StdoutConfig (automatic stdout line-buffering via VIX_STDOUT_MODE)
- Apps launched via Vix runtime now default to line-buffered stdout
- Ensures consistent server log flushing across all HTTP/WebSocket apps
🧩 CLI
- Improved RunCommand: unified stdout export for presets/fallback/script mode
- More robust command runner with filtered live output + proper ErrorHandler usage
- Updated README and build configuration
- Ensures deterministic behavior for all build/run workflows
🔧 Umbrella (root)
- Updated CMakeLists.txt and README.md
- Bumped submodules: • modules/cli → latest dev commit • modules/core → latest dev commit
- Synced submodule pointers to match development branches
Version: v1.12.2
- Improved CLI UX for
vix run: cleaner output flow, removal of unwanted help banner at the end. - More robust app detection during
vix runto correctly handle root-level and nested applications. - Additional CMake configuration flags exported for external consumers (
VIX_WITH_JSON,VIX_WITH_OPENSSL,VIX_WITH_BOOST_FS,VIX_WITH_MYSQL,VIX_HAS_ORM).
- Major cleanup and restructuring of
cmake/VixConfig.cmake.in:find_dependency(...)now used instead of leaking unknown imported targets.- Exported targets now properly grouped under
vix::vixfor external linking. - Installation layout aligned with modern CMake packaging flow.
- Updated root
CMakeLists.txtto correctly install umbrella exports, avoiding missing-target errors duringfind_package(Vix CONFIG). - Synchronized all submodules to the latest development commits (core, utils, cli).
- Fixed application linking errors caused by missing transitive exports in v1.12.0.
- Fixed CLI module not exporting correct symbols for app execution.
- Fixed a regression where Vix runtime installs failed when JSON/backend options changed.
- Fixed configuration issues where external apps (using the generated config package) could not resolve dependencies.
- Deprecated internal export macros that are no longer necessary with the new generated config.
- Modular C++ framework structure with
core,orm,cli,docs,middleware,websocket,devtools,examples. Appclass for simplified HTTP server setup.- Router system supporting dynamic route parameters (
/users/{id}style). - JSON response wrapper using
nlohmann::json. - Middleware system for request handling.
- Example endpoints
/hello,/ping, and/users/{id}. - Thread-safe signal handling for graceful shutdown.
- Basic configuration system (
Configclass) to manage JSON config files.
- Logger integrated using
spdlogwith configurable log levels. - Improved request parameter extraction for performance.
- Path parameter extraction to correctly handle
string_viewtypes. - Fixed default response for unmatched routes (
404JSON message).
- Initial release of core module with working HTTP server.
- Basic routing system and request handlers.
- Simple example endpoints demonstrating JSON and text responses.
- Thread-safe server shutdown handling.
- Integration of performance measurement scripts (FlameGraph ready).
- Optimized route parameter parsing to avoid
boost::regexoverhead.
- Compilation errors due to
string_viewmismatch in request handler. - Minor bug fixes in App initialization and signal handling.
- Project skeleton created.
- Basic CMake setup and folder structure.
- Placeholder modules for
core,orm, andexamples.