# Angular workspace configuration
The `angular.json` file at the root level of an Angular [workspace](guide/glossary#workspace) provides workspace-wide and project-specific configuration defaults. These are used for build and development tools provided by the Angular CLI.
Path values given in the configuration are relative to the root workspace directory.
## General JSON structure
At the top-level of `angular.json`, a few properties configure the workspace and a `projects` section contains the remaining per-project configuration options.
You can override Angular CLI defaults set at the workspace level through defaults set at the project level.
You can also override defaults set at the project level using the command line.
The following properties, at the top-level of the file, configure the workspace.
| Properties | Details |
|:--- |:--- |
| `version` | The configuration-file version. |
| `newProjectRoot` | Path where new projects are created. Absolute or relative to the workspace directory. |
| `cli` | A set of options that customize the [Angular CLI](cli). See the [Angular CLI configuration options](#cli-configuration-options) section. |
| `schematics` | A set of [schematics](guide/glossary#schematic) that customize the `ng generate` sub-command option defaults for this workspace. See the [Generation schematics](#schematics) section. |
| `projects` | Contains a subsection for each library or application in the workspace, with the per-project configuration options. |
The initial application that you create with `ng new app_name` is listed under "projects":
"projects": {
"app_name": {
…
}
…
}
When you create a library project with `ng generate library`, the library project is also added to the `projects` section.
**NOTE**:
The `projects` section of the configuration file does not correspond exactly to the workspace file structure.
* The initial application created by `ng new` is at the top level of the workspace file structure
* Other applications and libraries go into a `projects` directory in the workspace
For more information, see [Workspace and project file structure](guide/file-structure).
## Angular CLI configuration options
The following configuration properties are a set of options that customize the Angular CLI.
| Property | Details | Value type |
|:--- |:--- |:--- |
| `analytics` | Share anonymous [usage data](cli/analytics) with the Angular Team. | `boolean` | `ci` |
| `cache` | Control [persistent disk cache](cli/cache) used by [Angular CLI Builders](guide/cli-builder). | [Cache options](#cache-options) |
| `schematicCollections`| A list of default schematics collections to use. | `string[]` |
| `packageManager` | The preferred package manager tool to use. | `npm` | `cnpm` | `pnpm` |`yarn` |
| `warnings` | Control Angular CLI specific console warnings. | [Warnings options](#warnings-options) |
### Cache options
| Property | Details | Value type | Default value |
|:--- | :--- |:--- |:--- |
| `enabled` | Configure whether disk caching is enabled. | `boolean` | `true` |
| `environment` | Configure in which environment disk cache is enabled. | `local` | `ci` | `all` | `local` |
| `path` | The directory used to stored cache results. | `string` | `.angular/cache` |
### Warnings options
| Property | Details | Value type | Default value |
|:--- |:--- |:--- |:--- |
| `versionMismatch` | Show a warning when the global Angular CLI version is newer than the local one. | `boolean` | `true` |
## Project configuration options
The following top-level configuration properties are available for each project, under `projects:`.
"my-app": {
"root": "",
"sourceRoot": "src",
"projectType": "application",
"prefix": "app",
"schematics": {},
"architect": {}
}
| Property | Details |
|:--- |:--- |
| `root` | The root directory for this project's files, relative to the workspace directory. Empty for the initial application, which resides at the top level of the workspace. |
| `sourceRoot` | The root directory for this project's source files. |
| `projectType` | One of "application" or "library" An application can run independently in a browser, while a library cannot. |
| `prefix` | A string that Angular prepends to created selectors. Can be customized to identify an application or feature area. |
| `schematics` | A set of schematics that customize the `ng generate` sub-command option defaults for this project. See the [Generation schematics](#schematics) section.|
| `architect` | Configuration defaults for Architect builder targets for this project. |
## Generation schematics
Angular generation [schematics](guide/glossary#schematic) are instructions for modifying a project by adding files or modifying existing files.
Individual schematics for the default Angular CLI `ng generate` sub-commands are collected in the package `@schematics/angular`.
Specify the schematic name for a subcommand in the format `schematic-package:schematic-name`;
for example, the schematic for generating a component is `@schematics/angular:component`.
The JSON schemas for the default schematics used by the Angular CLI to create projects and parts of projects are collected in the package [`@schematics/angular`](https://github.com/angular/angular-cli/blob/main/packages/schematics/angular/application/schema.json).
The schema describes the options available to the Angular CLI for each of the `ng generate` sub-commands, as shown in the `--help` output.
The fields given in the schema correspond to the allowed argument values and defaults for the Angular CLI sub-command options.
You can update your workspace schema file to set a different default for a sub-command option.
## Project tool configuration options
Architect is the tool that the Angular CLI uses to perform complex tasks, such as compilation and test running.
Architect is a shell that runs a specified [builder](guide/glossary#builder) to perform a given task, according to a [target](guide/glossary#target) configuration.
You can define and configure new builders and targets to extend the Angular CLI.
See [Angular CLI Builders](guide/cli-builder).
### Default Architect builders and targets
Angular defines default builders for use with specific commands, or with the general `ng run` command.
The JSON schemas that define the options and defaults for each of these default builders are collected in the [`@angular-devkit/build-angular`](https://github.com/angular/angular-cli/blob/main/packages/angular_devkit/build_angular/builders.json) package.
The schemas configure options for the following builders.
* [application](https://github.com/angular/angular-cli/blob/main/packages/angular_devkit/build_angular/src/builders/application/schema.json)
* [app-shell](https://github.com/angular/angular-cli/blob/main/packages/angular_devkit/build_angular/src/builders/app-shell/schema.json)
* [browser](https://github.com/angular/angular-cli/blob/main/packages/angular_devkit/build_angular/src/builders/browser/schema.json)
* [dev-server](https://github.com/angular/angular-cli/blob/main/packages/angular_devkit/build_angular/src/builders/dev-server/schema.json)
* [extract-i18n](https://github.com/angular/angular-cli/blob/main/packages/angular_devkit/build_angular/src/builders/extract-i18n/schema.json)
* [karma](https://github.com/angular/angular-cli/blob/main/packages/angular_devkit/build_angular/src/builders/karma/schema.json)
* [server](https://github.com/angular/angular-cli/blob/main/packages/angular_devkit/build_angular/src/builders/server/schema.json)
### Configuring builder targets
The `architect` section of `angular.json` contains a set of Architect targets.
Many of the targets correspond to the Angular CLI commands that run them.
Some extra predefined targets can be run using the `ng run` command, and you can define your own targets.
Each target object specifies the `builder` for that target, which is the npm package for the tool that Architect runs.
Each target also has an `options` section that configures default options for the target, and a `configurations` section that names and specifies alternative configurations for the target.
See the example in [Build target](#build-target) below.
"architect": {
"build": {},
"serve": {},
"e2e" : {},
"test": {},
"lint": {},
"extract-i18n": {},
"server": {},
"app-shell": {}
}
| Sections | Details |
|:--- |:--- |
| `architect/build` | Configures defaults for options of the `ng build` command. See the [Build target](#build-target) section for more information. |
| `architect/serve` | Overrides build defaults and supplies extra serve defaults for the `ng serve` command. Besides the options available for the `ng build` command, it adds options related to serving the application. |
| `architect/e2e` | Overrides build-option defaults for building end-to-end testing applications using the `ng e2e` command. |
| `architect/test` | Overrides build-option defaults for test builds and supplies extra test-running defaults for the `ng test` command. |
| `architect/lint` | Configures defaults for options of the `ng lint` command, which performs code analysis on project source files. |
| `architect/extract-i18n` | Configures defaults for options of the `ng extract-i18n` command, which extracts marked message strings from source code and outputs translation files. |
| `architect/server` | Configures defaults for creating a Universal application with server-side rendering, using the `ng run :server` command. |
| `architect/app-shell` | Configures defaults for creating an application shell for a progressive web application \(PWA\), using the `ng run :app-shell` command. |
In general, the options for which you can configure defaults correspond to the command options listed in the [Angular CLI reference page](cli) for each command.
**NOTE**:
All options in the configuration file must use [camelCase](guide/glossary#case-conventions), rather than dash-case.
## Build target
The `architect/build` section configures defaults for options of the `ng build` command.
It has the following top-level properties.
| PROPERTY | Details |
|:--- |:--- |
| `builder` | The npm package for the build tool used to create this target. The default builder for an application \(`ng build myApp`\) is `@angular-devkit/build-angular:application`, which uses the [esbuild](https://esbuild.github.io/) package bundler. **NOTE**: A different builder is used for building a library \(`ng build myLib`\).
|
| `options` | This section contains default build target options, used when no named alternative configuration is specified. See the [Default build targets](#default-build-targets) section. |
| `configurations`| This section defines and names alternative configurations for different intended destinations. It contains a section for each named configuration, which sets the default options for that intended environment. See the [Alternate build configurations](#build-configs) section. |
### Alternate build configurations
Angular CLI comes with two build configurations: `production` and `development`.
By default, the `ng build` command uses the `production` configuration, which applies several build optimizations, including:
* Bundling files
* Minimizing excess whitespace
* Removing comments and dead code
* Rewriting code to use short, mangled names, also known as minification
You can define and name extra alternate configurations \(such as `stage`, for instance\) appropriate to your development process.
Some examples of different build configurations are `stable`, `archive`, and `next` used by Angular.io itself, and the individual locale-specific configurations required for building localized versions of an application.
For details, see [Internationalization (i18n)][AioGuideI18nCommonMerge].
You can select an alternate configuration by passing its name to the `--configuration` command line flag.
You can also pass in more than one configuration name as a comma-separated list.
For example, to apply both `stage` and `fr` build configurations, use the command `ng build --configuration stage,fr`.
In this case, the command parses the named configurations from left to right.
If multiple configurations change the same setting, the last-set value is the final one.
In this example, if both `stage` and `fr` configurations set the output path the value in `fr` would get used.
### Extra build and test options
The configurable options for a default or targeted build generally correspond to the options available for the [`ng build`](cli/build), [`ng serve`](cli/serve), and [`ng test`](cli/test) commands.
For details of those options and their possible values, see the [Angular CLI Reference](cli).
Some extra options can only be set through the configuration file, either by direct editing or with the [`ng config`](cli/config) command.
| Options properties | Details |
|:--- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `assets` | An object containing paths to static assets to add to the global context of the project. The default paths point to the project's icon file and its `assets` directory. See more in the [Assets configuration](#asset-config) section. |
| `styles` | An array of style files to add to the global context of the project. Angular CLI supports CSS imports and all major CSS preprocessors: [sass/scss](https://sass-lang.com) and [less](https://lesscss.org). See more in the [Styles and scripts configuration](#style-script-config) section. |
| `stylePreprocessorOptions` | An object containing option-value pairs to pass to style preprocessors. See more in the [Styles and scripts configuration](#style-script-config) section. |
| `scripts` | An object containing JavaScript script files to add to the global context of the project. The scripts are loaded exactly as if you had added them in a `