home / skills / nrwl / nx / nx-workspace

nx-workspace skill

/.cursor/skills/nx-workspace

This skill helps you explore Nx workspaces and understand projects, targets, and dependencies to plan changes effectively.

npx playbooks add skill nrwl/nx --skill nx-workspace

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
5.3 KB
---
name: nx-workspace
description: "Explore and understand Nx workspaces. USE WHEN answering any questions about the nx workspace, the projects in it or tasks to run. EXAMPLES: 'What projects are in this workspace?', 'How is project X configured?', 'What targets can I run?', 'What's affected by my changes?', 'Which projects depend on library Y?', or any questions about Nx workspace structure, project configuration, or available tasks."
---

# Nx Workspace Exploration

This skill provides read-only exploration of Nx workspaces. Use it to understand workspace structure, project configuration, available targets, and dependencies.

Keep in mind that you might have to prefix commands with `npx`/`pnpx`/`yarn` if nx isn't installed globally. Check the lockfile to determine the package manager in use.

## Listing Projects

Use `nx show projects` to list projects in the workspace.

```bash
# List all projects
nx show projects

# Filter by pattern (glob)
nx show projects --projects "apps/*"
nx show projects --projects "shared-*"

# Filter by project type
nx show projects --type app
nx show projects --type lib
nx show projects --type e2e

# Filter by target (projects that have a specific target)
nx show projects --withTarget build
nx show projects --withTarget e2e

# Find affected projects (changed since base branch)
nx show projects --affected
nx show projects --affected --base=main
nx show projects --affected --type app

# Combine filters
nx show projects --type lib --withTarget test
nx show projects --affected --exclude="*-e2e"

# Output as JSON
nx show projects --json
```

## Project Configuration

Use `nx show project <name> --json` to get the full resolved configuration for a project.

**Important**: Do NOT read `project.json` directly - it only contains partial configuration. The `nx show project` command returns the full resolved config including inferred targets from plugins.

You can read the full project schema at `node_modules/nx/schemas/project-schema.json` to understand nx project configuration options.

```bash
# Get full project configuration
nx show project my-app --json

# Extract specific parts from the JSON
nx show project my-app --json | jq '.targets'
nx show project my-app --json | jq '.targets.build'
nx show project my-app --json | jq '.targets | keys'


# Check project metadata
nx show project my-app --json | jq '{name, root, sourceRoot, projectType, tags}'
```

## Target Information

Targets define what tasks can be run on a project.

```bash
# List all targets for a project
nx show project my-app --json | jq '.targets | keys'

# Get full target configuration
nx show project my-app --json | jq '.targets.build'

# Check target executor/command
nx show project my-app --json | jq '.targets.build.executor'
nx show project my-app --json | jq '.targets.build.command'

# View target options
nx show project my-app --json | jq '.targets.build.options'

# Check target inputs/outputs (for caching)
nx show project my-app --json | jq '.targets.build.inputs'
nx show project my-app --json | jq '.targets.build.outputs'

# Find projects with a specific target
nx show projects --withTarget serve
nx show projects --withTarget e2e
```

## Workspace Configuration

Read `nx.json` directly for workspace-level configuration.
You can read the full project schema at `node_modules/nx/schemas/nx-schema.json` to understand nx project configuration options.

```bash
# Read the full nx.json
cat nx.json

# Or use jq for specific sections
cat nx.json | jq '.targetDefaults'
cat nx.json | jq '.namedInputs'
cat nx.json | jq '.plugins'
cat nx.json | jq '.generators'
```

Key nx.json sections:

- `targetDefaults` - Default configuration applied to all targets of a given name
- `namedInputs` - Reusable input definitions for caching
- `plugins` - Nx plugins and their configuration
- ...and much more, read the schema or nx.json for details

## Affected Projects

Find projects affected by changes in the current branch.

```bash
# Affected since base branch (auto-detected)
nx show projects --affected

# Affected with explicit base
nx show projects --affected --base=main
nx show projects --affected --base=origin/main

# Affected between two commits
nx show projects --affected --base=abc123 --head=def456

# Affected apps only
nx show projects --affected --type app

# Affected excluding e2e projects
nx show projects --affected --exclude="*-e2e"

# Affected by uncommitted changes
nx show projects --affected --uncommitted

# Affected by untracked files
nx show projects --affected --untracked
```

## Common Exploration Patterns

### "What's in this workspace?"

```bash
nx show projects
nx show projects --type app
nx show projects --type lib
```

### "How do I build/test/lint project X?"

```bash
nx show project X --json | jq '.targets | keys'
nx show project X --json | jq '.targets.build'
```

### "What depends on library Y?"

```bash
# Find projects that may depend on Y by searching for imports
# (Nx doesn't have a direct "dependents" command via CLI)
grep -r "from '@myorg/Y'" --include="*.ts" --include="*.tsx" apps/ libs/
```

### "What configuration options are available?"

```bash
cat node_modules/nx/schemas/nx-schema.json | jq '.properties | keys'
cat node_modules/nx/schemas/project-schema.json | jq '.properties | keys'
```

### "Why is project X affected?"

```bash
# Check what files changed
git diff --name-only main

# See which project owns those files
nx show project X --json | jq '.root'
```

Overview

This skill helps you explore and understand Nx workspaces so you can answer questions about projects, configuration, targets, and dependencies. It guides you to list projects, inspect resolved project configs and targets, check workspace-wide settings, and determine affected projects after changes. Use it whenever you need an authoritative, read-only view of an Nx monorepo.

How this skill works

The skill relies on Nx CLI queries (nx show projects, nx show project <name> --json) and reading workspace files like nx.json and the Nx schemas in node_modules for full context. It explains how to extract targets, options, inputs/outputs, and metadata from resolved project configurations and how to filter or output results as JSON. It also shows patterns for finding affected projects and locating code that imports a given library when direct dependents lists aren’t available.

When to use it

  • To list all projects or filter apps/libs/e2e in the workspace.
  • When you need the full resolved configuration and target definitions for a specific project.
  • To discover what targets (build/test/lint/serve) are available and their options.
  • To find which projects are affected by current changes or between commits.
  • To inspect workspace-level defaults, named inputs, or plugin settings in nx.json.

Best practices

  • Use nx show project <name> --json for the resolved configuration rather than reading project.json directly.
  • Prefix nx with the project package manager (npx/pnpx/yarn) if nx isn’t installed globally and check the lockfile for the manager in use.
  • Use --json output and tools like jq to extract specific keys (targets, options, inputs/outputs).
  • Combine nx show projects filters (--type, --withTarget, --affected) to narrow results instead of manual searching.
  • Read node_modules/nx/schemas/*.json for authoritative schema details on workspace and project options.

Example use cases

  • Show all projects and then list targets for project my-app to know how to build and test it.
  • Determine which apps and libs are affected by the current branch vs main before running CI.
  • Inspect a project's build target to see its executor, inputs, and outputs for caching/debugging.
  • Find projects that have a specific target like e2e or serve using nx show projects --withTarget.
  • Check nx.json targetDefaults and namedInputs to understand common caching and runtime defaults.

FAQ

Can I rely on project.json to see the full project config?

No. project.json can be partial; use nx show project <name> --json to get the full resolved configuration including inferred plugin targets.

How do I find which projects import a given library?

Nx CLI doesn’t provide a direct dependents list; search source files for the library import path (grep or ripgrep) across apps/ and libs/, or use Nx dependency graph utilities if available.