Skip to content

Release RC packages (rc) - #3724

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

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

Conversation

@github-actions

@github-actions github-actions Bot commented Sep 30, 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/babel-plugin@2.0.0-rc.14

Patch Changes

  • 3c1f809: Preserve /* istanbul ignore … */ and /* c8 ignore … */ block comments written as JSX children on the generated component children getter. Line comments are not carried.
  • 98d35b9: Fix computed keys in compiled SSR style objects (builds without serverComponents). A computed key's name got no ;, so style={{ color: "red", [k]: v }} rendered color:redtop:1px and 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 new ssrStyleProperties(name, value, …) helper, which writes the separator only between the entries it writes; a single entry keeps ssrStyleProperty.
  • 4f67697: Breaking: only on followed by an uppercase letter (onClick, onPointerDown) is an event handler. Lowercase on* names (onclick, onmouseover) are plain attributes everywhere:
    • Both compilers compile onclick={expr} like any other attribute (setAttribute, reactive when expr is dynamic) instead of binding a delegated or native event, and SSR renders it as an escaped attribute instead of dropping it. A leftover 1.x on:click={fn} is likewise a plain namespaced attribute (it previously compiled to addEventListener(":click", fn)).
    • @solidjs/web spread/assign set lowercase on* keys as attributes, the server spread walk renders them, and useHead applies lowercase on* attributes (camelCase handler names stay skipped). ssrAttribute escapes a function value instead of interpolating its source raw.
    • @solidjs/html and @solidjs/h elements wrap a function passed to a lowercase on* in a getter like any other attribute; only onXxx and ref are exempt.
    • @solidjs/html components follow @solidjs/h's rule: every zero-argument function prop, onXxx handlers and ref included, is a getter, so a component handler must declare its event argument (onClick=${e => …}).
    • New dev-only check LOWERCASE_EVENT_ATTRIBUTE (added to the DiagnosticCode union): warns once per attribute name when a function is set on a lowercase on* (or on:) attribute, naming the camelCase handler to use.

@solidjs/compiler@2.0.0-rc.14

Patch Changes

  • 3c1f809: Preserve /* istanbul ignore … */ and /* c8 ignore … */ block comments written as JSX children on the generated component children getter. Line comments are not carried.
  • 41be120: The @solidjs/compiler-wasm32-wasi fallback loads on Android (Termux), where the filesystem root cannot be opened: its generated loader no longer preopens / there (it failed with UVWASI_EACCES, uvwasi_init). The loader is regenerated by @napi-rs/cli 3.10.6, which maps the WASI root to the working directory on Android.
  • 98d35b9: Fix computed keys in compiled SSR style objects (builds without serverComponents). A computed key's name got no ;, so style={{ color: "red", [k]: v }} rendered color:redtop:1px and 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 new ssrStyleProperties(name, value, …) helper, which writes the separator only between the entries it writes; a single entry keeps ssrStyleProperty.
  • 4f67697: Breaking: only on followed by an uppercase letter (onClick, onPointerDown) is an event handler. Lowercase on* names (onclick, onmouseover) are plain attributes everywhere:
    • Both compilers compile onclick={expr} like any other attribute (setAttribute, reactive when expr is dynamic) instead of binding a delegated or native event, and SSR renders it as an escaped attribute instead of dropping it. A leftover 1.x on:click={fn} is likewise a plain namespaced attribute (it previously compiled to addEventListener(":click", fn)).
    • @solidjs/web spread/assign set lowercase on* keys as attributes, the server spread walk renders them, and useHead applies lowercase on* attributes (camelCase handler names stay skipped). ssrAttribute escapes a function value instead of interpolating its source raw.
    • @solidjs/html and @solidjs/h elements wrap a function passed to a lowercase on* in a getter like any other attribute; only onXxx and ref are exempt.
    • @solidjs/html components follow @solidjs/h's rule: every zero-argument function prop, onXxx handlers and ref included, is a getter, so a component handler must declare its event argument (onClick=${e => …}).
    • New dev-only check LOWERCASE_EVENT_ATTRIBUTE (added to the DiagnosticCode union): warns once per attribute name when a function is set on a lowercase on* (or on:) attribute, naming the camelCase handler to use.

