I find I'm often unsatisfied with the ordering and expressiveness of searches on https://www.npmjs.com/. I guess there should be a way to programmatically query the server using https://api.npmjs.org/ or http://registry.npmjs.org/. But how? Where is the documentation?
(Or are there node packages to faciliate that? I know SO isn't about tool or package recommendations, so perhaps I shouldn't be asking about this as well, but if there were some tool, I could likely read the API from that as well.)
https://skimdb.npmjs.com/registry/_all_docs
This is a current method to pull all the package names.
The URL search is
http://registry.npmjs.com/-/v1/search?text=<searchstring>&size=20
Recently found a really good npm query site https://npms.io. They also have quality point systems for each package based on various data.
They will also have a scoring system for each package using the collected information about the project. The final score is calculated based on four different aspects of Quality, Maintenance, Popularity, and Personalities.
API Doc: https://api-docs.npms.io
You can always use the NPM registry client: https://github.com/npm/npm-registry-client.
If you look through this you can get the endpoints for the API. e.g to get the dist-tags for a package then you can go to /-/package/packageName/dist-tags'
So to get the babel-core dist tags you would go to http://registry.npmjs.org/-/package/babel-core/dist-tags
If you can't find a package or are just hacking together a shell script the Registry API Docs in the registry's git repository include detailed information on Search API and search qualifiers.
If you're looking for the most popular insecure package in the public registry run:
The above uses the
is:insecure
search qualifier without any additional text criteria and grabssize=1
results wherepopularity=1.0
(the most popular).Check in the
docs
directory in the repo for a number of other useful things such as:You can use api-npm node module it directly queries the NPM registry and you can get all attributes of a module and download stat of any module of any time range https://www.npmjs.com/package/api-npm
Of course there is at least one tool designed to talk to that registry, and that is the
npm
command line tool itself. Its search for example starts by updating a local cached copy of the index, filtering that. In update-index one can read that the URL ending in/-/all
is apparently special. And indeed, appending that toregistry.npmjs.org
(deliberately not formatted as a link) will fetch a 125M file which might be too much for your browser. Luckily the cached version is stored available in~/.npm/registry.npmjs.org/-/all/.cache.json
. From there one can read a list of all nown packages. One could then continue to query each such package in more detail.The fact that
npm search
apparently uses no more elaborate scheme suggests that there is not much of a server-side api here.Searching the web for pages mentioning
api.npmjs.org
I found that the download counts can be retrieved from there. All other documents I found make use of that single facility.Looking for alternatives, I also stumbled upon npmsearch.com which offers some more versatile searching facilities and has a somewhat documented API.