Shopify Jun 12, 2026

Building Arrive's Confetti in React Native with Reanimated

Article Summary

Joel Besada from Shopify reveals how they built a delightful confetti animation in React Native that runs at 60 FPS without blocking the JavaScript thread. The secret? Declarative animations that execute entirely on the native UI thread.

When Shopify rewrote their Arrive package tracking app in React Native, they faced a challenge: recreating the beloved confetti celebration effect for both iOS and Android. Instead of writing platform-specific native code, they chose to implement it purely in JavaScript using the Reanimated library, allowing them to share code across platforms while maintaining native-level performance.

Key Takeaways

Critical Insight

By using Reanimated's declarative API, Shopify achieved smooth cross-platform confetti animations that run entirely on the native UI thread, eliminating performance concerns from JavaScript computation.

The article includes a step-by-step code walkthrough showing exactly how to translate animation logic into Reanimated's declarative instruction set.

About This Article

Problem

Shopify needed to recreate the Arrive app's confetti effect on both iOS and Android without duplicating code across platforms.

Solution

Joel Besada's team built the confetti animation in JavaScript using React Native Reanimated's declarative API. Instead of relying on JavaScript frame calculations, the API sends animation instructions directly to the native UI thread.

Impact

The result animates 100 confetti pieces with randomized velocities and rotation angles. The pieces bounce elastically while the app maintains 60 FPS performance without blocking the JavaScript thread.