"use strict";(self.webpackChunkreact_native_website=self.webpackChunkreact_native_website||[]).push([[85270],{35318:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>m});var n=a(27378);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?i(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function s(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},i=Object.keys(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),h=p(a),m=r,d=h["".concat(l,".").concat(m)]||h[m]||u[m]||i;return a?n.createElement(d,o(o({ref:t},c),{},{components:a})):n.createElement(d,o({ref:t},c))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=a.length,o=new Array(i);o[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,o[1]=s;for(var p=2;p<i;p++)o[p]=a[p];return n.createElement.apply(null,o)}return n.createElement.apply(null,a)}h.displayName="MDXCreateElement"},50535:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>f,contentTitle:()=>m,default:()=>v,frontMatter:()=>h,metadata:()=>d,toc:()=>g});var n=a(35318),r=Object.defineProperty,i=Object.defineProperties,o=Object.getOwnPropertyDescriptors,s=Object.getOwnPropertySymbols,l=Object.prototype.hasOwnProperty,p=Object.prototype.propertyIsEnumerable,c=(e,t,a)=>t in e?r(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,u=(e,t)=>{for(var a in t||(t={}))l.call(t,a)&&c(e,a,t[a]);if(s)for(var a of s(t))p.call(t,a)&&c(e,a,t[a]);return e};const h={title:"Announcing React Native 0.67",authors:["kelset","lunaleaps"],tags:["announcement","release"]},m=void 0,d={permalink:"/blog/2022/01/19/version-067",source:"@site/blog/2022-01-19-version-067.md",title:"Announcing React Native 0.67",description:"Happy new year everyone! Today we are announcing the latest release of React Native, 0.67.0, along with some updates on the release process that we have been working on in the past few months.",date:"2022-01-19T00:00:00.000Z",formattedDate:"January 19, 2022",tags:[{label:"announcement",permalink:"/blog/tags/announcement"},{label:"release",permalink:"/blog/tags/release"}],readingTime:3.895,hasTruncateMarker:!0,authors:[{name:"Lorenzo Sciandra",title:"Senior Software Engineer at Microsoft",url:"https://twitter.com/kelset",imageURL:"https://github.com/kelset.png",key:"kelset"},{name:"Luna Wei",title:"Software Engineer at Meta",url:"https://twitter.com/lunaleaps",imageURL:"https://github.com/lunaleaps.png",key:"lunaleaps"}],frontMatter:{title:"Announcing React Native 0.67",authors:["kelset","lunaleaps"],tags:["announcement","release"]},prevItem:{title:"React Native - H2 2021 Recap",permalink:"/blog/2022/01/21/react-native-h2-2021-recap"},nextItem:{title:"Toward Hermes being the Default",permalink:"/blog/2021/10/26/toward-hermes-being-the-default"}},f={authorsImageUrls:[void 0,void 0]},g=[{value:"Sections",id:"sections",level:3},{value:"Highlights of 0.67",id:"highlights-of-067",level:2},{value:"Acknowledgements",id:"acknowledgements",level:3},{value:"Improvements to Release Process",id:"improvements-to-release-process",level:2},{value:"Coordination and Knowledge Sharing",id:"coordination-and-knowledge-sharing",level:3},{value:"Clarity of responsibility",id:"clarity-of-responsibility",level:3},{value:"Release candidate signal",id:"release-candidate-signal",level:3},{value:"Interested in helping React Native stabilise new releases?",id:"interested-in-helping-react-native-stabilise-new-releases",level:2}],b={toc:g};function v(e){var t,a=e,{components:r}=a,c=((e,t)=>{var a={};for(var n in e)l.call(e,n)&&t.indexOf(n)<0&&(a[n]=e[n]);if(null!=e&&s)for(var n of s(e))t.indexOf(n)<0&&p.call(e,n)&&(a[n]=e[n]);return a})(a,["components"]);return(0,n.kt)("wrapper",(t=u(u({},b),c),i(t,o({components:r,mdxType:"MDXLayout"}))),(0,n.kt)("p",null,"Happy new year everyone! Today we are announcing the latest release of React Native, 0.67.0, along with some updates on the release process that we have been working on in the past few months."),(0,n.kt)("h3",u({},{id:"sections"}),"Sections"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",u({parentName:"li"},{href:"/blog/2022/01/19/version-067#highlights-of-067"}),"Highlights of 0.67")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",u({parentName:"li"},{href:"/blog/2022/01/19/version-067#improvements-to-release-process"}),"Improvements to Release Process")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",u({parentName:"li"},{href:"/blog/2022/01/19/version-067#interested-in-helping-react-native-stabilise-new-releases"}),"Interested in helping React Native stabilise new releases?"))),(0,n.kt)("h2",u({},{id:"highlights-of-067"}),"Highlights of 0.67"),(0,n.kt)("p",null,"As mentioned in Meta's ",(0,n.kt)("a",u({parentName:"p"},{href:"https://reactnative.dev/blog/2021/08/19/h2-2021"}),"H2 2021 plans"),", React Native is attempting more frequent releases for a shorter turnaround time for new features and fixes (like the new architecture) to land in the community. Naturally, many releases will focus on fixes and improvements."),(0,n.kt)("p",null,"Here are some notable changes coming in 0.67.0:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Lean-core removals: ",(0,n.kt)("a",u({parentName:"li"},{href:"https://github.com/facebook/react-native/commit/7a770526c626e6659a12939f8c61057a688aa623#diff-e727e4bdf3657fd1d798edcd6b099d6e092f8573cba266154583a746bba0f346"}),"DatePickerAndroid")),(0,n.kt)("li",{parentName:"ul"},"Bump Gradle version to 7.2, Bump Kotlin version to 1.5.31 ",(0,n.kt)("a",u({parentName:"li"},{href:"https://github.com/facebook/react-native/commit/9ae3367431428748f5486c782199beb4f9c6b477"}),"Bump Kotlin and Gradle versions (#32319)")),(0,n.kt)("li",{parentName:"ul"},"A notable callout: 0.67 continues to depend on Hermes 0.9.0, unchanged from 0.66")),(0,n.kt)("p",null,"You can find the ",(0,n.kt)("a",u({parentName:"p"},{href:"https://github.com/facebook/react-native/blob/main/CHANGELOG.md#v0670"}),"full changelog here"),"."),(0,n.kt)("p",null,"You can participate in the conversation on the status of this release at ",(0,n.kt)("a",u({parentName:"p"},{href:"https://github.com/reactwg/react-native-releases/discussions/10"}),"this discussion")," - and, as always, to help you upgrade to this version, you can use the ",(0,n.kt)("a",u({parentName:"p"},{href:"https://react-native-community.github.io/upgrade-helper/"}),"upgrade helper")," \u269b\ufe0f"),(0,n.kt)("h3",u({},{id:"acknowledgements"}),"Acknowledgements"),(0,n.kt)("p",null,"This release includes ",(0,n.kt)("a",u({parentName:"p"},{href:"https://github.com/facebook/react-native/compare/0.66-stable...0.67-stable"}),"379 commits with 74 contributors"),"! Thank you, to all our contributors (old and new)! You can find the ",(0,n.kt)("a",u({parentName:"p"},{href:"https://github.com/facebook/react-native/blob/main/CHANGELOG.md#v0670"}),"full changelog here"),"."),(0,n.kt)("p",null,"We wanted to also thank the release testers who helped us make sure that 0.67.0 could reach your codebases without any massive regression. Specifically, we wanted to thank:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Marc Rousavy (",(0,n.kt)("a",u({parentName:"li"},{href:"https://github.com/mrousavy"}),"@mrousavy"),") from ",(0,n.kt)("a",u({parentName:"li"},{href:"https://margelo.io/"}),"Margelo"),", that surfaced a ",(0,n.kt)("a",u({parentName:"li"},{href:"https://github.com/facebook/hermes/issues/649"}),"regression for Hermes 0.10")," (that would have never been caught on CI testing) which will be fixed in Hermes 0.11 in the 0.68 release of React Native."),(0,n.kt)("li",{parentName:"ul"},"The Reanimated team for quickly preparing a ",(0,n.kt)("a",u({parentName:"li"},{href:"https://github.com/software-mansion/react-native-reanimated/releases/tag/2.2.4"}),"0.67 compatible version")," of their lib early in the 0.67 RC phase."),(0,n.kt)("li",{parentName:"ul"},"Elias Nahum (",(0,n.kt)("a",u({parentName:"li"},{href:"https://github.com/enahum"}),"@enahum"),") from ",(0,n.kt)("a",u({parentName:"li"},{href:"https://mattermost.com/"}),"Mattermost")),(0,n.kt)("li",{parentName:"ul"},"Mike Hardy (",(0,n.kt)("a",u({parentName:"li"},{href:"https://github.com/mikeHardy"}),"@mikeHardy"),") working with ",(0,n.kt)("a",u({parentName:"li"},{href:"https://invertase.io/"}),"Invertase"))),(0,n.kt)("p",null,"We appreciate also ",(0,n.kt)("a",u({parentName:"p"},{href:"https://rainbow.me/"}),"Rainbow"),", ",(0,n.kt)("a",u({parentName:"p"},{href:"https://comm.app/"}),"Comm")," and ",(0,n.kt)("a",u({parentName:"p"},{href:"https://www.ledger.com/ledger-live"}),"Ledger Live"),' for also being part of the pilot of the "Release Tester" program (more details below).'),(0,n.kt)("h2",u({},{id:"improvements-to-release-process"}),"Improvements to Release Process"),(0,n.kt)("p",null,"As mentioned, React Native has been restructuring the release pipeline to allow for more frequent releases such that new features and fixes can roll out faster to the community."),(0,n.kt)("p",null,"Over the last few months we tackled some issues that delay releases."),(0,n.kt)("h3",u({},{id:"coordination-and-knowledge-sharing"}),"Coordination and Knowledge Sharing"),(0,n.kt)("p",null,"We invested in our documentation of releases to cover how to run a release, FAQs, coordination of release issues, etc \u2013 all of which can be found in this section of the ",(0,n.kt)("a",u({parentName:"p"},{href:"https://github.com/facebook/react-native/wiki/Releases"}),"react-native wiki"),".\nBy documentation, releases are no longer blocked on any individual or tribal knowledge."),(0,n.kt)("p",null,"In addition to documentation, we have also revamped the coordination of releases and have moved discussion of pre-release status and patches to a dedicated discussion group: ",(0,n.kt)("a",u({parentName:"p"},{href:"https://github.com/reactwg/react-native-releases/discussions"}),"react-wg/react-native-releases"),"."),(0,n.kt)("h3",u({},{id:"clarity-of-responsibility"}),"Clarity of responsibility"),(0,n.kt)("p",null,"Following more documentation, release work can scale such that no one person is critical to running a release."),(0,n.kt)("p",null,"A React Native release is susceptible to a broad spectrum of potential points of failure and has a lot of dependencies and follow-up. Considering that usage of React Native varies across the community, it\u2019s essential to have stakeholders involved in releases. We have defined a set of ",(0,n.kt)("a",u({parentName:"p"},{href:"https://github.com/facebook/react-native/wiki/Release-Roles-and-Responsibilities"}),"roles and responsibilities in supporting a release"),"."),(0,n.kt)("h3",u({},{id:"release-candidate-signal"}),"Release candidate signal"),(0,n.kt)("p",null,"Another issue with releases is getting a good signal that a release will not suffer from build regressions. This can be addressed with growing investment in testing build variants, etc. but signal from adoption will continue to be useful for some time."),(0,n.kt)("p",null,"In the 0.67 release we piloted a \u201cRelease Tester\u201d program where React Native developers working on Open Source apps ",(0,n.kt)("a",u({parentName:"p"},{href:"https://github.com/facebook/react-native/wiki/Release-Roles-and-Responsibilities#release-tester-responsibilities"}),"commit to testing release candidates")," on their apps. Prior, there was no formal expectation that the community will test out release candidates to raise any potential issues. This program helps us get faster signal to ensure a level of stability of the release."),(0,n.kt)("p",null,"Open source React Native apps are particularly useful due to availability of source code to help debug any regressions. With this program in place, a release tester surfaced a regression in 0.67 and we were able to resolve it without thrashing the larger community with a faulty release."),(0,n.kt)("h2",u({},{id:"interested-in-helping-react-native-stabilise-new-releases"}),"Interested in helping React Native stabilise new releases?"),(0,n.kt)("p",null,"A great way to help us catch regressions is to integrate the React Native pre-release version ",(0,n.kt)("a",u({parentName:"p"},{href:"https://www.npmjs.com/package/react-native"}),(0,n.kt)("inlineCode",{parentName:"a"},"react-native@next"))," or ",(0,n.kt)("a",u({parentName:"p"},{href:"https://www.npmjs.com/package/react-native"}),(0,n.kt)("inlineCode",{parentName:"a"},"react-native@nightly"))," to your CI. For any regressions, you can ",(0,n.kt)("a",u({parentName:"p"},{href:"https://github.com/facebook/react-native/issues/new?assignees=&labels=Needs%3A+Triage+%3Amag%3A%2CType%3A+Upgrade+Issue&template=upgrade-regression-form.yml"}),"file a release issue")," and notify the appropriate discussion."),(0,n.kt)("p",null,"If your app or company is interested in joining the \u201cRelease Tester\u201d program, head to the dedicated section at the bottom of the ",(0,n.kt)("a",u({parentName:"p"},{href:"https://github.com/facebook/react-native/wiki/Release-Roles-and-Responsibilities#release-tester-responsibilities"}),"Release Roles and Responsibilities wiki")," to learn more."),(0,n.kt)("p",null,"Lastly any help on trying our release candidates or helping unblock release issues is much appreciated!"))}v.isMDXComponent=!0}}]);