RORK LABJP
TOOLING — Rork's developer repos keep moving: rork-xcode was updated on July 16, rork-device on July 15, and rork-plist on July 13OPUS46 — Claude Opus 4.6 is live in Rork, and Rork Max is built to assemble apps on top of Claude CodeSIM — A cloud iOS simulator runs in the browser, with one click to install on a device and two clicks to publish to the App StoreMAX — Rork Max emits pure Swift rather than React Native, reaching iPhone, iPad, Apple Watch, Apple TV, Vision Pro, and even iMessageNATIVE — That opens up HealthKit, ARKit and LiDAR, NFC, Dynamic Island, Live Activities, 3D through Metal, and on-device inference with Core MLSEED — Rork raised a $15M seed led by Left Lane Capital, with Peak XV and a16z Speedrun joining the roundTOOLING — Rork's developer repos keep moving: rork-xcode was updated on July 16, rork-device on July 15, and rork-plist on July 13OPUS46 — Claude Opus 4.6 is live in Rork, and Rork Max is built to assemble apps on top of Claude CodeSIM — A cloud iOS simulator runs in the browser, with one click to install on a device and two clicks to publish to the App StoreMAX — Rork Max emits pure Swift rather than React Native, reaching iPhone, iPad, Apple Watch, Apple TV, Vision Pro, and even iMessageNATIVE — That opens up HealthKit, ARKit and LiDAR, NFC, Dynamic Island, Live Activities, 3D through Metal, and on-device inference with Core MLSEED — Rork raised a $15M seed led by Left Lane Capital, with Peak XV and a16z Speedrun joining the round
Articles/Dev Tools
Dev Tools/2026-03-15Intermediate

Getting Started with Latest Performance Optimization Techniques in Expo SDK 55

Comprehensive guide to Expo SDK 55's Hermes V1, EAS build caching, and modal improvements. Learn the latest performance optimization techniques with implementation examples.

Expo149React Native209Performance23Hermes6OptimizationMobile Development4

Expo SDK 55: The Performance Revolution

Released in February 2026, Expo SDK 55 is more than a minor update—it's a major breakthrough for mobile app performance. The most significant change is that Hermes V1 is now the default JavaScript engine. This means all Expo apps automatically benefit from substantial performance improvements.

Compared to traditional JavaScript engines, Hermes V1 offers significantly faster execution and reduced memory consumption. This is particularly impactful on low-spec Android devices. Additionally, new features like Expo Observe, EAS build caching, and the upgraded react-native-screens enhance both development experience and app quality.


Hermes V1 Engine: Performance Gains and Implementation

Real Benefits of Hermes V1

Hermes V1 delivers major improvements across multiple dimensions:

ImprovementEffect
Execution Speed15-25% faster than previous engines
Memory Usage~30% reduction in initialization memory
App Startup500ms to 1 second faster startup time
ES6 SupportFull support for async/await, const/let, and class syntax

Hermes V1 works by precompiling JavaScript to bytecode, minimizing runtime parsing overhead. This approach is especially powerful on resource-constrained Android devices.

Standard Configuration in Expo SDK 55

With Expo SDK 55, Hermes V1 is automatically enabled. Verify your Expo version:

expo --version
# Output example: 52.0.0 (SDK 55 compatible)

You can also explicitly configure Hermes in app.json:

{
  "expo": {
    "plugins": [
      [
        "expo-build-properties",
        {
          "android": {
            "usesCleartextTraffic": false,
            "enableHermes": true
          },
          "ios": {
            "deploymentTarget": "13.0"
          }
        }
      ]
    ]
  }
}

After enabling Hermes, APK size typically reduces by 2-3MB thanks to bytecode optimization.


EAS Build Caching: 3x Development Speed Increase

Time Savings with Caching

EAS build caching reuses previous build results when dependencies and configurations remain unchanged. The impact is dramatic:

  • Initial build: 10-15 minutes
  • With cache: 3-5 minutes (70% reduction)

