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.
After the 2025-06 refresh, only one override remains:
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).
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 package-template.json files use the same pattern so scaffolded apps can pick up patch releases.
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-template.jsonvite/nitro ranges must match catalog policy. - Regenerate lockfile —
pnpm installafter every manifest edit. - Validate locally — run
pnpm test:all(typecheck + lint + vitest + e2e), notrelease:prepalone. Also runpnpm website:buildbefore merging large toolchain bumps.
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.