<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yasir Najeep</title>
    <description>The latest articles on DEV Community by Yasir Najeep (@yasir_najeep).</description>
    <link>https://dev.to/yasir_najeep</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4090563%2F3bd2cdc5-a160-48fd-b55d-4f488fd9e7e2.png</url>
      <title>DEV Community: Yasir Najeep</title>
      <link>https://dev.to/yasir_najeep</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yasir_najeep"/>
    <language>en</language>
    <item>
      <title>Astro 7.2 incremental static builds: is the upgrade worth it for content sites?</title>
      <dc:creator>Yasir Najeep</dc:creator>
      <pubDate>Tue, 25 Aug 2026 07:36:39 +0000</pubDate>
      <link>https://dev.to/yasir_najeep/astro-72-incremental-static-builds-is-the-upgrade-worth-it-for-content-sites-2c1m</link>
      <guid>https://dev.to/yasir_najeep/astro-72-incremental-static-builds-is-the-upgrade-worth-it-for-content-sites-2c1m</guid>
      <description>&lt;p&gt;Astro 7.2 was released on 6 August 2026 with experimental incremental static builds. The idea is simple: do not regenerate a prerendered page when its code and data have not changed. That can materially reduce build time on a large content site. The word experimental still matters, and a major-version upgrade is not a performance toggle in isolation.&lt;/p&gt;

&lt;p&gt;The release also adds an option to disable session support, background mode for &lt;code&gt;astro preview&lt;/code&gt;, and a simpler relative entry point for a custom logger. These can help sites, CI pipelines, and coding agents, but each benefit needs measurement in the actual project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://astro.build/blog/astro-720/" rel="noopener noreferrer"&gt;Official Astro 7.2 announcement&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The evidence boundary for this article
&lt;/h2&gt;

&lt;p&gt;This portfolio runs Astro 5.16.6 at the review date. I have not migrated it to Astro 7 or enabled incremental static builds in its production deployment. This article is an evaluation plan based on Astro's announcement and documentation, not evidence that this site achieved an Astro 7.2 improvement.&lt;/p&gt;

&lt;p&gt;That distinction matters in technical writing. A framework feature does not prove project value, and a local build does not prove production deployment or route integrity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the expected gain comes from
&lt;/h2&gt;

&lt;p&gt;A traditional static build may regenerate thousands of pages after a small change. An incremental system tries to identify pages whose code and data did not change and skip them. Value increases when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the site has many pages;&lt;/li&gt;
&lt;li&gt;most releases change a small content subset;&lt;/li&gt;
&lt;li&gt;data dependencies are stable and traceable;&lt;/li&gt;
&lt;li&gt;build cache survives between CI runs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The gain may be small on a site that builds in seconds, a project where one shared dependency invalidates most pages, or CI that deletes its cache every run.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test invalidation, not only speed
&lt;/h2&gt;

&lt;p&gt;The most dangerous failure is not a stopped build. It is a successful build that keeps a stale page. Test invalidation explicitly:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Change one Markdown entry.&lt;/li&gt;
&lt;li&gt;Change a component shared by every article.&lt;/li&gt;
&lt;li&gt;Change a layout, metadata helper, or schema.&lt;/li&gt;
&lt;li&gt;Delete an entry or rename a slug.&lt;/li&gt;
&lt;li&gt;Change external loader data.&lt;/li&gt;
&lt;li&gt;Change an environment variable that affects output.&lt;/li&gt;
&lt;li&gt;Build with a clean cache and a warm cache.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Compare HTML markers or hashes for pages that should change and those that should remain stable. Inspect sitemap, RSS, canonical, and hreflang output because one article change may also update collection pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disabling sessions should remove only what is unused
&lt;/h2&gt;

&lt;p&gt;Astro 7.2 adds &lt;code&gt;session: false&lt;/code&gt;. A static site without sessions can let an adapter skip its driver and remove unnecessary runtime. Astro also says tree shaking can remove session code when no driver is configured, so do not assume a bundle improvement before measuring it.&lt;/p&gt;

&lt;p&gt;On a site using login, server islands, or adapter state, do not disable sessions just to remove code. Inventory routes, middleware, and integrations that depend on state, then test signed-in, anonymous, and failure behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Background preview is useful for automation
&lt;/h2&gt;

