BuildNot yet confirmed elsewhere1 publisher2 min readPublished
React Native Skia v3 moves its renderer to Graphite on Dawn under a new package name
React Native Skia v3 renders through Skia's Graphite backend on Dawn and raises the minimums to Android API 26 and iOS 15.1. Graphite does not run on tvOS, Android TV or Mac Catalyst, so apps that target them stay on the maintained v2 line.
The Engineer · Build desk
What happened
- Drawing code carries over, with components, hooks, shaders and the imperative Skia API working as they did in v2.
- Three Canvas props and the NativeSkiaViewProps type were removed in v3.
- On iOS and macOS the Skia binaries now come from two new npm packages that also ship Dawn, so pod install has to run again after upgrading.
- Apps that also use react-native-webgpu link one shared copy of Dawn, and the native build fails if the two packages were built against different Dawn releases.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- constraint An app's move to v3 waits on its slowest Skia-dependent library, since any library still importing the Shopify name blocks the install and the two packages cannot sit side by side.
- decision Android apps that still need devices below API 26 or without Vulkan must choose between dropping those users and staying on v2, because the minSdkVersion floor covers the whole app.
- cost Expo teams on v3 give up Expo Go, which bundles v2's native code, and move their testing to development builds.
- capability Apps that mix Skia drawing with WebGPU can now share one GPU device and its textures between the two without copying.
The rename and the backend change ship on separate version lines. The docs refer to projects that already depend on react-native-skia at 2.15 [9], and the install line they give for staying on v2 is `yarn add react-native-skia@2` [2]. A team that never adopts Graphite still switches its dependency name to keep receiving v2 releases after 2.14 [25].
That part of the migration is a string replace. The guide pipes `git grep -l "@shopify/react-native-skia"` into a perl substitution over .ts, .tsx, .js and .jsx files, about the right amount of tooling for the job [12]. Deep imports used on Web and in headless mode change too [12]. So do three entries in jest.config.js: `testEnvironment`, `setupFilesAfterEnv` and the `transformIgnorePatterns` regex each name the package [13].
On Android, Dawn drives Vulkan where v2 used OpenGL ES [8][1]. React Native projects default to a lower minSdkVersion, so the upgrade includes `minSdkVersion = 26` in the `ext` block of android/build.gradle [14]. Expo projects set the same floor through the expo-build-properties plugin [24].
The threading change is the engineering I would upgrade for. Under Ganesh, a GPU texture belonged to the Skia context of the thread that created it, and v2 created its textures on the UI thread for that reason [19]. Its `<Canvas>` drew frames on the UI thread as well [18].
In v3 the scene is recorded once per React commit. A dedicated native thread pool replays it into a Graphite frame whenever its content changes, and the UI thread only applies animated values [18]. With Graphite, the guide says, textures can be used from any thread [20]. According to the docs, none of this requires changes to application code [23].
The guide does not include frame-time measurements. I'd expect the gain to track how much UI-thread time an app spent in Skia drawing under v2. An app whose dropped frames come from JavaScript work or layout would see less.
For a phone app that already targets API 26, ships no TV or Catalyst build, and uses no Skia library still published against the Shopify name, I think v3 is the version to be on.
What to watch
- Releases of third-party Skia-dependent libraries that switch their imports to react-native-skia; their users cannot install v3 until they ship.
- Whether the maintainers publish frame-time comparisons between v2's UI-thread drawing and v3's thread-pool replay.
- Any Graphite support for tvOS, Android TV or Mac Catalyst, the platforms that currently keep apps on v2.
Clarity's read
What the record supports and how the coverage leans. The claims behind it follow.
Reality
- Evidence72
- Adoption
- Insufficient
- Hype gap+5
- Incentives35
- Confidence66
Claim ledger
Ranked by verification strength, evidence, and original report placement.
- [1]
v2 is still maintained. It renders with OpenGL ES on Android and has lower version requirements: it runs on Android devices below API level 26 or without Vulkan, and it supports tvOS, Android TV, Mac Catalyst, and Expo Go.
- [2]
Teams that need v2's platforms should stay on v2 by running yarn add react-native-skia@2 and using the v2 documentation.
- [3]
The drawing API is the same as in v2: components, hooks, shaders, and the imperative Skia API all work as before.
- [4]
What changes in v3 is the package name, the platform requirements, and a few Canvas props.
- [5]
tvOS, Android TV, and Mac Catalyst are not available with Graphite; these platforms remain supported on v2.
- [6]
Three props of Canvas were removed in v3, and the NativeSkiaViewProps type was removed as well.
- [7]
React Native Skia v3 renders with Skia Graphite on iOS, macOS, and Android.
- [8]
Graphite is Skia's new GPU backend. In React Native Skia it runs on Dawn, Google's WebGPU implementation, which uses Metal on Apple platforms and Vulkan on Android.
- [9]
The package is now published as react-native-skia; @shopify/react-native-skia stops at version 2.14. Projects that already depend on react-native-skia (2.15) skip the rename step.
- [10]
Do not install @shopify/react-native-skia and react-native-skia side by side: both ship the same native module.
- [11]
A library that imports from @shopify/react-native-skia needs a release that targets react-native-skia before it can be used with v3.
- [12]
The guide provides a git grep -l "@shopify/react-native-skia" command piped into a perl substitution that rewrites every import in a git repository across .ts, .tsx, .js and .jsx files; deep imports used on Web and in headless mode must also be updated.
- [13]
The Jest configuration references the package by name in testEnvironment, setupFilesAfterEnv and transformIgnorePatterns, all of which change to react-native-skia.
- [14]
v3 requires Android API level 26 or above and renders with Vulkan instead of OpenGL ES. React Native projects default to a lower minSdkVersion, so it must be raised to 26 in the ext block of android/build.gradle.
- [16]
After upgrading, pod install must be run again because the Skia binaries come from new npm packages, react-native-skia-graphite-apple-ios and react-native-skia-graphite-apple-macos, which also ship Dawn.
- [17]
Expo Go bundles the native code of v2, so v3 needs a development build.
- [18]
In v2, Canvas drew its frames on the UI thread. In v3, the scene is recorded once per React commit, and a dedicated native thread pool replays it into a Graphite frame whenever its content changes. The UI thread only applies the animated values; it no longer draws.
- [19]
With Ganesh, a GPU texture belonged to the Skia context of the thread that created it, which is why v2 created textures on the UI thread.
- [20]
The v3 docs state that textures can be used from any thread with Graphite.
- [21]
If an app also uses react-native-webgpu, both packages link the same copy of Dawn; the native build fails with a Dawn version mismatch error if they were built against different Dawn releases, so both packages must be upgraded together.
- [22]
With the shared Dawn copy, Skia and WebGPU can now share a device and textures without any copy.
- [23]
The docs say nothing changes in application code as a result of the new frame production model.
- [24]
Expo projects use expo-build-properties to raise the Android minSdkVersion to 26.
- [25]
A team staying on v2 changes its dependency to react-native-skia to receive v2 releases after 2.14.
- [26]
An app cannot move to v3 until every Skia-dependent library it uses publishes a release targeting react-native-skia, because the old and new packages cannot be installed together.
- [27]
Because v3 requires raising the app's Android minSdkVersion to 26, an app that must keep running on devices below API 26 or without Vulkan stays on v2.
Sources
1 independent publisher whose own reporting we read for this story.
- React Native Skia 3.0
wcandillon.github.io
1 article · October 9, 2026
Topics and entities
Follow any of these and your For You feed starts watching them — no settings page required.