Vize

Stability

Vize is moving toward a v1 alpha. The alpha contract is intentionally narrower than a stable v1 contract: it names the surfaces that should be usable by early adopters, while keeping room to change internals and experimental integrations quickly. The full project is not yet a completely production-ready toolchain; release decisions should use the production-readiness checklist. Deprecation windows, SemVer rules, and release-line support are spelled out in the support policy.

Versioning Contract

Before v1 stable, any prerelease can include breaking changes. Vize still treats breaking changes as release-note material, especially when they affect package entrypoints, CLI flags, config fields, diagnostic codes, or generated output.

The v1 alpha line uses these rules:

Surface Alpha expectation
Published package names Should remain available or ship with migration notes
Documented CLI commands and flags Should avoid silent behavior changes
Documented config fields Should keep names and value shapes stable unless release notes call out a change
Diagnostic codes listed in docs Should remain recognizable so suppressions and fix reports stay useful
Published Rust crate APIs Follow the per-crate tier and deprecation contract below
Unexported Rust crate internals May change without migration support before v1 stable
Generated code and virtual TS output May change when needed for correctness, compatibility, performance, or diagnostics

Runtime Support

The default Node.js floor for public npm runtime packages is Node 22, including oxlint-plugin-vize. The Oxlint plugin declares ^22 || >= 24 so Node 22 and Node 24 or newer are allowed while Node 23 stays outside the tested compatibility matrix.

The release workflow builds native packages for macOS, Linux, and Windows across x64 and arm64 where the package declares support. CI compatibility jobs cover the declared Node floor and the current project Node version.

The full fresh-install smoke matrix (.github/workflows/native-smoke.yml) runs on a weekly cadence and on demand, not on every PR push. It exercises the published package install path on GitHub-hosted runners for linux-x64-gnu, linux-arm64-gnu, darwin-arm64, and win32-x64-msvc; the remaining darwin-x64 and win32-arm64-msvc targets stay on architecture-specific hosted runners. The matrix runs against Node 22 and Node 24. Release tags remain blocked by the release workflow's tarball install smoke before npm packages publish. The runtime smoke checks vize --version, vize check, @vizejs/native through both require and import, and a @vizejs/vite-plugin vite build from installed tarballs.

Two declared Linux musl targets are not currently exercised by a hosted fresh-install runner. They are covered by per-platform build artifacts plus the @vizejs/native-* optional-dependency resolver until a containerized Alpine smoke can stage the matching native tarball:

Target Hosted runner gap Compensating coverage
linux-x64-musl No GitHub-hosted Alpine/musl VM is available as a native runner Build job emits the musl tarball; manual node:alpine smoke.
linux-arm64-musl Arm64 hosted runners are Ubuntu GNU, not Alpine/musl native hosts Build job emits the arm64 musl tarball; manual Alpine arm64 smoke.

Closing these gaps is tracked alongside #493.

The minimum supported Rust version (MSRV) for the workspace is declared in Cargo.toml under [workspace.package].rust-version. The development toolchain pinned by rust-toolchain.toml may be the same version or newer. Before v1 stable the MSRV may move forward in any prerelease; the move is called out in release notes when it changes. Downstream packagers should read rust-version from a crate's Cargo.toml rather than infer it from the toolchain file.

Package Support Tiers

Tier Packages Contract
Alpha-supported vize, @vizejs/native, @vizejs/vite-plugin Intended for early production trials with release-note-backed breaking changes.
Compatibility preview @vizejs/unplugin, @vizejs/rspack-plugin, @vizejs/nuxt, @vizejs/musea-nuxt Expected to work for common host setups, but host-framework compatibility can move quickly.
Experimental oxlint-plugin-vize, @vizejs/vite-plugin-musea, @vizejs/musea-mcp-server, @vizejs/wasm Public packages, but APIs, commands, output, and workflow shape may change during alpha.
Incubating @vizejs/fresco, @vizejs/fresco-native, editor extension packages Useful for development and feedback, but not yet part of the v1 alpha production-ready target.

Rust Crate Support Tiers

