Skia-based animated wave loader for React Native, Expo, and React Native Web.
WaveLoader is a polished alternative to ActivityIndicator, built for product surfaces that need a stronger visual identity than a generic spinner.
Playground: wave-loader.darkspace.studio
- Skia-rendered animated waves instead of a standard spinner
- Works in React Native projects that already use Skia
- Supports layered waves, per-wave overrides, and multiple path variants
- Includes presets for quick drop-in styling
- Has a live web playground for easy customization
npm install wave-loader @shopify/react-native-skiaYou also need react and react-native in your app.
WaveLoader currently declares these peer dependencies:
react >= 18react-native >= 0.73@shopify/react-native-skia ^2.4.21
import { WaveLoader } from "wave-loader";
export function Example() {
return (
<WaveLoader
width={240}
height={80}
waves={4}
color="#1F6FEB"
durationMs={4200}
pathVariant="smooth"
waveOverrides={[
{ color: "#0A3D62" },
{ pathVariant: "choppy", durationMs: 3600 },
{ color: "#00A8CC", pathVariant: "smooth" },
]}
/>
);
}Included presets:
auroraPresetbouncePresetfrostPresetlavaPresetmikrohistoriePresetminiPresetnebulaPresetstormPresetsunsetPresettoxicPreset
Supported pathVariant values:
"rounded""choppy""smooth""pulse""square""ripple""travel"
| Prop | Type | Default | Description |
|---|---|---|---|
width |
number |
240 |
Canvas width in pixels |
height |
number |
80 |
Canvas height in pixels |
waves |
number |
3 |
Number of wave layers, clamped to 1..5 |
color |
string |
#012D53 |
Global base color |
durationMs |
number |
4000 |
Global animation cycle duration in milliseconds |
opacity |
number |
0.5 |
Global opacity modulator from 0..1 |
pathVariant |
"rounded" | "choppy" | "smooth" | "pulse" | "square" | "ripple" | "travel" |
"rounded" |
Global wave path style |
fadeOut |
number |
60 |
Edge fade intensity in percent |
waveOverrides |
WaveLoaderWaveOverride[] |
[] |
Per-wave overrides for color, durationMs, and pathVariant |
This repository has two parts:
package/: the publishablewave-loadernpm packageapp/andcomponents/: the docs and playground app built with Expo and React Native Web
Run the docs app:
npm install
npm run webRun the package build and tests:
npm run package:install
npm run package:build
npm run package:testMIT
