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

mdzilla

v0.2.1

Published

<p align="center"> <img src=".assets/logo.svg" alt="mdzilla" width="200" height="200"> </p>

Downloads

2,796

Readme

Browse docs from local directories, GitHub repos, and remote websites — all from your terminal.

Built with md4x, giget and speed-highlight, nitro, h3, srvx and vite.

Supports any website with /llms.txt or markdown content negotiation.

Works best with Docus/Undocs docs sources.

Quick Start

npx mdzilla <source>                     # Open docs in browser
npx mdzilla <source> <path>              # Render a specific page
npx mdzilla <source> <query>             # Search docs
npx mdzilla <file.md>                    # Render a single markdown file
npx mdzilla <source> --export <outdir>   # Export docs to flat .md files

Agent Skill

Install the mdzilla skill for AI agents using:

npx skills install pi0/mdzilla

Features

Multiple Sources

| Source | Syntax | Description | | :-------------- | :--------------------------- | :-------------------------------- | | Local | mdzilla ./docs | Scan a local docs directory | | Single file | mdzilla README.md | Render a single markdown file | | GitHub | mdzilla gh:unjs/h3 | Download and browse a GitHub repo | | npm | mdzilla npm:h3 | Browse an npm package's docs | | HTTP | mdzilla https://h3.unjs.io | Browse remote docs via HTTP |

Export

Flatten any docs source into plain .md files:

npx mdzilla <source> --export <outdir>

Smart Resolve

The second positional argument is smart-resolved: if it matches a navigation path, the page is rendered; otherwise it's treated as a search query.

npx mdzilla gh:unjs/h3 /guide/basics    # Render a specific page
npx mdzilla gh:unjs/h3 router           # Search for 'router'

Web Server

Running mdzilla <source> without a query opens docs in the browser with a local web server:

npx mdzilla ./docs                   # Browse local docs in browser
npx mdzilla gh:unjs/h3               # Browse GitHub repo docs

The web UI provides a sidebar navigation, full-text search, syntax-highlighted pages, and dark/light theme support.

For local sources (FSSource), the server watches for file changes and live-reloads both the navigation and the current page via Server-Sent Events — no manual refresh needed.

Plain Mode

Use --plain for plain text output. Auto-enabled when piping output or when called by AI agents.

npx mdzilla README.md --plain          # Pretty-print a markdown file
npx mdzilla README.md | head           # Auto-plain when piped (no TTY)
npx mdzilla gh:unjs/h3 --plain         # List all pages in plain text

Programmatic API

Export Docs

One-call export — resolves source, loads, and writes flat .md files:

import { exportSource } from "mdzilla";

await exportSource("./docs", "./dist/docs", {
  title: "My Docs",
  filter: (e) => !e.entry.path.startsWith("/blog"),
});

// Works with any source
await exportSource("gh:unjs/h3", "./dist/h3-docs");
await exportSource("npm:h3", "./dist/h3-docs", { plainText: true });
await exportSource("https://h3.unjs.io", "./dist/h3-docs");

Collection

Collection is the main class for working with documentation programmatically — browse the nav tree, read page content, search, and filter entries.

import { Collection, resolveSource } from "mdzilla";

const docs = new Collection(resolveSource("./docs"));
await docs.load();

docs.tree; // NavEntry[] — nested navigation tree
docs.flat; // FlatEntry[] — flattened list with depth info
docs.pages; // FlatEntry[] — only navigable pages (no directory stubs)

// Read page content
const page = docs.findByPath("/guide/installation");
const content = await docs.getContent(page);

// Resolve a page flexibly (exact match, prefix stripping, direct fetch)
const { entry, raw } = await docs.resolvePage("/docs/guide/installation");

// Fuzzy search
const results = docs.filter("instal"); // sorted by match score

// Substring match (returns indices into docs.flat)
const indices = docs.matchIndices("getting started");

// Watch for changes (FSSource only) with live reload
docs.watch();
const unsub = docs.onChange((path) => {
  console.log(`Changed: ${path}`);
});
// Later: unsub() and docs.unwatch()

resolveSource auto-detects the source type from the input string (gh:, npm:, https://, or local path). You can also use specific source classes directly (FSSource, GitSource, NpmSource, HTTPSource).

Development

  • Clone this repository
  • Install latest LTS version of Node.js
  • Enable Corepack using corepack enable
  • Install dependencies using pnpm install
  • Run interactive tests using pnpm dev

License

Published under the MIT license.