V

Volodymyr

3 min

What Skia is, and why the demos sit together

React Native Skia felt like magic when I was starting out, mostly because I could not find a demo I trusted. Those canvases are the ones I go back to.

When I started my career, Skia felt like magic. A canvas on the UI thread. Circles and paths that moved with gestures. Stuff that looked impossible on a normal React Native view tree. I wanted every good Skia animation I could find in one place — and early on, that was harder than the API itself.

What Skia is, briefly

@shopify/react-native-skia is a React Native binding to Skia, the same 2D graphics engine behind Chrome and Android. You get a Canvas and drawing nodes — Circle, Path, Text, Group, shaders, images — rendered on the UI thread.

The smallest honest on-ramp still looks like this:

import { Canvas, Circle } from "@shopify/react-native-skia";

export function Dot() {
  return (
    <Canvas style={{ flex: 1 }}>
      <Circle cx={50} cy={50} r={24} color="#7DD3FC" />
    </Canvas>
  );
}

That is a react native canvas you own in code. Not a video. Not a Lottie file you press play on. You draw the scene. You redraw it when shared values change.

A Circle is not the hard part

The hard part starts when that Circle has to follow a finger.

You wire useSharedValue from Reanimated into cx or a transform, and suddenly you are building a reactive graph: gesture to value to Skia props, without a bridge round-trip. Drop that connection and the canvas looks fine in a screenshot and dead in a real drag.

Path work flips the same switch. A static SVG string in a Path is still the Circle demo in a fancy hat. Morphing paths, measuring text onto a curve, clipping a blur to a custom mask — that is where Skia earns the Graphics shelf next to shaders and Lottie. Shaders are the pixel program. Skia is the scene those programs sit in.

Lottie is a different contract. You ship a baked timeline. A skia canvas is code you redraw every frame. Same Graphics group on the catalog, opposite mental model.

Good examples were hard to find

Docs get you a Canvas and a Circle. They do not get you a feed of real gestures, morphs, and production-shaped canvases. GitHub is full of half-finished Skia sandboxes, abandoned forks, and demos that only look right at one screen size.

Early on I burned afternoons hunting for something I could learn from — and later ship from. The API was not the bottleneck. Finding a clean example was.

So I started collecting them. One shelf. Learning, inspiration, and shipping in the same place. That was the dream: every Skia animation I trusted, together, instead of scattered across issues and random repos.

Finding the good ones is still the search

I already know Skia exists. The afternoon I lose now is remembering which demo handled the gesture graph cleanly, which one cheated with a screenshot, and which one only looked right once. That is the finding problem, not the API problem.

The shelf is the Skia filter

Everything I keep for that canvas workhorse lives in the Skia filter. New ones land there whenever I find them.