NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #415 most downloaded on npm
Cooperative scheduler for the browser environment.
Last release 3 days ago
02 Oct 2026
Ships on a steady schedule
a new release about every 8 days
Some releases are documented
notes for 14 of 45 stable releases
Nothing withdrawn
no release was ever pulled
16 years old
2793 releases · first in 2011
Nothing published for this version
Nothing published for this version
Nothing published for this version
See http://facebook.github.io/react/blog/2015/10/07/react-v0.14.html.
See http://facebook.github.io/react/blog/2015/10/07/react-v0.14.html.
One column per quarter.
react package into two: react and react-dom. This paves the way to writing components that can be shared between the web version of React and React Native. This means you will need to include both files and some functions have been moved from React to ReactDOM.react-addons-clone-with-props, react-addons-create-fragment, react-addons-css-transition-group, react-addons-linked-state-mixin, react-addons-perf, react-addons-pure-render-mixin, react-addons-shallow-compare, react-addons-test-utils, react-addons-transition-group, react-addons-update, ReactDOM.unstable_batchedUpdates).props) which returns a JSX element, and this function may be used as a component.getDOMNode() to get the underlying DOM node. Starting with this release, a ref to a DOM component is the actual DOM node. Note that refs to custom (user-defined) components work exactly as before; only the built-in DOM components are affected by this change.React.initializeTouchEvents is no longer necessary and has been removed completely. Touch events now work automatically.TestUtils.findAllInRenderedTree and related helpers are no longer able to take a DOM component, only a custom component.props object is now frozen, so mutating props after creating a component element is no longer supported. In most cases, React.cloneElement should be used instead. This change makes your components easier to reason about and enables the compiler optimizations mentioned above.createFragment helper to migrate, which now returns an array.classSet has been removed. Use classnames instead.class instead of className.this.getDOMNode() is now deprecated and ReactDOM.findDOMNode(this) can be used instead. Note that in the common case, findDOMNode is now unnecessary since a ref to the DOM component is now the actual DOM node.setProps and replaceProps are now deprecated. Instead, call ReactDOM.render again at the top level with the new props.React.Component in order to enable stateless function components. The ES3 module pattern will continue to work.style object between renders has been deprecated. This mirrors our change to freeze the props object.cloneWithProps is now deprecated. Use React.cloneElement instead (unlike cloneWithProps, cloneElement does not merge className or style automatically; you can merge them manually if needed).CSSTransitionGroup will no longer listen to transition events. Instead, you should specify transition durations manually using props such as transitionEnterTimeout={500}.React.Children.toArray which takes a nested children object and returns a flat array with keys assigned to each child. This helper makes it easier to manipulate collections of children in your render methods, especially if you want to reorder or slice this.props.children before passing it down. In addition, React.Children.map now returns plain arrays too.console.error instead of console.warn for warnings so that browsers show a full stack trace in the console. (Our warnings appear when you use patterns that will break in future releases and for code that is likely to behave unexpectedly, so we do consider our warnings to be “must-fix” errors.)Symbol in browsers that support it, in order to ensure that React never considers untrusted JSON to be a valid element. If this extra security protection is important to you, you should add a Symbol polyfill for older browsers, such as the one included by Babel’s polyfill.capture, challenge, inputMode, is, keyParams, keyType, minLength, summary, wrap. It also now supports these non-standard attributes: autoSave, results, security.xlinkActuate, xlinkArcrole, xlinkHref, xlinkRole, xlinkShow, xlinkTitle, xlinkType, xmlBase, xmlLang, xmlSpace.image SVG tag is now supported by React DOM.is="..." attribute).audio and video tags: onAbort, onCanPlay, onCanPlayThrough, onDurationChange, onEmptied, onEncrypted, onEnded, onError, onLoadedData, onLoadedMetadata, onLoadStart, onPause, onPlay, onPlaying, onProgress, onRateChange, onSeeked, onSeeking, onStalled, onSuspend, onTimeUpdate, onVolumeChange, onWaiting.shallowCompare add-on has been added as a migration path for PureRenderMixin in ES6 classes.CSSTransitionGroup can now use custom class names instead of appending -enter-active or similar to the transition name.document.body directly as the container to ReactDOM.render now gives a warning as doing so can cause problems with browser extensions that modify the DOM.<option> elements with multiple text children properly and renders <select> elements on the server with the correct option selected.React.createElement('DIV')) no longer causes problems, though we continue to recommend lowercase for consistency with the JSX tag name convention (lowercase names refer to built-in components, capitalized names refer to custom components).animationIterationCount, boxOrdinalGroup, flexOrder, tabSize, stopOpacity.Simulate.mouseEnter and Simulate.mouseLeave now work.react-tools package and JSXTransformer.js browser file have been deprecated. You can continue using version 0.13.3 of both, but we no longer support them and recommend migrating to Babel, which has built-in support for React and JSX.optimisation.react.inlineElements transform converts JSX elements to object literals like {type: 'div', props: ...} instead of calls to React.createElement. This should only be enabled in production, since it disables some development warnings/checks.optimisation.react.constantElements transform hoists element creation to the top level for subtrees that are fully static, which reduces calls to React.createElement and the resulting allocations. More importantly, it tells React that the subtree hasn’t changed so React can completely skip it when reconciling. This should only be enabled in production, since it disables some development warnings/checks.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Improved warnings for deprecated methods in plain JS classes
clipPath element and attribute for SVGdangerouslySetInnerHTML restrictions so {__html: undefined} will no longer throwgetChildContextreplaceState(obj) retains prototype of objcontextTypesAdded strokeDashoffset, flexPositive, flexNegative to the list of unitless CSS properties
strokeDashoffset, flexPositive, flexNegative to the list of unitless CSS propertiesscoped - for <style> elementshigh, low, optimum - for <meter> elementsunselectable - IE-specific property to prevent user selectionstyle={null} didn't properly update styleuglify dependency to prevent a bug in IE8hasOwnProperty as an object keyDon't throw when rendering empty elements
<select> elementsstyle works when transitioning from nullgetDOMNode for ES6 classes<html>, <head>, <body>) are treated as DOM components--non-strict-es6moduleDeprecated patterns that warned in 0.12 no longer work: most prominently, calling component classes without using JSX or React.createElement and using…
props after an element is created is deprecated and will cause warnings in development mode; future versions of React will incorporate performance optimizations assuming that props aren't mutatedstatics) are no longer autobound to the component classref resolution order has changed slightly such that a ref to a component is available immediately after its componentDidMount method is called; this change should be observable only if your component calls a parent component's callback within your componentDidMount, which is an anti-pattern and should be avoided regardlesssetState in life-cycle methods are now always batched and therefore asynchronous. Previously the first call on the first mount was synchronous.setState and forceUpdate on an unmounted component now warns instead of throwing. That avoids a possible race condition with Promises.this._pendingState and this._rootNodeID.React.findDOMNode(component), which should be used in place of component.getDOMNode(). The base class for ES6-based components will not have getDOMNode. This change will enable some more patterns moving forward.React.cloneElement(el, props) for making copies of React elements – see the v0.13 RC2 notes for more details.ref style, allowing a callback to be used in place of a name: <Photo ref={(c) => this._photo = c} /> allows you to reference the component with this._photo (as opposed to ref="photo" which gives this.refs.photo).this.setState() can now take a function as the first argument for transactional state updates, such as this.setState((state, props) => ({count: state.count + 1})); – this means that you no longer need to use this._pendingState, which is now gone.ComponentClass.type is deprecated. Just use ComponentClass (usually as element.type === ComponentClass).createClass-based components are removed or deprecated from ES6 classes (getDOMNode, replaceState, isMounted, setProps, replaceProps).React.addons.createFragment was added for adding keys to entire sets of children.React.addons.classSet is now deprecated. This functionality can be replaced with several freely available modules. classnames is one such module.React.addons.cloneWithProps can be migrated to use React.cloneElement instead – make sure to merge style and className manually if desired.class methods are no longer enumerable by default, which requires Object.defineProperty; if you support browsers such as IE8, you can pass --target es3 to mirror the old behavior--target option is available on the jsx command, allowing users to specify and ECMAScript version to target.
es5 is the default.es3 restores the previous default behavior. An additional transform is added here to ensure the use of reserved words as properties is safe (eg this.static will become this['static'] for IE8 compatibility).> or } when inside an element. Previously it would be treated as a string but now it will be treated as a parse error. The jsx_orphaned_brackets_transformer package on npm can be used to find and fix potential issues in your JSX code.Nothing published for this version
Nothing published for this version
Spread operator ({...}) introduced to deprecate this.transferPropsTo
key and ref moved off props object, now accessible on the element directlyReact.__internals is removed - it was exposed for DevTools which no longer needs accessReact.createFactory first. This is handled for you when using JSX.{...}) introduced to deprecate this.transferPropsToacceptCharset, classID, manifestReact.renderComponent --> React.renderReact.renderComponentToString --> React.renderToStringReact.renderComponentToStaticMarkup --> React.renderToStaticMarkupReact.isValidComponent --> React.isValidElementReact.PropTypes.component --> React.PropTypes.elementReact.PropTypes.renderable --> React.PropTypes.nodeReact.isValidClassinstance.transferPropsTofalse from event handlers to preventDefaultReact.createFactorykey={null} to assign implicit keysevent.getModifierState as case sensitiveevent.charCodelist updates correctly nowscrollLeft, scrollTop removed, these should not be specified as propsReact.addons.batchedUpdates added to API for hooking into update cycleReact.addons.update uses assign instead of copyProperties which does hasOwnProperty checks. Properties on prototypes will no longer be updated correctly.@jsx React.DOM no longer required{...}) operator introduced to allow easier use of propsNothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
React.createDescriptor has been deprecated as a result
<dialog> element and associated open attribute<picture> element and associated media and sizes attributesReact.createElement API in preparation for React v0.12
React.createDescriptor has been deprecated as a result<picture> is now parsed into React.DOM.pictureesprima and jstransform for correctness fixesjsx executable now exposes a --strip-types flag which can be used to remove TypeScript-like type annotations
require('react-tools').transform as stripTypessetState can be called inside componentWillMount in non-DOM environments
setState can be called inside componentWillMount in non-DOM environmentsSyntheticMouseEvent.getEventModifierState correctly renamed to getModifierStategetModifierState correctly returns a booleangetModifierState is now correctly case sensitiveinnerHTML workaround is now removed, fixing rerendering in certain casesgetDefaultProps() is now called once per class and shared across all instances
getDefaultProps() is now called once per class and shared across all instancesMyComponent() now returns a descriptor, not an instanceReact.isValidComponent and React.PropTypes.component validate descriptors, not component instancespropType validators should return an Error instead of logging directlynulle.key and e.getModifierState() propertiesonBeforeInput eventReact.Children.count has been added as a helper for counting the number of childrene.view properly normalizedcoords, crossOrigin, download, hrefLang, mediaGroup, muted, scrolling, shape, srcSet, start, useMap)className on a mounted SVG component now works correctlymask and tspandx, dy, fillOpacity, fontFamily, fontSize, markerEnd, markerMid, markerStart, opacity, patternContentUnits, patternUnits, preserveAspectRatio, strokeDasharray, strokeOpacityWebkit, ms, Moz, O) are now handled properlyimg event listeners are now unbound properly, preventing the error "Two valid but unequal nodes with the same data-reactid"$apply command to transform valuesdist/.envify is properly listed as a dependency instead of a peer dependency<Components.Checkbox />harmony features available in the command line with <script type="text/jsx;harmony=true">--harmony option--source-map-inline option to the jsx executabletransformWithDetails API which gives access to the raw sourcemap dataNothing published for this version
Added warnings to help migrate towards descriptors
data-reactid, data-react-checksum). This DOM will not be mountable by React. Read the docs for React.renderComponentToStaticMarkupsrcSet for <img> to specify images at different pixel ratiostextAnchor for SVGclassName={false} behaves consistentlythis.refs is defined, even if no refs are specified.update function to deal with immutable data. Read the docstransform function. The only option supported is harmony, which behaves the same as jsx --harmony on the command line. This uses the ES6 transforms from jstransform.Nothing published for this version
Nothing published for this version
Nothing published for this version
We've also made several other improvements and a few breaking changes; the full changelog is provided below.
This version includes better support for normalizing event properties across all supported browsers so that you need to worry even less about cross-browser differences. We've also made many improvements to error messages and have refactored the core to never rethrow errors, so stack traces are more accurate and Chrome's purple break-on-error stop sign now works properly.
We've also added to the add-ons build React.addons.TestUtils, a set of new utilities to help you write unit tests for React components. You can now simulate events on your components, and several helpers are provided to help make assertions about the rendered DOM tree.
We've also made several other improvements and a few breaking changes; the full changelog is provided below.
In addition to the changes to React core listed below, we've made a small change to the way JSX interprets whitespace to make things more consistent. With this release, space between two components on the same line will be preserved, while a newline separating a text node from a tag will be eliminated in the output. Consider the code:
<div>
Monkeys:
{listOfMonkeys} {submitButton}
</div>
In v0.8 and below, it was transformed to the following:
React.DOM.div(null,
" Monkeys: ",
listOfMonkeys, submitButton
)
In v0.9, it will be transformed to this JS instead:
React.DOM.div(null,
"Monkeys:",
listOfMonkeys, " ", submitButton
)
We believe this new behavior is more helpful and elimates cases where unwanted whitespace was previously added.
In cases where you want to preserve the space adjacent to a newline, you can write {'Monkeys: '} or Monkeys:{' '} in your JSX source. We've included a script to do an automated codemod of your JSX source tree that preserves the old whitespace behavior by adding and removing spaces appropriately. You can install jsx_whitespace_transformer from npm and run it over your source tree to modify files in place. The transformed JSX files will preserve your code's existing whitespace behavior.
componentDidMount and componentDidUpdate no longer receive the root node as a parameter; use this.getDOMNode() insteadundefined, the default value returned by getDefaultProps will now be used insteadReact.unmountAndReleaseReactRootNode was previously deprecated and has now been removedReact.renderComponentToString is now synchronous and returns the generated HTML string<html> tag using React) is now supported only when starting with server-rendered markupdeltaY is no longer negatedinput, select, and textarea elements, .getValue() is no longer supported; use .getDOMNode().value insteaddefs, linearGradient, polygon, radialGradient, stopcrossOrigin for CORS requestsdownload and hrefLang for <a> tagsmediaGroup and muted for <audio> and <video> tagsnoValidate and formNoValidate for formsproperty for Open Graph <meta> tagssandbox, seamless, and srcDoc for <iframe> tagsscope for screen readersspan for <colgroup> tagspropTypes in mixinsany, arrayOf, component, oneOfType, renderable, shape to React.PropTypesstatics on component spec for static component methods.currentTarget is now properly set.key is now polyfilled in all browsers for special (non-printable) keys.clipboardData is now polyfilled in IE.dragTransfer is now presentonMouseOver and onMouseOut in addition to the existing onMouseEnter and onMouseLeave eventsonLoad and onError on <img> elementsonReset on <form> elementsautoFocus attribute is now polyfilled consistently on input, select, and textarea__owner__ property to each component's props object; passed-in props are now never mutatedReact.renderComponent within componentDidMount), events now properly bubble to the parent component.target, .relatedTarget, and .type are now set properly.data is now properly normalized in IE9 and IE10px appended for the unitless properties columnCount, flex, flexGrow, flexShrink, lineClamp, order, widowscomponentWillUnmount handlerrenderComponentToString would store event handlersdisabled are rendered without a value (previously disabled="true", now simply disabled)key values containing . are now supporteddata-reactid values for performancekey property changesdocument only when necessary, improving performance in some cases.returnValue in modern browsers, eliminating a warning in ChromescrollLeft and scrollTop are no longer accessed on document.body, eliminating a warning in ChromeReact.addons.TestUtils was added to help write unit testsReact.addons.TransitionGroup was renamed to React.addons.CSSTransitionGroupReact.addons.TransitionGroup was added as a more general animation wrapperReact.addons.cloneWithProps was added for cloning components and modifying their propstransitionLeave in CSSTransitionGroup<input> elements, checkedLink is now supported for two-way bindingreact-tools npm package no longer includes the React core libraries; use the react package instead.displayName is now added in more cases, improving error messages and names in the React Dev ToolsJSXTransformer now uses source maps automatically in modern browsersJSXTransformer error messages now include the filename and problematic line contents when a file fails to parseNothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Security release to address CVE-2013-7035.
Security release to address CVE-2013-7035.
key: CVE-2013-7035Fixed bug with and selection events.
<input type="range"> and selection events.disabled attribute handling on non-<input> elements.No longer transform class to className as part of the transform! This is a breaking change - if you were using class, you _must_ change this to classN…
charSet, content, form, httpEquiv, rowSpan, autoCapitalize).rx, ry).getInitialState and getDefaultProps in mixins.React.version.React.isValidClass - Used to determine if a value is a valid component constructor.React.autoBind - This was deprecated in v0.4 and now properly removed.React.unmountAndReleaseReactRootNode to React.unmountComponentAtNode.class to className as part of the transform! This is a breaking change - if you were using class, you must change this to className or your components will be visually broken.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →