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

@smartput/distance

v0.1.2

Published

Great-circle distance between two places.

Downloads

10

Readme

@smartput/distance

The place kind's one operation: kyiv to warsaw is a length, measured along the great circle between the two.

import { PlaceDistance } from "@smartput/distance";

defineKind({ /* … */ ops: [new PlaceDistance(COUNTRIES).op] });

A class over a bare OpSignature because the fallback table is the part that varies: a build handed a different gazetteer measures from different capitals, and the op has to close over the one its kind registered. .op is what defineKind takes; between(l, r) is the same measurement asked of two Values directly, and metresBetween(a, b) is the arithmetic with no Value involved.

No data. @smartput/country names this package, so it cannot name that one back — which is also the honest shape of the dependency, since the op wants a position per unit and nothing else a country row carries.

What it refuses

A sphere of radius 6,371,008.8 m, not the WGS84 ellipsoid: the two disagree by under 0.5%, and each endpoint is a capital standing in for a whole country. That reading is recorded on the signature as a great-circle assumption, because driving distance is what a person often means and no free dataset carries it.

A postal code borrows its country's coordinates until a provider positions it, and measuring from that borrowed point answered "0 kilometres" for every pair of codes in one country — SW1A 1AA to EH1 1YZ, London to Edinburgh, measured zero. So it throws UnpositionedPlaceError instead, naming the provider path. A wrong answer delivered confidently is worse than an error that names the remedy.

Full documentation: Places and distances.