Skip to content

Goodspeed is in closed beta. Enter your email and we check your invite on the spot: invited accounts start free today, and everyone else joins the waitlist in one click. Get started

Skip to content
Goodspeed

Connect Reanimated to your Goodspeed app

UI-thread animations powering swipe gestures, shared-element transitions, and spring physics in every Goodspeed app. Goodspeed wires Reanimated into every app that needs it at generation time, so you start with a working integration, not a blank config and a documentation tab.

WHAT GETS WIRED IN

Built into every Reanimated build

Every app Goodspeed generates with Reanimated includes these wired integrations from the first build. No manual setup required.

ItemDescriptionStrength
Animation without re-rendersShared values driven by the spring, timing and sequence helpers move without React re-rendering on every frame.Interface
Gestures on real componentsSwipeable cards, pull-to-refresh and drag-to-dismiss modals are wired through the gesture detector.Interface
Derived styles off the main threadTransform and opacity are computed on the UI thread, which is what holds 60fps on a mid-range phone.Reliability
Entrance animationsList items and cards animate in with the built-in layout presets, so a screen arrives rather than simply appearing.Interface

Source: the Goodspeed app foundation · animation

REAL GENERATED CODE

A snippet from a Reanimated integration the pipeline ships

This pattern is lifted from the engineered plumbing that ships inside every Goodspeed app. The studio generates Reanimated integration code like this for every app that includes it, not a placeholder you have to fill in yourself.

  1. Spring-driven card

    // components/ui/AnimatedCard.tsx
    import Animated, {
      useSharedValue, useAnimatedStyle, withSpring
    } from 'react-native-reanimated';
    import { Gesture, GestureDetector } from 'react-native-gesture-handler';
    
    export function AnimatedCard({ children }: { children: React.ReactNode }) {
      const scale = useSharedValue(1);
      const animatedStyle = useAnimatedStyle(() =>
        ({ transform: [{ scale: scale.value }] })
      );
      const tap = Gesture.Tap()
        .onBegin(() => { scale.value = withSpring(0.97); })
        .onFinalize(() => { scale.value = withSpring(1); });
      return (
        <GestureDetector gesture={tap}>
          <Animated.View style={animatedStyle}>{children}</Animated.View>
        </GestureDetector>
      );
    }
GDaily Allergens

Today's log

Gluten
Tree nuts
Shellfish
Dairy
HomeScanLogProfile

START WITH REANIMATED

Your Reanimated integration, generated