All Versions
Latest Version
Avg Release Cycle
14 days
Latest Release
1047 days ago

Changelog History
Page 3

  • v10.3.0 Changes

    February 03, 2020

    _ tl;dr: This release contains a good number of bug fixes and we encourage all users to upgrade._

    ๐Ÿš€ A little bit of time has passed since our last release and we're excited to ship another one, making Preact even more robust! The fixes nearly touch all packages and further improves compatibility with third-party libraries ๐ŸŽ‰

    ๐Ÿฑ If you glance at the contributor names, you'll notice a few new ones there. It's safe to say that we were amazed and super ecstatic by the amount of new first time contributors to Preact! ๐Ÿ™Œ

    ๐Ÿ”‹ Features

    • ๐Ÿ‘ Include support for customised built-in elements (#2266, thanks @defx)
    • โฌ†๏ธ Upgrade devtools adapter to support Profiler and bring back preact/devtools import (#2246, thanks @marvinhagemeister)

    ๐Ÿ› Bug Fixes


    • ๐Ÿ‘ Allow null as an initial value for useRef (#2281, thanks @armujahid)

    ๐Ÿšง Maintenance

  • v10.2.1 Changes

    January 08, 2020

    ๐Ÿš€ This release corrects an issue regarding hydration that was found in yesterdays 10.2.0 release ๐ŸŽ‰

    ๐Ÿ› Bug Fixes

  • v10.2.0 Changes

    January 07, 2020

    ๐Ÿš€ Happy belated New Years to everybody ๐ŸŽ‰ We hope you enjoyed the holidays and had some time off to recharge ๐Ÿ‘ Our very first release in 2020 brings two new features and the usual round of bug fixes ๐Ÿ’ฏ

    ๐Ÿ†• New useErrorBoundary hook

    ๐Ÿ‘€ There is a new hook called useErrorBoundary which allows you to catch errors that are thrown by any child components. It's essentially the hook version of componentDidCatch.

    // 1. parameter is null or the error that was caught// 2. paremeter can be called to reset the stateconst [err, reset] = useErrorBoundary();// Optional: You can pass a callback function that will// be executed when an error occurs:const [err] = useErrorBoundary(() =\> callMeMaybe());

    Usage example:

    // Example component that will throw an error on renderconst SomeComponent = () =\> { throw new Error("fail"); };const App = props =\> { const [err] = useErrorBoundary(); if (err) { return \<p\>Something went wrong...\</p\>; } else { return \<SomeComponent /\>; } };

    0๏ธโƒฃ Lazy works with non-default export

    0๏ธโƒฃ This PR was one of the smallest ones, but something that makes working with different kind of lazy loaded modules a lot easier. Previously lazy would always use the default export of the imported module. With this change it's now possible to use it with any export.

    // Look ma, no default exportconst LazyFoo = lazy(() =\> import("./Foo").MyComponent);

    ๐Ÿฑ On top of that we have the usual round of bug fixes. We'd like to thank everyone who reported them and helped us make Preact even better. Thank you so much!! ๐Ÿ‘

    ๐Ÿ”‹ Features

    ๐Ÿ› Bug Fixes


    ๐Ÿšง Maintenance

  • v10.1.1 Changes

    December 16, 2019

    _ tl;dr: A tiny maintenance release, which helps with debugging Preact apps._

    ๐Ÿš€ This release is a lot smaller compared to our usual ones, but we deemed one feature important enough to have in users hands that we made this release. And that's component stacks which we hope will reduce the issue count in our tracker slightly ๐ŸŽ‰

    On top of that we want to congratulate @jamesb3ll for his first-time contribution to Preact ๐Ÿฅ‡ He found an issue and filled it with every detail one can imagine (codesandbox is awesome!). But instead of stopping there, he tinkered a bit and found a genius fix for it! Thank you for your PR ๐Ÿ‘ ๐Ÿ€

    Component Stacks

    โš  Whenever you include preact/debug you get a lot of hints and warnings about how you can make your application better. But sometimes it was hard to tell where the error originated from. To resolve that we automatically append a component stack trace telling you directly which component threw the error.

    class Foo extends Component { constructor(props) { super(props); // Doesn't do anything, `this.state = { foo: true }`// should be used instead.this.setState({ foo: true }); } render() { return \<div\>foo\</div\>; } }function Bar() { return \<Foo /\>; }function Baz() { return \<Bar /\>; }

    โš  The above code will print the following warning to the browser's console:

    Screenshot from 2019-12-16 20-55-21

    ๐Ÿฑ With the stack appended at the bottom it's much easier to track down the source ๐Ÿ’ฏ To get those beautiful file and line mappings, make sure that you have @babel/plugin-transform-react-jsx-source enabled in your babel config ๐Ÿ‘

    ๐Ÿ”‹ Features

    ๐Ÿ› Bug Fixes

    • ๐Ÿ›  Fix componentWillReceiveProps not called on child component when parent is queued in the same commit (#2186, thanks @jamesb3ll)

    ๐Ÿšง Maintenance

  • v10.1.0 Changes

    December 09, 2019

    _ tl;dr: This release adds support for the highly anticipated preact-devtools extension. It's in an early preview state, but it has proven to be very useful already for inspecting a component tree in our internal testing. Apart from that there is a new SuspenseList component to control loading in lists and the usual round of bug fixes._

    ๐Ÿš€ Christmas comes early in the form of another feature packed Preact release ๐ŸŽ‰ We're particular proud of this one as it represents the results of a lot of work behind the scenes. Especially when it comes to the devtools.

    ๐Ÿฑ Developers, Developers, Developers! ๐Ÿ”ง

    For the longest time we've been able to reuse the react devtools extension that was (as the name implies) written specifically for React. We did this by hooking ourselves into the init procedure and shimming in a conversion layer that translated our inner workings to something React would use under the hood. Over the past year we've kept up with all the internal changes of React's private structures, but it took us more and more time to make sure that the integration wasn't breaking or running into weird edge cases.

    ๐Ÿ’ป Faced with a choice we decided to pursue the development of our own extension specifically written for Preact. This way we are not affected by any breaking changes on React's side and have the possibility to extend the devtools with custom UI, like for the Composition-API PR #1923 .

    ๐Ÿš€ That said the extension is not what we would call final yet. It's more of an early preview, akin to an alpha release. Despite bugs you may encounter, we found it useful enough in our testing that we didn't want to hold back any longer.

    Download it here:


    ๐Ÿฑ SuspenseList ๐Ÿ”ข

    ๐Ÿ’ป SuspenseList is a new component that can control the order in which any child suspensions are revealed. Take a list of images for example. Due to the browser firing the requests to download them in parallel, the images may appear in any order. This can be a bit jarring, when some sort of appear animation is involved. With SuspenseList we can force all images to appear at the same time, inorder or in reverse.

    In the following example A will appear first, followed by B even if C was loaded before B. And finally C will appear.

    // `revealOrder` can be one of 'forwards', 'backwards' or 'together'\<SuspenseList revealOrder="forwards"\> \<Suspense fallback={\<span\>Loading...\</span\>}\> \<A /\> \</Suspense\> \<Suspense fallback={\<span\>Loading...\</span\>}\> \<B /\> \</Suspense\> \<Suspense fallback={\<span\>Loading...\</span\>}\> \<C /\> \</Suspense\> \</SuspenseList\>

    ๐Ÿ”‹ Features

    ๐Ÿ› Bug Fixes


    • โž• Add onToggle event to TypeScript defs. (#2151, thanks @xorgy)
    • Re-export FunctionComponent from preact/compat (#2087, thanks @jokester)
    • ๐Ÿ›  Fix internal Suspense-related typings (#2117, thanks @jviide)
    • Specify valid dir property values (#2108, thanks @antonk52)

    ๐Ÿฑ Golf โ›ณ๏ธ๐ŸŒ๏ธโ€โ™€๏ธ

    ๐Ÿšง Maintenance

  • v10.0.5 Changes

    November 10, 2019

    _ tl;dr: This release is a bug fix only release and all users are encouraged to update._

    ๐Ÿฑ This week saw many cool improvements surrounding our TypeScript definitions. Thanks to an amazing contribution from @lukeshiru the event target is now correctly inferred for all native elements. This alone should remove many manually casted event arguments in your code ๐ŸŽ‰

    ๐Ÿฑ Together @JoviDeCroock and @cristianbote set their minds on fixing a few newly reported issues surrounding refs and the like. Personally, I'm pretty impressed how quickly they could identify and resolve the issues. Much respect to you two ๐Ÿ‘

    As the year is coming to an end @andrewiggins did some house-cleaning and found various places where we could save even more bytes! I don't know how he does it and it's just amazing to witness so much pure talent!

    ๐Ÿšง Beside that, the changes mainly revolve around maintenance tasks. We've switched to prettier for automatic code formatting, lowering the barrier for new contributors even more. The formatting is automatically applied on each commit via a git-hook, and everything will be taken care of for you ๐Ÿ’ฏ

    ๐Ÿฑ We also saw two exciting contributions from Googlers: @jridgewell found a very hard to spot unnecessary case in a regex we use to append px to certain CSS values and @jakearchibald found an html attribute we missed in our typings ๐ŸŽ‰

    ๐Ÿš€ Like in our past release we'd like to take a moment to thank everybody who contributed, not just code but also made the time to write bug reports. Thank you so much ๐Ÿ‘

    ๐Ÿ› Bug Fixes

    ๐Ÿฑ Golf ๐ŸŒ๏ธโ€โ™€๏ธ


    • โž• Add types for currentTarget on event handlers for IntrinsicElements (#2084, thanks @lukeshiru)
    • ๐Ÿ‘Œ Improve ref typings for IntrinsicElements (#2070, thanks @lukeshiru)
    • โž• Add as html attribute to TypeScript defs (#2068, thanks @jakearchibald)

    ๐Ÿšง Maintenance

  • v10.0.4 Changes

    October 29, 2019

    ๐Ÿš€ This release fixes a build issue that caused errors when using effect hooks.

  • v10.0.3 Changes

    October 29, 2019

    ๐Ÿš€ This release corrects an issue where a debug warning was printed incorrectly to the console, that (rightfully) confused users. So we wanted to fix that as quick as possible ๐Ÿ‘

    ๐Ÿ› Bug Fixes

    ๐Ÿšง Maintenance

    • Queue layoutEffects in component render callbacks array (+0 B) (#2050, thanks @andrewiggins)
    • โœ… Separate debug tests into multiple files and fix some bugs in debug (#2047, thanks @andrewiggins)
  • v10.0.2 Changes

    October 28, 2019

    _ tl;dr: This is release contains mostly bug fixes and some size reductions. We encourage everyone to upgrade._

    ๐Ÿš€ Just a week has passed since the last release and there are already an exciting number of new commits in master. Hackoktoberfest has had really positive effects on us and we're excited to see some new contributors in this release ๐Ÿ’ฏ

    ๐Ÿ‘€ As you can see from the changelog: @andrewiggins is currently on a byte removing spree, so I thought it'd be appropriate to list them in their own category ๐ŸŽ‰ A few others joined him and marie kondo'ed everything that didn't spark joy in us!

    ๐Ÿฑ Besides some great savings, there are new debug warnings for components and fixes for our Suspense implementation ๐ŸŽ‰

    ๐Ÿ”‹ Features

    • โž• Add debug warnings when calling setState or forceUpdate on an unmounted component (#2037, thanks @andrewiggins)

    ๐Ÿ› Bug Fixes

    Golf (size reductions)

    • Inline coerceToVNode inside of toChildArray (-21 B) (#2040, thanks @andrewiggins)
    • โœ‚ Remove unused mount check in context Provider (-6 B) (#2039, thanks @andrewiggins)
    • Golfed render (#2045, thanks @MohammedSheikhIbrahim)
    • โœ‚ Remove useless return from eventProxy (#2026, thanks @jridgewell)
    • Rewrite useImperativeHandle to use useLayoutEffect (-35 B) (#2003, thanks @andrewiggins)
    • Re-purpose renderCallbacks as a general per-component commit queue (#2011, thanks @andrewiggins)


    • โž• Add nonce to JSX HTMLAttributes types for better Content Security Policy support. (#2035, thanks @calvinf)
    • โœ‚ Remove internal import from compat types (#2018, thanks @andrewiggins)
    • ๐Ÿ›  Fix internal vnode typings (#2015, thanks @pmkroeker)

    ๐Ÿšง Maintenance

    • โœ‚ Remove end of line in compat/mangle.json (#2053, thanks @38elements)
    • Add _afterPaintQueued and _fallback to mangle.json (#2043, thanks @38elements)
    • โœ‚ Remove OpenCollective postinstall Banner (#2033, thanks @developit)
    • โšก๏ธ Update preact/compat in readme (#2029, thanks @developit)
    • ๐Ÿ›  Fixed some typos and grammatical mistakes. (#2028, thanks @MohammedSheikhIbrahim)
    • ๐Ÿ‘ฎ Add _force and _lastDomChild to mangle.json (#2023, thanks @developit)
    • โž• Add _suspensions to mangle (#2019, thanks @JoviDeCroock)
    • โž• Add npm script to run compat TS tests (#2017, thanks @andrewiggins)
  • v10.0.1 Changes

    October 17, 2019

    _ tl;dr: This is a standard bug-fix release with no new features. We encourage everyone to upgrade_

    ๐Ÿš€ Wow, we've been overwhelmed with the reactions to our final Preact X release! We saw a huge uptick in npm downloads to 200.000 per week ๐ŸŽ‰ Another exciting announcement is that Google AMP is officially using Preact under the hood. We've receivied many more thank you notes (and even stroopwafels!) from companies using Preact. Those range from small companies to big enterprise ones, where Preact is used in a wide span of different environments.

    ๐Ÿฑ We preactively allocated the weeks after the big launch for a period of bug-fixes only in case something slipped through. It was admittedly a more conservative decision after our long alpha and beta period, but we wanted to make sure that you all would have a butter smooth experience no matter what ๐ŸŒ  It's safe to say that it went really well and we've only received a couple bug reports so far ๐ŸŽ‰

    ๐Ÿš€ In the short amount of time that has passed since the release, we managed to squash a good portion of those! Thank you so much to everyone for reporting bugs and helping us track them down! You rock ๐Ÿ‘ ๐Ÿ’ฏ

    ๐Ÿ› Bug Fixes


    ๐Ÿšง Maintenance