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

@profullstack/sh1pt-policy

v0.1.11

Published

Store-policy linter for sh1pt — catches rejections before submission.

Readme

@profullstack/sh1pt-policy

Store-policy linter for sh1pt — catches rejections before submission.

🌐 Homepage: https://sh1pt.com 📦 Source: https://github.com/profullstack/sh1pt

npm license

Every store, registry, and CDN has its own submission rules. App Store rejects titles containing "free" or "beta". Google Play flags apps that ask for non-essential permissions. npm banishes packages with duplicate titles or spam keywords. Chrome Web Store kills submissions with placeholder bundle IDs.

sh1pt runs this linter before every ship so the rejection happens on your laptop, not after a 3-day review queue.

Install

pnpm add @profullstack/sh1pt-policy

Usage

You usually won't import this directly — @profullstack/sh1pt runs lint() automatically in sh1pt promote ship and sh1pt ship lint. For programmatic use:

import { lint } from '@profullstack/sh1pt-policy';
import type { Manifest } from '@profullstack/sh1pt-core';

const result = await lint(manifest, { strict: true });
if (result.errors.length > 0) {
  for (const e of result.errors) {
    console.error(`${e.rule}: ${e.message} (${e.target ?? 'all targets'})`);
  }
  process.exit(1);
}

What it catches

  • Banned keywords — "free", "best", "#1", etc. (App Store), emoji-overload titles (HN), all-caps (most stores)
  • Identifier collisions — duplicate bundle ids, npm names already taken, Chrome extension IDs
  • Spammy submission rate — more than N submissions/day to the same store triggers a soft rate-limit you should respect, or a permanent ban if you don't
  • Invalid bundle IDs / reverse-DNS formatcom.example.app is fine, myapp is not
  • Missing required fields — privacy policy URL, support email, screenshots per platform
  • Description/title length limits per platform
  • Prohibited targeting (Reddit Ads has a long list, TikTok has a different one)

The policy linter ships with rule packs for every adapter sh1pt supports — contributors add rules as they learn them from real store rejections across the customer base.

Links

License

MIT