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

localhosting

v0.1.0

Published

Undo button for localhost. Automatic snapshots when your local app is actually serving a good state.

Readme

localhosting:3000

localhosting:3000 rainbow hero banner

Undo button for localhost. Automatic snapshots when your local app is actually serving a good state. One-click restore of the last good local tree. Nothing leaves this machine.

Not git. Not Vercel rollback. Not a port killer.

You do not remember to snapshot. The watcher does.

MIT, npx, local folder .localhosting/.

Install

Requires Node.js 20.10 or later.

npx localhosting watch

Or from this package:

npm install
npm run build
node dist/cli.js --help

Leave localhosting watch running while your app is on localhost (usually :3000). The dashboard is on :3001 because :3000 is already taken by your app.

npx localhosting list
npx localhosting restore <id>

Restore writes files; restart your dev server. We do not kill processes.

Seatbelt

Stops common destructive commands that pass through localhosting seatbelt run. Defaults on. Fail-closed for beginners. Nothing leaves this machine. A seatbelt, not a vault. Use Rewind to recover.

eval "$(localhosting seatbelt wrap)"
localhosting seatbelt run -- rm -rf dist
localhosting seatbelt status

Seatbelt is a seatbelt, not a vault. Best-effort guard against common mistakes on localhost. It cannot stop every destructive command, kernel or hardware failure, or malicious code you chose to run. Commands that do not pass through seatbelt run are unchecked. Keep real backups. Use Rewind snapshots for recovery.

How to verify no network

v1 is loopback only. There is no telemetry, no accounts, and no postinstall script.

  1. Confirm there is no postinstall: npm pkg get scripts.postinstall prints {}.
  2. The process may listen on 127.0.0.1:3001 through 3010 and may GET the configured loopback probe URL (default http://127.0.0.1:3000/). That is the entire network surface.
  3. Automated tests spy on fetch / http.request during snapshot and expect zero outbound connections.

Commands

init, watch, serve, snapshot, list, restore, pin, unpin, prune, status, seatbelt

Limitations

localhosting:3000 does not promise:

  1. Durability beyond this disk. The store is files in .localhosting/. If the disk dies, the snapshots die.
  2. A snapshot of files it ignored (by default: node_modules, .git, build artifacts, most gitignored paths).
  3. A snapshot during a stretch where the detector never saw a good state (overlay stayed up, probe URL down, settle never happened).
  4. Preservation of in-memory dev-server state, HMR runtime, cookies, or browser tabs.
  5. Cross-machine restore, encryption-at-rest beyond OS permissions, or multi-user locking beyond a pid lockfile.
  6. That the latest snapshot is the user's favorite state. It is the latest detector-good state. Pin exists for favorites.
  7. Database undo (Postgres, SQLite files that were gitignored, Redis).
  8. That a restore will succeed on every open file while another process holds a Windows lock. Partial restore is a specified outcome (exit 4).

git is not involved. We do not touch the index. Restored files may appear as git diffs. That is correct.

Do not give an agent localhosting restore --yes in a skill file. Dashboard restore always confirms.

Never pass --yes to an agent. --yes skips the uninstall confirm and is for Diet's own test suite.

Not a port dashboard

We do not scan your ports. We do not kill processes. Discovering a free bind port for our own dashboard (3001 then 3002-3010) is bind-and-retry, not a scanner UI.

FAQ

Why not just use git? You would. You did not. The agent did not either. This watches the running app, not your conscience.

Is this a production rollback tool? No. Production already has Netlify and Vercel. This is for the three hours before you deploy, when :3000 is on fire and there is no commit.

Will this replace Time Machine / uhoh / local history? No. Those snapshot writes. We snapshot good running states. Different trigger, smaller history, on purpose.

Do you upload my code? No. v1 has no accounts and no telemetry. Snapshots live in .localhosting/ on this disk. If the disk dies, they die.

Can I restore without restarting the dev server? We write files. We do not kill processes. Restart the server. If a file was locked, restore reports partial and you retry.

Where is the dashboard? :3001 by default, never :3000. :3000 is the patient, not the doctor.

License

MIT