Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .changeset/octane-native-adapter.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
---
"@vooya/octane": minor
"@vooya/vite": minor
"@vooya/build-core": minor
---

Add experimental native Octane 0.9 support for Rust-file components and stores through Vite 8, including generated TypeScript declarations. The adapter ships authored source for Octane's application compiler. Legacy .voo inputs, SSR and older Octane versions are outside this initial scope.
Add experimental native Octane 0.9 support for Rust-file components and stores through Vite 8, including generated TypeScript declarations. The private experimental adapter remains available only to source/tarball fixtures and is excluded from this npm release. Legacy .voo inputs, SSR and older Octane versions are outside this initial scope.
5 changes: 3 additions & 2 deletions .github/workflows/integrations.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ jobs:
node-version: 22
cache: npm
- run: npm ci --ignore-scripts
# The fixture downloads its own pinned tools into an empty cache and asserts
# both compiler and doctor paths. Runner-provided native SDK/linker remains.
- run: npx playwright install --with-deps chromium
# The packed consumer shields system Rust, keeps the native SDK/linker,
# and verifies managed selection plus real browser dev/error recovery.
- run: npm run test:preset-consumer
12 changes: 6 additions & 6 deletions docs/guide/other-integrations.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ before starting Vite.

::: info Unreleased 0.2 evidence
This setup is verified with packages built from the current checkout. It does
not establish the same five-framework compatibility for npm `@beta` packages.
not establish the same four-framework compatibility for npm `@beta` packages.
Keep the ordinary Vite quickstart for the published path. See
[the next-release overview](../project/next-release.md) before testing source.
:::
Expand Down Expand Up @@ -138,12 +138,12 @@ export default defineConfig({
});
```

Run `npm install`, then `npm run dev` or `npm run build`. React, Solid, Svelte
and Octane retain their respective framework plugins and `vooya({ framework })`
settings. The Svelte Vite 8 fixture uses `@sveltejs/vite-plugin-svelte` 7.1.2;
Octane 0.9 requires Node 22.22.2 or newer.
Run `npm install`, then `npm run dev` or `npm run build`. React, Solid and Svelte
retain their respective framework plugins and `vooya({ framework })` settings.
The Svelte Vite 8 fixture uses `@sveltejs/vite-plugin-svelte` 7.1.2.
Octane remains a private workspace experiment outside this release matrix.

`npm run test:vite-plus-frameworks` checks all five frameworks using clean
`npm run test:vite-plus-frameworks` checks all four frameworks using clean
packed consumers: `.rs` components and Stores, production browser interactions,
strict generated declarations, development rebuilds, Rust error recovery and
host component edits. Rust edits trigger a full page reload, not state-preserving
Expand Down
16 changes: 12 additions & 4 deletions docs/maintainers/release-lines.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,18 +63,26 @@ The following main-branch fixes stay with their 0.2 features:
A Changeset marked `patch` describes a change relative to its development
branch. It does not by itself establish eligibility for the 0.1 maintenance line.

## Proposed 0.2 scope freeze
## 0.2 scope freeze

The theme is easier Rust toolchain setup and a more complete host integration.
These are the proposed boundaries for the first 0.2 alpha:
These are the frozen feature boundaries for the first 0.2 alpha. Fixes, tests
and documentation can continue; additional capabilities require a later batch:

| Area | Included | Boundary at freeze |
| --- | --- | --- |
| Rust provider package | Existing Rust build implementation, compatibility facade, package/type identity and consumer tests | No public provider registry or new serialized artifact format |
| Optional managed Rust preset | Pinned tools, verified downloads, isolated cache, failure recovery, doctor and system-tool selection | One optional Rust preset; host SDK/linker prerequisites remain |
| SSR-safe islands | Vue lazy Store factories, React client entry, adapter hydration tests and the named Nuxt consumer | Browser-mounted WASM; no server-rendered Rust content; Next.js remains unverified |
| Webpack/Rspack Rust sources | Named Vue/React components, Stores, CSS, declarations and tested watch recovery | Experimental integrations, limited to the documented fixture matrix |
| Octane and Vite+ | Native Octane adapter and the existing five-adapter Vite+ dev/build matrix | Experimental, pinned compatibility evidence; no blanket toolchain claim |
| Vite 8 and Vite+ | Packed Vue/React/Solid/Svelte dev/build, declarations and failed-build recovery | Pinned compatibility evidence; no blanket toolchain or SSR claim |

Octane is deferred as a private workspace experiment with an independent test.
It is excluded from public build/publication candidates and the release gate.
Restoring public status requires a first-release Changeset and acceptance.
Public packages may not reference private workspaces in `dependencies`,
`optionalDependencies` or `peerDependencies`. Development-only tooling does not
become an installed consumer dependency through `devDependencies`.

Go/TinyGo experiments, a multi-language provider protocol, multilingual presets,
new framework adapters, Rust server rendering, and state-preserving Rust HMR
Expand Down Expand Up @@ -112,7 +120,7 @@ numeric target, monotonic versions, and dependency propagation against the
final versions. Maintenance changesets must be patches. Existing historical
release fixtures retain their original behavior without a line configuration.

Local rehearsals of the actual source graphs produce nine feature candidates
The current version plan excludes Octane and produces eight feature candidates
at `0.2.0-alpha.0`, and five maintenance candidates: React/Vite beta.3 and
build-core/Rspack/Webpack beta.1. Unchanged packages and historical changelog
sections remain intact; repeating versioning without a new entry changes
Expand Down
16 changes: 9 additions & 7 deletions docs/project/compatibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,10 @@ optional Boolean prop (`Option::None`, rather than `Some(false)`). Solid and
Svelte already preserve those values; the React/Vue fixes do not imply those
adapters were absent from earlier builds.

**Unreleased source evidence:** `test:vite8-frameworks` adds separate clean tarball installs of Solid/Svelte,
Vite 8.2.1 production Chromium checks, and strict generated declaration checks.
**Unreleased source evidence:** `test:vite8-frameworks` installs Vue, React, Solid and
Svelte in separate clean tarball consumers on Vite 8.2.1. It covers production
Chromium interactions, strict generated declarations, development Rust edits,
compiler-error recovery, rapid saves and host component edits.
Svelte uses `@sveltejs/vite-plugin-svelte` 7.1.2 on Vite 8. npm-registry consumer
acceptance is still pending; both adapters remain experimental. SvelteKit is not covered.
See [Getting started](../guide/getting-started.md) for all four configurations.
Expand All @@ -56,7 +58,7 @@ published beta support table above.
| React | `>=19` | Supported | Browser fixtures cover 19.0.0 and 19.2.0; React 18 is below the supported minimum |
| Solid | `>=1.9 <2` | Experimental | Vite 7 production browser fixture covers a Rust-file component, callback event, and Accessor-backed Store update; adapter unit tests cover owner cleanup and late resolution |
| Svelte | `>=5 <6` | Experimental | Svelte 5 + Vite 7 production Chromium fixture covers Component mount/callback, Store action, Component prop update, generated `Readable` declarations, and Component/Store owner cleanup |
| Octane | `0.9.0` | Unreleased 0.2, experimental, client only | Packed native Octane fixture with `@octanejs/vite-plugin` 0.2.1 on Vite 8 and Vite+ 0.2.9 covers Component/Store isolation, props/events, disposal/remount and strict declarations; Node >=22.22.2; SSR is not covered |
| Octane | `0.9.0` | Private workspace experiment; excluded from 0.2 | Independent packed fixture with `@octanejs/vite-plugin` 0.2.1 on Vite 8.0.16 covers Component/Store isolation, props/events, disposal/remount and strict declarations; Node >=22.22.2; no npm release or SSR claim |
| React 19 Rust-file authoring | Vite 7 | Supported beta path | Production build and browser interaction cover an instance-scoped store, `useSyncExternalStore`, atomic component prop updates, and StrictMode cleanup |
| Vue Vapor | Vue 3.6 experimental | Current-source fixture, experimental | Vite 8 + Vue 3.6.0-beta.17 mounts a Rust-file component when the app uses Vue's `vaporInteropPlugin`; Vapor remains an upstream Vue opt-in |

Expand All @@ -71,7 +73,7 @@ Only the release evidence above establishes the npm beta boundary.
| React 19 Rust-file component/store | Vite 7 production build, StrictMode mount, store action and snapshot-driven component update | `npm run test:rust-react` |
| Solid 1.9 Rust-file component/store | Vite 7 production build, callback event, Store action, and signal/Accessor-driven DOM update; adapter tests cover owner-scoped disposal | `npm run test:rust-solid`; `npm run test:solid` |
| Svelte 5 Rust-file component/store | Vite 7 production build, callback event, Store action, prop update, `Readable` declaration, no Chromium runtime error, and exactly one Component handle plus generated Store disposal after child unmount | `npm run test:rust-svelte` |
| Octane 0.9 Rust-file component/store | Native client components and Stores, independent instances, prop/event updates, generated types and unmount/remount | `npm run test:rust-octane`; `npm run test:vite-plus-frameworks` adds Vite+ dev recovery and host edits |
| Octane 0.9 Rust-file component/store | Native client components and Stores, independent instances, prop/event updates, generated types and unmount/remount | `npm run test:rust-octane` (independent private experiment, outside the public release gate) |
| Rust-file Vite development path | Rust source edit, failed rebuild recovery, subsequent successful rebuild, and full reload | `npm run test:rust-hmr` |
| Rust `rsx!` DOM runtime | Signal text/attribute updates, owned events, conditional `if`/`else`, keyed `for` reorder and DOM identity, disposal | `npm run test:rsx` |
| Vue TaskList | Reactive state, keyed rows, filtering, validation error state | `npm run test:e2e` (tasks target) |
Expand All @@ -94,15 +96,15 @@ SSR/Next.js and state-preserving HMR are not implied.

These entries run against tarballs built from the checkout in a fresh temporary
consumer. They are source evidence, not proof that installing npm `@beta`
provides Vite+ five-framework support or Webpack/Rspack Rust-file integration.
provides Vite+ four-framework support or Webpack/Rspack Rust-file integration.
The evidence and boundary columns state the exact checks exercised by each
toolchain; a production smoke does not imply development-server or HMR support.

| Toolchain | Version range / tested version | Evidence | Boundary |
| --- | --- | --- | --- |
| Vite | `>=7 <9` | `npm run test:vite8` | Vite 8.2.1 is the primary packed compatibility target; Vite 7 remains a required regression path in the repository fixtures and release gate |
| Vite | `>=7 <9` | `npm run test:vite8-frameworks`; `npm run test:vite8` | Vite 8.2.1: separate packed Vue/React/Solid/Svelte production, strict types and dev/error-recovery checks. Vite 7 remains a required regression path; the older compatibility smoke is separate. |
| Vite 8 + Vue Vapor | Vite `8.2.1`; Vue `3.6.0-beta.17` | `npm run test:vite8-vapor` | Rust-file component mounts in a Vapor app with `vaporInteropPlugin`; experimental evidence only |
| Vite+ | `0.2.9`, matching core alias `0.2.9` (Vite `8.2.1`) | `npm run test:vite-plus-frameworks`; `npm run test:vite-plus` | Packed Vue/React/Solid/Svelte/Octane `.rs` production builds and Chromium interactions, strict declarations, dev rebuilds, Rust error recovery, rapid saves and host component edits. Rust edits use full reload; legacy `.voo` regression is separate. Normal npm installation uses the documented alias/overrides. |
| Vite+ | `0.2.9`, matching core alias `0.2.9` (Vite `8.2.1`) | `npm run test:vite-plus-frameworks`; `npm run test:vite-plus` | Packed Vue/React/Solid/Svelte `.rs` production builds and Chromium interactions, strict declarations, dev rebuilds, Rust error recovery, rapid saves and host component edits. Rust edits use full reload; legacy `.voo` regression is separate. Normal npm installation uses the documented alias/overrides. |
| Rspack / Rsbuild | Rspack `>=2.1.10`; Rsbuild `>=2.1.13` | `npm run test:rspack` | Experimental packed Vue/React/Rslib/native-Rspack fixtures with WASM, scoped CSS, lifecycle checks, mapped diagnostics, and rebuild recovery. `test:rust-bundlers` adds packed Vue/React `.rs` production builds, Stores, props/events, scoped CSS, and unmount/remount; Vue Rust-file watch also covers failure recovery, style edits and new modules; other framework/watch combinations remain unverified. |
| Webpack | `>=5` | `npm run test:webpack` | Experimental packed Vue/React production and watch fixtures with emitted WASM, scoped CSS, lifecycle checks, mapped diagnostics, and recovery. `test:rust-bundlers` adds packed Vue/React `.rs` production builds, Stores, props/events, scoped CSS, and unmount/remount; Vue Rust-file watch also covers failure recovery, style edits and new modules; other framework/watch combinations remain unverified. |

Expand Down
20 changes: 18 additions & 2 deletions docs/project/next-release.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,19 @@ The [preset source README](https://github.com/vooyajs/vooya/blob/main/packages/p
records cache and platform details. Published beta users should continue using
[system toolchain diagnostics](../reference/tooling.md#doctor).

The source acceptance command is `npm run test:preset-consumer`. It installs
seven matching tarballs into a separate Vue application, then checks ordinary
`npm run dev`, browser Component/Store interaction, Rust edits, compiler error
recovery, and `npm run build`. Ambient Rust commands are blocked while the host
SDK/linker remains available. The same test runs on Linux, macOS and Windows in
CI with a fresh managed cache; a local reused cache does not verify downloads.

## Host integrations

| Candidate | Source evidence and remaining boundary |
| --- | --- |
| Octane 0.9 | Native client Component and Store adapter; Node >=22.22.2; pinned Vite 8 and Vite+ fixtures. No SSR claim. |
| Vite+ 0.2.9 | Five-framework packed dev/build fixtures with the documented aliases and overrides. Normal npm peer resolution; no claim for all Vite+ tools or versions. |
| Vite 8.2.1 | Vue/React/Solid/Svelte packed production and dev consumers, strict declarations, Rust error recovery, rapid saves and host edits. |
| Vite+ 0.2.9 | Four-framework packed dev/build fixtures with the documented aliases and overrides. Normal npm peer resolution; no claim for all Vite+ tools or versions. |
| Webpack/Rspack `.rs` authoring | Vue/React components, Stores, CSS and declarations; Vue watch recovery and new-module checks. Other watch/framework combinations remain unverified. |
| SSR-safe islands | Vue lazy Store creation and React client boundaries; named Nuxt production/browser fixture. Rust content still mounts in the browser; Next.js is unverified. |

Expand All @@ -48,6 +55,15 @@ See [source compatibility evidence](./compatibility.md#current-source-browser-fi
[SSR boundary](./ssr-roadmap.md). These are candidate evaluation paths, not
instructions to combine unpublished features with npm beta packages.

## Octane is deferred

The native Octane adapter remains a private workspace experiment, with its own
packed browser test. It is excluded from this 0.2 publication candidate and
public release gate. Do not install an unpublished `@vooya/octane` version.
Making it public later requires explicit scope review, a first-release
Changeset and registry acceptance; keeping the implementation does not commit
to a release date.

## Rust provider extraction

[PR #148](https://github.com/vooyajs/vooya/pull/148) separates the Rust build
Expand Down
2 changes: 1 addition & 1 deletion docs/project/ssr-roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ Do not dispatch Store actions while the snapshot is `undefined`. Shared module-l
Store instances are not request-scoped. Passing Vue an already-created Store or
Promise cannot defer work that has already started.

`npm run test:nuxt-ssr` builds and installs five packed Vooya packages in a fresh
`npm run test:nuxt-ssr` builds and installs six packed Vooya packages in a fresh
Nuxt 4.5.2 / Vite 8.3.1 / Vue 3.5.43 consumer. It checks production Node SSR,
real WASM delivery, two independent Stores, props/events, scoped CSS, client route
navigation, Rust component/Store disposal, and fresh state after returning.
Expand Down
13 changes: 8 additions & 5 deletions docs/project/status.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ See [the release guide](../maintainers/releases.md).
adapter. Both published non-Vite adapters retain transitional `.voo` fixture
evidence; their `.rs` integration is unreleased 0.2 work. Webpack 4, Rollup,
Turbopack, and other bundlers remain unsupported.
- The newer Vite+ five-framework dev/build matrix runs against current-source
- The newer Vite+ four-framework dev/build matrix runs against current-source
tarballs. It does not expand the published beta claim or cover every Vite+ tool.
- Turbopack has no compatibility claim. Its loader API evidence and unverified integration requirements are
recorded in [Turbopack research](turbopack-research.md); Webpack and Rspack
Expand Down Expand Up @@ -165,19 +165,22 @@ See [the release guide](../maintainers/releases.md).

## Unreleased 0.2 work

The optional managed preset, Octane, SSR-safe islands and Nuxt fixture,
Webpack/Rspack Rust-file integration, expanded Vite+ evidence, and proposed
The optional managed preset, SSR-safe islands and Nuxt fixture,
Webpack/Rspack Rust-file integration, expanded Vite+ evidence, and merged
Rust provider extraction belong to the [next feature batch](./next-release.md).
The [release-line review](../maintainers/release-lines.md) identifies two
possible 0.1 maintenance backports; neither has been published. Do not treat
merged 0.1 maintenance backports; neither has been published. Do not treat
the current main branch as a maintenance release candidate.

Octane remains a private workspace experiment, excluded from this 0.2 batch
and public release gate. Its independent browser fixture is retained.

## Next milestones

Beta.0 passed strict TypeScript checks and Chromium interaction for clean
Rust-file Vue and React consumers, first with packed artifacts and then with
exact registry versions. Future releases retain these separate acceptance steps.
Current source adds clean Vite 8 packed consumers for Solid and Svelte. Registry
Current source adds separate clean Vite 8 dev/build consumers for all four adapters. Registry
browser acceptance remains follow-up work before a broader support claim.
Managed toolchain installation through `@vooya/preset` remains a separate
`0.2` workstream in [#129](https://github.com/vooyajs/vooya/issues/129), not a
Expand Down
2 changes: 1 addition & 1 deletion docs/reference/api.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# API Reference

Unless a section says otherwise, this reference describes the [published 0.1 beta packages](../project/status.md). Managed toolchain modes, Octane and SSR-safe Store factories belong to the [unreleased 0.2 work](../project/next-release.md); installing `@beta` does not enable them.
Unless a section says otherwise, this reference describes the [published 0.1 beta packages](../project/status.md). Managed toolchain modes and SSR-safe Store factories belong to the [unreleased 0.2 work](../project/next-release.md); installing `@beta` does not enable them. Octane is a separate private workspace experiment, excluded from that release batch.

This page lists the public consumption paths verified from the package exports.
The beta ABI may change between prereleases. Internal `@vooya/build-core`
Expand Down
4 changes: 2 additions & 2 deletions docs/reference/tooling.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ may remain JavaScript when Node or a consumer tool must execute them directly.

The public plugin entry is `vooya()` from `@vooya/vite`.

The plugin requires Vite `>=7`. Vite+ is tested as a separate
The plugin requires Vite `>=7 <9`. Vite+ is tested as a separate
toolchain because it aliases `vite` to `@voidzero-dev/vite-plus-core`; it still
uses the same `vooya()` plugin and does not create a second Vooya adapter API.
The current source fixture installs normally with the documented npm aliases
and overrides; it does not require `--legacy-peer-deps`. That five-framework
and overrides; it does not require `--legacy-peer-deps`. That four-framework
Vite+ evidence belongs to the unreleased 0.2 batch, not the published beta.
See [Vite+ setup](../guide/other-integrations.md#vite) for the pinned configuration.

Expand Down
Loading
Loading