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

numorph

v0.1.1

Published

Animated number text for React with rolling digits and formatted parts.

Downloads

313

Readme

Numorph

Dependency-free animated number text for React counters, prices, stats, OTP slots, and compact metrics.

Installation

npm install numorph

react is the only peer dependency.

Usage

import Numorph from 'numorph';
import 'numorph/style.css';

<Numorph value={123456} />;

Use Intl.NumberFormat options for currency, compact notation, percentages, signs, decimals, and locale-aware separators:

<Numorph
  value={79187}
  locales="en-US"
  format={{ style: 'currency', currency: 'USD' }}
/>;

<Numorph
  value={3300000}
  format={{ notation: 'compact', maximumFractionDigits: 1 }}
  suffix=" views"
/>;

Animated Parts

Numorph animates formatted number parts as first-class pieces. Digits roll, separators move, and symbols like $, ,, ., %, +, -, compact labels, prefixes, and suffixes can enter, exit, or crossfade with the number.

<Numorph
  value={temperature}
  format={{ signDisplay: 'exceptZero', maximumFractionDigits: 1 }}
  suffix=" deg"
/>;

Spring Animations

Use presets for quick tuning:

<Numorph value={score} preset="soft" />;
<Numorph value={score} preset="snappy" />;
<Numorph value={score} preset="springy" />;

Or pass timing options directly. Springs are generated as CSS timing functions, so there is no runtime animation dependency.

<Numorph
  value={score}
  timing={{
    duration: 420,
    spring: { mass: 1.2, stiffness: 150, damping: 19 },
  }}
/>;

Fixed Slots

Use Numorph directly for OTP and code-input slots. Give each slot a stable width, disable layout correction, and pass animationKey when the visible state changes even if the displayed number is still 0.

const digit = code[index] ?? '';
const isFilled = digit.length > 0;
const displayDigit = isFilled ? Number(digit) : 0;

<Numorph
  value={displayDigit}
  preset="soft"
  trend={isFilled ? 'up' : 'down'}
  animationKey={`${isFilled ? 'filled' : 'empty'}:${displayDigit}`}
  layoutCorrection={false}
/>;

Vanilla Usage

import { NumorphController } from 'numorph/vanilla';
import 'numorph/vanilla.css';

const numorph = new NumorphController({
  element: document.querySelector('[data-numorph]')!,
  value: 1284,
});

numorph.update(1300);

Documentation

See the full docs draft for API details, timing options, examples, and notes for specific use cases.

Security

Please report security issues privately using the guidance in .github/SECURITY.md.

Contributing

Install dependencies:

npm install

Run the playground:

npm run dev

Run checks:

npm run check

Build the package:

npm run build

Other Projects

You might also like:

  • number-flow - Animated number component by Maxwell Barvian.
  • torph - Dependency-free animated text morphing.

License

MIT.