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

gitslip

v0.1.0

Published

Find files that slipped past .gitignore but are still tracked by git — and get the exact git rm --cached fix. Zero dependencies.

Downloads

39

Readme

gitslip

Find files that slipped past .gitignore but are still tracked by git. You add *.log or .env to .gitignore, but the file that was committed before the rule existed keeps getting tracked — git only ignores files it isn't already following. gitslip finds those leftovers and hands you the exact fix.

npx gitslip
#  2 tracked files are ignored by your rules but still committed:
#
#    config/secrets.env
#        ↳ .gitignore:7  *.env
#    logs/app.log
#        ↳ .gitignore:2  *.log
#
#  Fix — stop tracking them (keeps your local copy):
#    git rm --cached -- config/secrets.env
#    git rm --cached -- logs/app.log

Zero dependencies, nothing to install, no config. Also available for Python: pipx run gitslip.

Why

Adding a path to .gitignore does nothing to a file git already tracks. That's by design — but it means secrets, build artifacts and logs routinely sit in repos long after someone "gitignored" them. The usual git rm --cached fix-up is only run once someone notices, and a raw grep over .gitignore can't tell a still-tracked leftover from a file that's correctly excluded.

gitslip answers one question precisely: which tracked files do my own ignore rules say should be excluded? It then prints the git rm --cached commands to untrack them (your working copy stays put).

How it works

It defers all the matching to git, so negation rules (!keep.log), directory rules (build/), nested .gitignore files, .git/info/exclude and your global core.excludesFile are all handled correctly:

  1. Detectgit ls-files -i -c --exclude-standard lists files that are both tracked and ignored. That's the authoritative slipped set.
  2. Attribute — for each one, gitslip names the rule that catches it (.gitignore:7 *.env) by asking git check-ignore against an empty index (tracked files are otherwise reported as "not ignored").

No file matching logic of our own = no subtle disagreements with git.

Usage

gitslip                 # audit the whole repo (exit 1 if anything slipped)
gitslip src/ config/    # limit the audit to pathspecs
gitslip --json          # machine-readable, for CI
gitslip --apply         # run the git rm --cached for you (keeps files on disk)

--apply only un-tracks; it never deletes your files. Review the diff and commit when you're happy:

gitslip --apply
git commit -m "stop tracking ignored files"

In CI

- run: npx gitslip        # fails the job if a tracked file is gitignored

Exit codes: 0 clean · 1 slipped files found · 2 error (not a repo, git missing).

Install

npm i -g gitslip     # or just `npx gitslip`
pip install gitslip  # Python build, identical behaviour

Requires git on PATH and Node ≥ 18 (or Python ≥ 3.8).

License

MIT