PRIVATE NPM REGISTRY GUIDES
From first package
to reliable delivery.
Create a registry and publish a package. Then connect your domain and give each recipient access to the correct packages.
START HERE
Publish. Install. Confirm the result.
Use a small JavaScript package and the shared registry. Then install the package with a read-only key.
Publish your first package →Get started
Publish your first private package
Reserve a scope, publish a small JavaScript package and install the package in another project. No custom domain or build tools required.
Read guide →GUIDE ↗What is a private npm registry?
A private npm registry stores your packages and checks a credential on each request. This guide explains the requests that npm sends and the checks that the registry does.
Read guide →GUIDE ↗Create a private npm registry
Reserve a scope on the shared registry or create a private registry on your domain. Then create a publisher key and a download key, and publish the first version.
Read guide →GUIDE ↗Publish a private npm package
Publish a scoped package with npm publish and a limited publisher key. Then confirm the version and give read-only access with a download key.
Read guide →Authentication and troubleshooting
Configure .npmrc for a private npm registry
Add a scope route and a credential line to .npmrc, and keep the key in the environment. This guide gives the configuration for npm, pnpm, Yarn, GitHub Actions, CircleCI and Vercel.
Read guide →GUIDE ↗Fix npm E401: private registry authentication
npm E401 means that the registry did not accept the credential of a request. Examine the registry host, the token variable and the key in that sequence.
Read guide →CI and security
Review package security and connect deployment inventory
Watch an immutable npm release, review bounded static and advisory evidence, and connect authenticated deployment observations.
Read guide →GUIDE ↗Self-hosted npm registry: what to plan for
A self-hosted npm registry gives you control, and your team operates each part of it. Plan storage, TLS, proxies, credentials, backups and upgrades before you start.
Read guide →GUIDE ↗Verify a custom npm registry domain
Connect a hostname that you own to a private registry. A TXT record proves ownership, a CNAME record sends traffic to the edge, and the edge gets the certificate.
Read guide →GUIDE ↗npm trusted publishing with OIDC
Publish private npm packages from GitHub Actions or GitLab CI with no stored publisher key. The CI job exchanges its OIDC token for a publisher key that expires after 15 minutes.
Read guide →GUIDE ↗Cache public npm packages safely
Serve approved public npm packages from your registry URL. Hosted names and claimed scopes never resolve from the public registry.
Read guide →Customer delivery
See private package downloads
Find the download numbers of each package, recipient and download key, and learn what each counter counts. Use the numbers to report recipient adoption.
Read guide →GUIDE ↗Configure private registry webhooks
Send signed registry change events to your HTTPS server. Verify each signature and process each event one time.
Read guide →GUIDE ↗Automate npm download keys after a sale
After a verified payment, your server creates the recipient, issues a download key for the purchased packages and sends the install instructions.
Read guide →GUIDE ↗Recipient npm download portal
Invite one person at a recipient to manage their own download keys. A delegation key that you choose sets the packages and the expiry date of each key.
Read guide →More package formats
Publish and install private Python packages
Publish wheels and source distributions to a private Python index with twine. Install them with pip, uv or poetry and a read-only download key.
Read guide →GUIDE ↗Deliver private files and release artifacts
Upload release files to versioned paths with curl or the dashboard. Recipients download them with a download key or a short-lived link.
Read guide →Browse the management API reference →
Need a quick check? Open the free registry developer tools →