npm package name checker and rules

A brand claims its name on npm as a package name, or as an organization scope such as @yourname. Our check looks up the package name. How our checks work

CostFree for public packages
Name lengthUp to 214 characters
CharactersLowercase, URL-safe
You needAn npm account
Holds the namePublishing the package
Checked 25 Oct 2026, 07:13 UTCSources [1, 4, 7]

What can an npm package name contain?

Lowercase letters, numbers, hyphens, periods and underscores, up to 214 characters including any scope. The name becomes part of a URL, so it can't hold characters that aren't URL-safe.

CharacterAllowed?Where
Lowercase a to zYesAnywhere
Capital lettersNoNot in new packages
Numbers 0 to 9YesAnywhere
Hyphen (-)YesAnywhere
Period (.) and underscore (_)YesNot first, unless the name has a scope
Spaces and ~ ) ( ' ! *No

A name also can't match a Node.js core module, such as http or stream, or a reserved name such as node_modules.[1, 5]

Why is my npm name blocked when nobody uses it?

It's too close to an existing package. npm removes punctuation from a new name and compares it with existing names: because react-native exists, nobody can publish reactnative, react_native or react.native. Our check looks up the exact name, so it can't spot this; if your name has punctuation, check it without the punctuation too.

The name guidelines also ask that unscoped names not be spelled like another package or confuse people about who made it. The fix is your scope: @yourname/package.[2, 9]

What is an npm scope?

A namespace that matches your user or organization name, written @yourname/package. Inside it you can use any package name, even one someone else has taken unscoped.

FactDetail
You get oneEvery user and organization is granted a scope matching its name
OrganizationsThe organization name is also its scope
Private by defaultScoped packages need a flag at publishing to be public

Sources [3, 7]

How do you claim your name on npm?

Create an organization to hold your scope, then publish a package to hold the plain name.

  1. Check the name above, with GitHub and the .com.
  2. Create an npm account and sign in.
  3. Click your profile picture, then Add an Organization. Enter the name and pick the free plan to hold @yourname.
  4. Publish a package with the plain name to hold it unscoped too.[7]

How much does npm cost?

Nothing for public packages. Private packages need a paid account.

PlanPriceIncludes
Free organization$0Unlimited public packages
Paid organization$7 per member a monthPrivate packages for members

Sources [7, 8]

What should you know before you claim an npm name?

Names are first come, first served, and npm can remove names held without real use.

FactWhat it means
First come, first servedPackage, user and organization names go to whoever claims them first
No squattingA package with no genuine function, or an organization with no packages in a reasonable time, counts as squatting
Paid organizationsNever treated as squatting
UnpublishingAllowed within 72 hours; after removing every version, you wait 24 hours to publish again
Version numbersOnce used, a version number can never be used again

Sources [4, 6]

What if someone already has your npm name?

Names aren't handed over on request. For a trademark claim, file a Trademark Policy Violation Report through GitHub's support form, since npm follows GitHub's policy. A username is very unlikely to change hands.[4]

Which platforms should you claim with npm?

GitHub, PyPI, X, the .com and the .dev.

Checks npm, GitHub, PyPI, X, the .com and the .dev in one search.

Sources (9)

  1. Primarynpm Docs: package.json
  2. Primarynpm Docs: Package name guidelines
  3. Primarynpm Docs: About scopes
  4. Primarynpm Docs: npm disputes policy
  5. Primarynpm on GitHub: validate-npm-package-name
  6. Primarynpm Docs: Unpublish policy
  7. Primarynpm Docs: Creating an organization
  8. Primarynpm Docs: Upgrading to a paid organization plan
  9. Primarynpm Blog: New package moniker rules