finds.dev← search

// the find

Zizzamia/perfume.js

★ 3,202 · TypeScript · MIT · updated Oct 2025

Web performance library for measuring all performance vitals metrics

A tiny, dependency-free wrapper around Web Vitals plus a bunch of extra field-data collection (Navigation Timing, Resource Timing, Element Timing, low-end device detection, custom 'step' tracking for user journeys). Aimed at frontend teams doing real user monitoring who want more context around a vitals score than the raw web-vitals library gives them, and who are willing to wire up their own analytics backend.

Zero runtime dependencies and a genuinely small footprint (~5KB gzip) for what it covers. The device-enrichment angle (deviceMemory, hardwareConcurrency, isLowEndDevice/isLowEndExperience) is a real gap in most vitals tooling and useful for segmenting RUM data by device class rather than just geography. The analyticsTracker callback is backend-agnostic, so it drops into GA, Datadog, or a custom sink without any adapter code. The custom step/journey tracking (markStep, trackUJNavigation) is a genuinely different feature from web-vitals — measuring app-defined transitions, not just page-load metrics.

The README documents deprecated metrics (FP, FID) alongside current ones (INP) without a clear migration note, so a new user can easily wire up tracking for a metric Chrome no longer really surfaces. Single maintainer (bus-factor risk) and CI badge still points at Travis, which stopped being free for open source years ago — a sign the tooling around the project hasn't been refreshed even if the code has. Since it's a superset of web-vitals, you're taking on an extra abstraction layer and its release cadence on top of Google's library for features (steps, element timing) that a chunk of users won't ever touch. No mention of bundle-splitting the extra features, so importing initPerfume likely pulls in the step-tracking and resource-timing code even if you only want the five core vitals.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →