Release RC packages (rc) - #3724
Open
github-actions[bot] wants to merge 1 commit into
Open
github-actions[bot] wants to merge 1 commit into
github-actions[bot] wants to merge 1 commit into
Conversation
github-actions
Bot
force-pushed
the
changeset-release/next
branch
17 times, most recently
from
October 2, 2026 21:15
17d9565 to
70c8f3c
Compare
github-actions
Bot
force-pushed
the
changeset-release/next
branch
from
October 2, 2026 21:17
70c8f3c to
c7004aa
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.
nextis currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, runchangeset pre exitonnext.Releases
@solidjs/babel-plugin@2.0.0-rc.14
Patch Changes
/* istanbul ignore … */and/* c8 ignore … */block comments written as JSX children on the generated componentchildrengetter. Line comments are not carried.styleobjects (builds withoutserverComponents). A computed key's name got no;, sostyle={{ color: "red", [k]: v }}renderedcolor:redtop:1pxand the browser dropped both declarations. Hydration keeps the server's inline style, so they stayed dropped. A nullish first value also no longer leaves a leading;. Both compilers now pass a multi-entry object to a newssrStyleProperties(name, value, …)helper, which writes the separator only between the entries it writes; a single entry keepsssrStyleProperty.onfollowed by an uppercase letter (onClick,onPointerDown) is an event handler. Lowercaseon*names (onclick,onmouseover) are plain attributes everywhere:onclick={expr}like any other attribute (setAttribute, reactive whenexpris dynamic) instead of binding a delegated or native event, and SSR renders it as an escaped attribute instead of dropping it. A leftover 1.xon:click={fn}is likewise a plain namespaced attribute (it previously compiled toaddEventListener(":click", fn)).@solidjs/webspread/assignset lowercaseon*keys as attributes, the server spread walk renders them, anduseHeadapplies lowercaseon*attributes (camelCase handler names stay skipped).ssrAttributeescapes a function value instead of interpolating its source raw.@solidjs/htmland@solidjs/helements wrap a function passed to a lowercaseon*in a getter like any other attribute; onlyonXxxandrefare exempt.@solidjs/htmlcomponents follow@solidjs/h's rule: every zero-argument function prop,onXxxhandlers andrefincluded, is a getter, so a component handler must declare its event argument (onClick=${e => …}).LOWERCASE_EVENT_ATTRIBUTE(added to theDiagnosticCodeunion): warns once per attribute name when a function is set on a lowercaseon*(oron:) attribute, naming the camelCase handler to use.@solidjs/compiler@2.0.0-rc.14
Patch Changes
/* istanbul ignore … */and/* c8 ignore … */block comments written as JSX children on the generated componentchildrengetter. Line comments are not carried.@solidjs/compiler-wasm32-wasifallback loads on Android (Termux), where the filesystem root cannot be opened: its generated loader no longer preopens/there (it failed withUVWASI_EACCES, uvwasi_init). The loader is regenerated by@napi-rs/cli3.10.6, which maps the WASI root to the working directory on Android.styleobjects (builds withoutserverComponents). A computed key's name got no;, sostyle={{ color: "red", [k]: v }}renderedcolor:redtop:1pxand the browser dropped both declarations. Hydration keeps the server's inline style, so they stayed dropped. A nullish first value also no longer leaves a leading;. Both compilers now pass a multi-entry object to a newssrStyleProperties(name, value, …)helper, which writes the separator only between the entries it writes; a single entry keepsssrStyleProperty.onfollowed by an uppercase letter (onClick,onPointerDown) is an event handler. Lowercaseon*names (onclick,onmouseover) are plain attributes everywhere:onclick={expr}like any other attribute (setAttribute, reactive whenexpris dynamic) instead of binding a delegated or native event, and SSR renders it as an escaped attribute instead of dropping it. A leftover 1.xon:click={fn}is likewise a plain namespaced attribute (it previously compiled toaddEventListener(":click", fn)).@solidjs/webspread/assignset lowercaseon*keys as attributes, the server spread walk renders them, anduseHeadapplies lowercaseon*attributes (camelCase handler names stay skipped).ssrAttributeescapes a function value instead of interpolating its source raw.@solidjs/htmland@solidjs/helements wrap a function passed to a lowercaseon*in a getter like any other attribute; onlyonXxxandrefare exempt.@solidjs/htmlcomponents follow@solidjs/h's rule: every zero-argument function prop,onXxxhandlers andrefincluded, is a getter, so a component handler must declare its event argument (onClick=${e => …}).LOWERCASE_EVENT_ATTRIBUTE(added to theDiagnosticCodeunion): warns once per attribute name when a function is set on a lowercaseon*(oron:) attribute, naming the camelCase handler to use.@solidjs/diagnostics@2.0.0-rc.14
Patch Changes
@solidjs/element@2.0.0-rc.14
Patch Changes
@solidjs/h@2.0.0-rc.14
Patch Changes
ecb68a1: Binding slots: the fill runs once per occurrence, untracked, under the occurrence's owner — as a component body and a template-slot fill do. State created in the fill lives as long as the occurrence; a top-level read is a one-time read (dev:
STRICT_READ_UNTRACKED, naming the fill); getters are the reactive form. Handlers and refs are read once when an element binds and go throughassign, so events delegate, tuples bind and interactions wrap as in client JSX. On the server an array at a handler position is a dev finding (reasontuple) instead of being flattened; onlyrefmerges arrays. Template-slot fills are untracked on every render path and carry the same labelled warning.Breaking:
AttributeSlotis renamedBindingSlot, with no alias, and its return is constrained (SlotOutput<J>/SlotError<M>, both exported) so an array, DOM node, function, async value or$-prefixed key is a type error on both sides. The diagnostic codeATTRIBUTE_SLOT_POSITIONis renamedBINDING_SLOT_POSITION. The fill-shape finding also names async values.4f67697: Breaking: only
onfollowed by an uppercase letter (onClick,onPointerDown) is an event handler. Lowercaseon*names (onclick,onmouseover) are plain attributes everywhere:onclick={expr}like any other attribute (setAttribute, reactive whenexpris dynamic) instead of binding a delegated or native event, and SSR renders it as an escaped attribute instead of dropping it. A leftover 1.xon:click={fn}is likewise a plain namespaced attribute (it previously compiled toaddEventListener(":click", fn)).@solidjs/webspread/assignset lowercaseon*keys as attributes, the server spread walk renders them, anduseHeadapplies lowercaseon*attributes (camelCase handler names stay skipped).ssrAttributeescapes a function value instead of interpolating its source raw.@solidjs/htmland@solidjs/helements wrap a function passed to a lowercaseon*in a getter like any other attribute; onlyonXxxandrefare exempt.@solidjs/htmlcomponents follow@solidjs/h's rule: every zero-argument function prop,onXxxhandlers andrefincluded, is a getter, so a component handler must declare its event argument (onClick=${e => …}).LOWERCASE_EVENT_ATTRIBUTE(added to theDiagnosticCodeunion): warns once per attribute name when a function is set on a lowercaseon*(oron:) attribute, naming the camelCase handler to use.Updated dependencies [ecb68a1]
Updated dependencies [d4b10b5]
Updated dependencies [365f37d]
Updated dependencies [98d35b9]
Updated dependencies [b57eb2e]
Updated dependencies [4f67697]
Updated dependencies [2656284]
Updated dependencies [8d66ae5]
@solidjs/html@2.0.0-rc.14
Patch Changes
a5d0e76: Zero-argument functions passed to component props named
on,only,once, etc. are now wrapped in getters like any other dynamic prop ([2.0] @solidjs/html -onproperty for <Loading> does not apply getter #3728). Theon*exemption on components now covers onlyonXxxhandler names (an uppercase letter afteron), so<${Loading} on=${() => key()}>re-keys the boundary whenkey()changes. Native elements are unchanged: everyon*prop is still passed through as an event handler. A lowercaseonclickpassed to a component is now wrapped in a getter; name itonClickor give the handler a parameter.6be8486: Fix the tokenizer staying in raw text mode after a self-closing raw text element such as
<textarea />, which swallowed the rest of the template as text.4f67697: Breaking: only
onfollowed by an uppercase letter (onClick,onPointerDown) is an event handler. Lowercaseon*names (onclick,onmouseover) are plain attributes everywhere:onclick={expr}like any other attribute (setAttribute, reactive whenexpris dynamic) instead of binding a delegated or native event, and SSR renders it as an escaped attribute instead of dropping it. A leftover 1.xon:click={fn}is likewise a plain namespaced attribute (it previously compiled toaddEventListener(":click", fn)).@solidjs/webspread/assignset lowercaseon*keys as attributes, the server spread walk renders them, anduseHeadapplies lowercaseon*attributes (camelCase handler names stay skipped).ssrAttributeescapes a function value instead of interpolating its source raw.@solidjs/htmland@solidjs/helements wrap a function passed to a lowercaseon*in a getter like any other attribute; onlyonXxxandrefare exempt.@solidjs/htmlcomponents follow@solidjs/h's rule: every zero-argument function prop,onXxxhandlers andrefincluded, is a getter, so a component handler must declare its event argument (onClick=${e => …}).LOWERCASE_EVENT_ATTRIBUTE(added to theDiagnosticCodeunion): warns once per attribute name when a function is set on a lowercaseon*(oron:) attribute, naming the camelCase handler to use.Updated dependencies [ecb68a1]
Updated dependencies [d4b10b5]
Updated dependencies [365f37d]
Updated dependencies [98d35b9]
Updated dependencies [b57eb2e]
Updated dependencies [4f67697]
Updated dependencies [2656284]
Updated dependencies [8d66ae5]
@solidjs/signals@2.0.0-rc.14
Patch Changes
ecb68a1: Binding slots: the fill runs once per occurrence, untracked, under the occurrence's owner — as a component body and a template-slot fill do. State created in the fill lives as long as the occurrence; a top-level read is a one-time read (dev:
STRICT_READ_UNTRACKED, naming the fill); getters are the reactive form. Handlers and refs are read once when an element binds and go throughassign, so events delegate, tuples bind and interactions wrap as in client JSX. On the server an array at a handler position is a dev finding (reasontuple) instead of being flattened; onlyrefmerges arrays. Template-slot fills are untracked on every render path and carry the same labelled warning.Breaking:
AttributeSlotis renamedBindingSlot, with no alias, and its return is constrained (SlotOutput<J>/SlotError<M>, both exported) so an array, DOM node, function, async value or$-prefixed key is a type error on both sides. The diagnostic codeATTRIBUTE_SLOT_POSITIONis renamedBINDING_SLOT_POSITION. The fill-shape finding also names async values.9a213bb: Derived writes apply first, then derivations re-run. A manual write to a writable derived value (
createSignal(fn),createStore(fn)) lands at once; when one of its sources changes — in the same update or later, inside or outside an action, across async holds — the function re-runs and receives the write asprev(or as the draft forcreateStore(fn)), and decides what to keep. A write on its own never re-runs the function.This reverses beta.11's same-tick precedence (Solid v2.0.0-beta.10 batched parent & derived signals manual update is neglected for derived signals #2692), where a write beat a source change in the same flush: a function that ignores
prevnow discards a write made in the same update as a source change, and a same-value write no longer holds against it. To keep a local value across source changes, carry it in the data as a flag the function honors. It also fixes Reconsider manual-write precedence across async holds? #3733 (a write inside an action blocked later source changes for the whole hold, a regression since Solid v2.0.0-beta.10 batched parent & derived signals manual update is neglected for derived signals #2692) and supersedes the frame-scoped mask from fix(signals): a derived write's mask lasts its frame, not the hold #3740, whose changeset this replaces.4f67697: Breaking: only
onfollowed by an uppercase letter (onClick,onPointerDown) is an event handler. Lowercaseon*names (onclick,onmouseover) are plain attributes everywhere:onclick={expr}like any other attribute (setAttribute, reactive whenexpris dynamic) instead of binding a delegated or native event, and SSR renders it as an escaped attribute instead of dropping it. A leftover 1.xon:click={fn}is likewise a plain namespaced attribute (it previously compiled toaddEventListener(":click", fn)).@solidjs/webspread/assignset lowercaseon*keys as attributes, the server spread walk renders them, anduseHeadapplies lowercaseon*attributes (camelCase handler names stay skipped).ssrAttributeescapes a function value instead of interpolating its source raw.@solidjs/htmland@solidjs/helements wrap a function passed to a lowercaseon*in a getter like any other attribute; onlyonXxxandrefare exempt.@solidjs/htmlcomponents follow@solidjs/h's rule: every zero-argument function prop,onXxxhandlers andrefincluded, is a getter, so a component handler must declare its event argument (onClick=${e => …}).LOWERCASE_EVENT_ATTRIBUTE(added to theDiagnosticCodeunion): warns once per attribute name when a function is set on a lowercaseon*(oron:) attribute, naming the camelCase handler to use.b0c8489: A re-run that commits
undefinedis no longer counted as waste. A projection that mutates its draft or reconciles a returned value, or a memo that does its work by writing a signal, has no output to compare, so its re-runs were reported as pure cost.RerunEvent.changednow reportstruefor these runs (as it already did for side-effect-only effects), soWASTED_RECOMPUTEno longer fires for them andcosts().wastedMs,expectNoWasteand the performance tracks stop counting them as wasted.solid-js@2.0.0-rc.14
Patch Changes
9a213bb: Derived writes apply first, then derivations re-run. A manual write to a writable derived value (
createSignal(fn),createStore(fn)) lands at once; when one of its sources changes — in the same update or later, inside or outside an action, across async holds — the function re-runs and receives the write asprev(or as the draft forcreateStore(fn)), and decides what to keep. A write on its own never re-runs the function.This reverses beta.11's same-tick precedence (Solid v2.0.0-beta.10 batched parent & derived signals manual update is neglected for derived signals #2692), where a write beat a source change in the same flush: a function that ignores
prevnow discards a write made in the same update as a source change, and a same-value write no longer holds against it. To keep a local value across source changes, carry it in the data as a flag the function honors. It also fixes Reconsider manual-write precedence across async holds? #3733 (a write inside an action blocked later source changes for the whole hold, a regression since Solid v2.0.0-beta.10 batched parent & derived signals manual update is neglected for derived signals #2692) and supersedes the frame-scoped mask from fix(signals): a derived write's mask lasts its frame, not the hold #3740, whose changeset this replaces.da84bd9: Fix hydration adoption throwing when a traced compute calls
Promise.withResolvers()orPromise.try(). The trace run swaps the globalPromisefor a never-settling mock that lacked these two statics, so the call threw out of hydration instead of adopting the server value. The mock now provides both:withResolversreturns a never-settling mock with no-opresolve/reject, andtryreturns a never-settling mock without invoking its callback (matching how the mock's constructor ignores its executor).Updated dependencies [ecb68a1]
Updated dependencies [9a213bb]
Updated dependencies [4f67697]
Updated dependencies [b0c8489]
@solidjs/universal@2.0.0-rc.14
Patch Changes
@solidjs/web@2.0.0-rc.14
Patch Changes
ecb68a1: Binding slots: the fill runs once per occurrence, untracked, under the occurrence's owner — as a component body and a template-slot fill do. State created in the fill lives as long as the occurrence; a top-level read is a one-time read (dev:
STRICT_READ_UNTRACKED, naming the fill); getters are the reactive form. Handlers and refs are read once when an element binds and go throughassign, so events delegate, tuples bind and interactions wrap as in client JSX. On the server an array at a handler position is a dev finding (reasontuple) instead of being flattened; onlyrefmerges arrays. Template-slot fills are untracked on every render path and carry the same labelled warning.Breaking:
AttributeSlotis renamedBindingSlot, with no alias, and its return is constrained (SlotOutput<J>/SlotError<M>, both exported) so an array, DOM node, function, async value or$-prefixed key is a type error on both sides. The diagnostic codeATTRIBUTE_SLOT_POSITIONis renamedBINDING_SLOT_POSITION. The fill-shape finding also names async values.d4b10b5: Binding slots: a slot property placed as a child (
<strong>{list.remaining}</strong> items left) is a text position. The server emits a comment pair around it,<!--_s:t=<occurrence>:<key>-->…<!--/_s:t-->, with the escaped t=0 value inside on the document face and nothing on the stream face; the client writes the text between the markers from the occurrence's render effect, and a refetch's morph keeps the client's text. Strings and numbers render; nullish and booleans render empty, as a client insert renders them. Any other value is a new client dev finding (BINDING_SLOT_POSITION, reasontext-shape) and clears. The content of<textarea>,<title>,<style>and<script>is not a text position (a comment is literal text there); bindvalue=or a style property instead.Breaking: a slot property as a child used to render nothing and raise the
textfinding; it now renders and binds, and thetextreason is retired.365f37d: Fix a hydration key miss on a
dynamic()/<Dynamic>element whose prop getter mints a hydration id (a conditional expression over a signal compiles to a condition memo) and whose children include an element (2.0.0-rc.13 - Dynamic component hydration issue #3741). The client's runtimespreadinsertedchildrenbefore running its attribute effect, while the server'sssrElementread attributes first, so the memo and the child element took each other's ids and the child was rebuilt instead of claimed.spreadnow applies attributes before inserting children — the order a compiled element already uses — andssrElementreads achildrenprop after every attribute regardless of key order. Observable on the client: arefon adynamic()element now runs before its children are inserted, as it does on a compiled element.98d35b9: Fix computed keys in compiled SSR
styleobjects (builds withoutserverComponents). A computed key's name got no;, sostyle={{ color: "red", [k]: v }}renderedcolor:redtop:1pxand the browser dropped both declarations. Hydration keeps the server's inline style, so they stayed dropped. A nullish first value also no longer leaves a leading;. Both compilers now pass a multi-entry object to a newssrStyleProperties(name, value, …)helper, which writes the separator only between the entries it writes; a single entry keepsssrStyleProperty.b57eb2e: Streamed fragments gated on their stylesheets now reveal under a nonce-based CSP, and no longer stay on the fallback when a sheet loads before its fragment's template is parsed (SSR streaming: fragment stylesheet links use inline onload/onerror handlers, which a nonce-based CSP blocks #3747). The gated links carry
data-dfcinstead of inlineonload/onerrorhandlers, which a strictscript-srcblocks; a capture-phase listener installed by the stream's fragment helpers, from a script that carries the nonce, counts them down. The content template is now written ahead of its links: a cached sheet could fireloadbefore the parser reached the template, and$dfrdropped the reveal.4f67697: Breaking: only
onfollowed by an uppercase letter (onClick,onPointerDown) is an event handler. Lowercaseon*names (onclick,onmouseover) are plain attributes everywhere:onclick={expr}like any other attribute (setAttribute, reactive whenexpris dynamic) instead of binding a delegated or native event, and SSR renders it as an escaped attribute instead of dropping it. A leftover 1.xon:click={fn}is likewise a plain namespaced attribute (it previously compiled toaddEventListener(":click", fn)).@solidjs/webspread/assignset lowercaseon*keys as attributes, the server spread walk renders them, anduseHeadapplies lowercaseon*attributes (camelCase handler names stay skipped).ssrAttributeescapes a function value instead of interpolating its source raw.@solidjs/htmland@solidjs/helements wrap a function passed to a lowercaseon*in a getter like any other attribute; onlyonXxxandrefare exempt.@solidjs/htmlcomponents follow@solidjs/h's rule: every zero-argument function prop,onXxxhandlers andrefincluded, is a getter, so a component handler must declare its event argument (onClick=${e => …}).LOWERCASE_EVENT_ATTRIBUTE(added to theDiagnosticCodeunion): warns once per attribute name when a function is set on a lowercaseon*(oron:) attribute, naming the camelCase handler to use.2656284:
createSSRResponseno longer hangs when a streamed render ends before its shell flushes ([2.0 rc.11] createSSRResponse never settles when the render fails before the shell flushes #3719). A render that fails pre-shell (onErrorhearshandling: "failed") or is aborted through itssignalnow resolves with a bodyless 500, or a redirect when aLocationis already on the response stub, and the stub is committed. A render that succeeds with an empty document resolves with an empty 200. The promise still never rejects.8d66ae5: Server bundles that don't serialize no longer retain the serializer's plugin set. Five module-level statements that Rollup shakes but Rolldown (Vite) and esbuild keep are now side-effect free to every bundler: the frozen
DEFAULT_WEB_PLUGINSarray is/* @__PURE__ */-annotated, serovalFeatureflags are read on use, the stub gap-fill header set is built on first use, the event-stream heartbeat'snew TextEncoder()is annotated (and no longer built at import time bydist/server.js), and the flash-cookie matcher is a regex literal. A server bundle importing onlyisServerorgetRequestEventdrops from ~11.7 KB to ~1.6 KB minified (seroval bundled; Rolldown), andrenderToStringbundles shed ~260–380 B. No behavior or API change.Updated dependencies [9a213bb]
Updated dependencies [da84bd9]
todos-server-example@0.0.1-rc.2
Patch Changes
test-integration@2.0.0-rc.14
Patch Changes