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

@haowjy/repo-viewer

v0.2.1

Published

Mobile-friendly read-only web file browser for repositories.

Downloads

158

Readme

Repo Viewer

Mobile-friendly read-only web file browser for repositories.

Features

  • Browse repository folders and files
  • Preview text files, images, and Markdown (with Mermaid diagrams)
  • Upload and manage images via a .clipboard panel
  • View image galleries in any folder
  • Tailscale Serve integration (tailnet-only by default)
  • Optional Basic Auth with password

Intentionally no text editing to keep remote access simple and lower risk.

Quick Start

Run in any repo with npx:

cd /path/to/your/repo
npx @haowjy/repo-viewer

Global Install

npm install -g @haowjy/repo-viewer

Then from any repo:

repo-viewer

By default it serves on 127.0.0.1:18080 with Tailscale Serve (tailnet-only).

Options

repo-viewer [options]

--repo-root <path>    Repository root to expose (default: cwd)
--port <port>         Listen port (default: 18080)
--config <path>       Config file path
--always-hidden <csv> Extra always-hidden path segments (comma-separated)
--show-hidden <csv>   Show hidden/gitignored folders (repo-relative, comma-separated)
--password [pwd]      Enable Basic Auth (optional inline password)
--no-serve            Skip Tailscale Serve (local-only)
--serve               Force Tailscale Serve
--funnel              Enable Tailscale Funnel (public internet, requires --password)
--install             Force dependency install before start
--skip-install        Skip install check

Examples

repo-viewer                                      # default: Tailscale Serve
repo-viewer --no-serve                           # local-only
repo-viewer --password mypass                    # auth, local-only
repo-viewer --password mypass --serve            # auth + Tailscale
repo-viewer --password mypass --funnel           # auth + public internet
repo-viewer --port 3000
repo-viewer --show-hidden .clipboard,.playwright-mcp
repo-viewer --always-hidden .env,.secrets

Environment Variables

| Variable | Default | Description | |---|---|---| | REMOTE_WS_PORT | 18080 | Listen port | | REMOTE_WS_PASSWORD | | Enables Basic Auth when set | | REMOTE_WS_ALWAYS_HIDDEN | | Extra hidden path segments (comma-separated) | | REMOTE_WS_SHOW_HIDDEN | .clipboard | Hidden/gitignored folders to expose (comma-separated) | | REMOTE_WS_CONFIG_FILE | | Config file path override | | REMOTE_WS_MAX_PREVIEW_BYTES | 1048576 | Max file preview size | | REMOTE_WS_MAX_UPLOAD_BYTES | 26214400 | Max upload size |

Config File

Config file format (default: .repo-viewer.conf in repo root):

REMOTE_WS_PASSWORD=your-password

Config file precedence:

  1. --config <path>
  2. REMOTE_WS_CONFIG_FILE env var
  3. <repo-root>/.repo-viewer.conf
  4. ~/.config/repo-viewer/config

Auth

When a password is set, Basic Auth is required for all routes. Mutating routes (POST/DELETE) also require same-origin headers.

When password is set without an explicit serve mode, the launcher defaults to local-only (--no-serve). Use --serve to override. --funnel requires --password.

Tailscale

Tailscale Serve is enabled by default and stays private to your tailnet. If Tailscale is missing or disconnected, the launcher exits with guidance.

Development

pnpm dev
pnpm dev -- --no-serve
pnpm dev -- --password mypass