{"id":8015,"date":"2026-09-27T22:11:15","date_gmt":"2026-09-27T22:11:15","guid":{"rendered":"https:\/\/lockitsoft.com\/?p=8015"},"modified":"2026-09-27T22:11:15","modified_gmt":"2026-09-27T22:11:15","slug":"react-native-0-87-strict-typescript-api-metro-update-swift-package-manager-agp-9-support","status":"publish","type":"post","link":"https:\/\/lockitsoft.com\/?p=8015","title":{"rendered":"React Native 0.87 &#8211; Strict TypeScript API, Metro Update, Swift Package Manager, AGP 9 Support"},"content":{"rendered":"<p>The release of React Native 0.87 marks a pivotal evolution in the architecture of one of the world\u2019s most popular cross-platform development frameworks. By mandating a Strict TypeScript API as the default JavaScript interface and introducing experimental support for Apple\u2019s Swift Package Manager (SwiftPM), the React Native team is signaling a transition toward a more type-safe, modular, and performant ecosystem. This update, which follows the 0.80 preview phase, represents the culmination of a long-term strategy to deprecate legacy deep imports and modernize the way developers interact with core components. Alongside these architectural shifts, the release enforces higher minimum toolchain requirements, specifically targeting Node.js 22, Android Gradle Plugin (AGP) 9, and Kotlin 2.0+.<\/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=8015\/#The_Shift_Toward_Type_Safety_and_Developer_Experience\" >The Shift Toward 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=8015\/#Modernizing_the_iOS_Pipeline_The_SwiftPM_Experiment\" >Modernizing the iOS Pipeline: The SwiftPM Experiment<\/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=8015\/#Aligning_with_Modern_Android_Toolchains\" >Aligning with Modern Android Toolchains<\/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=8015\/#Chronology_of_the_087_Release_Cycle\" >Chronology of the 0.87 Release 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=8015\/#Implications_for_the_Broader_Ecosystem\" >Implications for the Broader Ecosystem<\/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=8015\/#Official_Responses_and_Community_Feedback\" >Official Responses and Community Feedback<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"The_Shift_Toward_Type_Safety_and_Developer_Experience\"><\/span>The Shift Toward Type Safety and Developer Experience<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>For years, React Native relied on a flexible, albeit loosely typed, JavaScript API that allowed for deep imports\u2014a practice that often led to brittle codebases and runtime errors. The introduction of the Strict TypeScript API as the default standard is designed to eliminate these ambiguities. During the initial opt-in preview period introduced in version 0.80, the core team worked extensively with community maintainers to resolve incompatibilities across the ecosystem. <\/p>\n<p>The primary advantage of this shift is the enhanced developer experience. By utilizing comprehensive type definitions, developers now benefit from rich documentation and autocompletion directly within their integrated development environments (IDEs). For instance, hovering over a standard component like <code>TextInput<\/code> now surfaces full type information and contextual comments, a significant departure from the opaque symbols of the past. This change is not merely cosmetic; it is an ecosystem-wide architectural enforcement that ensures higher code quality and reduces the cognitive load on developers. While this transition necessitates breaking changes, the core team has provided an extensive migration guide and an agent-driven upgrade path to assist teams in transitioning their legacy codebases. For organizations unable to migrate immediately, a temporary opt-out mechanism remains available through the use of specific custom conditions in <code>tsconfig.json<\/code>, though this bridge is scheduled to be removed in version 0.88.<\/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<h3><span class=\"ez-toc-section\" id=\"Modernizing_the_iOS_Pipeline_The_SwiftPM_Experiment\"><\/span>Modernizing the iOS Pipeline: The SwiftPM Experiment<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Perhaps the most disruptive change in version 0.87 is the introduction of experimental support for Swift Package Manager (SwiftPM) on iOS. Historically, React Native has relied heavily on CocoaPods to manage native dependencies, a system that requires Ruby and additional build-time overhead. SwiftPM, being a first-party tool from Apple, offers a more integrated experience that streamlines the build process.<\/p>\n<p>By moving toward SwiftPM, React Native is effectively reducing the dependency on the Ruby ecosystem, which has long been a source of frustration for mobile developers managing environment parity. The new implementation allows developers to inject Swift package references directly into their <code>.xcodeproj<\/code> files without needing to maintain complex <code>Podfile<\/code> configurations. This change is supported by a fundamental restructuring of how React Native ships its precompiled binaries. The team has introduced new &quot;Headers only&quot; XCFrameworks, which provide a more robust mechanism for resolving namespaces and header paths. While CocoaPods remains the supported, stable path for production applications, the experimental status of SwiftPM offers a glimpse into a future where React Native builds are faster, more native, and significantly easier to configure.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Aligning_with_Modern_Android_Toolchains\"><\/span>Aligning with Modern Android Toolchains<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The update also brings support for the Android Gradle Plugin (AGP) 9, a major milestone that requires developers to adjust their build configurations. AGP 9 introduces significant changes to the Android build lifecycle, and React Native 0.87 is the first version to fully accommodate these updates. Given the complexity of the Android build ecosystem, the team has provided clear guidance on maintaining stability during this transition. Specifically, developers are advised to opt out of certain built-in Kotlin and new DSL behaviors that are still in their infancy within AGP 9. These configuration flags, placed within <code>android\/gradle.properties<\/code>, serve as a buffer to ensure that existing projects do not break due to the aggressive evolution of the Android build tools. This careful approach reflects the framework&#8217;s commitment to maintaining backward compatibility while allowing the underlying native platforms to advance at their own pace.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Chronology_of_the_087_Release_Cycle\"><\/span>Chronology of the 0.87 Release Cycle<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The development of version 0.87 did not occur in isolation. It is the result of a deliberate, phased rollout that began with the initial previews of the Strict TypeScript API in version 0.80. Between version 0.80 and 0.87, the React Native community participated in several Request for Comments (RFC) processes, most notably regarding the integration of SwiftPM and the adoption of AGP 9. <\/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<ul>\n<li><strong>June 2025:<\/strong> Version 0.80 is released, introducing the Strict TypeScript API as an opt-in feature and initiating the deprecation of deep imports.<\/li>\n<li><strong>Q3 2025:<\/strong> Community-wide testing begins, focusing on the compatibility of popular third-party libraries with the new strict types.<\/li>\n<li><strong>Early 2026:<\/strong> RFC #0994 and RFC #1006 are finalized, outlining the design for SwiftPM support and AGP 9 adoption, respectively.<\/li>\n<li><strong>Present:<\/strong> The formal release of version 0.87, marking the transition of these features from experimental or opt-in status to the new default standard.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Implications_for_the_Broader_Ecosystem\"><\/span>Implications for the Broader Ecosystem<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The move to version 0.87 suggests a shift in the philosophy of the React Native core team toward &quot;opinionated defaults.&quot; By standardizing TypeScript, simplifying the iOS build process, and aligning with the latest Android toolchains, the team is reducing the number of ways a React Native project can be configured. This is a critical development for large-scale enterprise teams that rely on consistent tooling across hundreds of developers.<\/p>\n<p>Furthermore, the focus on performance\u2014exemplified by the Metro 0.87 update\u2014ensures that these architectural changes do not come at the cost of build speed or development agility. Metro has undergone significant optimizations, which are expected to reduce build times and memory consumption during the bundling process. For developers, this means that the transition to stricter types and more modern native tooling is balanced by an improvement in the underlying developer experience.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Official_Responses_and_Community_Feedback\"><\/span>Official Responses and Community Feedback<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Initial feedback from the maintainer community has been largely positive, particularly regarding the move away from CocoaPods. Many senior engineers have expressed relief at the prospect of a native Swift-based dependency manager, which is expected to simplify CI\/CD pipelines significantly. However, the requirement to upgrade to Node.js 22 and the breaking changes associated with the TypeScript migration are viewed as significant hurdles for legacy applications. <\/p>\n<p>The core team has acknowledged these challenges, emphasizing that the &quot;migration guide&quot; is not merely a document but a collection of resources, including automated ESLint fixers and AI-driven migration skills. This proactive support system is indicative of a maturing framework that recognizes the difficulty of upgrading large-scale, mission-critical applications. As React Native continues to position itself as the primary choice for high-performance mobile development, version 0.87 serves as a foundational step, clearing away technical debt and preparing the codebase for the next generation of mobile computing requirements. With 265 commits from 74 contributors, the release highlights a robust, collaborative effort to stabilize and modernize the framework for the foreseeable future.<\/p>\n<!-- RatingBintangAjaib -->","protected":false},"excerpt":{"rendered":"<p>The release of React Native 0.87 marks a pivotal evolution in the architecture of one of the world\u2019s most popular cross-platform development frameworks. By mandating a Strict TypeScript API as the default JavaScript interface and introducing experimental support for Apple\u2019s Swift Package Manager (SwiftPM), the React Native team is signaling a transition toward a more &hellip;<\/p>\n","protected":false},"author":11,"featured_media":8014,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[4,5,3567,2005,3,10,651,9,1258,432,3566,1259],"class_list":["post-8015","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mobile-application-development","tag-apps","tag-development","tag-manager","tag-metro","tag-mobile","tag-native","tag-package","tag-react","tag-strict","tag-support","tag-swift","tag-typescript"],"_links":{"self":[{"href":"https:\/\/lockitsoft.com\/index.php?rest_route=\/wp\/v2\/posts\/8015","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\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/lockitsoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8015"}],"version-history":[{"count":0,"href":"https:\/\/lockitsoft.com\/index.php?rest_route=\/wp\/v2\/posts\/8015\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lockitsoft.com\/index.php?rest_route=\/wp\/v2\/media\/8014"}],"wp:attachment":[{"href":"https:\/\/lockitsoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8015"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lockitsoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8015"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lockitsoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8015"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}