<?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: Manthan Kasle</title>
    <description>The latest articles on DEV Community by Manthan Kasle (@manthan_kasle).</description>
    <link>https://dev.to/manthan_kasle</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%2F3948068%2F13a75638-7701-45f9-8ce0-cc7ed3b371f3.png</url>
      <title>DEV Community: Manthan Kasle</title>
      <link>https://dev.to/manthan_kasle</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/manthan_kasle"/>
    <language>en</language>
    <item>
      <title>Expo SDK 56 Is Out, and a Few Things Finally Clicked Into Place</title>
      <dc:creator>Manthan Kasle</dc:creator>
      <pubDate>Sat, 23 May 2026 17:55:12 +0000</pubDate>
      <link>https://dev.to/manthan_kasle/expo-sdk-56-is-out-and-a-few-things-finally-clicked-into-place-478h</link>
      <guid>https://dev.to/manthan_kasle/expo-sdk-56-is-out-and-a-few-things-finally-clicked-into-place-478h</guid>
      <description>&lt;p&gt;React Native 0.85, much faster builds, and the one change that will probably break your imports._&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Based on the official release notes:&lt;/em&gt; &lt;a href="https://expo.dev/changelog/sdk-56" rel="noopener noreferrer"&gt;&lt;em&gt;expo.dev/changelog/sdk-56&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;SDK 56 dropped on May 22, and I spent the weekend pulling one of my apps onto it. Most release notes read like a wall of changelog entries, so instead of repeating all of that, I want to walk through the handful of changes that actually show up in your day to day.&lt;/p&gt;

&lt;p&gt;Quick version up top: SDK 56 ships React Native 0.85 and React 19.2. If you came from SDK 55 you skipped 0.84, so this is two RN versions in one jump.&lt;/p&gt;

&lt;h2&gt;
  
  
  Builds got faster, and you don’t have to do anything
&lt;/h2&gt;

&lt;p&gt;I noticed it before I even opened the changelog.&lt;/p&gt;

&lt;p&gt;On iOS, the heaviest Expo modules now ship as prebuilt frameworks. No config change, it just happens, locally and on EAS. Expo measured around a one minute cut on median clean builds, roughly 16 percent. EAS goes a step further and precompiles common community libs like Reanimated and Screens too, which stacks another minute or so on top.&lt;/p&gt;

&lt;p&gt;Android got the bigger architectural win. A new Kotlin compiler plugin replaces the old reflection based module setup with metadata generated at build time. The numbers Expo published: cold starts about 40 percent faster, time to interactive 1.5x, onCreate 1.7x. Nothing for you to wire up, you just get it on upgrade.&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fq19x6g1s1k8djrzmxvjc.png" 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.amazonaws.com%2Fuploads%2Farticles%2Fq19x6g1s1k8djrzmxvjc.png" alt="captionless image" width="799" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There’s also an experimental flag for Android codegen using precompiled headers. In their benchmark a CMake task dropped from 17 minutes to 6. It’s off by default and you opt in through expo-build-properties, so worth a try if your build graph is heavy.&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fdaznyuhcj614m92y9c5y.png" 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.amazonaws.com%2Fuploads%2Farticles%2Fdaznyuhcj614m92y9c5y.png" alt="captionless image" width="799" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Hermes v1 is the default now
&lt;/h2&gt;

&lt;p&gt;Faster startup, lower memory, better runtime. If something breaks you can flip &lt;code&gt;useHermesV1&lt;/code&gt; back off in expo-build-properties, but I'd leave it on and see how it goes.&lt;/p&gt;

&lt;p&gt;One thing to check before you start: Node below v20.19.4 is no longer supported. Look at your CI image first, or you’ll waste twenty minutes wondering why nothing installs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Expo UI is stable
&lt;/h2&gt;

&lt;p&gt;After three SDK cycles, the SwiftUI and Jetpack Compose APIs in Expo UI are stable and in the default template. There’s now a universal component set (Host, Row, Column, Text, TextInput, Button, Switch, Slider, and a few more) that runs on iOS, Android, and web without splitting files into &lt;code&gt;.ios.tsx&lt;/code&gt; and &lt;code&gt;.android.tsx&lt;/code&gt;. Web is still experimental though, so don't lean on it for production yet.&lt;/p&gt;

&lt;p&gt;The part I actually like is the drop in replacements for community libraries. You change the import and move on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// before&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;DateTimePicker&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-community/datetimepicker&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// after&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;DateTimePicker&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;@expo/ui/community/datetime-picker&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;Same idea works for the bottom sheet, picker, segmented control, masked view, and slider. Some props differ because it’s backed by SwiftUI and Compose instead of UIKit, so read the docs before swapping everything blindly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one that will bite you: expo-router split from react-navigation
&lt;/h2&gt;

