Measured entry

tripled-native-counter-up

statsminimal-flatmotion on file

A client-side React counter that animates from zero to a formatted target and supports prefixes, suffixes, decimals, labels, and reduced-motion preferences. It ships as a shadcn registry component, uses Framer Motion for both the count and entrance effect, and expects a Tailwind-aware cn utility backed by clsx and tailwind-merge.

Specimen
Motion capture of the mounted demo, recorded by the harness. No audio track.
Harness screenshot of tripled-native-counter-up at 375 pixels wide
Harness screenshot at 375 pixels wide. No horizontal overflow recorded.
Harness screenshot of tripled-native-counter-up at 768 pixels wide
Harness screenshot at 768 pixels wide. No horizontal overflow recorded.
Harness screenshot of tripled-native-counter-up at 1440 pixels wide
Harness screenshot at 1440 pixels wide. No horizontal overflow recorded.

Measured

Every value below was written by the harness on the run that produced the frames above. None of it is derived from the prose.

Harness measurements recorded for tripled-native-counter-up
BuildOK
MountOK
Console errors0
Uncaught page errors0
Horizontal overflowclean at 375, 768, 1440
Axe critical0
Axe serious1
Axe moderate0
Axe minor0
Gzip marginal72.2 KB (137.7 KB build, 65.5 KB baseline)
Bare modeOK
Provider requiredNO
Demo usedwritten from the component source API

Verdict

A focused counter that builds and mounts cleanly, with useful formatting and no provider requirement. It is easiest to justify in an app that already carries Framer Motion. Fix the demo label contrast, and review the remaining entrance movement for strict reduced-motion policies.

Use it if

  • You need an on-mount count-up for dashboard totals or compact stat cards.
  • Your app already uses Framer Motion, so the extra dependency cost is acceptable.
  • You want locale-aware formatting plus configurable prefixes, suffixes, and decimal precision.
  • You need a simple polite live-region label and basic reduced-motion handling.

Skip it if

  • You need the animation to begin on viewport entry, replay on demand, or expose progress callbacks.
  • You are avoiding Framer Motion for a small decorative counter.
  • You require reduced motion to suppress every movement, since the entrance transition still runs.
  • You need a demo that passes contrast checks without adjusting its muted label colors.

Install

Installation record for tripled-native-counter-up
Declared dependenciesframer-motion, react, clsx, tailwind-merge
Missing on installnone
Bare installbuilds and mounts without the shadcn-style helpers
Providerno provider required in the harness

In a non-shadcn project, copy the client component, install React and Framer Motion, and provide a cn helper using clsx with tailwind-merge. Configure Tailwind for the utility classes, including tabular numerals, bold text, and screen-reader-only content, or replace those classes with local styles.

Source and credit

This page is a review, not a copy. The component source lives with its author and this site does not republish it. Read the license before you use anything.

Alternatives

Other published entries for the stats pattern, ordered by what they measured: mounts first, then clean axe scans, then bare-mode passes, then the smaller bundle.