For CI/CD pipelines with frequent builds, this translates to tens of hours saved monthly.

Configuration and Usage

EAS caching is available by default in EAS Build v2+. To maximize efficiency:

# eas.json configuration example
{
  "build": {
    "production": {
      "node": "20.10.0",
      "npm": "10.2.4",
      "cache": {
        "cacheDisabled": false,
        "customPaths": [
          ".next",
          "build",
          "dist"
        ]
      }
    }
  }
}

Use commands to leverage caching:

eas build --platform ios --cache
eas build --platform android --cache

Cache persists for 14 days, making it effective for rebuilds within that window.


Modal Improvements and react-native-screens 4.23.0

Why Modal Optimization Matters

Rork apps frequently use modals (bottom sheets, dialogs, navigation stacks). With react-native-screens 4.23.0, native screen lifecycle management improves dramatically:

  • Reduced jank during modal transitions
  • Eliminated memory leaks
  • Smooth animations

Implementation Example: Bottom Sheet

Here's a modern bottom sheet implementation using react-native-screens:

import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import { GestureHandlerRootView } from 'react-native-gesture-handler';
import BottomSheet from '@gorhom/bottom-sheet';
 
const Stack = createNativeStackNavigator();
 
export default function ModalScreen() {
  const [isOpen, setIsOpen] = React.useState(false);
  const snapPoints = React.useMemo(() => [200, 400], []);
 
  return (
    <GestureHandlerRootView style={{ flex: 1 }}>
      <NavigationContainer>
        <Stack.Navigator
          screenOptions={{
            presentation: 'modal',
            animationEnabled: true,
            cardStyle: { backgroundColor: 'transparent' },
          }}
        >
          <Stack.Group>
            <Stack.Screen name="Home" component={HomeScreen} />
          </Stack.Group>
          <Stack.Group
            screenOptions={{
              presentation: 'transparentModal',
              cardOverlayEnabled: true,
              cardStyle: { backgroundColor: 'rgba(0,0,0,0.5)' },
            }}
          >
            <Stack.Screen name="Modal" component={ModalContent} />
          </Stack.Group>
        </Stack.Navigator>
      </NavigationContainer>
      
      {isOpen && (
        <BottomSheet snapPoints={snapPoints} onClose={() => setIsOpen(false)}>
          <View style={{ flex: 1, padding: 16 }}>
            <Text>Bottom sheet content</Text>
          </View>
        </BottomSheet>
      )}
    </GestureHandlerRootView>
  );
}

With version 4.23.0, modal stack memory management is automated, preventing leaks even with multiple nested modals.


Expo Observe: Production Performance Monitoring

What is Expo Observe?

Expo Observe (in private preview) monitors real-world app performance through a real-time dashboard, collecting:

  • Frame rate (FPS)
  • Memory usage trends
  • CPU and battery consumption
  • Network request latency
  • Custom metrics

Enabling and Configuring Expo Observe

Initialize Expo Observe by registering your project with EAS Account:

eas update:configure
expo prebuild --clean

Then initialize the SDK in your app code:

import { useExpoObserve } from 'expo-observe';
 
export default function App() {
  React.useEffect(() => {
    // Start performance monitoring
    const observer = useExpoObserve();
    
    // Record custom metrics
    observer.recordMetric('user_action_duration', 1250);
    observer.recordMetric('api_response_time', 350);
    
    return () => observer.cleanup();
  }, []);
 
  return <MainApp />;
}

Data uploads to the EAS Dashboard, allowing you to track performance trends over any time period.


Android Blur Optimization: RenderNode API Adoption

Background Blur Processing Evolution

For glassmorphism effects in Rork apps, Expo SDK 55 now leverages the RenderNode API on Android 12+, eliminating complex framebuffer operations and enabling GPU optimization.

Performance improvement:

