solid-js
solid-js (latest known version: 2.0.0) has 66 known breaking changes on record, each backed by a source URL.
Security advisories
Solid Lacks Escaping of HTML in JSX Fragments allows for Cross-Site Scripting (XSS)
Recent changes
Dev guardrails with dev warnings that catch accidental top-level reads in components and writes in reactive scopes before they become async bugs
More predictable scheduler: updates are microtask-batched and reads don't update until the batch flushes (use flush() only when you truly need to settle now)
Derived state is a primitive with function forms like createSignal(fn) and createStore(fn) making derived-but-writable patterns explicit and composable
Mutations have a home with action(...) and optimistic primitives (createOptimistic, createOptimisticStore) for optimistic → await → refresh flows
Pending UI is an expression via isPending(() => expr) to tell when refreshing work is in flight without tearing down the UI
<Loading> component for initial readiness shows a fallback while a subtree can't produce UI yet, then keeps the UI stable while background work happens
Async is now first-class: computations can return Promises or async iterables and the graph knows how to suspend/resume work
use: directives are removed; use ref directive factories and arrays instead
Store setters are draft-first by default; storePath(...) exists as an opt-in helper if you want the old path-style ergonomics
createEffect is split (compute → apply), and onMount is replaced by onSettled (which can return cleanup)
Index is replaced by <For keyed={false}>, and For children receive accessors (item() / i())
use: directives are replaced by ref directive factories with array composition
Fixed an issue with lazy images by updating the heuristic to use `importNode` instead of `cloneNode` for templates with lazy images
Client methods from `solid-js/web` are now exported from the server (they will throw if used in server environment)
Improved Hydration Mismatch Error to output the template and matching ID for easier debugging
Custom elements with the `is` attribute are now detected and receive special behavior
Added support for handleEvent syntax in non-delegated events using objects with properties like `passive` and `once`
Added `bool:` attribute namespace to explicitly set attributes according to boolean attribute rules
Improved event handler delegating retargetting to better handle shadow DOM events
Added JSDOM to the compiler to better detect invalid HTML at build time, including nested invalid elements like `<a>` inside other `<a>` tags
`oncapture:` is now deprecated in favor of using `on:` with event properties
Removed the browser field from exports, which may cause issues with legacy packages that don't support export conditions
Improved guards on global HydrationScript to prevent duplicate inclusion when multiple scripts are added to the same page, addressing issues in Micro-frontends or 3rd party Islands solutions.
Changed open hydration markers from `#` to `$` to fix NGINX Server Side Includes compatibility, as comments led with `#` are treated as special directives by some servers.
Template size reduction: implemented removal of unnecessary quotes in template strings (a compiler optimization technique), in addition to the removal of unnecessary closing tags from 1.7.
Hydration improvements: fixed element duplication issues with fragments, especially with lazy component siblings or top-level fragments. Updated DOM snapshot accuracy during streaming and hydration pauses. Added performance improvements to avoid redundantly setting attributes or props during hydration.
De-duping streaming serialization: decoupled promise serialization from Resources into a generic mechanism, enabling nested promises and more complicated data structures. Added deep de-duping of data serialized across flushes to avoid resending the same data in different streaming chunks, beneficial for Islands and recursive data structures.
Hydration will now error more aggressively when mismatches happen, as values will be kept as they were on the server rather than how they may compute at runtime during hydration.
Check what changed for solid-js since your installed version, live.
Open the playground →