Private npm + PyPI feeds

Every package. One feed. Your rules.

PackageMaze hosts your private packages and fronts the public registries through one feed you control. Policies decide which versions get in. Activity records show which packages and versions PackageMaze delivered, attributed to your team and the coding agents working beside them.

Closed beta · GitHub sign-in · founder-led onboarding

Sample UI
acme/npmnpm
upstream: npmjs.org · cached · min-age 24h
$ npm install react
resolved [email protected] via acme/npm
policy: minimum-age 24h ✓ · allowlist ✓
recorded: resolution #48211 · token ci-deploy

Sample UI — closed-beta capabilities vary by feed.

The problem

Most teams don't choose their dependencies. They inherit them.

Setups drift

Every laptop and CI job talks to the public registries its own way. Config lives in dotfiles and copy-pasted snippets, and no two machines resolve quite alike.

Updates just happen

New versions arrive when a lockfile shuffles, not when someone decides. Most upgrades are fine. The one that isn't gets discovered in production.

Questions have no answers

Which projects use this package? Which version? Since when? When a dependency turns malicious or disappears, the trail is cold exactly when it matters.

What PackageMaze does

Packages. Control. Visibility.

01

All your packages in one place

Publish private npm and PyPI packages to feeds your team owns. Pull public dependencies through the same feed, proxied and cached from npmjs.org and pypi.org. One URL in your config — everything behind it.

02

Control what gets in

Allow or block upstream packages by name. Hold newly published versions until they've been public for 24 hours — or as long as you like. Private names always take precedence over upstream lookalikes.

03

Know what came out

Every resolution and download is attributed: which package, which version, through which token, by which person or agent. When something goes wrong upstream, you'll know who pulled it in minutes, not days.

Setup

A working feed in three steps.

  1. 1

    Create a feed

    Pick npm or PyPI, name the feed, connect its upstream. Sensible policy defaults, one click.

    acme/npm ← npmjs.org · cached · min-age 24h
  2. 2

    Point your clients at it

    Guided setup for npm, pnpm, Bun, uv, pip, Poetry, and twine — the same feed URL for laptops, CI, and agents.

    registry=https://pkg.packagemaze.com/acme/npm
  3. 3

    Set the rules, read the record

    Allow, block, or hold packages per feed. Package Activity and resolution history start accruing from the first package request.

    left-pad-clone → blocked · [email protected] → held 22h

Or skip the guide: tell your connected agent, and all three steps happen in one conversation.

Sample install and publish commandsFake token values — examples only
Install
export PM_TOKEN=pm_demo_token_not_real
export PM_NPM_FEED=https://pkg.packagemaze.com/acme/team-npm
npm config set @northstar:registry "$PM_NPM_FEED"
npm config set \
  //pkg.packagemaze.com/acme/team-npm/:_authToken \
  "$PM_TOKEN"
npm install @northstar/auth-client
Publish
export PM_TOKEN=pm_demo_token_not_real
export PM_NPM_FEED=https://pkg.packagemaze.com/acme/team-npm
npm config set @northstar:registry "$PM_NPM_FEED"
npm config set \
  //pkg.packagemaze.com/acme/team-npm/:_authToken \
  "$PM_TOKEN"
npm publish

npm against a private sample feed.

With your agent

Your agent does the setup. You approve one thing.

Connect any MCP-capable agent — Claude Code, Codex, Cursor, and more — and setup stops being a checklist. Say what you want in plain language: the agent inspects the repository, writes the config, wires CI without long-lived secrets, and checks its own work against your feed's policies. You confirm one access rule. Nothing to click through, no values to copy between tabs.

  • "Set up this repo to install through our feed."
  • "Wire CI to publish without secrets."
  • "Why did last night's install fail?"
  • "Where has PackageMaze delivered lodash?"

Agents authenticate with scoped, expiring tokens — and they don't count as seats.

Sample conversation
you
Set up this repo to install through acme/npm.
agent
Inspected 2 workspaces and 1 CI workflow.Wrote .npmrc → acme/npm. CI gets short-lived tokens — no secrets in the repo.One thing needs you: approve the CI access rule.
you
Approved.
agent
Verified: coverage complete. CI is green.

Representative setup conversation, condensed.

Roadmap

Where this is going: deliberate updates.

The end state: your feed pins the versions every project uses, upgrades happen on review — monthly, not accidentally — and the whole team moves together. The beta ships the foundations. Everything else is labeled.

In the beta today

  • Private npm and PyPI feeds
  • Upstream proxy and cache for npmjs.org and pypi.org
  • Allow and block rules
  • Minimum-age holds for new versions
  • Scoped tokens, OIDC for CI
  • Usage and resolution history
  • Build reports
  • MCP setup and audit tools
  • Guided client setup

Building next

  • Version pinning and curated upgrade sets
  • Dependency trees by project
  • Quarantine review flows
  • Delivered-version visibility by project and environment
  • Vulnerability and yanked-release signals

Later

  • Maven, NuGet, Docker/OCI, Go, Cargo, and more
  • Organization-wide policy
  • License and package-health intelligence
  • Dry-run dependency checks
Trust

Boring where it should be boring.

Beta access through GitHub identity

Sign-in is GitHub OAuth only. Allowlisted identities create an organization; everyone else can join the waitlist.

Token hygiene by default

Secrets are shown once, never redisplayed. Tokens carry scopes, purposes, and expiry, and revocation is immediate.

Immutable versions

Published versions never change. Removal is delisting, not deletion — installs stay reproducible.

An audit trail that's actually there

Security-sensitive actions are recorded. Runs on Cloudflare's edge; your packages are stored privately per organization.

FAQ

Fair questions.

Is PackageMaze generally available?

Not yet. It's a closed beta. Sign in with GitHub to join the waitlist, or write to the founder — onboarding is currently done personally.

Which ecosystems work today?

npm and PyPI, including upstream proxy and cache for npmjs.org and pypi.org. Maven, NuGet, Docker/OCI, Go, and Cargo are on the roadmap.

Does it replace npmjs.org or PyPI?

No. Your feed fronts them: public packages flow through with your policies applied, and your private packages live alongside.

How is this different from Artifactory?

It's smaller, on purpose. PackageMaze does feeds, policies, and visibility for npm and PyPI — fast, clear, and priced for teams rather than procurement departments. If you need seventeen protocols and a permission matrix today, Artifactory exists.

Can coding agents use it now?

Yes. Any MCP-capable agent connects with one URL — Claude Code, Codex, Cursor, VS Code, and others. Agents plan and review repository setup, read activity evidence, and install through the same scoped, expiring tokens as everyone else.

What does it cost?

It's a paid product with simple monthly plans and no free tier — cheap enough that you won't need procurement, serious enough that you won't wonder who's paying for the infrastructure. Current pricing is shared during beta onboarding.

Can I self-host it?

No. PackageMaze is a hosted service built on Cloudflare. Self-hosting isn't planned for the beta.

Get started

Make installs deliberate.

Start with one feed and one team. The order compounds from there.