This table is the canonical compatibility contract for crates.io consumers. It covers every crate whose Cargo metadata permits publishing, including crates temporarily deferred by the release publisher while their first crates.io release is prepared. Private modules and implementation details are not compatibility surfaces.

Crate Tier Intended audience Public entrypoint Removal / deprecation
vize_carton Alpha-supported Vize compiler and library authors vize_carton::{Allocator, Bump, FxHashMap} One minor with #[deprecated]
vize_relief Alpha-supported AST and compiler integration authors vize_relief::{RootNode, CompilerOptions} One minor with #[deprecated]
vize_armature Alpha-supported Tools that parse Vue templates vize_armature::{parse, Parser, Tokenizer} One minor with #[deprecated]
vize_croquis Compatibility preview Semantic and type-aware tooling authors vize_croquis::{Croquis, Drawer} One minor with #[deprecated]
vize_croquis_cf Experimental Opt-in whole-project analysis experiments vize_croquis_cf::CrossFileAnalyzer No minimum; note breaks when practical
vize_atelier_core Alpha-supported Custom Vue compiler backend authors vize_atelier_core::{transform, generate} One minor with #[deprecated]
vize_atelier_dom Alpha-supported VDOM compiler and bundler integrations vize_atelier_dom::compile_template One minor with #[deprecated]
vize_atelier_vapor Experimental Opt-in Vapor compiler integrations vize_atelier_vapor::compile_vapor No minimum; note breaks when practical
vize_atelier_ssr Compatibility preview SSR and framework integration authors vize_atelier_ssr::compile_ssr One minor with #[deprecated]
vize_atelier_sfc Alpha-supported SFC tooling and bundler authors vize_atelier_sfc::{parse_sfc, compile_sfc} One minor with #[deprecated]
vize_atelier_jsx Compatibility preview JSX/TSX compiler and tooling authors vize_atelier_jsx::{compile_jsx, lower_source} One minor with #[deprecated]
vize_musea Experimental Musea gallery and documentation tools vize_musea::{parse_art, transform_to_csf} No minimum; note breaks when practical
vize_fresco Incubating TUI experiments vize_fresco::{RenderTree, LayoutEngine} No minimum
vize_canon Compatibility preview Type-checker and editor integrations vize_canon::{type_check_sfc, TypeChecker} One minor with #[deprecated]
vize_patina Compatibility preview Linter and Oxlint integrations vize_patina::{lint, Linter} One minor with #[deprecated]

Each crate also records its tier in package.metadata.vize.stability. CI compares those Cargo metadata values, this table, and the complete release-publisher crate set so adding, removing, or reclassifying a publishable crate cannot silently change the contract.

SemVer gate interpretation

cargo-semver-checks runs for the release publisher's crates that have resolvable registry baselines. A crate waiting for its first publish, or blocked on one, joins that matrix once its baseline is available. Until then, the metadata/table/release-list check still applies.

Tier CI interpretation
Alpha-supported / Compatibility preview An API break must be fixed or follow the support policy's deprecation window and carry a conventional breaking marker.
Experimental The gate catches accidental drift; an intentional break may use a breaking marker without a deprecation window.
Incubating The same detection applies, but the entire API or crate may be replaced or removed in any release.

The breaking markers recognized by CI are a ! in the conventional change title or a BREAKING CHANGE: footer. Passing the gate with either marker does not waive the deprecation window for alpha-supported or compatibility-preview crates.

What Counts as Stable Enough for Alpha

A package or command can move into the alpha-supported tier when it has:

  • documented install and usage paths

  • CI coverage for package build, install, and supported Node runtime

  • release smoke coverage for published entrypoints

  • a clear owner for regressions and compatibility reports

  • known unsupported behavior documented in the relevant guide

What Is Not Promised Yet

The alpha does not promise full compatibility with every Vue compiler edge case, every package manager layout, every editor capability, or every framework integration. When Vize disagrees with official Vue tooling, treat the official output as the compatibility baseline unless a Vize guide explicitly documents a different behavior. The release-blocking compiler, type-checking, runtime, and Vite build surfaces are named in the Vue parity matrix.

For security handling, see the repository SECURITY.md. For contribution and fix workflow, see CONTRIBUTING.md.