EnvironmentProcessing TimeMemory
Previous Approach16ms/frame4.5MB
RenderNode API4ms/frame1.2MB

Implementation Example

Using expo-blur with the latest approach:

import { BlurView } from 'expo-blur';
import { View, Text, StyleSheet } from 'react-native';
 
export default function BlurExample() {
  return (
    <View style={styles.container}>
      <Image
        source={{ uri: 'https://example.com/bg.jpg' }}
        style={styles.backgroundImage}
      />
      
      <BlurView intensity={90} style={styles.blurContainer}>
        <View style={styles.content}>
          <Text style={styles.title}>Modal Content</Text>
          <Text>Fast rendering for smooth UI</Text>
        </View>
      </BlurView>
    </View>
  );
}
 
const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
  },
  backgroundImage: {
    position: 'absolute',
    width: '100%',
    height: '100%',
  },
  blurContainer: {
    width: '85%',
    height: '60%',
    borderRadius: 16,
    overflow: 'hidden',
  },
  content: {
    flex: 1,
    padding: 20,
    justifyContent: 'center',
  },
  title: {
    fontSize: 20,
    fontWeight: 'bold',
    marginBottom: 8,
  },
});

Backward compatibility is maintained on Android 12 and below with traditional rendering.


Best Practices: Unified Optimization Strategy

Multi-Layer Optimization Architecture

Here's how to leverage all Expo SDK 55 features together:

  1. Build Layer: EAS caching accelerates development cycles
  2. Runtime Layer: Hermes V1 improves execution performance
  3. UI Layer: Modal and blur optimization reduces jank
  4. Monitoring Layer: Expo Observe tracks production performance

Implementation checklist:

// Complete app.json configuration
{
  "expo": {
    "name": "MyRorkApp",
    "version": "1.0.0",
    "sdkVersion": "55",
    "plugins": [
      [
        "expo-build-properties",
        {
          "android": {
            "enableHermes": true,
            "buildToolsVersion": "34.0.0"
          },
          "ios": {
            "deploymentTarget": "13.0"
          }
        }
      ]
    ],
    "experiments": {
      "isModulesFunctionsEnabled": true
    }
  }
}

Looking back

Expo SDK 55 integrates Hermes V1, EAS build caching, react-native-screens 4.23.0, android-blur optimization, and Expo Observe into a comprehensive performance platform. Development speed and production quality can now coexist, making SDK 55 essential for medium to large Rork app projects.

Implementing the multi-layer optimization strategy progressively will substantially improve your users' experience.

Share

Thank You for Reading

Rork Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

If you found this article helpful, a small tip ($1.50) would mean a lot to us. Your support helps keep this site ad-free and covers server and hosting costs.

Related Articles

Dev Tools2026-07-10
Adding React Compiler to Expo Let Me Delete 41 Hand-Written memo Calls
I enabled React Compiler on Rork-generated React Native screens and measured the rerender counts with Profiler. Here is how I decided which memo and useCallback calls were safe to delete, how to find the components the compiler bailed out on, and how to catch regressions in CI.
Dev Tools2026-06-23
Why Your Prices Show as “¥1234” on Some Phones — A Formatting Layer That Doesn't Trust Intl Alone in Expo
Same code, yet one device shows “¥1,480” and another “¥1480.” In Expo / Hermes, Intl leans on each device's locale data, so output can drift by OS and engine. Here is a resilient formatting layer that centralizes currency, number, date, and timezone handling and falls back gracefully where Intl is incomplete — with working code.
Dev Tools2026-07-15
The Comma That Fell to the Start of a Line: Rork, Quote Cards, and Japanese Line Breaking
React Native's Text component does not guarantee Japanese line-breaking rules. Here are the violation rates I measured, a WORD JOINER implementation that survives copy and VoiceOver, an onTextLayout audit harness, and how Rork Max (SwiftUI) differs.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →