{"id":7776,"date":"2026-09-21T21:51:08","date_gmt":"2026-09-21T21:51:08","guid":{"rendered":"https:\/\/lockitsoft.com\/?p=7776"},"modified":"2026-09-21T21:51:08","modified_gmt":"2026-09-21T21:51:08","slug":"react-native-0-87-release-marks-a-significant-milestone-in-framework-modernization-and-toolchain-stability","status":"publish","type":"post","link":"https:\/\/lockitsoft.com\/?p=7776","title":{"rendered":"React Native 0.87 release marks a significant milestone in framework modernization and toolchain stability"},"content":{"rendered":"<p>The React Native ecosystem has officially reached a new operational threshold with the release of version 0.87. This update serves as a cornerstone for the framework&#8217;s ongoing evolution, prioritizing type safety, build system efficiency, and a reduction in dependency complexity. By transitioning the Strict TypeScript API to the default standard and introducing experimental support for the Swift Package Manager (SwiftPM), the React Native team is signaling a decisive move toward modern development paradigms that favor native integration and long-term maintainability.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/lockitsoft.com\/?p=7776\/#The_Evolution_of_Type_Safety_and_Developer_Experience\" >The Evolution of Type Safety and Developer Experience<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/lockitsoft.com\/?p=7776\/#Modernizing_the_iOS_Build_Pipeline_Swift_Package_Manager\" >Modernizing the iOS Build Pipeline: Swift Package Manager<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/lockitsoft.com\/?p=7776\/#Infrastructure_Requirements_and_Build_System_Updates\" >Infrastructure Requirements and Build System Updates<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/lockitsoft.com\/?p=7776\/#Chronology_of_the_087_Development_Cycle\" >Chronology of the 0.87 Development Cycle<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/lockitsoft.com\/?p=7776\/#Impact_Analysis_and_Broader_Implications\" >Impact Analysis and Broader Implications<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/lockitsoft.com\/?p=7776\/#Looking_Ahead_The_End_of_Legacy_Support\" >Looking Ahead: The End of Legacy Support<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"The_Evolution_of_Type_Safety_and_Developer_Experience\"><\/span>The Evolution of Type Safety and Developer Experience<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The primary shift in this release is the promotion of the Strict TypeScript API to the default JavaScript API for all React Native projects. This transition is not merely a syntactic preference but a structural overhaul of how developers interact with the framework\u2019s surface area. Originally introduced as an opt-in preview in version 0.80\u2014concurrent with the deprecation of deep imports\u2014the Strict TypeScript API provides a more robust, predictable, and self-documenting development environment.<\/p>\n<p>For developers, the implications are immediate. The integration of comprehensive doc comments directly into type definitions means that IDEs can now surface rich metadata, such as property descriptions and usage guidelines, upon hovering over components like <code>TextInput<\/code>. This improvement significantly lowers the cognitive load for developers working within large codebases. By mandating these strict types, the framework aims to minimize runtime errors caused by type mismatches, a common pain point in large-scale JavaScript applications.<\/p>\n<p>While this change introduces intentional breaking changes, the core team has provided a structured migration path. Developers are encouraged to utilize the <code>migrate-to-strict-api<\/code> skill through the community-led migration tools to streamline the transition. For teams unable to immediately refactor their projects, a temporary opt-out bridge remains available through the remainder of the 0.88 release cycle, allowing for a phased adoption of these new standards.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Modernizing_the_iOS_Build_Pipeline_Swift_Package_Manager\"><\/span>Modernizing the iOS Build Pipeline: Swift Package Manager<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>In a move that addresses long-standing developer feedback regarding build complexity, React Native 0.87 introduces experimental support for the Swift Package Manager (SwiftPM) on iOS. For nearly a decade, CocoaPods has been the de facto standard for managing native dependencies in React Native projects. However, the reliance on Ruby-based tooling and the often-opaque nature of the <code>Podfile<\/code> have historically been sources of friction for developers.<\/p>\n<p>The new SwiftPM implementation offers an alternative that leverages the native Apple build ecosystem. By consuming prebuilt XCFrameworks, this approach allows for a &quot;pure&quot; Xcode experience, effectively removing the requirement for Ruby and Bundler in the iOS build process. The transition is additive rather than subtractive; projects can continue to use CocoaPods if desired, but those opting for SwiftPM will find a more integrated workflow where dependency changes are automatically detected by the project structure without the need for manual <code>pod install<\/code> commands.<\/p>\n<figure class=\"article-inline-figure\"><img decoding=\"async\" src=\"https:\/\/reactnative.dev\/img\/logo-share.png\" alt=\"React Native 0.87 - Strict TypeScript API, Metro Update, Swift Package Manager, AGP 9 Support\" class=\"article-inline-img\" loading=\"lazy\" \/><\/figure>\n<p>This shift required a fundamental rethink of how React Native distributes its own binaries. The introduction of headers-only frameworks ensures that namespace resolution is more precise and adheres to the strict standards required by SwiftPM. While the feature is currently experimental, it represents a long-term strategic pivot toward reducing the &quot;black box&quot; nature of build tools in favor of standardized, native-first solutions.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Infrastructure_Requirements_and_Build_System_Updates\"><\/span>Infrastructure Requirements and Build System Updates<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The release of 0.87 also mandates significant upgrades to the underlying toolchain. As the industry moves forward, React Native has raised its minimum requirements to Node.js 22, the Android Gradle Plugin (AGP) 9, and Kotlin 2.0+. These requirements ensure that projects benefit from the latest performance improvements, security patches, and language features provided by these upstream vendors.<\/p>\n<p>The inclusion of support for AGP 9 is particularly noteworthy. As a major release from the Android team, AGP 9 introduces significant changes to the build DSL (Domain Specific Language). React Native 0.87 provides a temporary configuration path for developers to opt out of the new built-in Kotlin and DSL behaviors, providing a grace period before these features become mandatory in future AGP versions. This cautious approach reflects the framework&#8217;s commitment to stability, ensuring that developers are not forced into breaking changes before they are ready to address them.<\/p>\n<p>Additionally, Metro\u2014the JavaScript bundler that powers React Native\u2014has been updated to version 0.87. This update brings a suite of performance optimizations, particularly in the areas of module resolution and cache management. By making Metro faster and leaner, the framework continues to chip away at the latency that can impact the development cycle of large, cross-platform applications.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Chronology_of_the_087_Development_Cycle\"><\/span>Chronology of the 0.87 Development Cycle<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The path to 0.87 was marked by a series of iterative releases and community-driven discussions. The journey began in mid-2025 with the 0.80 release, which first signaled the intent to deprecate legacy deep imports and introduced the experimental Strict TypeScript API. This period of approximately six months allowed the React Native community to pressure-test the new type definitions and provide feedback on potential incompatibilities.<\/p>\n<p>During this time, the React Native community engaged in several Requests for Comments (RFCs), including the pivotal RFC #0994, which outlined the design for SwiftPM integration, and RFC #1006, which mapped out the ecosystem-wide transition to AGP 9. This transparent, collaborative process has been a hallmark of the framework&#8217;s governance, allowing developers to anticipate breaking changes well in advance of the final release.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Impact_Analysis_and_Broader_Implications\"><\/span>Impact Analysis and Broader Implications<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The release of 0.87 suggests that React Native is entering a period of &quot;maturation by simplification.&quot; By forcing a shift toward strict typing and native-first build systems, the core team is effectively narrowing the scope of supported configurations. While this may increase the short-term burden on maintainers of legacy applications, the long-term benefit is a more cohesive and predictable ecosystem.<\/p>\n<figure class=\"article-inline-figure\"><img decoding=\"async\" src=\"https:\/\/reactnative.dev\/blog\/assets\/0.87-symbol-docs-before.png\" alt=\"React Native 0.87 - Strict TypeScript API, Metro Update, Swift Package Manager, AGP 9 Support\" class=\"article-inline-img\" loading=\"lazy\" \/><\/figure>\n<p>The move toward SwiftPM, for example, is likely to improve the onboarding experience for developers coming from native Swift\/iOS backgrounds, as the tooling will feel more familiar and integrated. Similarly, the enforcement of Strict TypeScript will likely reduce the frequency of &quot;undefined is not a function&quot; errors, which have historically plagued JavaScript development.<\/p>\n<p>However, the rapid escalation of minimum toolchain requirements\u2014specifically the shift to Node.js 22 and Kotlin 2.0\u2014underscores the need for organizations to maintain a disciplined approach to dependency management. The &quot;Upgrade Helper&quot; provided by the community is no longer just a recommendation; it is an essential tool for navigating the frequent and necessary updates that define the modern React Native experience.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Looking_Ahead_The_End_of_Legacy_Support\"><\/span>Looking Ahead: The End of Legacy Support<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The release of 0.87 is a clear signal that the window for legacy support is closing. With 0.84.x now classified as unsupported, the framework is pushing the community toward a unified standard. The explicit intent to remove legacy TypeScript types in the 0.88 release confirms that the current &quot;opt-out&quot; mechanism is a temporary bridge, not a permanent solution.<\/p>\n<p>As the ecosystem continues to evolve, the focus will likely remain on reducing the reliance on external build-tooling wrappers and improving the speed of the development feedback loop. With 265 commits from 74 contributors, the 0.87 release demonstrates that the community is not only keeping pace with these changes but is actively driving the innovation required to keep React Native competitive in an increasingly demanding mobile development landscape.<\/p>\n<p>For teams currently evaluating their upgrade strategy, the priority should be the audit of existing TypeScript configurations and an assessment of their iOS project structure. By addressing these items in alignment with the 0.87 standards, organizations can ensure that they are well-positioned to leverage the performance and reliability improvements that this release offers, while avoiding the technical debt that comes with delaying essential infrastructure updates.<\/p>\n<!-- RatingBintangAjaib -->","protected":false},"excerpt":{"rendered":"<p>The React Native ecosystem has officially reached a new operational threshold with the release of version 0.87. This update serves as a cornerstone for the framework&#8217;s ongoing evolution, prioritizing type safety, build system efficiency, and a reduction in dependency complexity. By transitioning the Strict TypeScript API to the default standard and introducing experimental support for &hellip;<\/p>\n","protected":false},"author":14,"featured_media":7775,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[4,5,812,1726,556,3,2701,10,9,8,555,563,4246],"class_list":["post-7776","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mobile-application-development","tag-apps","tag-development","tag-framework","tag-marks","tag-milestone","tag-mobile","tag-modernization","tag-native","tag-react","tag-release","tag-significant","tag-stability","tag-toolchain"],"_links":{"self":[{"href":"https:\/\/lockitsoft.com\/index.php?rest_route=\/wp\/v2\/posts\/7776","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lockitsoft.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lockitsoft.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lockitsoft.com\/index.php?rest_route=\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/lockitsoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7776"}],"version-history":[{"count":0,"href":"https:\/\/lockitsoft.com\/index.php?rest_route=\/wp\/v2\/posts\/7776\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lockitsoft.com\/index.php?rest_route=\/wp\/v2\/media\/7775"}],"wp:attachment":[{"href":"https:\/\/lockitsoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7776"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lockitsoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7776"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lockitsoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7776"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}