Skip to content
Native Animation
Burst Like Button animation preview
ButtonMicroSkia

Burst Like Button

A tactile Skia heart with a spring explosion, physical particles, a rolling count, and a hold-to-charge super-like.

Free
Get it free with your email

No password and no card: we email you a sign-in link, then the full source is yours.

Add to your project

Copy the component and its assets into your app with the Native Animation CLI, or paste the agent prompt into Claude Code, Codex or Cursor once the MCP server is connected.

npx nativeanimation add burst-like-button

About this animation

A tactile Skia heart with a spring explosion, physical particles, a rolling count, and a hold-to-charge super-like.

How it works

  1. Pressing immediately compresses the Skia heart to 0.8, then a spring sends it through a 1.25 celebration peak.
  2. One burst progress value drives an expanding wave and 16 particles with launch velocity, gravity, spin, and fade.
  3. Alternating dots and miniature Skia hearts reuse a close coral gradient palette for a cohesive explosion.
  4. The count rolls inside a clipped, intrinsically measured window in the same state transition.
  5. Holding fills a soft glow for 720 ms, then releases a larger super-like burst without blocking normal taps.

Install

npx expo install @shopify/react-native-skia expo-linear-gradient react-native-reanimated react-native-worklets

Usage

<BurstLikeButton count={128} onChange={(liked) => saveLike(liked)} />

<BurstLikeButton
  size={36}
  color="#7C5CFC"
  particleColors={['#7C5CFC', '#22C55E', '#FACC15']}
  colorScheme="dark"
  superLikeDuration={800}
  showCount={false}
/>

Props

PropTypeDefaultDescription
likedboolean—Controlled like state.
defaultLikedbooleanfalseInitial uncontrolled state.
onChange(liked: boolean) => void—Receives state requests.
sizenumber28Heart size.
colorstring'#FF3F68'Active heart and wave color.
particleColorsreadonly string[]Coral gradient paletteDot and mini-heart palette.
burstDurationnumber680Wave and particle duration in milliseconds.
superLikeDurationnumber720Hold duration before the super-like activates.
countnumber—Base count before the local like.
showCountbooleanWhen count existsShows the rolling count.
inactiveColorstring'#686573'Inactive outline color.
accessibilityLabelstring'Like this post'Screen-reader label.
fontFamilystringSystem fontCount font.
colorScheme'light' | 'dark' | 'auto''auto'Surface color treatment.
surfaceColorstringScheme-awareTop surface color.
surfaceEndColorstringScheme-awareBottom surface color.
styleStyleProp<ViewStyle>—Outer style.
testIDstring—Test identifier.

Compatibility

Expo SDK 57, React Native 0.86, Reanimated 4.5, and Skia 2.6. iOS and Android are supported but device-unverified; web is verified by the project gate. Works in Expo Go.

Accessibility

The control exposes a labeled button with checked state and describes the hold gesture. A regular tap remains the complete alternative to holding. Reduced Motion uses a short count fade, applies the heart state immediately, and suppresses the wave, charge glow, and particles.

Why this one

Most burst buttons stop at a scale bounce and a ring of identical dots. This version combines a drawn Skia heart, mixed-shape particles with individual physics, an intrinsically sized number roller, and a discoverable super-like charge state while keeping the interaction interruptible and copy-ready.

Source code

Free with an account

Sign in with your email to read the full source here, or install it in one command with the CLI.

Get it free