JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 4437
  • Score
    100M100P100Q122705F
  • License MIT

Beautiful number animations for React Native: digit-by-digit rolling counter, currency ticker, time display, and odometer with View-based and Skia renderers. Full Intl.NumberFormat support.

Package Exports

  • number-flow-react-native
  • number-flow-react-native/internal/core/bidi.ts
  • number-flow-react-native/internal/core/constants.ts
  • number-flow-react-native/internal/core/direction.ts
  • number-flow-react-native/internal/core/intlHelpers.ts
  • number-flow-react-native/internal/core/layout.ts
  • number-flow-react-native/internal/core/mask.ts
  • number-flow-react-native/internal/core/numerals/detection.ts
  • number-flow-react-native/internal/core/numerals/digits.ts
  • number-flow-react-native/internal/core/numerals/index.ts
  • number-flow-react-native/internal/core/numerals/tables.ts
  • number-flow-react-native/internal/core/superscript.ts
  • number-flow-react-native/internal/core/timeLayout.ts
  • number-flow-react-native/internal/core/timeTypes.ts
  • number-flow-react-native/internal/core/timing.ts
  • number-flow-react-native/internal/core/types.ts
  • number-flow-react-native/internal/core/useAccessibilityAnnouncement.ts
  • number-flow-react-native/internal/core/useAnimatedX.ts
  • number-flow-react-native/internal/core/useAnimationLifecycle.ts
  • number-flow-react-native/internal/core/useCanAnimate.ts
  • number-flow-react-native/internal/core/useContinuousSpin.ts
  • number-flow-react-native/internal/core/useDebouncedWidths.ts
  • number-flow-react-native/internal/core/useDigitAnimation.ts
  • number-flow-react-native/internal/core/useFlowPipeline.ts
  • number-flow-react-native/internal/core/useFormattedValue.ts
  • number-flow-react-native/internal/core/useLayoutDiff.ts
  • number-flow-react-native/internal/core/useNumberFormatting.ts
  • number-flow-react-native/internal/core/useSlotOpacity.ts
  • number-flow-react-native/internal/core/useTimeFormatting.ts
  • number-flow-react-native/internal/core/useTimingResolution.ts
  • number-flow-react-native/internal/core/useWorkletFormatting.ts
  • number-flow-react-native/internal/core/utils.ts
  • number-flow-react-native/internal/core/warnings.ts
  • number-flow-react-native/internal/index.ts
  • number-flow-react-native/internal/native/DigitSlot.tsx
  • number-flow-react-native/internal/native/GradientMask.tsx
  • number-flow-react-native/internal/native/GradientMask.web.tsx
  • number-flow-react-native/internal/native/MaskedView.tsx
  • number-flow-react-native/internal/native/MaskedView.web.ts
  • number-flow-react-native/internal/native/NumberFlow.tsx
  • number-flow-react-native/internal/native/SymbolSlot.tsx
  • number-flow-react-native/internal/native/TimeFlow.tsx
  • number-flow-react-native/internal/native/glyphMetricsShared.ts
  • number-flow-react-native/internal/native/index.ts
  • number-flow-react-native/internal/native/renderSlots.tsx
  • number-flow-react-native/internal/native/types.ts
  • number-flow-react-native/internal/native/useMeasuredGlyphMetrics.tsx
  • number-flow-react-native/internal/native/useMeasuredGlyphMetrics.web.tsx
  • number-flow-react-native/internal/skia/DigitSlot.tsx
  • number-flow-react-native/internal/skia/SkiaNumberFlow.tsx
  • number-flow-react-native/internal/skia/SkiaTimeFlow.tsx
  • number-flow-react-native/internal/skia/SymbolSlot.tsx
  • number-flow-react-native/internal/skia/index.ts
  • number-flow-react-native/internal/skia/renderSlots.tsx
  • number-flow-react-native/internal/skia/types.ts
  • number-flow-react-native/internal/skia/useGlyphMetrics.ts
  • number-flow-react-native/internal/skia/useScrubbingBridge.ts
  • number-flow-react-native/internal/skia/useScrubbingLayout.ts
  • number-flow-react-native/internal/skia/useSkiaFont.ts
  • number-flow-react-native/native
  • number-flow-react-native/package.json
  • number-flow-react-native/skia

Readme

Number Flow React Native

The best animated number component for React Native.

npm version npm downloads CI license

Beautiful number animations for React Native with digit-by-digit rolling transitions. Supports currencies, percentages, compact notation, and all Intl.NumberFormat options. Includes a View-based renderer (zero extra deps) and a Skia renderer for canvas-based animation. Built-in TimeFlow for animated clocks, countdowns, and stopwatches. Works with Expo and bare React Native on iOS and Android.

Number Flow React Native demo showing animated digit-by-digit rolling transitions

Features

  • Beautiful digit-by-digit rolling: each digit animates independently via virtual wheels with automatic direction detection.
  • Two renderers: a default View-based renderer with zero dependencies, and a Skia renderer if you need to have Skia numbers animating.
  • Full Intl.NumberFormat: currencies, percentages, units, compact notation, and everything that this beautiful formatter has to offer.
  • TimeFlow: dedicated animated time display with 12h/24h, timestamps, and countdown support. Even supports centiseconds.
  • 120 FPS scrubbing: worklet-driven updates entirely on the UI thread, with Skia.
  • 37 numeral systems: Arabic-Indic, Devanagari, Thai, CJK, and more.
  • Accessibility: VoiceOver/TalkBack announcements + reduce motion support.
  • Continuous mode: odometer-style cascading digit rolls.

Documentation

For full docs, examples, and recipes, visit number-flow-react-native.awingender.com.

Installation

# npm
npm install number-flow-react-native react-native-reanimated

# bun
bun add number-flow-react-native react-native-reanimated

# expo
npx expo install number-flow-react-native react-native-reanimated

Quick start

import { useState } from "react";
import { NumberFlow } from "number-flow-react-native";

function PriceDisplay() {
  const [price, setPrice] = useState(42.99);

  return (
    <NumberFlow
      value={price}
      format={{ style: "currency", currency: "USD" }}
      style={{ fontSize: 32, color: "#000" }}
    />
  );
}

Renderers

The default import uses the View-based renderer - no extra dependencies needed. If you need to display numbers in Skia Canvas, use the Skia renderer:

// View-based (default)
import { NumberFlow, TimeFlow } from "number-flow-react-native";

// Skia canvas (requires @shopify/react-native-skia)
import { SkiaNumberFlow, SkiaTimeFlow, useSkiaFont } from "number-flow-react-native/skia";

Attribution

This library is a complete React Native reimplementation of NumberFlow by Max Barvian. Please check out his work and the original web version.

The animation patterns, easing curves, and digit-rolling approach are adapted from the original web implementation. All code is original, and no source code is shared.

Sponsoring

If this library helps you, particularly if you are a big company, consider sponsoring me. Helps a ton, thank you!

License

MIT