Skip to content

Release RC packages (rc) - #3314

Open
github-actions[bot] wants to merge 1 commit into
nextfrom
changeset-release/next
Open

Release RC packages (rc)#3314
github-actions[bot] wants to merge 1 commit into
nextfrom
changeset-release/next

Conversation

@github-actions

@github-actions github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to next, this PR will be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

next is currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, run changeset pre exit on next.

⚠️⚠️⚠️⚠️⚠️⚠️

Releases

@solidjs/diagnostics@2.0.0-rc.8

Patch Changes

  • 1807f7f: Observe tier: split dev-only checks from production-legal observability wiring.

    Breaking (pre-release): DEV.diagnostics moved to a new OBSERVE export
    OBSERVE.diagnostics.{subscribe,capture,emit}, OBSERVE.subjectOf(event).
    DEV keeps the devtools surface (hooks, getChildren/getSignals/
    getParent/getSources/getObservers) and gains the console face
    (DEV.report, DEV.setConsoleFooter — formerly
    DEV.diagnostics.setConsoleFooter). Both are exported from @solidjs/signals
    and solid-js (client and server).

    Breaking (pre-release): the attribution engine is its own entry.
    DEV.attribution.enable() and friends are now
    import { attribution } from "solid-js/attribution" (or
    @solidjs/signals/attribution) — enable/disable/subscribe/history/why/ subscriptions/costs/waterfalls/holds/feedback/markFlight/format/formatOrigin,
    plus the record types (RerunEvent, ChangeRecord, ChangeOrigin,
    HoldEvent, …) which were previously unexported. The runtime keeps only the
    core's side as OBSERVE.attribution: install(hooks)/installed (the hook
    slot an engine — built-in or a devtools' own — installs into) and
    withInteraction(ref, fn) (the frame the web runtime opens around every event
    dispatch; fn() when no engine is installed). A build that never imports the
    engine never ships it: the observe tier costs ~1.3 KB brotli over prod on the
    CSR scenario, the engine 9.7 KB more when enabled. The import is legal in
    every tier — prod resolves an inert engine with the same surface.
    @solidjs/diagnostics requires OBSERVE and imports the engine itself; it now
    works against observe builds.

    New build tier. Every package with wiring ships <entry>.observe.{js,cjs}
    beside its prod and dev artifacts, selected by a new observe export condition
    (listed after development, so dev still wins when both are set): signals
    dist/observe/ + dist/node.observe.cjs (each with an attribution entry
    beside index; the flat dev/CJS builds are code-split so both entries share
    one module instance), solid-js solid.observe.* and
    server.observe.*, web web.observe.*, universal universal.observe.*.
    Observe builds keep attribution hook sites, owner labels (_name, flow-control
    memo names, component roots), graph edge counters and the diagnostics channel;
    they fold out strict-read checks, invariants, forbidden-scope guards, devtools
    brands and all console output. Entries without wiring (frames, server-functions,
    storage, h, html, element) fall through to prod under observe. Signals gates
    on __OBSERVE__ (dev implies observe; asserted at init), solid-js/web/universal
    on the "_SOLID_OBSERVE_" literal. Default prod artifacts are unchanged apart
    from the new OBSERVE = undefined export; _name is reserved from property
    mangling so the cross-package label survives in the observe tree.
    OBSERVE.diagnostics.emit accepts an explicit ownerPath for hosts whose
    owners are not signals' owners (the SSR runtime).

  • Updated dependencies [1354a53]

  • Updated dependencies [1c9e9e7]

  • Updated dependencies [1807f7f]

  • Updated dependencies [a39415c]

    • @solidjs/signals@2.0.0-rc.8

@solidjs/element@2.0.0-rc.8

Patch Changes

  • Updated dependencies [9e6c867]
  • Updated dependencies [3b4db21]
  • Updated dependencies [1807f7f]
  • Updated dependencies [a71e42e]
  • Updated dependencies [a39415c]
  • Updated dependencies [8cfa272]
    • @solidjs/web@2.0.0-rc.8
    • solid-js@2.0.0-rc.8

@solidjs/h@2.0.0-rc.8