&lt;p&gt;Expo Router forked the navigation primitives it used to borrow from React Navigation. It still sits on react-native-screens, and React Navigation is still fully supported if you prefer it. But if your code imports directly from &lt;code&gt;@react-navigation/*&lt;/code&gt; inside an Expo Router project, those imports break.&lt;/p&gt;

&lt;p&gt;There’s a codemod that handles most of it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx expo-codemod sdk-56-expo-router-react-navigation-replace &lt;span class="o"&gt;[&lt;/span&gt;your-source-dir]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;expo-doctor will also now warn you if you have both expo-router and react-navigation installed, since that combo is usually a mistake after this change.&lt;/p&gt;

&lt;h2&gt;
  
  
  expo-file-system caught up
&lt;/h2&gt;

&lt;p&gt;The new file-system API became the default back in SDK 54, and it had gaps. SDK 56 closes most of them. Downloads report progress and can be cancelled with AbortSignal, copy and move take an overwrite flag, and there are proper task based upload and download APIs with progress and resumable transfers. File picking handles multiple files and MIME types in one call now too.&lt;/p&gt;

&lt;p&gt;If you held off moving from the legacy module because of missing features, this is probably the release where you stop holding off.&lt;/p&gt;

&lt;h2&gt;
  
  
  Smaller things worth knowing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Calendar, Contacts, and MediaLibrary APIs are now stable, with an object based design. The old ID based APIs are deprecated.&lt;/li&gt;
&lt;li&gt;  iOS Widgets and Live Activities are stable.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;expo/fetch&lt;/code&gt; is now the global fetch. Usually invisible, but set &lt;code&gt;EXPO_PUBLIC_USE_RN_FETCH=1&lt;/code&gt; if you need the old behavior.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;copy()&lt;/code&gt; and &lt;code&gt;move()&lt;/code&gt; in file-system are async now. Use &lt;code&gt;copySync()&lt;/code&gt; and &lt;code&gt;moveSync()&lt;/code&gt; if you depended on the sync versions.&lt;/li&gt;
&lt;li&gt;  New projects scaffold AGENTS.md and CLAUDE.md, plus official Expo skills for Claude Code and the other agents.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Version bumps to plan for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Minimum iOS is now 16.4, up from 15.1. That drops some old devices like the iPhone 7 and the first gen SE.&lt;/li&gt;
&lt;li&gt;  Xcode 26.4 is required to compile native iOS.&lt;/li&gt;
&lt;li&gt;  TypeScript moves to 6.0.3.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Expo Skills, and why I let an agent do the upgrade
&lt;/h2&gt;

&lt;p&gt;I didn’t expect to care about this one.&lt;/p&gt;

&lt;p&gt;Expo now ships official Skills for AI agents. If you haven’t run into Skills yet, they’re structured instruction files that teach an agent the correct way to do a specific Expo task instead of letting it improvise from half remembered docs. They work with Claude Code, Cursor, Codex, and the others. New SDK 56 projects even scaffold AGENTS.md and CLAUDE.md for you.&lt;/p&gt;

&lt;p&gt;Install them in Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/plugin marketplace add expo/skills
/plugin &lt;span class="nb"&gt;install &lt;/span&gt;expo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For any other agent, the skills CLI does the same job:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add expo/skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There’s a long list (building native UI, deployment, dev client, modules, EAS workflows, brownfield, and more), but the one that matters for this post is &lt;code&gt;[upgrading-expo](https://github.com/expo/skills/blob/main/plugins/expo/skills/upgrading-expo/SKILL.md)&lt;/code&gt;. It handles SDK upgrades as an actual sequence rather than a single command: it reads your package.json, runs the install with &lt;code&gt;--fix&lt;/code&gt;, walks the breaking changes, validates your config plugins, checks native module compatibility, and flags the bits it can't safely auto-fix. It also carries migration references for the trickier moves like the New Architecture, React 19, native tabs, and expo-av to expo-audio/expo-video.&lt;/p&gt;

&lt;p&gt;The Expo docs straight up recommend it now: if you use a coding agent, install Skills and run the &lt;code&gt;[upgrading-expo](https://github.com/expo/skills/blob/main/plugins/expo/skills/upgrading-expo/SKILL.md)&lt;/code&gt; skill rather than upgrading by hand. The full list lives at &lt;a href="https://docs.expo.dev/skills/" rel="noopener noreferrer"&gt;docs.expo.dev/skills&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Upgrading
&lt;/h2&gt;

&lt;p&gt;If you’d rather drive it yourself, for an app on 55:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx expo &lt;span class="nb"&gt;install &lt;/span&gt;expo@^56.0.0 &lt;span class="nt"&gt;--fix&lt;/span&gt;
npx expo-doctor@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then read the breaking changes section twice before you push, bump your iOS deployment target to 16.4 in any custom module podspecs, and make a fresh dev build if you use expo-dev-client.&lt;/p&gt;

&lt;p&gt;For my upgrade I let the &lt;code&gt;[upgrading-expo](https://github.com/expo/skills/blob/main/plugins/expo/skills/upgrading-expo/SKILL.md)&lt;/code&gt; skill take the first pass, then went through the diff myself. It caught the react-navigation imports and the async copy/move changes before I hit them at runtime, which is exactly the kind of thing you forget when you're moving fast. The router codemod did the rest of the heavy lifting, and the build speed difference on EAS was real, not a benchmark you only see in a blog post. If you maintain a production app, this is one of the more worthwhile jumps in a while.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>news</category>
      <category>performance</category>
      <category>reactnative</category>
    </item>
  </channel>
</rss>
