dependencies and devDependencies in your own package.json; this policy is mainly relevant for contributors and for understanding how Aero’s packages stay aligned.
pnpm catalog
Shared versions for framework development live in the rootpnpm-workspace.yaml under catalog:. Packages reference them with the catalog: protocol in package.json (for example "vite": "catalog:").
Prefer catalog entries for tooling that should move together across packages (TypeScript, Vite, Vitest, Vitest UI, tsdown, Nitro, and @types/node).
Explicit versions
When a package needs a version different from the catalog (for example a single package requires a newer patch), use an explicit semver range in that package’spackage.json and prefer a short note in the PR if the reason is not obvious.
Root overrides
The rootpackage.json may define pnpm.overrides for security fixes or to align a transitive dependency with a known-good version. Treat overrides as explicit exceptions — document why in the commit or a short comment when non-obvious.
Current root overrides in pnpm-workspace.yaml:
js-yaml: ^3.15.0— patches a moderate CVE ingray-matter’s transitivejs-yaml3.x without jumping to js-yaml 4 (which breaks gray-matter’s CommonJS require path).nf3: 0.4.2— Nitro 3 pullsnf3for production dependency tracing; 0.3.x ESM-imports@vercel/nftin a way that fails on Node 22 until 0.4.x bundles NFT. Required for full-stack kitchen-sink /server: trueNitro builds.
vite, nitro, brace-expansion) were redundant with catalog + lockfile once duplicate exact pins were consolidated.
Peer dependency ranges
Published packages use semver ranges for optional peers (for example"vite": "^8.1.0"), not exact pins. Starter template package.json files under packages/create/templates/* use semver for @aero-js/core and pin Vite+ via pnpm.overrides for standalone clones.
Manual refresh checklist
When bumping dependencies across the monorepo:- Consolidate pins first — prefer
catalog:over hardcoded versions; remove redundantpnpm.overrides. - Bump in tiers — low-risk utilities, then catalog toolchain (vite, nitro, typescript, vitest, tsdown), then one ecosystem per PR (oxc, shiki, volar, etc.).
- Sync starter templates —
packages/create/templates/*/package.jsonvite/nitro/vite-pluspins must match catalog policy. - Regenerate lockfile —
pnpm installafter every manifest edit. - Validate locally — run
vp run check:all, notvp run release:prepalone. Before merging large toolchain bumps, runvp run build:website.
CI and guardrails
pnpm installwith a locked lockfile is the source of truth for CI.- Keep
packageManagerin rootpackage.jsonaligned with the pnpm version contributors should use.