npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

react-native-foonto

v0.2.2

Published

Beautiful, open-source React Native animations — Tinder-style swipe deck, skeleton shimmers, and shared element transitions. Built on Reanimated & Gesture Handler.

Readme

react-native-foonto

Beautiful, production-grade React Native animations — copy the code, or paste the AI prompt and ship.

Polished, customizable components built on Reanimated 4 & Gesture Handler 2. Every animation runs on the UI thread, ships with TypeScript types, and works on iOS & Android.

🌐 Website & live demos → foonto.com  ·  📚 Docs  ·  📦 npm

npm version npm downloads license platforms


Previews

Want to see all of them? Watch every animation on foonto.com →

Why foonto

  • 🎬 Real motion, the right way. Gesture- and scroll-driven animations that run on the UI thread — no per-frame work on the JS thread, no jank.
  • 📋 Copy-paste or prompt-to-ship. Every component ships a minimal How to use snippet and a numbered AI prompt you can hand to Claude/Cursor to integrate it for you.
  • 🎛️ Customizable by default. Sensible defaults, fully typed props — colors, sizes, timings, and custom renderers where it matters.
  • 🧩 Tree-shakeable & typed. Import only what you use. First-class TypeScript types throughout. No any.
  • 🆓 Open source, MIT. Free forever. Use it in anything.

Installation

npm install react-native-foonto react-native-reanimated react-native-gesture-handler expo-linear-gradient

Using Expo:

npx expo install react-native-foonto react-native-reanimated react-native-gesture-handler expo-linear-gradient

Peer dependencies: react-native-reanimated (v4+), react-native-gesture-handler (v2+), and expo-linear-gradient. Built and tested on Expo SDK 56 · React Native 0.85 · Reanimated 4 · Gesture Handler 2 (new architecture / Fabric).

Wrap your app root once so gestures work everywhere:

import { GestureHandlerRootView } from "react-native-gesture-handler";

export default function App() {
  return (
    <GestureHandlerRootView style={{ flex: 1 }}>
      {/* ...your navigator / screens... */}
    </GestureHandlerRootView>
  );
}

Quick start

import { GestureHandlerRootView } from "react-native-gesture-handler";
import { SwipeDeck } from "react-native-foonto";
import { View, Text } from "react-native";

const PROFILES = [
  { id: "1", name: "Ada Lovelace", role: "Mathematician" },
  { id: "2", name: "Linus Torvalds", role: "Engineer" },
  { id: "3", name: "Grace Hopper", role: "Computer Scientist" },
];

export default function Discover() {
  return (
    <GestureHandlerRootView style={{ flex: 1 }}>
      <SwipeDeck
        data={PROFILES}
        stackSize={3}
        renderCard={(item) => (
          <View style={{ flex: 1, borderRadius: 24, backgroundColor: "#fff", alignItems: "center", justifyContent: "center" }}>
            <Text style={{ fontSize: 24, fontWeight: "700" }}>{item.name}</Text>
            <Text style={{ color: "#666", marginTop: 6 }}>{item.role}</Text>
          </View>
        )}
        onSwipeRight={(item) => console.log("liked", item.name)}
        onSwipeLeft={(item) => console.log("passed", item.name)}
      />
    </GestureHandlerRootView>
  );
}

Full props, How to use snippets, and copy-paste AI prompts for every component live at foonto.com/docs.

Components

| Component | What it does | Docs | | --- | --- | --- | | SwipeDeck | Tinder-style card deck — fling left, right, or up | → | | Shared Transition | Morph an element smoothly between screens | → | | Stack Cards | Wallet-style stack — swipe up or tap to cycle | → | | Blob Tab Bar | Bottom tab bar with a sliding highlight pill | → | | Carousel | Center-focused, snapping carousel | → | | Draggable List | Long-press to reorder rows | → | | Parallax Carousel | Full-width pager with a parallaxing background | → | | Masonry Grid | Balanced multi-column grid with a staggered reveal | → | | Skeleton | Shimmer placeholders for loading states | → | | Animated Checkbox | Fills and pops a checkmark when toggled | → | | Parallax Header | Scroll view with a parallax, pull-to-zoom header | → | | OTP Input | Segmented PIN field where each digit bounces in | → | | Search Bar | Grows from an icon button to a full-width field | → | | Toast | Stacking, auto-dismissing notifications | → |

💡 Watch every animation in motion at foonto.com — with code and AI prompts on each page.

Shared element transitions — extra setup

SharedTransition needs the Reanimated static feature flag, a native stack navigator, and a native build (not Expo Go, not web). In your package.json:

{
  "reanimated": {
    "staticFeatureFlags": {
      "ENABLE_SHARED_ELEMENT_TRANSITIONS": true
    }
  }
}

TypeScript

Written in TypeScript — types ship with the package, no @types needed. Public prop types are exported alongside each component (e.g. SwipeDeckProps, BlobTab, FoontoStyle).

Links

Contributing

Issues and PRs are welcome. The library lives in src/; the showcase app lives in example/. See ARCHITECTURE.md for the project structure and code standards.

License

MIT © foonto