<?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>Forem: Vivek Mishra</title>
    <description>The latest articles on Forem by Vivek Mishra (@vvekm).</description>
    <link>https://forem.com/vvekm</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F818676%2F41595649-ba79-429a-bb11-e1b96a1b25ea.jpeg</url>
      <title>Forem: Vivek Mishra</title>
      <link>https://forem.com/vvekm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/vvekm"/>
    <language>en</language>
    <item>
      <title>The Architecture is Done. Now What Does That Mean for Your App?</title>
      <dc:creator>Vivek Mishra</dc:creator>
      <pubDate>Mon, 06 Apr 2026 05:50:09 +0000</pubDate>
      <link>https://forem.com/vvekm/the-architecture-is-done-now-what-does-that-mean-for-your-app-4kfb</link>
      <guid>https://forem.com/vvekm/the-architecture-is-done-now-what-does-that-mean-for-your-app-4kfb</guid>
      <description>&lt;p&gt;&lt;strong&gt;React Native 0.83 – 0.84 · For Advanced Engineers · April 2026&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;The New Architecture is no longer opt-in, experimental, or a migration checkbox. It is the only architecture. The bridge is gone, the legacy renderer is gone, and the technical debt React Native has carried since 2015 is officially retired. Here's what that means in real production code.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The Bridge is Dead. Long Live JSI.
&lt;/h2&gt;

&lt;p&gt;For years, every React Native app shipped with an invisible bottleneck: the Bridge. Whenever JavaScript needed to talk to native code — triggering a gesture, mounting a view, calling a native module — data had to be serialized into JSON, thrown across a message queue to the native thread, deserialized on the other side, and the result sent back the same way. This round trip was asynchronous by design, and on a cheap Android device under load, it showed.&lt;/p&gt;

&lt;p&gt;JSI (JavaScript Interface) replaces that entirely. Instead of message passing, JavaScript now holds direct C++ references to native objects. There is no serialization. There is no queue. A call across the boundary is a function call, as direct as calling any other JavaScript function.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Old: The Bridge&lt;/th&gt;
&lt;th&gt;New: JSI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Communication&lt;/td&gt;
&lt;td&gt;JSON serialization on every cross-thread call&lt;/td&gt;
&lt;td&gt;Direct C++ bindings, no serialization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mode&lt;/td&gt;
&lt;td&gt;Async-only, queue-based&lt;/td&gt;
&lt;td&gt;Synchronous calls now possible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory&lt;/td&gt;
&lt;td&gt;Copies data across threads&lt;/td&gt;
&lt;td&gt;JS and native layers share memory references&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jank source&lt;/td&gt;
&lt;td&gt;Queue backpressure on heavy animation screens&lt;/td&gt;
&lt;td&gt;Eliminated&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Fabric&lt;/strong&gt; is the rendering pipeline rewritten in C++ on top of JSI. Synchronous layout reads, concurrent-mode compatible, shared core across iOS and Android.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TurboModules&lt;/strong&gt; makes native modules lazy-loaded. Only the modules your app actually calls get initialized. Large apps see meaningful startup time reduction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Codegen&lt;/strong&gt; generates the C++ glue code at build time from your TypeScript spec files. The JS–native boundary is now type-checked. Runtime shape mismatches — a common source of cryptic crashes — are caught at build time instead.&lt;/p&gt;

&lt;p&gt;In practice, JSI is what makes Reanimated 3's worklet model possible — UI-thread animations running at full 120fps without any JavaScript involvement. The same mechanism enables any library author to write synchronous native bindings using the Native Module API.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Real-world signal:&lt;/strong&gt; If your app uses &lt;code&gt;react-native-reanimated&lt;/code&gt;, &lt;code&gt;react-native-gesture-handler&lt;/code&gt;, or &lt;code&gt;react-native-mmkv&lt;/code&gt;, you were already depending on JSI. Those libraries have required it for years. The difference now is that the rest of your app's architecture is consistent with it — there is no bridge running in parallel.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fabric's biggest practical change is that layout information is now readable synchronously from the JS thread when needed. Previously, reading a component's measured dimensions required a callback. With Fabric, &lt;code&gt;measureInWindow&lt;/code&gt; and related APIs can return synchronously in contexts that need it — which matters for tooltip positioning, drag handles, and any UI that responds to its own geometry.&lt;/p&gt;