&lt;p&gt;The release lets preview run in the background with commands for status, logs, and shutdown. A coding agent or CI process can start a production build, run HTTP and Playwright checks, and continue using the terminal.&lt;/p&gt;

&lt;p&gt;Background mode is not enough by itself. The process needs a known port, PID, and log location, and it must stop even when a test fails. Otherwise the convenience creates orphan processes, occupied ports, and tests against an old build.&lt;/p&gt;

&lt;h2&gt;
  
  
  Astro 5 to 7 is a major migration
&lt;/h2&gt;

&lt;p&gt;I would not jump from 5.16 to 7.2 and fix only the final visible error. A safer path is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Read Astro 6 and 7 guides, including Vite, content layer, and adapter changes.&lt;/li&gt;
&lt;li&gt;Record build time, &lt;code&gt;dist&lt;/code&gt; size, page count, and Lighthouse baseline.&lt;/li&gt;
&lt;li&gt;Create an upgrade branch without unrelated content changes.&lt;/li&gt;
&lt;li&gt;Run the upgrade tool, then review configuration and diff manually.&lt;/li&gt;
&lt;li&gt;Run type, unit, build, and generated HTML audits.&lt;/li&gt;
&lt;li&gt;Test routes, RSS, sitemap, 404, and redirects.&lt;/li&gt;
&lt;li&gt;Evaluate incremental builds after the full build is correct.&lt;/li&gt;
&lt;li&gt;Deploy a separate preview and compare it with production before cutover.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If a critical adapter or integration is incompatible, stay on the supported current version with a dated plan. Do not weaken an SEO or output audit to force the migration through.&lt;/p&gt;

&lt;h2&gt;
  
  
  Calculate the return
&lt;/h2&gt;

&lt;p&gt;Record a clean full build, a warm no-change build, a one-page change, and a shared-component change. Repeat each case on the same CI environment. Then calculate monthly build minutes and the effect on delivery time and compute cost.&lt;/p&gt;

&lt;p&gt;Reducing a 12-minute build to four minutes matters across dozens of releases. Reducing 35 seconds to 25 seconds may not justify an experimental feature. Performance becomes a business decision when it is connected to release frequency, pipeline failures, and developer waiting time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Effect on the content team
&lt;/h2&gt;

&lt;p&gt;Faster builds can shorten correction and publication time, but correctness comes first. The content team needs the new article in the index, topic page, RSS, and sitemap, not only at its direct route. A date or tag change must invalidate the right collection pages.&lt;/p&gt;

&lt;p&gt;Add output contract tests before enabling the feature. If cache behavior becomes unclear, provide a full-rebuild escape hatch that does not require a code edit.&lt;/p&gt;

&lt;h2&gt;
  
  
  My recommendation
&lt;/h2&gt;

&lt;p&gt;I would evaluate Astro 7.2 in a branch now for a large site or slow pipeline, but I would not enable the experimental feature directly in production. First complete the Astro 5 to 7 migration with full builds. Then build an invalidation matrix and compare outputs. If the saving is not material, wait for the feature to stabilize.&lt;/p&gt;

&lt;p&gt;The best framework version is not always the newest. It is the supported version the team can build, test, deploy, and roll back with confidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources and review date
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://astro.build/blog/astro-720/" rel="noopener noreferrer"&gt;Astro 7.2 release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.astro.build/en/guides/upgrade-to/v7/" rel="noopener noreferrer"&gt;Astro 7 upgrade guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Astro release status and this repository were reviewed on 22 August 2026.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>astro</category>
      <category>webperf</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>React Native 0.87: Strict TypeScript, AGP 9, and SwiftPM upgrade guide</title>
      <dc:creator>Yasir Najeep</dc:creator>
      <pubDate>Sun, 23 Aug 2026 08:08:32 +0000</pubDate>
      <link>https://dev.to/yasir_najeep/react-native-087-strict-typescript-agp-9-and-swiftpm-upgrade-guide-4hl3</link>
      <guid>https://dev.to/yasir_najeep/react-native-087-strict-typescript-agp-9-and-swiftpm-upgrade-guide-4hl3</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fur124r043eczdywu76tc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fur124r043eczdywu76tc.jpg" alt="React Native 0.87 upgrade guide" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;React Native 0.87 was released on 11 August 2026. It brings meaningful improvements to Metro, TypeScript, and iOS setup, but also raises tool requirements and removes old APIs. An upgrade is more than changing a version in &lt;code&gt;package.json&lt;/code&gt;, especially for an Arabic app, a native-heavy dependency graph, or an older CI image.&lt;/p&gt;

