Skip to content

feat: route pkg@version from deps, direct nav, and search for any valid specifier#1723

Draft
serhalp wants to merge 4 commits intomainfrom
serhalp/fix-version-sorting
Draft

feat: route pkg@version from deps, direct nav, and search for any valid specifier#1723
serhalp wants to merge 4 commits intomainfrom
serhalp/fix-version-sorting

Conversation

@serhalp
Copy link
Member

@serhalp serhalp commented Feb 27, 2026

🔗 Linked issue

Closes #1120
Closes #1416

🧭 Context

We have two seemingly separate issues:

  • Dependency links with version ranges (e.g. ^18.0.0 || ^19.0.0, >15 <=16.0.2) currently navigate to a non-existent version page and result in a 404.
  • Searching for nuxt@4.0.1 or nuxt@>=4 or nuxt@>=4<6 (convenient if pasting from somewhere) does not result in a match. There's a proposed temporary solution in feat: strip version info from the search query #1626 to strip the version segment from the query.

📚 Description

  • Keep links to a single package version as is, but for all other version specifiers, link to the package page with the "Filter by semver" input pre-populated! (In the future if/when we have a dedicated versions page we could link to that instead.)
  • Rather than implementing this logic at the "where to link to" layer, I implemented this in the routing layer, i.e. https://npmx.dev/package/nuxt/v/:version will route to the specific versioned package page if version is a specific version string and route to the package page with ?semver=<version> otherwise.
  • ... which means we get a fix to Add possibility to search for specific version of a package #1416 almost for free! This PR makes it so that searching for nuxt@4.0.1 or nuxt@>=4 or nuxt@>=4<6 and pressing Enter now navigates directly to the package version page for a specific version or to the semver-filtered package page for a semver specifier, instead of returning no results. This just works for both exact versions and semver ranges, because of the above routing change.
npmx.smart.pkg@v.routing.mp4

…nstead of 404

Dependency links with version ranges (e.g. "^18.0.0 || ^19.0.0", ">15 <=16.0.2") previously
navigated to a non-existent version page and 404'd.

Now `packageRoute()` distinguishes exact versions from ranges: exact versions link to the version
page, while ranges link to the package page with `?semver=<range>#versions`, pre-populating the
existing "Filter by semver" input.

Closes #1120
Searching for `esbuild@0.25.12` or `@angular/core@^18` and pressing Enter now navigates directly to
the package version page (or semver filter for ranges) instead of returning no results.

Since in the previous commit I added support for linking to the package page with the a pre-filled
semver version specifier in the query string to populate the version filter, this supports both
exact versions and semver ranges in the search input.

Closes #1416
@vercel
Copy link

vercel bot commented Feb 27, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
npmx.dev Ready Ready Preview, Comment Feb 27, 2026 10:23pm
2 Skipped Deployments
Project Deployment Actions Updated (UTC)
docs.npmx.dev Ignored Ignored Feb 27, 2026 10:23pm
npmx-lunaria Ignored Ignored Feb 27, 2026 10:23pm

Request Review

@serhalp serhalp changed the title feat: intelligently route pkg@version from deps, direct nav, and search for any valid specifier feat: route pkg@version from deps, direct nav, and search for any valid specifier Feb 27, 2026
@codecov
Copy link

codecov bot commented Feb 27, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ All tests successful. No failed tests found.

📢 Thoughts on this report? Let us know!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add possibility to search for specific version of a package Dependency links with version union ("1.0 || 2.0") resolves to 404 page

1 participant