Discord Sep 9, 2026

What It Takes to Migrate Discord to RN's New Architecture

Article Summary

Kamil Delekta from Software Mansion reveals what nobody tells you about React Native's New Architecture: the migration flip is only 14% of the work. The other 86%? That's where things get interesting.

Software Mansion spent a year embedded with Discord's mobile team migrating their iOS app to React Native's New Architecture. This isn't a how-to-flip-the-switch guide. It's a deep dive into the hundreds of subtle breaks that happen after: coordinate systems that shift, gestures that freeze mid-press, and class names that deadlock your app.

Key Takeaways

Critical Insight

At Discord's scale, migrating to React Native's New Architecture meant fixing 86% of problems that only surface after the switch, most clustering where app code touches native boundaries.

The sticker freeze that stopped Discord's app had nothing to do with stickers, and everything to do with a missing suffix on a class name from years ago.

About This Article

Problem

Discord's migration ran into a deadlock in React Native's interop layer. An unmigrated Lottie component had an incorrectly named class called NativeLottieNode instead of NativeLottieNodeManager. When it ran alongside animated stickers and UI thread animations, the framework's registry lock froze the app with no crash report to explain what happened.

Solution

Software Mansion fixed it by renaming the native class to match the fast-path lookup convention. They changed NativeLottieNode to NativeLottieNodeManager while keeping the JavaScript component name the same. The fix only needed three lines of code across two files.

Impact

This deadlock only showed up under real production load at Discord's scale, so the fix eliminated a whole class of similar problems. The upstream change to the interop layer also prevents other apps from running into the same naming convention issue when they migrate legacy components.