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

folio-serve

v1.1.0

Published

A mobile-friendly file browser with Markdown rendering

Readme

Folio: a mobile-friendly file browser with Markdown and Code rendering.

Serve any directory as a browsable website. Markdown files are rendered with LaTeX math and syntax-highlighted code. Code files get syntax highlighting and a navigable outline. PDFs and images display natively. Everything else shows as plain text.

Built for one workflow: run it on your laptop, read your notes on your phone. Pair it with Tailscale to securely access your files from anywhere without exposing your laptop to the internet.

Install

npm install -g folio-serve

Or clone and link locally:

git clone <repo-url>
cd folio
npm install
npm link

Usage

folio /path/to/your/notes

Then open http://localhost:3000 on any device on your network.

| Option | Default | Description | |--------|---------|-------------| | [directory] | . | Directory to serve | | --port PORT | 3000 | Port number | | --dev | off | Enable livereload for development |

Features

Directory listing — folders first, then files with sizes. Breadcrumb navigation at the top.

Markdown — rendered with:

  • LaTeX math ($...$ and $$...$$), rendered server-side with KaTeX
  • Syntax-highlighted code blocks via shiki (same grammar engine as VS Code)
  • Floating outline button for navigating long documents
  • Tables, links, images, and all standard Markdown features

Code files (.py, .js, .rs, .c, .cc, .ts, .sh, .json, .yaml, .sql, .html, .css) — syntax-highlighted, with a floating outline panel showing classes and functions.

Everything else — PDFs, images, and media display in the browser. Text files show as plain text. Files over 2 MB show a download button instead of rendering.

How it works

The server is a single Node.js process using the built-in http module. No framework. It leverages three tools from the VS Code ecosystem:

  • markdown-it — the same Markdown engine behind VS Code's preview, with plugins for KaTeX math and heading anchors
  • shiki — VS Code's TextMate grammars for syntax highlighting, producing inline styles server-side
  • Tree-sitter — structural parsing for code outlines (class and function definitions)

Pages are server-rendered HTML with Tailwind CSS for styling. No client-side JavaScript is needed to display content — your phone receives a static HTML page. The only client JS is the outline toggle button and the optional livereload script in --dev mode.

Development

For live editing of styles and templates:

npm run dev -- /path/to/notes --port 3000

This uses node --watch (Node 18+) to auto-restart the server on source file changes, and --dev injects a livereload script that auto-refreshes the browser after each restart.

Security

Designed for private networks (e.g. Tailscale). No authentication or HTTPS.

Path traversal and symlink escape attacks are prevented — the server verifies that every resolved path stays within the served directory.

License

MIT