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

georank

v0.1.1

Published

Generic weighted-criteria ranking engine — score and rank places (or anything) by normalized, weighted factors. Zero dependencies.

Readme

georank

Generic weighted-criteria ranking engine. Score and rank places — or anything — by normalized, weighted factors. Zero dependencies, available for both JavaScript and Python.

This is the open-source core of the ranking method behind GeoRank.place, a map-based tool for comparing cities and regions on the factors that matter for relocation (sunshine, cost, climate, and more).

Method

Each criterion is min-max normalized to 0–100 across the set you pass in, then weighted and summed into a single 0–100 score:

  1. For every criterion, the lowest raw value maps to 0 and the highest to 100.
  2. Set invert: true for criteria where lower is better (cost, tax, rainfall).
  3. Missing values map to a neutral 50 rather than penalizing an item to zero.
  4. Weights need not sum to 1 — they are normalized internally.

Install

npm install georank      # JavaScript / TypeScript
pip install georank      # Python

Usage

JavaScript / TypeScript

import { rank } from "georank";

const cities = [
  { name: "Lisbon",   sunshine: 2799, cost: 100 },
  { name: "Berlin",   sunshine: 1626, cost: 85  },
  { name: "Valencia", sunshine: 2696, cost: 70  },
];

const ranked = rank(cities, [
  { key: "sunshine", weight: 0.6 },
  { key: "cost",     weight: 0.4, invert: true }, // cheaper scores higher
]);

ranked.forEach((r) => console.log(r.item.name, r.score, r.signals));

Python

from georank import rank

cities = [
    {"name": "Lisbon",   "sunshine": 2799, "cost": 100},
    {"name": "Berlin",   "sunshine": 1626, "cost": 85},
    {"name": "Valencia", "sunshine": 2696, "cost": 70},
]

ranked = rank(cities, [
    {"key": "sunshine", "weight": 0.6},
    {"key": "cost",     "weight": 0.4, "invert": True},
])

for r in ranked:
    print(r["item"]["name"], r["score"], r["signals"])

API

rank(items, criteria)

Returns a new array sorted by score (descending). Each result is { item, score, signals }, where signals holds the per-criterion normalized 0–100 value.

criteria is a list of { key, weight, invert? }.

normalize(values, { invert })

Min-max normalize an array of numbers to 0–100. Missing / non-finite values become 50; if every value is equal, every output is 50.

Live tool

See the method applied to real climate and cost data at georank.place — including the interactive city rankings and side-by-side compare.

License

MIT © GeoRank.place