&lt;p&gt;TurboModules changes how you should think about module initialization in large apps. Previously, all native modules were registered at startup — even if you never called them. If your app had 30 native modules, all 30 initialized on launch. Now, they initialize on first call. If your onboarding flow never touches the camera module, it doesn't pay the cost of initializing it.&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="c1"&gt;// Before TurboModules: module available immediately at app start&lt;/span&gt;
&lt;span class="c1"&gt;// even if you never use it on this screen&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;NativeModules&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-native&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;CameraModule&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;NativeModules&lt;/span&gt;

&lt;span class="c1"&gt;// After TurboModules: initialized lazily on first access&lt;/span&gt;
&lt;span class="c1"&gt;// Import the typed spec instead&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;NativeCameraModule&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./NativeCameraModule&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="c1"&gt;// Codegen generates the type-safe binding from your .ts spec file&lt;/span&gt;
&lt;span class="c1"&gt;// No manual type casting, no runtime shape errors&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Hermes V1: What Actually Changed in the Engine
&lt;/h2&gt;

&lt;p&gt;Hermes has been the default JS engine since 0.70. What changes in V1 (shipping as default in 0.84) is not the fundamental approach — bytecode compilation at build time, optimized for mobile memory profiles — but a significant set of internal improvements that affect both cold start and runtime behavior.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Improvement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cold start&lt;/td&gt;
&lt;td&gt;~50% faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory usage&lt;/td&gt;
&lt;td&gt;~30% lower&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bundle parse&lt;/td&gt;
&lt;td&gt;Pre-compiled at build time (unchanged model, better optimizer)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The 50% faster startup figure comes primarily from improved bytecode optimization and better handling of the concurrent rendering model. Hermes V1 is built with React 19's concurrent features in mind — it understands fiber scheduling at the engine level and schedules work accordingly, rather than treating the scheduler as an opaque JS library.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What you need to do:&lt;/strong&gt; Nothing. If you're on 0.84 with Expo SDK 55, Hermes V1 is the default. You don't configure it. Where you will notice it: time-to-interactive in cold launch telemetry, and reduced memory pressure on low-end Android devices that previously hovered at the edge of OOM.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One behavioral change worth knowing: Hermes V1 has stricter handling of certain edge-case JavaScript patterns that the old engine tolerated silently. If you're using any libraries that relied on non-standard property enumeration order, or that mutate frozen objects and catch the &lt;code&gt;TypeError&lt;/code&gt;, run your test suite carefully after upgrading. These cases are rare but they exist in older unmaintained libraries.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. React 19.2: Two Features That Matter for Mobile
&lt;/h2&gt;

&lt;p&gt;React Native 0.83 ships React 19.2. Most of what's in React 19.2 is web-focused, but two additions are directly useful in mobile contexts: the &lt;code&gt;Activity&lt;/code&gt; component and &lt;code&gt;useEffectEvent&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Activity
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Activity&lt;/code&gt; is a component that controls the visibility and lifecycle of a subtree without unmounting it. It has two modes: &lt;code&gt;visible&lt;/code&gt; and &lt;code&gt;hidden&lt;/code&gt;. When a subtree is &lt;code&gt;hidden&lt;/code&gt;, it is removed from the rendered output but its state is preserved. When it becomes &lt;code&gt;visible&lt;/code&gt; again, it remounts instantly — no data fetching, no loading states, no state initialization.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Activity&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;TabLayout&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;activeTab&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Activity&lt;/span&gt; &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;activeTab&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;feed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;visible&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hidden&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;FeedScreen&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Activity&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Activity&lt;/span&gt; &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;activeTab&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;search&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;visible&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hidden&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;SearchScreen&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Activity&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// The hidden tab retains its scroll position, search query,&lt;/span&gt;
&lt;span class="c1"&gt;// loaded data, and all local state. Switching tabs is instant.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This replaces the common pattern of using &lt;code&gt;display: none&lt;/code&gt; on a View to preserve state — except the Activity version is coordinated with React's scheduler and works correctly with concurrent rendering. The old &lt;code&gt;display: none&lt;/code&gt; approach kept the component in the tree and in the layout system; &lt;code&gt;Activity&lt;/code&gt; properly defers work on hidden subtrees.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Real-world use case:&lt;/strong&gt; Tab navigators. Chat apps where you switch between a conversation list and an active conversation. Any screen where the user's position (scroll, form state, cursor position) should survive a navigation away and back. With &lt;code&gt;Activity&lt;/code&gt;, you stop managing that state manually.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  useEffectEvent
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;useEffectEvent&lt;/code&gt; solves a specific and frustrating problem: effects that depend on values that change frequently, but where the dependency on those values isn't actually part of the "trigger" for the effect — it's just used inside it.&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useEffectEvent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;AnalyticsTracker&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;screenName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// This is "event" logic — it reads userId and theme&lt;/span&gt;
  &lt;span class="c1"&gt;// but we don't want the effect to re-run when they change&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;onVisit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useEffectEvent&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;analytics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;track&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;screenName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;

  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;onVisit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;screenName&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="c1"&gt;// only re-runs when screenName changes&lt;/span&gt;
                   &lt;span class="c1"&gt;// userId and theme are read fresh, not as deps&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Previously: you'd either add userId and theme to deps (wrong fires)&lt;/span&gt;
