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

@echelon-foundry/research-publisher

v0.1.1

Published

Publish structured research documents as a searchable static website.

Readme

Research Publisher

Reusable Markdown-to-static-web publishing package for research repositories.

What This Repo Is

This repository is the installable publisher package. The repository root is the package root, which makes it consumable directly from Git.

Consumer repositories should keep:

  • research-publisher.config.mjs
  • research/
  • input-documents/
  • generated dist/

This repo also contains a demo research corpus and GitHub Pages site at the root so the package can be exercised locally before release.

Responsibilities

  • Discover Markdown content through config globs
  • Normalize and validate research metadata
  • Generate a public catalog and relationship graph
  • Generate project guides from explicit entry-point metadata
  • Render a static Astro site
  • Generate a Pagefind full-text search index

Commands

  • research-publisher inventory --config ./research-publisher.config.mjs
  • research-publisher validate --config ./research-publisher.config.mjs
  • research-publisher build --config ./research-publisher.config.mjs
  • research-publisher build --config ./fixtures/alt-research/research-publisher.config.mjs
  • research-publisher install-prompt --config ./research-publisher.config.mjs
  • npm run smoke:consumer

Local Testing

  • npm test runs unit and integration tests
  • npm run research:build builds the demo site in this repo
  • npm run smoke:consumer packs the package and installs it into a temporary consumer project to verify package-style usage

Install From npm

In a consuming repository:

npm install -D @echelon-foundry/research-publisher

Then initialize the repository:

npx research-publisher init

The initializer is safe to rerun. It:

  • creates research-publisher.config.mjs only when missing
  • installs prompts/research-publisher-mark-documents.md only when missing
  • adds missing research scripts while preserving existing scripts
  • uses broad Markdown discovery with generated, vendored, prompt, and archive exclusions

It does not use postinstall because dependency installation should not silently rewrite a consumer repository. Review the generated site URL and base path before deploying.

Host colors

Research Publisher supplies a complete default palette. A host repository can override semantic color roles in research-publisher.config.mjs without copying or changing package CSS:

branding: {
  cssVariables: {
    "--color-accent": "#2457a6",
    "--color-accent-strong": "#173b73",
    "--color-accent-soft": "#dce8fa"
  }
}

Unspecified roles retain their package defaults, preserving layout and visual unity across sites. See Theming Research Publisher for the supported color roles and accessibility guidance.

Then add scripts like:

{
  "scripts": {
    "research:build": "research-publisher build --config ./research-publisher.config.mjs",
    "research:validate": "research-publisher validate --config ./research-publisher.config.mjs",
    "research:inventory": "research-publisher inventory --config ./research-publisher.config.mjs"
  }
}

The engine resolves Astro and Pagefind from the installed package, while content discovery, diagnostics, and generated search files stay in the consuming repository.

Organizing Different Kinds Of Reading

Research Publisher keeps document type, project ownership, reader purpose, audience, and front-page placement separate. This prevents free-form tags from becoming an unstable navigation system.

See Document Purpose And Project Guide Architecture. Install the reusable corpus-classification prompt in a consumer repository with:

npx research-publisher install-prompt --config ./research-publisher.config.mjs