@solidjs/diagnostics@2.0.0-rc.14

Patch Changes

  • Updated dependencies [ecb68a1]
  • Updated dependencies [d4b10b5]
  • Updated dependencies [9a213bb]
  • Updated dependencies [365f37d]
  • Updated dependencies [da84bd9]
  • Updated dependencies [98d35b9]
  • Updated dependencies [b57eb2e]
  • Updated dependencies [4f67697]
  • Updated dependencies [2656284]
  • Updated dependencies [b0c8489]
  • Updated dependencies [8d66ae5]
    • @solidjs/web@2.0.0-rc.14
    • @solidjs/signals@2.0.0-rc.14
    • solid-js@2.0.0-rc.14

@solidjs/element@2.0.0-rc.14

Patch Changes

  • Updated dependencies [ecb68a1]
  • Updated dependencies [d4b10b5]
  • Updated dependencies [9a213bb]
  • Updated dependencies [365f37d]
  • Updated dependencies [da84bd9]
  • Updated dependencies [98d35b9]
  • Updated dependencies [b57eb2e]
  • Updated dependencies [4f67697]
  • Updated dependencies [2656284]
  • Updated dependencies [8d66ae5]
    • @solidjs/web@2.0.0-rc.14
    • solid-js@2.0.0-rc.14

@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 through assign, 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 (reason tuple) instead of being flattened; only ref merges arrays. Template-slot fills are untracked on every render path and carry the same labelled warning.

    Breaking: AttributeSlot is renamed BindingSlot, 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 code ATTRIBUTE_SLOT_POSITION is renamed BINDING_SLOT_POSITION. The fill-shape finding also names async values.

  • 4f67697: Breaking: only on followed by an uppercase letter (onClick, onPointerDown) is an event handler. Lowercase on* names (onclick, onmouseover) are plain attributes everywhere:

    • Both compilers compile onclick={expr} like any other attribute (setAttribute, reactive when expr is dynamic) instead of binding a delegated or native event, and SSR renders it as an escaped attribute instead of dropping it. A leftover 1.x on:click={fn} is likewise a plain namespaced attribute (it previously compiled to addEventListener(":click", fn)).
    • @solidjs/web spread/assign set lowercase on* keys as attributes, the server spread walk renders them, and useHead applies lowercase on* attributes (camelCase handler names stay skipped). ssrAttribute escapes a function value instead of interpolating its source raw.
    • @solidjs/html and @solidjs/h elements wrap a function passed to a lowercase on* in a getter like any other attribute; only onXxx and ref are exempt.
    • @solidjs/html components follow @solidjs/h's rule: every zero-argument function prop, onXxx handlers and ref included, is a getter, so a component handler must declare its event argument (onClick=${e => …}).
    • New dev-only check LOWERCASE_EVENT_ATTRIBUTE (added to the DiagnosticCode union): warns once per attribute name when a function is set on a lowercase on* (or on:) 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/web@2.0.0-rc.14

@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 - on property for <Loading> does not apply getter #3728). The on* exemption on components now covers only onXxx handler names (an uppercase letter after on), so <${Loading} on=${() => key()}> re-keys the boundary when key() changes. Native elements are unchanged: every on* prop is still passed through as an event handler. A lowercase onclick passed to a component is now wrapped in a getter; name it onClick or 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 on followed by an uppercase letter (onClick, onPointerDown) is an event handler. Lowercase on* names (onclick, onmouseover) are plain attributes everywhere:

    • Both compilers compile onclick={expr} like any other attribute (setAttribute, reactive when expr is dynamic) instead of binding a delegated or native event, and SSR renders it as an escaped attribute instead of dropping it. A leftover 1.x on:click={fn} is likewise a plain namespaced attribute (it previously compiled to addEventListener(":click", fn)).
    • @solidjs/web spread/assign set lowercase on* keys as attributes, the server spread walk renders them, and useHead applies lowercase on* attributes (camelCase handler names stay skipped). ssrAttribute escapes a function value instead of interpolating its source raw.
    • @solidjs/html and @solidjs/h elements wrap a function passed to a lowercase on* in a getter like any other attribute; only onXxx and ref are exempt.
    • @solidjs/html components follow @solidjs/h's rule: every zero-argument function prop, onXxx handlers and ref included, is a getter, so a component handler must declare its event argument (onClick=${e => …}).
    • New dev-only check LOWERCASE_EVENT_ATTRIBUTE (added to the DiagnosticCode union): warns once per attribute name when a function is set on a lowercase on* (or on:) 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/web@2.0.0-rc.14

