Skip to content
docs
Esc
↑↓navigate↵open⌘Jpreview
On this page

Configuration

Every setting that points a client at apm, configures the CLI and the Bun scanner, and runs a self-hosted registry.

This page lists every setting apm reads, grouped by where you set it. The first three sections are for people using apm; the last two are for running a registry.

Package manager files

File Setting Effect
.npmrc registry=https://registry.apmjs.dev/ npm, pnpm and yarn 1 install through apm.
.npmrc registry=https://registry.apmjs.dev/~safe/ The same, with the ~safe view filter.
.npmrc //registry.apmjs.dev/:_authToken=<token> The token apm login writes to your user .npmrc. ${VAR} reads it from the environment.
bunfig.toml [install] registry = "https://registry.apmjs.dev/" Bun installs through apm.
bunfig.toml [install.security] scanner = "@apm/bun-scanner" Turns on the Bun scanner.

A scoped registry line, such as @acme:registry=https://elsewhere/, sends that scope somewhere apm did not check. apm add and apm publish refuse to run while one applies to a package they handle.

apm CLI

Variable Default Meaning
APM_REGISTRY none The registry. Wins over every file.
APM_TOKEN none A token to use instead of the .npmrc one. Sent only to the registry it was issued for.
npm_config_registry none Used when APM_REGISTRY is not set.
npm_config_userconfig ~/.npmrc Where apm login saves the token.
NO_COLOR unset Turn off colors.

Registry order: APM_REGISTRY, npm_config_registry, the nearest project .npmrc, your user .npmrc, then https://registry.apmjs.dev/. The CLI reference has every flag.

Bun scanner

Variable Default Meaning
APM_REGISTRY none The registry the scanner asks. Otherwise [install] registry from the project’s bunfig.toml, then your global one.
APM_SCANNER_STRICT unset 1 cancels the install when any package could not be checked.

Registry

The registry Worker reads these settings (packages/registry/src/worker.ts parses them). Deployment is described in docs/DEPLOY.md.

Variable Meaning
HYPERDRIVE, BLOBS, ANALYSIS_QUEUE The Postgres (through Hyperdrive), R2 and queue bindings.
APM_REGISTRY_URL The registry’s public URL, used in tarball links.
APM_PUBLIC_URL The website’s URL: sign-in callbacks, approval links, the device page.
APM_UPSTREAM The registry to proxy, or off. Production uses https://registry.npmjs.org/.
APM_UPSTREAM_TTL_MS How long an upstream answer is trusted. Default 60000.
APM_NAME_POLICY scoped (new packages under the publisher’s scope; production) or open.
APM_LEGACY_AUTH 1 turns on npm password accounts. Off in production.
APM_ALLOW_LEGACY_IN_PROD Required with APM_LEGACY_AUTH=1 when APM_PUBLIC_URL is a public https address; without it every request answers 503.
APM_AUTH_SECRET Secret. Signs sessions and encrypts authenticator secrets. Changing it signs everyone out and breaks every authenticator app set up so far.
APM_GITHUB_CLIENT_ID, APM_GITHUB_CLIENT_SECRET The GitHub OAuth app. Without them the GitHub sign-in button is hidden.
APM_VERCEL_CLIENT_ID, APM_VERCEL_CLIENT_SECRET The Vercel OAuth app. Not set on apmjs.dev.
APM_ADMINS GitHub logins of apm’s reviewers, comma-separated. They confirm or dismiss AI review flags and dismiss score evidence.
APM_REVIEW_TOKEN_HASH sha256 (hex) of the AI reviewer’s service token. Turns the AI review on.
APM_REVIEW_POPULAR_WEEKLY Weekly npm downloads that put a package in the AI review’s scope. Default 10000.
APM_NPM_DOWNLOADS_URL The download-count API. Default https://api.npmjs.org/downloads/point/last-week/.
APM_REVIEW_LEASE_MS, APM_REVIEW_REQUESTS_PER_HOUR, APM_REVIEW_MAX_ATTEMPTS AI review tuning.

Fixed limits, not settings: a 24-hour cooldown and a floor of 40 for ~safe and the scanner; 24 hours for a staged upload to be approved; 5 staged uploads per package, 20 per account, 256 MB per account; 32 MB publish bodies; 1 MB package.json and readme.

Running a registry locally

bun install
bun run registry

bun run registry runs the registry Worker bundle in Miniflare on http://127.0.0.1:4873/ against a throwaway Postgres (from initdb, or APM_TEST_DATABASE_URL). APM_UPSTREAM=off turns off the npm proxy. Nothing persists between runs. Point the CLI at it with APM_REGISTRY=http://127.0.0.1:4873/.

Was this page helpful?