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.
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 — closed-beta capabilities vary by feed.
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.
New versions arrive when a lockfile shuffles, not when someone decides. Most upgrades are fine. The one that isn't gets discovered in production.
Which projects use this package? Which version? Since when? When a dependency turns malicious or disappears, the trail is cold exactly when it matters.
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.
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.
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.
Pick npm or PyPI, name the feed, connect its upstream. Sensible policy defaults, one click.
acme/npm ← npmjs.org · cached · min-age 24hGuided 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/npmAllow, 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 22hOr skip the guide: tell your connected agent, and all three steps happen in one conversation.
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-clientexport 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 publishnpm against a private sample feed.
export PM_TOKEN=pm_demo_token_not_real
export PM_NPM_FEED=https://pkg.packagemaze.com/acme/team-npm
pnpm config set @northstar:registry "$PM_NPM_FEED"
pnpm config set \
//pkg.packagemaze.com/acme/team-npm/:_authToken \
"$PM_TOKEN"
pnpm add @northstar/auth-clientexport PM_TOKEN=pm_demo_token_not_real
export PM_NPM_FEED=https://pkg.packagemaze.com/acme/team-npm
pnpm config set @northstar:registry "$PM_NPM_FEED"
pnpm config set \
//pkg.packagemaze.com/acme/team-npm/:_authToken \
"$PM_TOKEN"
pnpm publishpnpm against a private sample feed.
export PM_TOKEN=pm_demo_token_not_real
export PM_PYPI_INDEX="https://__token__:[email protected]/acme/python/simple/"
python -m pip install \
--index-url "$PM_PYPI_INDEX" \
pydantic==2.9.2export PM_TOKEN=pm_demo_token_not_real
export TWINE_REPOSITORY_URL=https://pkg.packagemaze.com/acme/python/legacy/
export TWINE_USERNAME=__token__
export TWINE_PASSWORD="$PM_TOKEN"
python -m twine upload dist/*pip / twine against a private sample feed.
export PM_TOKEN=pm_demo_token_not_real
export PM_PYPI_INDEX="https://__token__:[email protected]/acme/python/simple/"
uv pip install \
--index-url "$PM_PYPI_INDEX" \
pydantic==2.9.2export PM_TOKEN=pm_demo_token_not_real
export PM_PYPI_LEGACY=https://pkg.packagemaze.com/acme/python/legacy/
uv publish \
--publish-url "$PM_PYPI_LEGACY" \
--token "$PM_TOKEN" \
--no-attestationsuv against a private sample feed.
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.
Agents authenticate with scoped, expiring tokens — and they don't count as seats.
Representative setup conversation, condensed.
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.
Sign-in is GitHub OAuth only. Allowlisted identities create an organization; everyone else can join the waitlist.
Secrets are shown once, never redisplayed. Tokens carry scopes, purposes, and expiry, and revocation is immediate.
Published versions never change. Removal is delisting, not deletion — installs stay reproducible.
Security-sensitive actions are recorded. Runs on Cloudflare's edge; your packages are stored privately per organization.
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.
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.
No. Your feed fronts them: public packages flow through with your policies applied, and your private packages live alongside.
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.
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.
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.
No. PackageMaze is a hosted service built on Cloudflare. Self-hosting isn't planned for the beta.
Start with one feed and one team. The order compounds from there.