@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 through assign, 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 (reason tuple) instead of being flattened; only ref merges arrays. Template-slot fills are untracked on every render path and carry the same labelled warning.

    Breaking: AttributeSlot is renamed BindingSlot, 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 code ATTRIBUTE_SLOT_POSITION is renamed BINDING_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 as prev (or as the draft for createStore(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 prev now 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 on followed by an uppercase letter (onClick, onPointerDown) is an event handler. Lowercase on* names (onclick, onmouseover) are plain attributes everywhere:

    • Both compilers compile onclick={expr} like any other attribute (setAttribute, reactive when expr is dynamic) instead of binding a delegated or native event, and SSR renders it as an escaped attribute instead of dropping it. A leftover 1.x on:click={fn} is likewise a plain namespaced attribute (it previously compiled to addEventListener(":click", fn)).
    • @solidjs/web spread/assign set lowercase on* keys as attributes, the server spread walk renders them, and useHead applies lowercase on* attributes (camelCase handler names stay skipped). ssrAttribute escapes a function value instead of interpolating its source raw.
    • @solidjs/html and @solidjs/h elements wrap a function passed to a lowercase on* in a getter like any other attribute; only onXxx and ref are exempt.
    • @solidjs/html components follow @solidjs/h's rule: every zero-argument function prop, onXxx handlers and ref included, is a getter, so a component handler must declare its event argument (onClick=${e => …}).
    • New dev-only check LOWERCASE_EVENT_ATTRIBUTE (added to the DiagnosticCode union): warns once per attribute name when a function is set on a lowercase on* (or on:) attribute, naming the camelCase handler to use.
  • b0c8489: A re-run that commits undefined is 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.changed now reports true for these runs (as it already did for side-effect-only effects), so WASTED_RECOMPUTE no longer fires for them and costs().wastedMs, expectNoWaste and 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 as prev (or as the draft for createStore(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 prev now 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() or Promise.try(). The trace run swaps the global Promise for 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: withResolvers returns a never-settling mock with no-op resolve/reject, and try returns 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/signals@2.0.0-rc.14

@solidjs/universal@2.0.0-rc.14

Patch Changes

  • Updated dependencies [9a213bb]
  • Updated dependencies [da84bd9]
    • solid-js@2.0.0-rc.14

@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 through assign, 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 (reason tuple) instead of being flattened; only ref merges arrays. Template-slot fills are untracked on every render path and carry the same labelled warning.

    Breaking: AttributeSlot is renamed BindingSlot, 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 code ATTRIBUTE_SLOT_POSITION is renamed BINDING_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, reason text-shape) and clears. The content of <textarea>, <title>, <style> and <script> is not a text position (a comment is literal text there); bind value= or a style property instead.

    Breaking: a slot property as a child used to render nothing and raise the text finding; it now renders and binds, and the text reason 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 runtime spread inserted children before running its attribute effect, while the server's ssrElement read attributes first, so the memo and the child element took each other's ids and the child was rebuilt instead of claimed. spread now applies attributes before inserting children — the order a compiled element already uses — and ssrElement reads a children prop after every attribute regardless of key order. Observable on the client: a ref on a dynamic() element now runs before its children are inserted, as it does on a compiled element.

  • 98d35b9: Fix computed keys in compiled SSR style objects (builds without serverComponents). A computed key's name got no ;, so style={{ color: "red", [k]: v }} rendered color:redtop:1px and 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 new ssrStyleProperties(name, value, …) helper, which writes the separator only between the entries it writes; a single entry keeps ssrStyleProperty.

  • 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-dfc instead of inline onload/onerror handlers, which a strict script-src blocks; 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 fire load before the parser reached the template, and $dfr dropped the reveal.

  • 4f67697: Breaking: only on followed by an uppercase letter (onClick, onPointerDown) is an event handler. Lowercase on* names (onclick, onmouseover) are plain attributes everywhere:

    • Both compilers compile onclick={expr} like any other attribute (setAttribute, reactive when expr is dynamic) instead of binding a delegated or native event, and SSR renders it as an escaped attribute instead of dropping it. A leftover 1.x on:click={fn} is likewise a plain namespaced attribute (it previously compiled to addEventListener(":click", fn)).
    • @solidjs/web spread/assign set lowercase on* keys as attributes, the server spread walk renders them, and useHead applies lowercase on* attributes (camelCase handler names stay skipped). ssrAttribute escapes a function value instead of interpolating its source raw.
    • @solidjs/html and @solidjs/h elements wrap a function passed to a lowercase on* in a getter like any other attribute; only onXxx and ref are exempt.
    • @solidjs/html components follow @solidjs/h's rule: every zero-argument function prop, onXxx handlers and ref included, is a getter, so a component handler must declare its event argument (onClick=${e => …}).
    • New dev-only check LOWERCASE_EVENT_ATTRIBUTE (added to the DiagnosticCode union): warns once per attribute name when a function is set on a lowercase on* (or on:) attribute, naming the camelCase handler to use.
  • 2656284: createSSRResponse no 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 (onError hears handling: "failed") or is aborted through its signal now resolves with a bodyless 500, or a redirect when a Location is 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_PLUGINS array is /* @__PURE__ */-annotated, seroval Feature flags are read on use, the stub gap-fill header set is built on first use, the event-stream heartbeat's new TextEncoder() is annotated (and no longer built at import time by dist/server.js), and the flash-cookie matcher is a regex literal. A server bundle importing only isServer or getRequestEvent drops from ~11.7 KB to ~1.6 KB minified (seroval bundled; Rolldown), and renderToString bundles shed ~260–380 B. No behavior or API change.

  • Updated dependencies [9a213bb]

  • Updated dependencies [da84bd9]

    • solid-js@2.0.0-rc.14

todos-server-example@0.0.1-rc.2

Patch Changes

  • Updated dependencies [ecb68a1]
  • Updated dependencies [d4b10b5]
  • Updated dependencies [9a213bb]
  • Updated dependencies [365f37d]
  • Updated dependencies [da84bd9]
  • Updated dependencies [98d35b9]
  • Updated dependencies [b57eb2e]
  • Updated dependencies [4f67697]
  • Updated dependencies [2656284]
  • Updated dependencies [8d66ae5]
    • @solidjs/web@2.0.0-rc.14
    • solid-js@2.0.0-rc.14

test-integration@2.0.0-rc.14

Patch Changes

  • Updated dependencies [ecb68a1]
  • Updated dependencies [d4b10b5]
  • Updated dependencies [3c1f809]
  • Updated dependencies [9a213bb]
  • Updated dependencies [365f37d]
  • Updated dependencies [da84bd9]
  • Updated dependencies [98d35b9]
  • Updated dependencies [b57eb2e]
  • Updated dependencies [a5d0e76]
  • Updated dependencies [6be8486]
  • Updated dependencies [4f67697]
  • Updated dependencies [2656284]
  • Updated dependencies [b0c8489]
  • Updated dependencies [8d66ae5]
    • @solidjs/web@2.0.0-rc.14
    • @solidjs/signals@2.0.0-rc.14
    • @solidjs/h@2.0.0-rc.14
    • @solidjs/babel-plugin@2.0.0-rc.14
    • solid-js@2.0.0-rc.14
    • @solidjs/html@2.0.0-rc.14
    • @solidjs/universal@2.0.0-rc.14

@github-actions
github-actions Bot force-pushed the changeset-release/next branch 17 times, most recently from 17d9565 to 70c8f3c Compare October 2, 2026 21:15
@github-actions
github-actions Bot force-pushed the changeset-release/next branch from 70c8f3c to c7004aa Compare October 2, 2026 21:17
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