About this animation
A React Native aurora background animation can create a moving welcome surface without photographic assets. This component blends five color fields in a Skia runtime shader and traces an animated silk fold with a narrow highlight and a soft shadow. Two slow elliptical highlights and film grain add variation, while one Reanimated clock keeps the scene continuous. Palette changes interpolate over 1.2 seconds, and pause eases the motion speed rather than resetting its position. Use it for a sign-in welcome, a guest-entry screen, a membership introduction, or a softly lit onboarding stage. Supply optional identity content, configure the greeting, three action labels and callbacks, footer, palette, motion speed, primary text color, and fonts. The forwarded ref provides pause and resume controls.
When to use it
- Create an animated sign-in welcome.
- Offer account and guest entry actions.
- Introduce a membership experience.
- Transition a welcome background between palettes.
A full-screen welcome pattern with a slowly breathing five-color aurora and a luminous silk fold drifting down one side.
How it works
- The Skia runtime shader builds the background from five color fields, layered diagonal blends, and two soft highlights that travel on 23- and 31-second elliptical paths.
- A signed distance from an animated S-curve creates the silk fold. A narrow cyan highlight sits on its left edge while a wider shadow falls to its right and fades before the lower content.
- A Reanimated frame callback advances one shared clock on the UI thread.
pause()andresume()ease a speed factor instead of resetting the clock, so the fold never jumps. - Palette changes interpolate all five RGB uniforms over 1.2 seconds, keeping the shader and its grain continuous during a theme transition.
- Every position and size comes from the component's own
onLayoutdimensions, so the composition works inside a screen, modal, or fixed-size card. - The logo, greeting, actions, and footer enter in a 70 ms cascade. Button feedback stays on the UI thread with a short scale spring.
Why this one
Most animated welcome screens treat the background as the entire idea. This pattern pairs its living aurora with a deliberately spacious brand stage, smooth palette morphing, and restrained action hierarchy. The demo shows how a custom lockup can combine crisp white geometry, a soft aurora-colored glow, and a tracked Geist wordmark without baking a brand into the reusable component.
Install
npx expo install @shopify/react-native-skia react-native-reanimatedSkia on web needs its CanvasKit files. Copy them into the public directory and load Skia before rendering the app:
npx setup-skia-webimport { LoadSkiaWeb } from '@shopify/react-native-skia/lib/module/web';
export default function App() {
return (
<LoadSkiaWeb
getWasmPath={(file) => `/${file}`}
opts={{ locateFile: (file) => `/${file}` }}
>
<WelcomeScreen />
</LoadSkiaWeb>
);
}Usage
import SilkAuroraWelcome from './SilkAuroraWelcome';
export function WelcomeScreen() {
return <SilkAuroraWelcome onPrimaryPress={() => openSignIn()} />;
}Customize the palette, content, typography, and motion:
import { useRef } from 'react';
import SilkAuroraWelcome, {
AURORA_PALETTES,
type SilkAuroraWelcomeRef,
} from './SilkAuroraWelcome';
export function WelcomeScreen() {
const welcomeRef = useRef<SilkAuroraWelcomeRef>(null);
return (
<SilkAuroraWelcome
ref={welcomeRef}
palette={AURORA_PALETTES.tide}
greeting="Welcome aboard"
primaryLabel="Sign in"
secondaryLabel="Create account"
tertiaryLabel="Continue as guest"
footer="A calmer way to travel"
primaryTextColor="#146F6A"
speed={0.8}
fontFamily="YourSansFont"
titleFontFamily="YourDisplayFont"
onPrimaryPress={() => openSignIn()}
/>
);
}The forwarded ref exposes pause() and resume().
Props
| Prop | Type | Default | Description |
|---|---|---|---|
palette | AuroraPalette | AURORA_PALETTES.twilight | Violet, cyan, indigo, deep, and night colors used by the shader. |
logo | ReactNode | — | Optional logo shown above the greeting. |
greeting | string | 'Welcome' | Main greeting. |
primaryLabel | string | 'Sign in' | Primary action label. |
onPrimaryPress | () => void | — | Called when the primary action is pressed. |
secondaryLabel | string | 'Create account' | Secondary action label. |
onSecondaryPress | () => void | — | Called when the secondary action is pressed. |
tertiaryLabel | string | 'Continue as guest' | Tertiary action label; hidden when empty. |
onTertiaryPress | () => void | — | Called when the tertiary action is pressed. |
footer | string | '' | Uppercase, letter-spaced footer; hidden when empty. |
primaryTextColor | string | '#1F8A84' | Text color inside the white primary button. |
speed | number | 1 | Background motion speed multiplier. |
fontFamily | string | System font | Font family for actions and the footer. |
titleFontFamily | string | System font | Font family for the greeting. |
style | StyleProp<ViewStyle> | — | Outer-container style. |
testID | string | — | Test identifier applied to the outer container. |
Compatibility
- Expo SDK 57
- React Native 0.86
- Reanimated 4.5
- React Native Skia 2.6
- iOS: supported, not yet verified on a device
- Android: supported, not yet verified on a device
- Web: supported, verified by the Expo web export
- Works in Expo Go because the native dependencies are bundled with Expo SDK 57
Accessibility
All actions are native Pressable buttons with screen-reader labels derived from their visible text. When Reduce Motion is enabled, the aurora rests at a fixed frame, palette changes happen immediately, and the entrance cascade is skipped. Empty tertiary and footer strings remove those elements from both the visual layout and accessibility tree.
FAQ
- Can I change the aurora palette while it is running?
- Yes. palette supplies five shader colors, and updates interpolate their RGB values over 1.2 seconds. Reduce Motion applies palette changes immediately.
- Can I pause the aurora without making the silk fold jump?
- Yes. pause and resume ease a speed factor on the existing shared clock rather than restarting it. speed sets the background motion multiplier.
- Does the aurora welcome work in Expo Go?
- Yes. Skia and Reanimated are bundled with Expo SDK 57. Web requires CanvasKit loaded before rendering. Reduce Motion freezes the background and skips the entrance cascade.




