{"id":7989,"date":"2026-09-27T10:11:04","date_gmt":"2026-09-27T10:11:04","guid":{"rendered":"https:\/\/lockitsoft.com\/?p=7989"},"modified":"2026-09-27T10:11:04","modified_gmt":"2026-09-27T10:11:04","slug":"react-native-0-87-unveils-strict-typescript-api-as-default-and-introduces-experimental-swift-package-manager-support","status":"publish","type":"post","link":"https:\/\/lockitsoft.com\/?p=7989","title":{"rendered":"React Native 0.87 Unveils Strict TypeScript API as Default and Introduces Experimental Swift Package Manager Support"},"content":{"rendered":"<p>The release of React Native 0.87 marks a pivotal milestone in the evolution of the cross-platform framework, signaling a shift toward stricter development standards and modernized infrastructure. By establishing the Strict TypeScript API as the default JavaScript interface and integrating experimental support for the Swift Package Manager (SwiftPM), the development team is addressing long-standing complexities within the ecosystem. These updates, accompanied by significant revisions to the toolchain requirements\u2014specifically the move to Node.js 22, Android Gradle Plugin (AGP) 9, and Kotlin 2.0\u2014reflect a broader industry trend toward enhanced type safety and build performance.<\/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=7989\/#The_Evolution_of_the_TypeScript_API\" >The Evolution of the TypeScript API<\/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=7989\/#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=7989\/#Android_Infrastructure_and_AGP_9\" >Android Infrastructure and AGP 9<\/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=7989\/#Toolchain_Requirements_and_Performance_Metrics\" >Toolchain Requirements and Performance Metrics<\/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=7989\/#Broader_Implications_and_Strategic_Context\" >Broader Implications and Strategic Context<\/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=7989\/#A_Community-Driven_Milestone\" >A Community-Driven Milestone<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"The_Evolution_of_the_TypeScript_API\"><\/span>The Evolution of the TypeScript API<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The transition to the Strict TypeScript API as the standard represents the culmination of a multi-version development cycle. Originally introduced as an opt-in preview in React Native 0.80, the Strict TypeScript API was designed to replace the legacy type definitions that had become increasingly difficult to maintain as the framework matured. The move to make this the default across all projects in version 0.87 is intended to unify the developer experience, ensuring that type definitions are consistent, accurate, and better documented.<\/p>\n<p>For developers, the primary benefit of this shift is the inclusion of comprehensive documentation comments directly within the type definitions. When hovering over components like <code>TextInput<\/code>, developers can now access detailed property information and usage context, a significant improvement over the sparse documentation provided by legacy types. This change is not merely cosmetic; it is an ecosystem-wide architectural adjustment that enforces better coding practices and reduces runtime errors by catching type mismatches during the development phase.<\/p>\n<p>While the framework maintainers have worked extensively with third-party library authors to ensure compatibility, the shift inevitably introduces breaking changes. To mitigate friction, the team has provided a detailed migration guide and integrated support into the <code>react-native-community<\/code> tooling. For organizations unable to migrate immediately, a temporary opt-out mechanism is available by adding <code>react-native-legacy-deep-imports<\/code> to the <code>customConditions<\/code> field in the <code>tsconfig.json<\/code> file. However, this is strictly a bridge, with the maintenance team confirming that legacy types will be removed in the upcoming React Native 0.88 release.<\/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>Perhaps the most notable infrastructure change in version 0.87 is the introduction of experimental support for the Swift Package Manager (SwiftPM) as an alternative to the long-standing CocoaPods dependency manager. Since the inception of React Native, CocoaPods has been the de facto standard for managing native iOS dependencies, requiring Ruby and the Bundler ecosystem to function. <\/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>The integration of SwiftPM represents a significant simplification of the development environment. By utilizing native Xcode build mechanics, the requirement for Ruby and CocoaPods is eliminated, potentially reducing the frequency of environment-related build errors. The new system leverages prebuilt XCFrameworks, which the React Native team has restructured to comply with SwiftPM\u2019s strict requirements regarding header locations and namespaces. <\/p>\n<p>To facilitate this, the command <code>npx react-native spm --deintegrate<\/code> allows developers to remove CocoaPods and inject Swift package references directly into their project files. This change is additive and non-destructive, preserving existing signing configurations and build phases. While the team acknowledges that this is an experimental feature with known limitations\u2014such as specific requirements for manual linking in complex scenarios\u2014it serves as a clear signal of the framework\u2019s move toward native alignment. The long-term goal is to make SwiftPM the preferred path, reducing the dependency on external, non-native package managers.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Android_Infrastructure_and_AGP_9\"><\/span>Android Infrastructure and AGP 9<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The Android ecosystem within React Native also receives a substantial update with the adoption of Android Gradle Plugin (AGP) 9. As the framework strives to stay current with the latest Android development standards, this upgrade brings necessary performance optimizations but also mandates stricter build configurations.<\/p>\n<p>AGP 9 represents a major shift in the Android build system, introducing breaking changes that necessitate careful configuration. In version 0.87, the recommended approach is to temporarily opt out of the built-in Kotlin and new DSL behaviors introduced by the plugin. By setting <code>android.builtInKotlin=false<\/code> and <code>android.newDsl=false<\/code> in the <code>android\/gradle.properties<\/code> file, developers can maintain build stability while the ecosystem at large prepares for the full adoption of AGP 9. This proactive approach ensures that React Native remains compatible with the latest Android Studio features without forcing an immediate, disruptive overhaul of existing Gradle build scripts.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Toolchain_Requirements_and_Performance_Metrics\"><\/span>Toolchain Requirements and Performance Metrics<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The move to higher minimum toolchain requirements is a calculated decision aimed at ensuring long-term security and performance. Node.js 22 is now required, ensuring that the development server benefits from the latest V8 engine improvements and performance patches. Similarly, the mandate for Kotlin 2.0 ensures that native Android modules can leverage modern language features, such as improved compiler speed and enhanced null safety.<\/p>\n<p>Metro, the default JavaScript bundler for React Native, has also been upgraded from 0.84 to 0.87. This update is largely focused on refining the &quot;leaner&quot; architecture, improving cache invalidation strategies, and reducing the time required for incremental builds. These performance gains are critical for larger applications, where build times can significantly impact developer velocity.<\/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<h3><span class=\"ez-toc-section\" id=\"Broader_Implications_and_Strategic_Context\"><\/span>Broader Implications and Strategic Context<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The trajectory of React Native, as evidenced by version 0.87, indicates a shift toward &quot;native-first&quot; tooling. By embracing SwiftPM and strictly typed interfaces, the framework is reducing the abstraction layers that have historically separated JavaScript developers from native platform intricacies. <\/p>\n<p>The decision to force a transition to the Strict TypeScript API suggests that the maintainers are prioritizing a standardized, high-quality developer experience over total backward compatibility. This is a common strategy in mature frameworks that have reached a critical mass of adoption. By eliminating legacy deep imports and enforcing strict types, the framework reduces the surface area for bugs and makes the codebase more maintainable for large teams.<\/p>\n<p>Furthermore, the introduction of agent-driven upgrade tools, such as the <code>migrate-to-strict-api<\/code> skill, indicates an awareness of the &quot;upgrade fatigue&quot; that often plagues the React Native community. By providing programmatic solutions to complex migrations, the team is attempting to lower the barrier to entry for the latest releases.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"A_Community-Driven_Milestone\"><\/span>A Community-Driven Milestone<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The 0.87 release is the result of 265 individual commits from 74 contributors. This collaborative effort highlights the sustained health of the React Native ecosystem. The inclusion of an official support policy\u2014moving 0.84.x to unsupported status\u2014underscores the need for organizations to adopt a regular cadence of updates. <\/p>\n<p>For many teams, the transition to 0.87 will be straightforward, provided they utilize the provided migration scripts. However, for those with deeply customized build configurations or extensive native codebases, the upgrade will require careful testing, particularly regarding the new XCFramework structures and the nuances of AGP 9. <\/p>\n<p>In summary, React Native 0.87 is a release defined by refinement and modernization. It moves the framework away from the &quot;legacy&quot; era of loose typing and complex, non-native dependency management, pushing it toward a tighter, more cohesive integration with the underlying iOS and Android platforms. As the framework continues to evolve, these changes provide the necessary foundation for future optimizations, ensuring that React Native remains a competitive choice for high-performance, cross-platform mobile development in an increasingly demanding technological landscape.<\/p>\n<!-- RatingBintangAjaib -->","protected":false},"excerpt":{"rendered":"<p>The release of React Native 0.87 marks a pivotal milestone in the evolution of the cross-platform framework, signaling a shift toward stricter development standards and modernized infrastructure. By establishing the Strict TypeScript API as the default JavaScript interface and integrating experimental support for the Swift Package Manager (SwiftPM), the development team is addressing long-standing complexities &hellip;<\/p>\n","protected":false},"author":27,"featured_media":7988,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[4,663,5,16,379,3567,3,10,651,9,1258,432,3566,1259,278],"class_list":["post-7989","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mobile-application-development","tag-apps","tag-default","tag-development","tag-experimental","tag-introduces","tag-manager","tag-mobile","tag-native","tag-package","tag-react","tag-strict","tag-support","tag-swift","tag-typescript","tag-unveils"],"_links":{"self":[{"href":"https:\/\/lockitsoft.com\/index.php?rest_route=\/wp\/v2\/posts\/7989","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\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/lockitsoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7989"}],"version-history":[{"count":0,"href":"https:\/\/lockitsoft.com\/index.php?rest_route=\/wp\/v2\/posts\/7989\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lockitsoft.com\/index.php?rest_route=\/wp\/v2\/media\/7988"}],"wp:attachment":[{"href":"https:\/\/lockitsoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7989"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lockitsoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7989"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lockitsoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7989"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}