&lt;span class="c1"&gt;// or use a ref (suppresses the lint rule, ugly pattern)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In analytics, logging, and any effect that reads ambient state but should only fire on specific triggers, this eliminates the &lt;code&gt;useRef&lt;/code&gt; workaround pattern that was widespread in large codebases.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Network and Performance Panels in React Native DevTools
&lt;/h2&gt;

&lt;p&gt;Debugging performance in React Native used to mean adding manual log statements, integrating third-party profiling tools, or switching to Flipper and hoping it connected properly. The React Native Core team shipped built-in Network and Performance panels in DevTools, stabilized in 0.83.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Network panel&lt;/strong&gt; shows all outbound requests from your app — fetch, XMLHttpRequest, WebSocket — with timing, headers, and response bodies. It works without any library integration. You open DevTools, and your network traffic is already there.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Performance panel&lt;/strong&gt; integrates with &lt;code&gt;performance.mark&lt;/code&gt; and &lt;code&gt;performance.measure&lt;/code&gt;, which are now stable browser-compatible APIs in React Native. You can annotate your own code with named timing points and they appear in the performance timeline.&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="c1"&gt;// Mark where critical work begins and ends&lt;/span&gt;
&lt;span class="nx"&gt;performance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mark&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;product-list:render-start&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetchProducts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;categoryId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;setProducts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nx"&gt;performance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mark&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;product-list:render-end&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;performance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;measure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;product-list:full-cycle&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;product-list:render-start&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;product-list:render-end&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;// Shows up in the DevTools Performance panel timeline&lt;/span&gt;
&lt;span class="c1"&gt;// correlated with React fiber work and native frame timing&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why this matters:&lt;/strong&gt; You can now correlate your application logic timing with React's render phases and native frame drops in a single unified view. Identifying whether a slow screen is caused by a slow network call, an expensive render, or a dropped frame on the native side no longer requires three separate tools.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. Migrating: What Actually Breaks
&lt;/h2&gt;

&lt;p&gt;If your app was already on the New Architecture (which has been the default since 0.76), the upgrade from 0.82 to 0.83/0.84 is largely smooth. The 0.83 release was explicitly a stability release with no user-facing breaking changes. The real work happens if you are migrating from the legacy architecture now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common migration blockers:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Old-style &lt;code&gt;NativeModules&lt;/code&gt; access&lt;/li&gt;
&lt;li&gt;Untyped native modules&lt;/li&gt;
&lt;li&gt;Libraries using direct Bridge calls&lt;/li&gt;
&lt;li&gt;Synchronous native module calls (wrong pattern for the bridge era)&lt;/li&gt;
&lt;li&gt;Frozen object mutation in third-party deps (Hermes V1 is stricter)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AsyncStorage&lt;/code&gt; — replace with MMKV or Keychain&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most common real blocker is third-party libraries that have not migrated to the New Architecture APIs. The community has largely caught up, but niche libraries with low maintenance activity may still rely on the bridge. Use the &lt;code&gt;react-native-new-architecture&lt;/code&gt; compatibility checker before migrating and audit your native dependencies.&lt;/p&gt;

&lt;p&gt;One change that catches teams off guard: the build flag &lt;code&gt;RCT_REMOVE_LEGACY_ARCH=1&lt;/code&gt; in 0.83 lets you explicitly strip the legacy arch code from your build output, reducing binary size and build time. This is experimental but production-viable for most apps.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# In your Podfile, to strip legacy arch code from the build:&lt;/span&gt;
&lt;span class="nv"&gt;RCT_REMOVE_LEGACY_ARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 bundle &lt;span class="nb"&gt;exec &lt;/span&gt;pod &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Reduces binary size, shortens build time&lt;/span&gt;
&lt;span class="c"&gt;# Only safe after confirming no native deps use legacy APIs&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  6. Version Support: What the Team Is Now Committing To
&lt;/h2&gt;

