About this drop
The particle layer is drawn with react-native-webgpu on the Dawn device that React Native Skia v3 already uses for Graphite, obtained through Skia.getNativeDevice(). Because both libraries share one device, each frame's resolve texture is wrapped as an SkImage with no copy or readback, then composited in a Skia Canvas with two blurred additive bloom passes, a star field and a powers-of-ten scale readout. The render loop is a worklet on the UI thread: it reads the Reanimated shared value set by an animated FlatList scroll handler, writes the uniforms and submits one instanced draw of 16,000 camera-facing quads, so the morph keeps pace with the finger even when the JS thread is busy. All five point clouds (four shapes plus the opening dust) are generated procedurally in TypeScript and ordered along a 3D Hilbert curve, so particle i travels a short path between shapes. The WGSL shader draws each particle as a sphere impostor that writes real depth and antialiases by writing a 4x MSAA sample mask instead of blending, so nothing is sorted. It needs a development build: Expo Go ships Skia v2, which has no Graphite device, and there is no fallback renderer, so the screen shows an error instead of the particles. Built against Expo SDK 57 and Reanimated 4. Android needs Vulkan and minSdk 26. Skia and react-native-webgpu must share a Dawn version, so upgrade them together.