v0.9.0 is a feature-heavy release for the npmx.dev UI, with the compare page getting the biggest upgrade. It also adds a few quality-of-life improvements around package commands, badges, localization, and code display.
What's new
-
The compare page now uses a scatter plot instead of the older quadrant chart. You can choose any two facets for the X and Y axes, including using the same facet on both axes for diagonal sorting, and the chart keeps the usual actions like export, alt copy, and annotation tools (#2472).
-
The compare page also adds more package metadata to compare: GitHub stars, open issues, and package created date. GitHub data is fetched only for packages whose repository points at GitHub, while created date comes from existing package metadata (#2479).
-
Package install commands now support Vite+ with
vpcommands, and the selected package manager can also be prefilled from a query parameter. That makes it easier to share links that open with the right install command already selected (#2451, #2520). -
The package command palette now includes a
socket.devlink, so external package inspection links are available there as well as in the page itself (#2481). -
Badge support now includes a
likesvariant backed by the package likes API. This gives you an official way to embed like counts without calling the social likes endpoint directly (#2478). -
A new setting lets users turn off code ligatures in code blocks. The setting is applied through a root data attribute so the global styles can switch rendering accordingly (#2476).
-
Localization coverage expanded with new Dutch (
nl-NL) support and broader Chinese translations, alongside many smaller translation completeness updates across other locales (#2118, #2485).
Fixes
-
Fixed compare page OG images on Vercel so query parameters are passed through and package comparison images no longer render the empty state in production (#2432).
-
Fixed
package:initso web auth works for claim-package flows, which unblocks users using passkeys-only 2FA on npm accounts (#2415). -
Fixed the package code sidebar so expanding one directory no longer re-expands a sibling directory the user had collapsed (#2393).
-
Fixed replacement suggestions on the compare page so transient fetch failures do not get cached as permanent “no replacement” results for the rest of the session (#2469).
-
Fixed README heading rendering for packages that already include their own header anchors, avoiding hydration errors and broken heading links (#2486).
-
Fixed command palette and other inputs to better ignore password managers, reducing unwanted autofill UI on pages that do not collect credentials (#2466).
-
Fixed the compare page’s “copy as markdown” action so it only appears when package data is fully loaded, instead of allowing partial tables to be copied (#2506).
-
Fixed several scatter chart usability issues, including focused axis highlighting, clearer legend placement, and overlapping scale labels on first load (#2484, #2493, #2512).
-
Fixed Gravatar avatar requests to encode usernames safely when building the API route path (#2488).
-
Fixed user profile package filtering to use the
owners.namefacet (#2513). -
Fixed README rendering rules to define allowed styles more explicitly (#2522).
Other notable changes
-
README fallback probing on jsDelivr now runs in small parallel batches and prioritizes the registry’s declared README filename, which reduces long-tail latency when packages use missing or unusual README names (#2384).
-
API docs rendering now does more work concurrently while keeping output order stable, including symbol rendering, markdown rendering, and syntax highlighting (#2382).
-
Various Storybook page stories were added for Brand, Recharging, and PDS pages to support mock pages, accessibility checks, and visual regression coverage (#2468, #2496, #2514).
Contributors
@serhalp, @alexdln, @43081j, @cylewaitforit, @ZHYxulei, @jonchurch, @graphieros, @t128n, @Kiwow, @WilcoSp, @ihardlight, @romansp, @WishMelz, @trivikr, @tomaioo, @ghostdevv, @C1ANCYSz, @duowb, @DamengRandom, @ehs5, @bonsak, @Adebesin-Cell, @juliendargelos, @fengmk2, @dragomano, @btea, @VentyCZ
Only a subset of merged work was shown here because the input included the top 50 merged PRs by review and comment activity.