&lt;p&gt;The Strict TypeScript API is now the default, Metro moves to 0.87, and experimental Swift Package Manager support arrives. Android requirements rise to Node.js 22.13 or newer, Kotlin 2.0 or newer, AGP 9, and compile SDK 37 in the reference setup.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://reactnative.dev/blog/2026/08/11/react-native-0.87" rel="noopener noreferrer"&gt;Official React Native 0.87 announcement&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the Strict TypeScript API matters
&lt;/h2&gt;

&lt;p&gt;React Native's previous types were maintained separately and could drift from source. The strict types are generated from the code and define the public API around root exports. That improves accuracy, but it exposes application or library dependencies on internal paths such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;SomeInternalThing&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-native/Libraries/...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In 0.87, deep imports become type errors and several type names or shapes change. Replacing every error with &lt;code&gt;any&lt;/code&gt; defeats the purpose. Search the application and dependencies for internal imports, move to a public export or maintained package, and verify runtime behavior on a device.&lt;/p&gt;

&lt;p&gt;There is a temporary &lt;code&gt;react-native-legacy-deep-imports&lt;/code&gt; opt-out. The release notes say it remains through 0.88 and that legacy types are intended for removal in the following release. Treat the switch as a dated bridge with an owner, not a permanent fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  Android requirements may break CI first
&lt;/h2&gt;

&lt;p&gt;The build may fail before JavaScript runs because the environment changed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js 22.13 or newer.&lt;/li&gt;
&lt;li&gt;Kotlin 2.0 or newer, with 2.2 bundled.&lt;/li&gt;
&lt;li&gt;Android Gradle Plugin 9.&lt;/li&gt;
&lt;li&gt;Library &lt;code&gt;minCompileSdk&lt;/code&gt; 34 and project compile SDK 37.&lt;/li&gt;
&lt;li&gt;Related Gradle, Java, and plugin compatibility changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pin Node, JDK, and Android SDK versions in CI instead of relying on &lt;code&gt;latest&lt;/code&gt;. Inspect every native dependency. A compatible application is not enough when an old package uses a removed API or incompatible Gradle configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Metro improves while old configuration disappears
&lt;/h2&gt;

&lt;p&gt;Meta reports faster source-map generation, lower source-map memory use, and stable TypeScript and ESM configuration support. Metro no longer supports YAML configuration or JavaScript config files with the &lt;code&gt;.es6&lt;/code&gt; extension.&lt;/p&gt;

&lt;p&gt;Measure cold build, incremental build, and DevTools startup on the same machine. Do not credit Metro for every difference when Node, Gradle, and caches also changed. Keep the timing and logs if CI duration has a direct team cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  SwiftPM is experimental, not an automatic production decision
&lt;/h2&gt;

&lt;p&gt;React Native 0.87 introduces an experimental path to Swift Package Manager as an alternative to CocoaPods. Removing Ruby and repeated &lt;code&gt;pod install&lt;/code&gt; steps is attractive, but the release explicitly keeps CocoaPods as the default supported path.&lt;/p&gt;

&lt;p&gt;Do not migrate a published application only because the feature is new. Some libraries lack &lt;code&gt;Package.swift&lt;/code&gt;, commands and generated structure may change, and CI needs an initialization step. Test SwiftPM on a separate branch or internal app. Inventory every native library, extension, build phase, signing setting, and capability before comparing paths.&lt;/p&gt;

&lt;h2&gt;
  
  
  Removed and changed APIs
&lt;/h2&gt;