Patch Changes

  • a39415c: Breaking: all runtime packages are ESM only and declare engines.node >= 22.12.

    Every .cjs artifact, every require branch in the exports maps, and the types-cjs/ declaration mirrors are gone. Node 22.12+ loads ESM through require() natively, so a CommonJS host resolves the same files through the same export conditions it always did (browser, node, development, observe, …) — there is one module graph per tier rather than two to keep in step. main now points at the ESM server entry.

    For consumers:

    • ESM apps, Vite, Vitest, Bun, Deno, workers: no change.
    • CommonJS Node apps: require Node 22.12 or later. require("solid-js") keeps working.
    • TypeScript CommonJS projects: use module: "NodeNext" (TS 5.8+), which type-checks require() of ESM packages; module: "Node16" will report TS1479.
    • Jest: needs Node 22.12+ for require(esm); any preset that maps specifiers to .cjs paths (as solid-jest does for Solid 1.x) has nothing to map to and must be updated.

    @solidjs/signals drops its flat dist/node*.cjs builds; its ESM entries (dist/prod/, dist/observe/, dist/dev.js) are the only ones. @solidjs/babel-plugin and @solidjs/compiler (build-time tooling loaded by Babel/Node) are unchanged.

  • Updated dependencies [9e6c867]

  • Updated dependencies [3b4db21]

  • Updated dependencies [1807f7f]

  • Updated dependencies [a71e42e]

  • Updated dependencies [a39415c]

  • Updated dependencies [8cfa272]

    • @solidjs/web@2.0.0-rc.8

@solidjs/html@2.0.0-rc.8

Patch Changes

  • a39415c: Breaking: all runtime packages are ESM only and declare engines.node >= 22.12.

    Every .cjs artifact, every require branch in the exports maps, and the types-cjs/ declaration mirrors are gone. Node 22.12+ loads ESM through require() natively, so a CommonJS host resolves the same files through the same export conditions it always did (browser, node, development, observe, …) — there is one module graph per tier rather than two to keep in step. main now points at the ESM server entry.

    For consumers:

    • ESM apps, Vite, Vitest, Bun, Deno, workers: no change.
    • CommonJS Node apps: require Node 22.12 or later. require("solid-js") keeps working.
    • TypeScript CommonJS projects: use module: "NodeNext" (TS 5.8+), which type-checks require() of ESM packages; module: "Node16" will report TS1479.
    • Jest: needs Node 22.12+ for require(esm); any preset that maps specifiers to .cjs paths (as solid-jest does for Solid 1.x) has nothing to map to and must be updated.

    @solidjs/signals drops its flat dist/node*.cjs builds; its ESM entries (dist/prod/, dist/observe/, dist/dev.js) are the only ones. @solidjs/babel-plugin and @solidjs/compiler (build-time tooling loaded by Babel/Node) are unchanged.

  • Updated dependencies [9e6c867]

  • Updated dependencies [3b4db21]

  • Updated dependencies [1807f7f]

  • Updated dependencies [a71e42e]

  • Updated dependencies [a39415c]

  • Updated dependencies [8cfa272]

    • @solidjs/web@2.0.0-rc.8

@solidjs/signals@2.0.0-rc.8

