https://github.com/user-attachments/assets/21a37db8-e27c-4132-9ec1-951285fa3149
See which npm packages a human has actually read.
Support open source · Try it · AI agents · Install · Donations · Auditors
Your project installs hundreds of npm packages. No person has read most of them. Many companies audit their dependencies internally, but that review work stays private and never reaches the open-source project. AuPM is an npm-compatible registry that tells you, for each exact package version, whether a human auditor has read that tarball. Every answer is a signed attestation that you can verify offline. Installs stay free. Users and their agents can optionally donate to fund more reviews. ## Support open source as you go Open-source funding depends on people who visit a project's page and click "Sponsor". Today, agents and CI pipelines choose and install most packages, and no person sees that page. Have you ever thought you can thank the open source you use as you install it, $0.01 at a time (from $0.001)? Add `--donate` to an install. AuPM pays for a human review of each reviewed package in your lockfile. The donation pays the auditors of that exact version (40%), the treasury (20%) and ops (5%). The contributor (10%) and maintainer (25%) shares go to the treasury until those roles are onboarded. See [How donations work](#how-donations-work). ## Try it in 30 seconds You need no wallet and no account. Nothing here costs money. 1. Point npm at AuPM. npm works as before, and the integrity hashes are npm's own: ```bash npm config set registry https://aupm.fyi/ ``` 2. Check one package version: ```bash curl https://aupm.fyi/api/v1/status/ms/2.1.3 ``` 3. Check a whole project. This writes a signed attestation for your lockfile: ```bash npx aupm-cli attest package-lock.json ``` `UNREVIEWED` is the normal answer today. Auditors have reviewed few packages so far. To go back to the public registry, run `npm config delete registry`. ## For AI agents A coding agent can check a package before it adds the package. The MCP server gives it three tools: - `check_audit_status` — a free status lookup for one package version. - `install_audited_package` — installs a package, and donates only with `allowDonation: true`. - `attest_lockfile` — attests a whole lockfile, and donates only with `allowDonation: true`. ```json { "mcpServers": { "aupm": { "command": "npx", "args": ["-y", "aupm-mcp"] } } } ``` An agent without MCP can read [aupm.fyi/llms.txt](https://aupm.fyi/llms.txt). It describes the HTTP routes and how to read the results. ## Review tiers The MVP has two tiers: - `UNREVIEWED` — the default. No auditor has read this exact tarball. - `COMMUNITY_REVIEWED` — a human auditor read this exact tarball and recorded the review publicly (see "For auditors" below). AuPM also reports two warnings: `INTEGRITY_MISMATCH` and `UNRESOLVABLE`. AuPM always shows them, and never charges for them. AuPM plans a tier filter for installs. It has not built that yet: today, `aupm` and the MCP server install any package, reviewed or not. ## Install the CLI ```bash npm install -g aupm-cli ``` `aupm` is a drop-in for `npm`. It runs the real npm against the AuPM registry and passes your arguments and npm's own exit code through unchanged. ```bash aupm install ms@2.1.3 # installs through the AuPM registry, same as npm aupm install ms@2.1.3 --donate # also donates for any reviewed package in the lockfile aupm pnpm add ms@2.1.3 [--donate] # pnpm against the AuPM registry; attests pnpm-lock.yaml aupm npx cowsay hi # npx against the AuPM registry; no lockfile, no --donate aupm config set donate true # always donate; --no-donate skips it once ``` `aupm attest` and `aupm verify --lockfile` also accept a `pnpm-lock.yaml` (lockfileVersion 9.0, at most 2 MiB). `AUPM_PROXY_URL` sets the registry the CLI talks to. It defaults to `https://aupm.fyi`, the MainNet deployment. For a local proxy, use `http://localhost:4873/`. ### In CI The `aupm` GitHub Action replaces an `npm ci` step. It installs through the AuPM registry and falls back to npm. Then it checks the lockfile against the reviewed packages. Pin it to a full commit SHA. See [.github/actions/aupm/README.md](.github/actions/aupm/README.md). The [aupm-action-demo](https://github.com/TriplEight/aupm-action-demo) repository runs it on MainNet. ### Verify an attestation offline `aupm verify` verifies one signed attestation against a published key. It makes no network request. ```bash aupm verify attestation.json --lockfile package-lock.json --keys aupm-keys.json ``` ## Early days: come build it with us AuPM is at an early stage. It runs on Algorand MainNet, and donations settle there. Many steps are still manual, and only the auditor and ops roles are paid today. If one of these fits you, please join: - **Review packages.** Read a tarball, record your review, and get paid for it. See "For auditors" below. - **Maintain a package?** Tell us in an issue. The maintainer share is planned, not live. Your input decides how it works. - **Suggest a change.** Open an issue. The project takes issues only. See [CONTRIBUTING.md](CONTRIBUTING.md). - **Try it.** Point npm at `https://aupm.fyi/` and tell us what breaks. ## How donations work Everything above is free. This section is for people who want to fund reviews. A donation pays an auditor to read one exact tarball and match it against the published npm release. Per reviewed package, the default donation is $0.01 (10,000 microUSDC, x1) and the minimum is $0.001, in USDC on Algorand, on every paid route. You set a multiplier from x0.1 ($0.001) to x100 with `aupm config set multiplier