&lt;p&gt;The release removes &lt;code&gt;InteractionManager&lt;/code&gt; in favor of &lt;code&gt;requestIdleCallback&lt;/code&gt;, old &lt;code&gt;Modal&lt;/code&gt; and &lt;code&gt;StatusBar&lt;/code&gt; properties, some &lt;code&gt;ScrollView&lt;/code&gt; behavior, and tooling packages. &lt;code&gt;useColorScheme&lt;/code&gt; changes its return shape, Jest preset packaging changed, and new deprecations include &lt;code&gt;ImageBackground&lt;/code&gt; and Android APIs.&lt;/p&gt;

&lt;p&gt;Search for every symbol called out in the release notes across your code and dependencies. Resolve each use with a test rather than running a broad codemod and accepting a large diff without review.&lt;/p&gt;

&lt;h2&gt;
  
  
  A controlled upgrade path
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Record baseline iOS and Android builds, tests, bundle size, startup, and crashes.&lt;/li&gt;
&lt;li&gt;Upgrade the toolchain in CI and one reproducible local environment.&lt;/li&gt;
&lt;li&gt;Use Upgrade Helper and review template changes manually.&lt;/li&gt;
&lt;li&gt;Enable Strict API and resolve deep imports before considering the opt-out.&lt;/li&gt;
&lt;li&gt;Upgrade native libraries in small groups.&lt;/li&gt;
&lt;li&gt;Run unit, integration, and E2E tests, then signed release builds.&lt;/li&gt;
&lt;li&gt;Prefer connected physical iPhone and Android devices when available.&lt;/li&gt;
&lt;li&gt;Ship to a test channel before store production.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Do not shorten the RTL matrix
&lt;/h2&gt;

&lt;p&gt;An English pass is not evidence that an Arabic application is ready. Test:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cold start in Arabic, then English, and the reverse;&lt;/li&gt;
&lt;li&gt;mixed text such as &lt;code&gt;QAR 1,250&lt;/code&gt;, an order ID, and email;&lt;/li&gt;
&lt;li&gt;back arrows, gestures, drawers, and bottom sheets;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;useColorScheme()&lt;/code&gt; because it can now return &lt;code&gt;null&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;large text, VoiceOver, and TalkBack;&lt;/li&gt;
&lt;li&gt;notification, deep link, and permission screens;&lt;/li&gt;
&lt;li&gt;a signed release build rather than Metro development alone.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Compare screenshots before and after in both directions. TypeScript can pass while an icon mirrors incorrectly, a safe area changes, or a navigation dependency fails only on Android.&lt;/p&gt;

&lt;h2&gt;
  
  
  Business impact
&lt;/h2&gt;

&lt;p&gt;The benefit is a clearer API, current tooling, improved Metro, and a possible simpler future iOS setup. The cost is compatibility work across libraries, CI, and devices. A project that relies heavily on internals will pay more now, but it was already carrying hidden risk.&lt;/p&gt;

&lt;p&gt;Do not let a store release deadline be the first encounter with AGP 9 or Strict API. Keep the upgrade separate from a large feature so failures are attributable and rollback remains simple.&lt;/p&gt;

&lt;h2&gt;
  
  
  My recommendation
&lt;/h2&gt;

&lt;p&gt;I would start a dedicated upgrade branch now for an app on a nearby supported version, but I would not promise a one-day migration. Fix deep imports instead of hiding them, pin the toolchain, and keep CocoaPods in production until SwiftPM proves compatible with every dependency. For an Arabic app, the upgrade is incomplete without signed builds and real RTL testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources and review date
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://reactnative.dev/blog/2026/08/11/react-native-0.87" rel="noopener noreferrer"&gt;React Native 0.87 release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://reactnative.dev/releases/" rel="noopener noreferrer"&gt;React Native releases overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Release status and requirements were reviewed on 22 August 2026.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Originally published on &lt;a href="https://yasirnajeep.com/en/blog/react-native-0-87-upgrade-guide/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=authority_gcc_2026q3&amp;amp;utm_content=react-native-0-87-upgrade-guide_en_article_v1" rel="noopener noreferrer"&gt;Yasir Najeep&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>typescript</category>
      <category>testing</category>
      <category>mobile</category>
    </item>
  </channel>
</rss>
