# How the Project Graph is Built

Nx creates a graph of all the dependencies between projects in your workspace using two sources of information:

1. Package dependencies defined in the `package.json` file for each project.

   If the `myapp/package.json` file has this dependency:

   ```jsonc {% fileName="myapp/package.json"%}
   {
     "dependencies": {
       "@myorg/awesome-library": "*"
     }
   }
   ```

   Then `my-app` depends on `awesome-library`.

   Note: We typically use `*` for the dependency instead of a specific version because we want to depend on the version of the library as it currently exists in the repo.

2. Typescript `import` statements referencing a particular project's path alias

   For instance, if a file in `my-app` has this code:

   ```typescript
   import { something } from '@myorg/awesome-library';
   ```

   Then `my-app` depends on `awesome-library`

   This can be [turned on or off with the `analyzeSourceFiles` flag](../../recipes/tips-n-tricks/analyze-source-files).

3. Manually created `implicitDependencies` in the project configuration file.

   If your project configuration has this content:

{% tabs %}
{% tab label="package.json" %}

```jsonc {% fileName="package.json"%}
{
  "name": "myapp",
  "nx": {
    "implicitDependencies": ["some-api"]
  }
}
```

{% /tab %}
{% tab label="project.json" %}

```jsonc {% fileName="project.json"%}
{
  "root": "/libs/myapp",
  "implicitDependencies": ["some-api"]
}
```

{% /tab %}
{% /tabs %}

Then `my-app` depends on `some-api`.
