# Introduction to building

> Understand the fundamentals of Unity's build process, including build modes, incremental building, and platform compatibility.

When you create a build of your application, you create a Player. A Player is the platform-specific runtime application that Unity builds from your project. This is also known as a **project build**, which is the workflow of building a project from the Unity Editor into an application that runs on a target platform.

Building a Player for a target platform requires the platform-specific build support module for the target platform. You can [add build support for a target platform](https://docs.unity.com/en-us/hub/add-modules.md) when you [install Unity](/engine/6000.7/manual/get-started/install-and-upgrade/getting-started-installing-unity.md), or add it when you [create a Build Profile](/engine/6000.7/manual/building-and-publishing/build-settings/create-build-profile.md).

Unity uses the scenes you define in the [Build Profiles](/engine/6000.7/manual/building-and-publishing/build-settings/build-profiles.md) window or the [`BuildPipeline`](/engine/6000.7/script-reference/unityeditor/buildpipeline.md) API to create a build of a Player. For more information, refer to [Manage scenes in a build](/engine/6000.7/manual/building-and-publishing/build-settings/build-profile-scene-list.md).

## Create a build

The main way to create a build in Unity is through the **Build Profiles** window (menu: **File** > **Build Profiles**). [Create build profiles](/engine/6000.7/manual/building-and-publishing/build-settings/create-build-profile.md) to save build settings specific to a target platform and to [distinguish between release and development builds](#build-modes). Use the **Scene List** globally or within a build profile to control what scenes your build includes. After you create and switch to your build profile, you can select a build option like **Build** or **Build and Run**. For more information about each build option, refer to [Build options](/engine/6000.7/manual/building-and-publishing/build-settings/build-profiles-reference.md#build-options).


**Example of build profiles for different platforms in the Build Profiles window:**
![](/api/media?file=/engine/6000.7/media/images/build-profiles-interface.png)

You can also build your application from the [command line](/engine/6000.7/manual/building-and-publishing/build-command-line.md) instead of from the Editor. To further customize the build process, you can [create a custom build script](/engine/6000.7/manual/building-and-publishing/build-customize-build-pipeline/build-script-build.md).

## Build modes

Unity has different build modes, as follows:

* **Release** build: Includes only what's necessary to run the application. This is the default build type.
* **Development** build: Includes the [Profiler](/engine/6000.7/manual/analysis/profiler.md) and assertions by default. To include additional diagnostics or debug symbols, select the appropriate [managed code variant](/engine/6000.7/manual/building-and-publishing/managed-code-variants.md#managed-code-variant). You can enable development builds in the [Build Profiles](/engine/6000.7/manual/building-and-publishing/build-settings/build-profiles.md) window, which allows you to set further options such as [deep profiling support](/engine/6000.7/manual/analysis/profiler/deep-profiling.md) and script debugging. You can also use the [`BuildOptions.Development`](/engine/6000.7/script-reference/unityeditor/buildoptions/development.md) property to set a development build.

Once you select a build mode, you can select options to build different variations of the Player application for different hardware architectures and [scripting backends](/engine/6000.7/manual/programming-environment/scripting-backends.md). You can also build with different managed code variants, to include different levels of additional code paths or metadata to support debugging and profiling.

You can customize these variations through the [build settings](/engine/6000.7/manual/building-and-publishing/build-settings/build-profiles-reference.md), [Player settings](/engine/6000.7/manual/unity-editor/editor-settings-reference/comp-manager-group/class-player-settings.md), or [command-line flags](/engine/6000.7/manual/unity-editor/command-line-arguments/editor.md). For more information on managed code variants, refer to [Adding diagnostics to C# code](/engine/6000.7/manual/building-and-publishing/managed-code-variants.md).

## Incremental build pipeline

Unity uses an incremental build pipeline that only rebuilds the parts of your application that have changed since the last build, which helps speed up development iteration time. This build process includes build steps such as content building, code compilation, data compression, and signing.

By default, Unity uses the incremental build pipeline for both [development and release builds](#build-modes). You can use the options in the **Build Profiles** window, or use the `BuildOptions.CleanBuildCache` API to create a non-incremental build, also known as a clean build. For more information, refer to [Creating clean builds](/engine/6000.7/manual/building-and-publishing/build-clean-build.md).

> **Note:**
>
> [AssetBundles](/engine/6000.7/manual/assets-and-media/assets-managing-runtime/assetbundles-section/asset-bundles-intro.md) don't use the incremental build pipeline and have separate mechanisms for caching and reusing the results from previous builds. For more information, refer to [Build assets into an AssetBundle](/engine/6000.7/manual/assets-and-media/assets-managing-runtime/assetbundles-section/creating/asset-bundles-building.md).

## Separate build content

To reduce the initial size of your application and to increase the build speed of your Player, separate your build into a content build and a Player build. A content build includes assets in the application that aren't required by the Player build. You can use [Addressables](https://docs.unity3d.com/Packages/com.unity.addressables@latest) with [AssetBundles](/engine/6000.7/manual/assets-and-media/assets-managing-runtime/assetbundles-section/asset-bundles-intro.md) or [content directories](/engine/6000.7/manual/assets-and-media/assets-managing-runtime/content-directories/introduction.md) to build your assets separately from your Player build. For more information about which method to choose for your application, refer to [Introduction to runtime asset management](/engine/6000.7/manual/assets-and-media/assets-managing-runtime/introduction.md).

## Additional resources

* [Introduction to build profiles](/engine/6000.7/manual/building-and-publishing/build-settings/build-profiles.md)
* [Create and manage build profiles](/engine/6000.7/manual/building-and-publishing/build-settings/create-build-profile.md)
* [Build Profiles window reference](/engine/6000.7/manual/building-and-publishing/build-settings/build-profiles-reference.md)
* [Player project settings reference](/engine/6000.7/manual/unity-editor/editor-settings-reference/comp-manager-group/class-player-settings.md)
* [Create a clean build](/engine/6000.7/manual/building-and-publishing/build-clean-build.md)