Patch Changes

  • 1354a53: Fix a render effect that reads sources written by two concurrent, non-entangled transactions committing the wrong value and then never updating (2.0.0-rc.7 render effect depending on non async values from two concurrent updates commit with the wrong data #3322). Effects have one value slot and do not entangle transactions, so the second transaction's recompute overwrote the value the first still owed a run for; the first's silent commit then published it, and the second found nothing left to run. Such effects are now re-derived against the committed world at each owed commit, ahead of the effect phase. The same mechanism covers a mainline recompute of an effect a live transaction had computed (the transaction's commit re-derives it), and render effects recomputing with no transaction active no longer see a foreign transaction's staged signal through the read fast path — the mask the slow path already applied.

  • 1c9e9e7: Fix a held transaction being re-entered while an unrelated flush finalizes — through a store commit hook (deep() readers of a projection), a boundary check, or a recompute — and that flush then committing the transaction's state and running its effects as if it still owned the batch, leaving the UI permanently stale once the transaction settled (fix(signals): preserve transactions reentered during finalization #3319). Finalization now captures the batch it started with and settles nothing an entered transaction adopted (a completing transaction still settles its own separate containers). Effects follow ownership: a run is applied by the commit of the transaction that computed its value, so the entering flush still applies everything it computed mainline — the write that caused it reads and renders together — while runs owned by the still-held transaction park with it and release when it completes. Optimistic lanes are unaffected; they apply their own effects ahead of their transaction by design.

  • 1807f7f: Observe tier: split dev-only checks from production-legal observability wiring.

    Breaking (pre-release): DEV.diagnostics moved to a new OBSERVE export
    OBSERVE.diagnostics.{subscribe,capture,emit}, OBSERVE.subjectOf(event).
    DEV keeps the devtools surface (hooks, getChildren/getSignals/
    getParent/getSources/getObservers) and gains the console face
    (DEV.report, DEV.setConsoleFooter — formerly
    DEV.diagnostics.setConsoleFooter). Both are exported from @solidjs/signals
    and solid-js (client and server).

    Breaking (pre-release): the attribution engine is its own entry.
    DEV.attribution.enable() and friends are now
    import { attribution } from "solid-js/attribution" (or
    @solidjs/signals/attribution) — enable/disable/subscribe/history/why/ subscriptions/costs/waterfalls/holds/feedback/markFlight/format/formatOrigin,
    plus the record types (RerunEvent, ChangeRecord, ChangeOrigin,
    HoldEvent, …) which were previously unexported. The runtime keeps only the
    core's side as OBSERVE.attribution: install(hooks)/installed (the hook
    slot an engine — built-in or a devtools' own — installs into) and
    withInteraction(ref, fn) (the frame the web runtime opens around every event
    dispatch; fn() when no engine is installed). A build that never imports the
    engine never ships it: the observe tier costs ~1.3 KB brotli over prod on the
    CSR scenario, the engine 9.7 KB more when enabled. The import is legal in
    every tier — prod resolves an inert engine with the same surface.
    @solidjs/diagnostics requires OBSERVE and imports the engine itself; it now
    works against observe builds.

    New build tier. Every package with wiring ships <entry>.observe.{js,cjs}
    beside its prod and dev artifacts, selected by a new observe export condition
    (listed after development, so dev still wins when both are set): signals
    dist/observe/ + dist/node.observe.cjs (each with an attribution entry
    beside index; the flat dev/CJS builds are code-split so both entries share
    one module instance), solid-js solid.observe.* and
    server.observe.*, web web.observe.*, universal universal.observe.*.
    Observe builds keep attribution hook sites, owner labels (_name, flow-control
    memo names, component roots), graph edge counters and the diagnostics channel;
    they fold out strict-read checks, invariants, forbidden-scope guards, devtools
    brands and all console output. Entries without wiring (frames, server-functions,
    storage, h, html, element) fall through to prod under observe. Signals gates
    on __OBSERVE__ (dev implies observe; asserted at init), solid-js/web/universal
    on the "_SOLID_OBSERVE_" literal. Default prod artifacts are unchanged apart
    from the new OBSERVE = undefined export; _name is reserved from property
    mangling so the cross-package label survives in the observe tree.
    OBSERVE.diagnostics.emit accepts an explicit ownerPath for hosts whose
    owners are not signals' owners (the SSR runtime).

  • a39415c: Breaking: all runtime packages are ESM only and declare engines.node >= 22.12.

    Every .cjs artifact, every require branch in the exports maps, and the types-cjs/ declaration mirrors are gone. Node 22.12+ loads ESM through require() natively, so a CommonJS host resolves the same files through the same export conditions it always did (browser, node, development, observe, …) — there is one module graph per tier rather than two to keep in step. main now points at the ESM server entry.

    For consumers:

    • ESM apps, Vite, Vitest, Bun, Deno, workers: no change.
    • CommonJS Node apps: require Node 22.12 or later. require("solid-js") keeps working.
    • TypeScript CommonJS projects: use module: "NodeNext" (TS 5.8+), which type-checks require() of ESM packages; module: "Node16" will report TS1479.
    • Jest: needs Node 22.12+ for require(esm); any preset that maps specifiers to .cjs paths (as solid-jest does for Solid 1.x) has nothing to map to and must be updated.

    @solidjs/signals drops its flat dist/node*.cjs builds; its ESM entries (dist/prod/, dist/observe/, dist/dev.js) are the only ones. @solidjs/babel-plugin and @solidjs/compiler (build-time tooling loaded by Babel/Node) are unchanged.

solid-js@2.0.0-rc.8

Patch Changes

  • 1807f7f: Observe tier: split dev-only checks from production-legal observability wiring.

    Breaking (pre-release): DEV.diagnostics moved to a new OBSERVE export
    OBSERVE.diagnostics.{subscribe,capture,emit}, OBSERVE.subjectOf(event).
    DEV keeps the devtools surface (hooks, getChildren/getSignals/
    getParent/getSources/getObservers) and gains the console face
    (DEV.report, DEV.setConsoleFooter — formerly
    DEV.diagnostics.setConsoleFooter). Both are exported from @solidjs/signals
    and solid-js (client and server).

    Breaking (pre-release): the attribution engine is its own entry.
    DEV.attribution.enable() and friends are now
    import { attribution } from "solid-js/attribution" (or
    @solidjs/signals/attribution) — enable/disable/subscribe/history/why/ subscriptions/costs/waterfalls/holds/feedback/markFlight/format/formatOrigin,
    plus the record types (RerunEvent, ChangeRecord, ChangeOrigin,
    HoldEvent, …) which were previously unexported. The runtime keeps only the
    core's side as OBSERVE.attribution: install(hooks)/installed (the hook
    slot an engine — built-in or a devtools' own — installs into) and
    withInteraction(ref, fn) (the frame the web runtime opens around every event
    dispatch; fn() when no engine is installed). A build that never imports the
    engine never ships it: the observe tier costs ~1.3 KB brotli over prod on the
    CSR scenario, the engine 9.7 KB more when enabled. The import is legal in
    every tier — prod resolves an inert engine with the same surface.
    @solidjs/diagnostics requires OBSERVE and imports the engine itself; it now
    works against observe builds.

    New build tier. Every package with wiring ships <entry>.observe.{js,cjs}
    beside its prod and dev artifacts, selected by a new observe export condition
    (listed after development, so dev still wins when both are set): signals
    dist/observe/ + dist/node.observe.cjs (each with an attribution entry
    beside index; the flat dev/CJS builds are code-split so both entries share
    one module instance), solid-js solid.observe.* and
    server.observe.*, web web.observe.*, universal universal.observe.*.
    Observe builds keep attribution hook sites, owner labels (_name, flow-control
    memo names, component roots), graph edge counters and the diagnostics channel;
    they fold out strict-read checks, invariants, forbidden-scope guards, devtools
    brands and all console output. Entries without wiring (frames, server-functions,
    storage, h, html, element) fall through to prod under observe. Signals gates
    on __OBSERVE__ (dev implies observe; asserted at init), solid-js/web/universal
    on the "_SOLID_OBSERVE_" literal. Default prod artifacts are unchanged apart
    from the new OBSERVE = undefined export; _name is reserved from property
    mangling so the cross-package label survives in the observe tree.
    OBSERVE.diagnostics.emit accepts an explicit ownerPath for hosts whose
    owners are not signals' owners (the SSR runtime).

  • a39415c: Breaking: all runtime packages are ESM only and declare engines.node >= 22.12.

    Every .cjs artifact, every require branch in the exports maps, and the types-cjs/ declaration mirrors are gone. Node 22.12+ loads ESM through require() natively, so a CommonJS host resolves the same files through the same export conditions it always did (browser, node, development, observe, …) — there is one module graph per tier rather than two to keep in step. main now points at the ESM server entry.

    For consumers:

    • ESM apps, Vite, Vitest, Bun, Deno, workers: no change.
    • CommonJS Node apps: require Node 22.12 or later. require("solid-js") keeps working.
    • TypeScript CommonJS projects: use module: "NodeNext" (TS 5.8+), which type-checks require() of ESM packages; module: "Node16" will report TS1479.
    • Jest: needs Node 22.12+ for require(esm); any preset that maps specifiers to .cjs paths (as solid-jest does for Solid 1.x) has nothing to map to and must be updated.

    @solidjs/signals drops its flat dist/node*.cjs builds; its ESM entries (dist/prod/, dist/observe/, dist/dev.js) are the only ones. @solidjs/babel-plugin and @solidjs/compiler (build-time tooling loaded by Babel/Node) are unchanged.

  • 8cfa272: Require seroval and seroval-plugins ~1.6.7 (minor-locked, as before). Seroval 1.6 ships bundled declarations with no extensionless relative imports, so the @solidjs/web server-functions, serialization and frames type surfaces now type-check under module: NodeNext from a CommonJS project without skipLibCheck — the packaged-types check covers every public @solidjs/web specifier.

  • Updated dependencies [1354a53]

  • Updated dependencies [1c9e9e7]

  • Updated dependencies [1807f7f]

  • Updated dependencies [a39415c]

    • @solidjs/signals@2.0.0-rc.8

@solidjs/universal@2.0.0-rc.8

Patch Changes

  • 1807f7f: Observe tier: split dev-only checks from production-legal observability wiring.

    Breaking (pre-release): DEV.diagnostics moved to a new OBSERVE export
    OBSERVE.diagnostics.{subscribe,capture,emit}, OBSERVE.subjectOf(event).
    DEV keeps the devtools surface (hooks, getChildren/getSignals/
    getParent/getSources/getObservers) and gains the console face
    (DEV.report, DEV.setConsoleFooter — formerly
    DEV.diagnostics.setConsoleFooter). Both are exported from @solidjs/signals
    and solid-js (client and server).

    Breaking (pre-release): the attribution engine is its own entry.
    DEV.attribution.enable() and friends are now
    import { attribution } from "solid-js/attribution" (or
    @solidjs/signals/attribution) — enable/disable/subscribe/history/why/ subscriptions/costs/waterfalls/holds/feedback/markFlight/format/formatOrigin,
    plus the record types (RerunEvent, ChangeRecord, ChangeOrigin,
    HoldEvent, …) which were previously unexported. The runtime keeps only the
    core's side as OBSERVE.attribution: install(hooks)/installed (the hook
    slot an engine — built-in or a devtools' own — installs into) and
    withInteraction(ref, fn) (the frame the web runtime opens around every event
    dispatch; fn() when no engine is installed). A build that never imports the
    engine never ships it: the observe tier costs ~1.3 KB brotli over prod on the
    CSR scenario, the engine 9.7 KB more when enabled. The import is legal in
    every tier — prod resolves an inert engine with the same surface.
    @solidjs/diagnostics requires OBSERVE and imports the engine itself; it now
    works against observe builds.

    New build tier. Every package with wiring ships <entry>.observe.{js,cjs}
    beside its prod and dev artifacts, selected by a new observe export condition
    (listed after development, so dev still wins when both are set): signals
    dist/observe/ + dist/node.observe.cjs (each with an attribution entry
    beside index; the flat dev/CJS builds are code-split so both entries share
    one module instance), solid-js solid.observe.* and
    server.observe.*, web web.observe.*, universal universal.observe.*.
    Observe builds keep attribution hook sites, owner labels (_name, flow-control
    memo names, component roots), graph edge counters and the diagnostics channel;
    they fold out strict-read checks, invariants, forbidden-scope guards, devtools
    brands and all console output. Entries without wiring (frames, server-functions,
    storage, h, html, element) fall through to prod under observe. Signals gates
    on __OBSERVE__ (dev implies observe; asserted at init), solid-js/web/universal
    on the "_SOLID_OBSERVE_" literal. Default prod artifacts are unchanged apart
    from the new OBSERVE = undefined export; _name is reserved from property
    mangling so the cross-package label survives in the observe tree.
    OBSERVE.diagnostics.emit accepts an explicit ownerPath for hosts whose
    owners are not signals' owners (the SSR runtime).

  • a39415c: Breaking: all runtime packages are ESM only and declare engines.node >= 22.12.

    Every .cjs artifact, every require branch in the exports maps, and the types-cjs/ declaration mirrors are gone. Node 22.12+ loads ESM through require() natively, so a CommonJS host resolves the same files through the same export conditions it always did (browser, node, development, observe, …) — there is one module graph per tier rather than two to keep in step. main now points at the ESM server entry.

    For consumers:

    • ESM apps, Vite, Vitest, Bun, Deno, workers: no change.
    • CommonJS Node apps: require Node 22.12 or later. require("solid-js") keeps working.
    • TypeScript CommonJS projects: use module: "NodeNext" (TS 5.8+), which type-checks require() of ESM packages; module: "Node16" will report TS1479.
    • Jest: needs Node 22.12+ for require(esm); any preset that maps specifiers to .cjs paths (as solid-jest does for Solid 1.x) has nothing to map to and must be updated.

    @solidjs/signals drops its flat dist/node*.cjs builds; its ESM entries (dist/prod/, dist/observe/, dist/dev.js) are the only ones. @solidjs/babel-plugin and @solidjs/compiler (build-time tooling loaded by Babel/Node) are unchanged.

  • Updated dependencies [1807f7f]

  • Updated dependencies [a39415c]

  • Updated dependencies [8cfa272]

    • solid-js@2.0.0-rc.8

@solidjs/web@2.0.0-rc.8

Patch Changes

  • 9e6c867: Document the createEvent(request) contract: the request is a standards-shaped Request and nothing more. Body-size enforcement may hand a rebuilt Request, so host-specific fields on the inbound object are not carried; hosts surface platform handles on the event from their own request.

  • 3b4db21: Fix an rc.7 SSR hydration regression: a self-closing element that spreads props containing children (<a {...props} /> in a wrapper component) read the compiled children getter twice on the server, building the child element twice and consuming a hydration id the client never allocates. Every element after the first such spread then hydrated against the wrong node and the client halted. ssrElement again reads each spread key at most once and never reads children when JSX children are present; the textarea value/defaultValue-as-content behaviour from 2.0.0-rc.6: SSR produces invalid textarea value #3286 is preserved.

  • 1807f7f: Observe tier: split dev-only checks from production-legal observability wiring.

    Breaking (pre-release): DEV.diagnostics moved to a new OBSERVE export
    OBSERVE.diagnostics.{subscribe,capture,emit}, OBSERVE.subjectOf(event).
    DEV keeps the devtools surface (hooks, getChildren/getSignals/
    getParent/getSources/getObservers) and gains the console face
    (DEV.report, DEV.setConsoleFooter — formerly
    DEV.diagnostics.setConsoleFooter). Both are exported from @solidjs/signals
    and solid-js (client and server).

    Breaking (pre-release): the attribution engine is its own entry.
    DEV.attribution.enable() and friends are now
    import { attribution } from "solid-js/attribution" (or
    @solidjs/signals/attribution) — enable/disable/subscribe/history/why/ subscriptions/costs/waterfalls/holds/feedback/markFlight/format/formatOrigin,
    plus the record types (RerunEvent, ChangeRecord, ChangeOrigin,
    HoldEvent, …) which were previously unexported. The runtime keeps only the
    core's side as OBSERVE.attribution: install(hooks)/installed (the hook
    slot an engine — built-in or a devtools' own — installs into) and
    withInteraction(ref, fn) (the frame the web runtime opens around every event
    dispatch; fn() when no engine is installed). A build that never imports the
    engine never ships it: the observe tier costs ~1.3 KB brotli over prod on the
    CSR scenario, the engine 9.7 KB more when enabled. The import is legal in
    every tier — prod resolves an inert engine with the same surface.
    @solidjs/diagnostics requires OBSERVE and imports the engine itself; it now
    works against observe builds.

    New build tier. Every package with wiring ships <entry>.observe.{js,cjs}
    beside its prod and dev artifacts, selected by a new observe export condition
    (listed after development, so dev still wins when both are set): signals
    dist/observe/ + dist/node.observe.cjs (each with an attribution entry
    beside index; the flat dev/CJS builds are code-split so both entries share
    one module instance), solid-js solid.observe.* and
    server.observe.*, web web.observe.*, universal universal.observe.*.
    Observe builds keep attribution hook sites, owner labels (_name, flow-control
    memo names, component roots), graph edge counters and the diagnostics channel;
    they fold out strict-read checks, invariants, forbidden-scope guards, devtools
    brands and all console output. Entries without wiring (frames, server-functions,
    storage, h, html, element) fall through to prod under observe. Signals gates
    on __OBSERVE__ (dev implies observe; asserted at init), solid-js/web/universal
    on the "_SOLID_OBSERVE_" literal. Default prod artifacts are unchanged apart
    from the new OBSERVE = undefined export; _name is reserved from property
    mangling so the cross-package label survives in the observe tree.
    OBSERVE.diagnostics.emit accepts an explicit ownerPath for hosts whose
    owners are not signals' owners (the SSR runtime).

  • a71e42e: Rebuild the buffered server-function request from its url, method, headers and signal instead of through the Request copy constructor, so a host adapter's lazy request (Nitro via srvx) no longer fails every POST with 400 "Malformed server function arguments"; only a failed upload read answers 400 now, a failure to put the bytes back surfaces as its own error.

  • a39415c: Breaking: all runtime packages are ESM only and declare engines.node >= 22.12.

    Every .cjs artifact, every require branch in the exports maps, and the types-cjs/ declaration mirrors are gone. Node 22.12+ loads ESM through require() natively, so a CommonJS host resolves the same files through the same export conditions it always did (browser, node, development, observe, …) — there is one module graph per tier rather than two to keep in step. main now points at the ESM server entry.

    For consumers:

    • ESM apps, Vite, Vitest, Bun, Deno, workers: no change.
    • CommonJS Node apps: require Node 22.12 or later. require("solid-js") keeps working.
    • TypeScript CommonJS projects: use module: "NodeNext" (TS 5.8+), which type-checks require() of ESM packages; module: "Node16" will report TS1479.
    • Jest: needs Node 22.12+ for require(esm); any preset that maps specifiers to .cjs paths (as solid-jest does for Solid 1.x) has nothing to map to and must be updated.

    @solidjs/signals drops its flat dist/node*.cjs builds; its ESM entries (dist/prod/, dist/observe/, dist/dev.js) are the only ones. @solidjs/babel-plugin and @solidjs/compiler (build-time tooling loaded by Babel/Node) are unchanged.

  • 8cfa272: Require seroval and seroval-plugins ~1.6.7 (minor-locked, as before). Seroval 1.6 ships bundled declarations with no extensionless relative imports, so the @solidjs/web server-functions, serialization and frames type surfaces now type-check under module: NodeNext from a CommonJS project without skipLibCheck — the packaged-types check covers every public @solidjs/web specifier.

  • Updated dependencies [1807f7f]

  • Updated dependencies [a39415c]

  • Updated dependencies [8cfa272]

    • solid-js@2.0.0-rc.8

@solidjs/babel-plugin@2.0.0-rc.8

@solidjs/compiler@2.0.0-rc.8

test-integration@2.0.0-rc.8

Patch Changes

  • Updated dependencies [9e6c867]
  • Updated dependencies [1354a53]
  • Updated dependencies [1c9e9e7]
  • Updated dependencies [3b4db21]
  • Updated dependencies [1807f7f]
  • Updated dependencies [a71e42e]
  • Updated dependencies [a39415c]
  • Updated dependencies [8cfa272]
    • @solidjs/web@2.0.0-rc.8
    • @solidjs/signals@2.0.0-rc.8
    • solid-js@2.0.0-rc.8
    • @solidjs/universal@2.0.0-rc.8
    • @solidjs/h@2.0.0-rc.8
    • @solidjs/html@2.0.0-rc.8
    • @solidjs/babel-plugin@2.0.0-rc.8

@github-actions
github-actions Bot force-pushed the changeset-release/next branch 5 times, most recently from c81714b to f194fc7 Compare September 9, 2026 09:33
@github-actions
github-actions Bot force-pushed the changeset-release/next branch from f194fc7 to b9dacdc Compare September 9, 2026 19:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants