Use stable naming conventions that match repo/tooling expectations and avoid identifier collisions.
Rules
package.json#name) must be unique across the repo to prevent collisions.*-core for the breaking surface and a separate * wrapper that preserves older behavior), instead of changing semantics under the same name.Example (package.json)
{
"name": "@tanstack/lit-query",
"type": "module",
"scripts": {
"test:types": "tsc --noEmit",
"typecheck": "pnpm run test:types",
"build": "pnpm run build:deps && pnpm run build:esm && pnpm run build:cjs"
}
}
And if you need a compatibility wrapper vs breaking core:
@scope/lib-core (breaking)@scope/lib (wrapper preserving old behavior)This prevents CI from skipping packages, avoids naming collisions, and makes breaking/compatibility intent obvious from identifiers.