&lt;p&gt;React Native now maintains the latest three minor series simultaneously. When 0.84 is current, the team actively patches 0.84.x, 0.83.x, and 0.82.x. Versions below that receive no further updates.&lt;/p&gt;

&lt;p&gt;Starting April 2026, the minimum supported version across the broader ecosystem (including third-party SDKs that explicitly track React Native's support policy) is &lt;strong&gt;0.80&lt;/strong&gt;. If you are running anything below that, you are on your own for security patches and bug fixes.&lt;/p&gt;

&lt;p&gt;The practical implication for teams that move slowly: you now have a defined window. Three minor versions of runway before a release becomes unsupported. Given that React Native ships approximately four minor versions per year, that is roughly &lt;strong&gt;nine months of supported life per version&lt;/strong&gt;. Plan upgrades accordingly — waiting for "stability" before upgrading means you will always be behind.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Recommended posture:&lt;/strong&gt; Stay on the N-1 version (one behind latest). You get battle-tested stability, patch support, and enough time to evaluate breaking changes in N before they land in your release branch. Staying on N-2 or older is now a deliberate decision to accept unsupported software.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;The through-line across all of these changes is the same: React Native is done paying off technical debt and is now shipping on top of a stable foundation. JSI, Fabric, TurboModules, Hermes V1 — these are not features you turn on. They are the floor. What gets built on top of them in the next two years is what the ecosystem is now positioned for.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Sources: React Native 0.83 release notes · React Conf 2025 · Software Mansion 2026 State of RN · Expo SDK 55 changelog&lt;/em&gt;&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>react</category>
      <category>typescript</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Cyber Security resources</title>
      <dc:creator>Vivek Mishra</dc:creator>
      <pubDate>Sun, 19 Jun 2022 02:54:09 +0000</pubDate>
      <link>https://forem.com/vvekm/cyber-security-resources-fih</link>
      <guid>https://forem.com/vvekm/cyber-security-resources-fih</guid>
      <description>&lt;p&gt;Collection of useful resources I found on the Internet related to Cyber Security career.&lt;/p&gt;

&lt;h2&gt;
  
  
  General
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.quora.com/Is-penetration-testing-a-rewarding-career" rel="noopener noreferrer"&gt;The Career&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nahamsec/Resources-for-Beginner-Bug-Bounty-Hunters/blob/master/assets/media.md" rel="noopener noreferrer"&gt;Media Resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sucuri.net/guides/owasp-top-10-security-vulnerabilities-2020/" rel="noopener noreferrer"&gt;Web Vulnerabilities&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://portswigger.net/web-security/all-materials" rel="noopener noreferrer"&gt;Learn &amp;amp; Practice&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Bug Bounty
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://geekflare.com/bug-bounty-platforms/" rel="noopener noreferrer"&gt;What is it really?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://forum.bugcrowd.com/t/how-do-you-approach-a-target/293" rel="noopener noreferrer"&gt;Hunting Methodology&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nahamsec/bbht" rel="noopener noreferrer"&gt;Popular Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/practice-platforms.md" rel="noopener noreferrer"&gt;Practice Hacking Skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pentester.land/list-of-bug-bounty-writeups.html" rel="noopener noreferrer"&gt;Write ups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://researcherdocs.bugcrowd.com/docs/reporting-a-bug" rel="noopener noreferrer"&gt;Reporting Bugs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Capture The Flags
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/bugbountywriteup/beginners-guide-to-ctfs-c934a0d7f5f9" rel="noopener noreferrer"&gt;The Beginner Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ctftime.org/" rel="noopener noreferrer"&gt;Calender of All Events&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zardus/ctf-tools" rel="noopener noreferrer"&gt;Popular Tools List&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Penetration Testing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.cloudflare.com/en-in/learning/security/glossary/what-is-penetration-testing/" rel="noopener noreferrer"&gt;Guide To Method&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/superhero1/OSCP-Prep" rel="noopener noreferrer"&gt;OSCP Certification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.hackthebox.eu/" rel="noopener noreferrer"&gt;Practice Penetration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/jobs/search/?keywords=oscp" rel="noopener noreferrer"&gt;LinkedIn Jobs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>oscp</category>
      <category>ctf</category>
      <category>bugbounty</category>
      <category>cybersecurity</category>
    </item>
  </channel>
</rss>
