NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #1799 most downloaded on npm
Fast 4kb React-compatible Virtual DOM library.
Last release 4 days ago
30 Sep 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
11 years old
287 releases · first in 2015
https://preactjs.com/blog/preact-11
https://preactjs.com/blog/preact-11
Read the upgrade-guide over at https://preactjs.com/guide/v11/upgrade-guide
All other release notes can be seen at
One column per quarter.
Preserve hook state when Suspense re-suspends ( #5239 , thanks @JoviDeCroock )
selectedcontent JSX type (#5234, thanks @JoviDeCroock)Tree-shake feature-specific compat hooks ( #5203 , thanks @JoviDeCroock )
implement use in compat ( #5186 , thanks @JoviDeCroock )
use in compat (#5186, thanks @JoviDeCroock)moveBefore rather than insertBefore when available (#5161, thanks @JoviDeCroock)_children into a local in constructNewChildrenArray (#5198, thanks @JoviDeCroock)options._render (#5187, thanks @JoviDeCroock)_bits mangle for Preact ISO (#5200, thanks @JoviDeCroock)Nothing published for this version
Nothing published for this version
Frontport 10.29.4 ( #5139 , thanks @JoviDeCroock )
nodeType instead of the global document (#5119, thanks @natemoo-re)shallowDiffers (#4780, thanks @romgrk)chai to dev dependencies to make pnpm install work (#5043, thanks @marvinhagemeister)Forward-port fixes from v10 (#5008, thanks @JoviDeCroock)
scrollsnapchange and scrollsnapchanging event support (#4946, thanks @argyleink)jsx-runtime (#4981, thanks @rschristian)commpat/server.browser entry (#4940, thanks @marvinhagemeister).jsx file extension (#4925, thanks @rschristian)Breaking changes to outputs & pkg.json (#4652, thanks @rschristian)
defaultProps into preact/compat (#4657, thanks @JoviDeCroock)component.base (#4549, thanks @JoviDeCroock)captureOwnerStack (#4875, thanks @colinaaa)preact/debug (#4830, thanks @colinaaa)useRef (#4683, thanks @rschristian)_listeners mangle to reduce collisions (#4463, thanks @rschristian)rerendercount (#4877, thanks @JoviDeCroock)unstable_batchedUpdate to improve coverage (#4842, thanks @rschristian)Batch updates in flushSync ( #5173 , thanks @JoviDeCroock )
Make RTS optional peer dep ( #5150 , thanks @JoviDeCroock )
We had to revert #5055 due to an incompatibility with useSignalEffect
We had to revert #5055 due to an incompatibility with useSignalEffect
Compat Suspense hydration children recovery ( #5144 , thanks @JoviDeCroock )
Fix hydration-suspense crashing due to sCU bail ( #5134 , thanks @JoviDeCroock )
Fix error recovery for partially rendered subtrees ( #5120 , thanks @JoviDeCroock )
useId stability across async Suspense (#5108, thanks @JoviDeCroock)Signalish for input DOM-type (#5096, thanks @JoviDeCroock)Fix hydration when we have defaultValue or value on a textarea ( #5081 , thanks @JoviDeCroock )
Create a unique event-clock for each Preact instance on a page. (#5068, thanks @JoviDeCroock)
.test.js -> .test.jsx when JSX is used (#5058, thanks @marvinhagemeister)Implement flushSync (#5036, thanks @JoviDeCroock)
Fix crash where a synchronous effect render unmounts the tree (#5026, thanks @JoviDeCroock)
Avoid scheduling suspense state udpates (#5006, thanks @JoviDeCroock)
_original (#4989, thanks @JoviDeCroock)Enforce strict equality for VNode object constructors
Fix erroneous diffing w/ growing list (#4975, thanks @JoviDeCroock)
Updates dangerouslySetInnerHTML type so future TS will accept Trusted… (#4931, thanks @lukewarlow)
commpat/server.browser entry (#4941 & #4940, thanks @marvinhagemeister)Enforce strict equality for VNode object constructors
Mirror non-JSX types to the 'preact' namespace (#4904, thanks @rschristian)
Avoid re-inserting children during bailout (#4890, thanks @vasylenkoval)
.render property referencing original render function (#4870, thanks @upupming).type property referencing original component (#4869, thanks @upupming)Update 'replaceNode' deprecation comment to point at new shim (#4844, thanks @rschristian)
refcallback type to reflect possibility of returning cleanup function and add debug helper exports (#4860, thanks @rschristian)
Enforce strict equality for VNode object constructors
Export test-utils from compat by @rawrmonstar in https://github.com/preactjs/preact/pull/4783
test-utils from compat by @rawrmonstar in https://github.com/preactjs/preact/pull/4783style object value in precompile transform by @marvinhagemeister in https://github.com/preactjs/preact/pull/4795precompile transform by @marvinhagemeister in https://github.com/preactjs/preact/pull/4798browserslist by @rschristian in https://github.com/preactjs/preact/pull/4785Fix defaultProps applying on null values (#4775, thanks @JoviDeCroock)
Add name to (#4766, thanks @marvinhagemeister)
name to <details> (#4766, thanks @marvinhagemeister)Ensure useId works in portals (#4752, thanks @JoviDeCroock)
HTMLMediaElement.controlsList type to string (DOMTokenList) (#4744, thanks @piotr-cz)Return 'AllHTMLAttributes' to manually including all attrs (#4728, thanks @rschristian)
hydrateRoot return type (#4735, thanks @plesiecki)Address context fragments issue (#4717, thanks @JoviDeCroock)
Keyed nullish placeholders cause re-mounts (#4700, thanks @JoviDeCroock)
onBeforeToggle event handler type (#4694, thanks @lukewarlow)closedby types (#4693, thanks @lukewarlow)fetchPriority to img (#4713, thanks @JoviDeCroock)AllHTMLAttributes interface (#4706, thanks @rschristian).d.ts files (#4698, thanks @rschristian)This is a hotfix release! If you are encountering bundling issues with regards to unallowed import syntax, this will fix it!
This is a hotfix release! If you are encountering bundling issues with regards to unallowed import syntax, this will fix it!
Fixes memory leak when wrapping Fragment is captured by an effect closure (#4680, thanks @JoviDeCroock)
Support the template tag (#4639, thanks @JoviDeCroock)
_hasScuFromHooks mangle (#4645, thanks @rschristian)HTMLProps to extend all known props (#4651, thanks @rschristian)ComponentProps type (#4634, thanks @rschristian)generic aria role from types (#4610, thanks @rschristian)FowardRefRenderFunction type to compat (#4675, thanks @rschristian)Incorrect onToggle event type (#4615, thanks @rschristian)
Wrap hydration debug message node types in quotes (#4609, thanks @rschristian)
We noticed that there's a few unpleasant scenario's that could form from this change, we wanted to be on the safe side here and revert this for the ti
We noticed that there's a few unpleasant scenario's that could form from this change, we wanted to be on the safe side here and revert this for the time being. if you run into issues with swapping components placement wise in a list use the key property.
Revert handle event (#4584, thanks @JoviDeCroock) we had to revert this due to an inherent type incompatibility, apologies for missing this!
defaultValue property types for inputs, selects, & textareas (#4585, thanks @rschristian)type attribute (#4582, thanks @rschristian)createElement & h types (#4578, thanks @rschristian)href & hreflang attribute types (#4575, thanks @rschristian)datetime on <del> as optional (#4570, thanks @marvinhagemeister)max and min properties on input element types (#4568, thanks @rschristian)ElementRef type to compat (#4557, thanks @rschristian)declare global from internal types (#4583, thanks @rschristian)This adds per-element typings for every DOM-node type, this means that our types might become slightly stricter when you are using DOM attributes/prop
This adds per-element typings for every DOM-node type, this means that our types might become slightly stricter when you are using DOM attributes/properties where they are not allowed, an example of this might be <div src="x" />.
If you notice any issues when upgrading tell us about them, we can evaluate whether we have missed a case.
This is a long time bugfix, when we have elements that look like
return (
{condition ? <Element /> : null}
{condition ? null : <Element />
)
We would reuse the state of the first VNode to render the second one when the condition switches. When you are using key, this issue was not present.
{ handleEvent() {} } object interface as a listener (#4538, thanks @lilnasy)We've added support for attaching object/class event-handlers
let handler = {
onclick,
handleEvent() {
this.onclick()
}
}
<div onClick={handler} />
Signalish helper to reduce verbosity (#4545, thanks @rschristian)react/iframe-missing-sandbox (#4533, thanks @DonIsaac)We should not always set to hydration when suspending (#4529, thanks @JoviDeCroock)
Improve performance and reduce memory allocation (#4521, thanks @JoviDeCroock)
Prevent debug crash when analyzing hydration mismatches (#4507, thanks @JoviDeCroock)
spellCheck type (#4497, thanks @rschristian)Warn our user for hydration mismatches (#4490, thanks @JoviDeCroock)
AnyComponent type to support classes (#4479, thanks @rschristian)Fix shifting VNode children to the front (#4472, thanks @JoviDeCroock)
Fix debug-issue in testing libraries where there might not be a DOM node (#4454, thanks @JoviDeCroock)
Support ref cleanup functions (#4436, thanks @marvinhagemeister)
This adds support for returning a function in functional refs, example
<input
ref={(ref) => {
// Assign ref, do something with it
return () => {
// ref cleanup, when the element unmounts
// we run the cleanup
};
}}
/>
Only check is connected for dom nodes (#4409, thanks @JoviDeCroock)
Ref type. (#4403, thanks @maxbrieiev)preact-render-to-string (#4395, thanks @Austaras)globalThis over window if available (#4401, thanks @marvinhagemeister)Support MathML namespace (#4364, thanks @rschristian)
<button> and <a> (#4376, thanks @rschristian)<tr> as a child of <table> (#4375, thanks @rschristian)compat/client for IE11 support (#4372, thanks @rschristian)Debug throw on too many rerenders (#4349, thanks @rschristian)
ReactCurrentDispatcher (#4342, thanks @rschristian)Check whether oldDom is present in the DOM (#4318, thanks @JoviDeCroock)
oldDom is present in the DOM (#4318, thanks @JoviDeCroock)Add special case for focusIn and focusOut (#4316, thanks @JoviDeCroock)
Add isMemo to compact to allow compatibility with react-is dependant libraries (#4302, thanks @ziongh)
Bring consistency to our focus-event types (#4307, thanks @JoviDeCroock)
tl;dr: This release contains bug fixes for incorrect ordering of unkeyed children.
tl;dr: This release contains bug fixes for incorrect ordering of unkeyed children.
null placeholders using skewed index (#4290, thanks @andrewiggins)Full Changelog: https://github.com/preactjs/preact/compare/10.19.5...10.19.6
Address scenario where we would crash when replacing a matched vnode with null (#4281, thanks @JoviDeCroock)
event-listeners in safari 12.3 fix (#4253, thanks @JoviDeCroock)
Your coding agent can read these notes before it upgrades. Set up the MCP server →