link-workspace-packages
nrwl/nx-ai-agents-config
Link workspace packages in monorepos using npm, yarn, pnpm, or bun.
What is link-workspace-packages?
Adds dependencies between packages in a monorepo by leveraging each package manager's workspace linking commands. Use this when you've created new packages, need to wire up sibling package imports, or encounter resolution errors like "cannot find module" or "TS2307" for workspace packages.
- Detects the package manager (npm, yarn, pnpm, bun) from lockfile or package.json
- Adds workspace dependencies using the correct syntax for each manager (workspace: protocol or auto-symlink)
- Creates symlinks in consumer package's node_modules for local workspace packages
- Resolves import errors for @org/* scoped packages without manual tsconfig or package.json patching
- Supports multi-package linking in a single command
- Handles different hoisting strategies across package managers
How to install link-workspace-packages
npx skills add https://github.com/nrwl/nx-ai-agents-config --skill link-workspace-packages- Monorepo with workspace configuration (pnpm-workspace.yaml, package.json workspaces field, etc.)
- Package manager installed (npm, yarn, pnpm, or bun)
How to use link-workspace-packages
- 1.Detect which package manager is in use by checking for packageManager field in root package.json or identifying the lockfile (pnpm-lock.yaml, yarn.lock, bun.lock, or package-lock.json)
- 2.Identify the consumer package (the one doing the importing) and the provider package(s) (being imported)
- 3.Run the appropriate add command for your package manager: pnpm add @org/ui --filter @org/app --workspace (pnpm), yarn workspace @org/app add @org/ui (yarn), npm install @org/ui --workspace @org/app (npm), or cd packages/app && bun add @org/ui (bun)
- 4.Verify symlinks were created in the consumer's node_modules/@org/ directory
- 5.Run install if needed to finalize the linking
Use cases
- After generating or creating new packages, wire up their dependencies to other workspace packages
- User imports from a sibling package and you need to add it as a declared dependency
- Resolve "cannot find module" or "failed to resolve import" errors for workspace packages
- Fix TypeScript TS2307 errors when workspace packages aren't properly linked
- Link multiple packages to a consumer in one operation
- Monorepo maintainers
- Full-stack developers working with multiple interdependent packages
- Teams using pnpm, yarn, npm, or bun workspaces
- Developers troubleshooting workspace resolution errors
link-workspace-packages FAQ
pnpm and bun use the workspace: protocol in package.json and create strict symlinks without hoisting. yarn (v2+) also uses workspace: protocol. npm auto-symlinks workspace packages without a special protocol and hoists shared dependencies to root node_modules.
Check the consumer's node_modules/@org/ directory for a symlink to the provider package. If it's missing, the dependency wasn't declared in package.json or install wasn't run.
No. Use the package manager's workspace commands instead. Manual edits bypass the linking mechanism and won't create the necessary symlinks.
These are workspace protocols used by pnpm, yarn, and bun to indicate a local workspace dependency. npm uses a regular version specifier like '*' and resolves it locally during install.
Run install (pnpm install, npm install, yarn install, or bun install) to create the symlinks. Also verify the dependency is correctly declared in the consumer's package.json.
Full instructions (SKILL.md)
Source of truth, from nrwl/nx-ai-agents-config.
name: link-workspace-packages description: 'Link workspace packages in monorepos (npm, yarn, pnpm, bun). USE WHEN: (1) you just created or generated new packages and need to wire up their dependencies, (2) user imports from a sibling package and needs to add it as a dependency, (3) you get resolution errors for workspace packages (@org/*) like "cannot find module", "failed to resolve import", "TS2307", or "cannot resolve". DO NOT patch around with tsconfig paths or manual package.json edits - use the package manager''s workspace commands to fix actual linking.'
Link Workspace Packages
Add dependencies between packages in a monorepo. All package managers support workspaces but with different syntax.
Detect Package Manager
Check whether there's a packageManager field in the root-level package.json.
Alternatively check lockfile in repo root:
pnpm-lock.yaml→ pnpmyarn.lock→ yarnbun.lock/bun.lockb→ bunpackage-lock.json→ npm
Workflow
- Identify consumer package (the one importing)
- Identify provider package(s) (being imported)
- Add dependency using package manager's workspace syntax
- Verify symlinks created in consumer's
node_modules/
pnpm
Uses workspace: protocol - symlinks only created when explicitly declared.
# From consumer directory
pnpm add @org/ui --workspace
# Or with --filter from anywhere
pnpm add @org/ui --filter @org/app --workspace
Result in package.json:
{ "dependencies": { "@org/ui": "workspace:*" } }
yarn (v2+/berry)
Also uses workspace: protocol.
yarn workspace @org/app add @org/ui
Result in package.json:
{ "dependencies": { "@org/ui": "workspace:^" } }
npm
No workspace: protocol. npm auto-symlinks workspace packages.
npm install @org/ui --workspace @org/app
Result in package.json:
{ "dependencies": { "@org/ui": "*" } }
npm resolves to local workspace automatically during install.
bun
Supports workspace: protocol (pnpm-compatible).
cd packages/app && bun add @org/ui
Result in package.json:
{ "dependencies": { "@org/ui": "workspace:*" } }
Examples
Example 1: pnpm - link ui lib to app
pnpm add @org/ui --filter @org/app --workspace
Example 2: npm - link multiple packages
npm install @org/data-access @org/ui --workspace @org/dashboard
Example 3: Debug "Cannot find module"
- Check if dependency is declared in consumer's
package.json - If not, add it using appropriate command above
- Run install (
pnpm install,npm install, etc.)
Notes
- Symlinks appear in
<consumer>/node_modules/@org/<package> - Hoisting differs by manager:
- npm/bun: hoist shared deps to root
node_modules - pnpm: no hoisting (strict isolation, prevents phantom deps)
- yarn berry: uses Plug'n'Play by default (no
node_modules)
- npm/bun: hoist shared deps to root
- Root
package.jsonshould have"private": trueto prevent accidental publish
Related skills
More from nrwl/nx-ai-agents-config and the wider catalog.

monitor-ci
Monitor Nx Cloud CI pipelines and apply self-healing fixes automatically.

nx-generate
Generate code using Nx generators for scaffolding apps, libs, and project structure.

nx-import
Import repositories into Nx workspaces while preserving commit history and project structure.

nx-plugins
Discover and install Nx plugins to add framework and technology support to your workspace.

nx-run-tasks
Execute build, test, lint, serve, and other tasks in Nx workspaces with filtering and parallelization.

nx-workspace
Explore and understand Nx workspace structure, projects, configuration, and dependencies.