diff --git a/docs/repo-docs/guides/meta.json b/docs/repo-docs/guides/meta.json
index 09da1f24a4654..6ecfe4e786e5b 100644
--- a/docs/repo-docs/guides/meta.json
+++ b/docs/repo-docs/guides/meta.json
@@ -8,6 +8,7 @@
"single-package-workspaces",
"generating-code",
"skipping-tasks",
+ "migrating-from-nx",
"publishing-libraries",
"handling-platforms",
"multi-language"
diff --git a/docs/repo-docs/guides/migrating-from-nx.mdx b/docs/repo-docs/guides/migrating-from-nx.mdx
new file mode 100644
index 0000000000000..93ea205cf476f
--- /dev/null
+++ b/docs/repo-docs/guides/migrating-from-nx.mdx
@@ -0,0 +1,487 @@
+---
+title: Migrating from Nx
+description: Learn how to migrate to Turborepo from Nx.
+---
+
+import { PackageManagerTabs, Tabs, Tab } from '#/components/tabs';
+
+This guide will help you migrate an existing Nx repository to Turborepo.
+
+## Why switch?
+
+There are several reasons why you might want to switch from from Nx to Turborepo.
+
+### Ecosystem standards
+
+Turborepo is [built on top of package manager workspaces](/repo/docs/crafting-your-repository/structuring-a-repository), meaning more tools and workflows are likely to work without plugins or other workarounds. By comparison, the default Nx starter uses conventions and strategies unique to Nx, and you can expect to write more Nx-only code as your codebase grows.
+
+### More control of source code
+
+Nx’s philosophy involves wrapping your code with layers of plugins, other dependencies, and Nx-specific code. Instead, Turborepo infers your repository’s needs from its structure and source code. Since your source code goes through fewer layers of abstraction to be analyzed, you maintain greater control of your repository.
+
+### Less configuration
+
+Migrating to Turborepo will likely require deleting previous configuration needed for Nx. Turborepo will automatically infer much of what your repository needs. For example, here are the tool-specific configurations you'll find in the default starters for Turborepo and Nx.
+
+
+
+
+
+```json title="turbo.json"
+{
+ "$schema": "/schema.json",
+ "ui": "tui",
+ "tasks": {
+ "build": {
+ "dependsOn": ["^build"],
+ "inputs": ["$TURBO_DEFAULT$", ".env*"],
+ "outputs": [".next/**", "!.next/cache/**"]
+ },
+ "lint": {
+ "dependsOn": ["^lint"]
+ },
+ "check-types": {
+ "dependsOn": ["^check-types"]
+ },
+ "dev": {
+ "cache": false,
+ "persistent": true
+ }
+ }
+}
+```
+
+
+
+
+
+```json title="nx.json"
+{
+ "$schema": "./node_modules/nx/schemas/nx-schema.json",
+ "namedInputs": {
+ "default": ["{projectRoot}/**/*", "sharedGlobals"],
+ "production": [
+ "default",
+ "!{projectRoot}/.eslintrc.json",
+ "!{projectRoot}/eslint.config.cjs",
+ "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)",
+ "!{projectRoot}/tsconfig.spec.json",
+ "!{projectRoot}/jest.config.[jt]s",
+ "!{projectRoot}/src/test-setup.[jt]s",
+ "!{projectRoot}/test-setup.[jt]s"
+ ],
+ "sharedGlobals": ["{workspaceRoot}/.github/workflows/ci.yml"]
+ },
+ "nxCloudId": "6789ec521d90a2165398f39a",
+ "plugins": [
+ {
+ "plugin": "@nx/next/plugin",
+ "options": {
+ "startTargetName": "start",
+ "buildTargetName": "build",
+ "devTargetName": "dev",
+ "serveStaticTargetName": "serve-static"
+ }
+ },
+ {
+ "plugin": "@nx/playwright/plugin",
+ "options": {
+ "targetName": "e2e"
+ }
+ },
+ {
+ "plugin": "@nx/eslint/plugin",
+ "options": {
+ "targetName": "lint"
+ }
+ },
+ {
+ "plugin": "@nx/jest/plugin",
+ "options": {
+ "targetName": "test"
+ }
+ }
+ ],
+ "targetDefaults": {
+ "e2e-ci--**/*": {
+ "dependsOn": ["^build"]
+ }
+ },
+ "generators": {
+ "@nx/next": {
+ "application": {
+ "style": "tailwind",
+ "linter": "eslint"
+ }
+ }
+ }
+}
+```
+
+```json title="project.json"
+{
+ "name": "starter",
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
+ "sourceRoot": "apps/starter",
+ "projectType": "application",
+ "tags": [],
+ "// targets": "to see all targets run: nx show project starter --web",
+ "targets": {}
+}
+```
+
+
+
+
+
+### Free Remote Caching
+
+Turborepo’s [Remote Caching](/repo/docs/core-concepts/remote-caching) stores the results of your task on a cloud server. This saves enormous amounts of time by **preventing duplicated work across your entire organization**. [Vercel Remote Cache](https://vercel.com/docs/monorepos/remote-caching) has saved teams over 500 years of compute so far.
+
+Since Nx 19.7, similar functionality is a paid-for feature, even when self-hosting. Remote Caching with Turborepo is free when [self-hosting](/repo/docs/core-concepts/remote-caching#self-hosting) or using [Vercel Remote Cache](https://vercel.com/docs/monorepos/remote-caching).
+
+## Migration steps
+
+Our goal for this migration is to get a working Turborepo task as quickly as possible, so that you can adopt Turborepo features incrementally. We’ll start by using the Nx scaffolder to create a repository with a Next.js app.
+
+```bash title="Terminal"
+npx create-nx-workspace --preset=next --ci=skip --e2eTestRunner=none --style=tailwind --nextAppDir=true --nextSrcDir=false --packageManager=pnpm --appName=starter
+```
+
+### Step 1: Update .gitignore
+
+Turborepo uses the .turbo directory to hold local caches and other information about your repository. For this reason, it should be added to your `.gitignore`.
+
+```txt title=".gitignore"
+.turbo
+```
+
+### Step 2: Add a workspace definition
+
+Turborepo is built on top of package manager workspaces, a JavaScript ecosystem standard. Add the directory paths to the workspace that will contain packages.
+
+
+
+
+
+```json title="package.json"
+{
+ "workspaces": ["apps/*"]
+}
+```
+
+
+
+
+
+```json title="package.json"
+{
+ "workspaces": ["apps/*"]
+}
+```
+
+
+
+
+
+```yml title="pnpm-workspace.yaml"
+packages:
+ - apps/*
+```
+
+
+
+
+
+### Step 3: Add a package.json to the application
+
+Rather than adding additional configuration files like `project.json`, Turborepo uses the standard `package.json` file.
+
+Add a `package.json` to the `starter` application. Create a `package.json` at `./apps/starter/package.json` that contains a `dev` and `build` script.
+
+```json title="./apps/starter/package.json"
+{
+ "name": "starter",
+ "scripts": {
+ "dev": "next dev",
+ "build": "next build"
+ }
+}
+```
+
+### Step 4: Remove Nx plugin
+
+Remove the Nx plugin from ./apps/starter/next.config.js. The example file below doesn’t have configuration, though your existing Next.js application may need some.
+
+```js title="./apps/starter/next.config.js"
+/** @type {import('next').NextConfig} */
+const nextConfig = {};
+
+module.exports = nextConfig;
+```
+
+### Step 5: Add the `packageManager` field
+
+The root package.json needs to have the `packageManager` field. This ensures developers in the repository use the correct package manager, and that Turborepo can optimize your package graph based on your lockfile.
+
+
+
+
+
+```json title="./package.json"
+{
+ "packageManager": "npm@10.0.0"
+}
+```
+
+
+
+
+
+```json title="./package.json"
+{
+ "packageManager": "yarn@1.22.19"
+}
+```
+
+
+
+
+
+```json title="./package.json"
+{
+ "packageManager": "pnpm@9.0.0"
+}
+```
+
+
+
+
+
+### Step 6: Run you package manager's install command
+
+Update your lockfile by running your installation command.
+
+
+
+
+
+```bash title="Terminal"
+npm install
+```
+
+
+
+
+
+```bash title="Terminal"
+yarn install
+```
+
+
+
+
+
+```bash title="Terminal"
+pnpm install
+```
+
+
+
+
+
+Once you've done this, you should see a lockfile diff, indicating that the package has been added to the package manager's workspace.
+
+### Step 7: Install Turborepo
+
+Add Turborepo to the root `package.json` of the workspace.
+
+
+
+
+
+```bash title="Terminal"
+npm install turbo --save-dev
+```
+
+
+
+
+
+```bash title="Terminal"
+ yarn add turbo --save-dev --ignore-workspace-root-check
+```
+
+
+
+
+
+```bash title="Terminal"
+pnpm install turbo --save-dev --workspace-root
+```
+
+
+
+
+
+You can also optionally install `turbo` globally for added convenience when working with Turborepo.
+
+
+
+
+
+```bash title="Terminal"
+npm install turbo --global
+```
+
+
+
+
+
+```bash title="Terminal"
+yarn global add turbo
+```
+
+
+
+
+
+```bash title="Terminal"
+pnpm install turbo --global
+```
+
+
+
+
+
+### Step 8: Add a `turbo.json`
+
+Create a `turbo.json` at the root to register your tasks and describe their task dependencies.
+
+```json title="./turbo.json"
+{
+ "tasks": {
+ "build": {
+ "dependsOn": ["^build"],
+ "outputs": [".next/**", "!.next/cache/**"]
+ },
+ "dev": {
+ "cache": false,
+ "persistent": true
+ }
+ }
+}
+```
+
+### Step 9: Run `turbo build`
+
+Build the application with Turborepo. Using global `turbo`, this would be `turbo build`. You can also run the command through your package manager:
+
+
+
+
+
+```bash title="Terminal"
+npx turbo run build
+```
+
+
+
+
+
+```bash title="Terminal"
+ yarn dlx turbo build
+```
+
+
+
+
+
+```bash title="Terminal"
+pnpm exec turbo build
+```
+
+
+
+
+
+### Step 10: Enable Remote Caching (optional)
+
+By default, Turborepo will connect to the free-to-use Vercel Remote Cache when you run:
+
+```bash title="Terminal"
+turbo login
+turbo link
+```
+
+You may also configure a self-hosted Remote Cache, which does not require a license or any other fees.
+
+## Advanced migration considerations
+
+While the migration guide above is a good starting point, the breadth of possibilities and capabilities of monorepos means that its difficult to create generalized instructions for all cases. Below, we’ve listed some common next steps that you may be thinking about.
+
+### Installing dependencies where they're used
+
+Turborepo recommends [installing packages where they're used](/repo/docs/crafting-your-repository/managing-dependencies#best-practices-for-dependency-installation) to improve cache hit ratios, help dependency pruning capability, and clarify for developers which dependencies are meant for which packages. This is different from the Nx strategy, where all dependencies are installed at the root of the repository, making all dependencies available to all packages in the workspace.
+
+Once you have tasks running through Turborepo, we highly recommend that you move dependencies to the `package.json`'s for packages and applications that need them. [Visit our documentation on managing dependencies](/repo/docs/crafting-your-repository/managing-dependencies) to learn more.
+
+### Creating shared packages
+
+You’ll follow roughly the same set of steps as above to add a package to your package manager’s workspace.
+
+1. Ensure the package’s directory is included in the workspace definition (like `./packages/*` ).
+2. Add a `package.json` to the package with the scripts it needs to run.
+3. Check task dependencies in `turbo.json` to make sure your dependency graph meets your requirements.
+
+### Multi-language monorepos
+
+Turborepo natively supports JavaScript and TypeScript, with secondary support for any other languages you’d like to use. [Visit the Multi-Language support documentation](/repo/docs/guides/multi-language) to learn more.
+
+### Migrate complex monorepos incrementally
+
+In particularly complex monorepos, we recommend breaking up the migration into parts to de-risk the migration. You’ll use both Nx and Turborepo in your codebase for a portion of time as you grow more comfortable with Turborepo, dropping your dependency on Nx gradually.
+
+## Configuration equivalents
+
+Configuration found in `nx.json` can be mapped to `turbo.json` using the tables below.
+
+
+ The majorify of globs for capturing files are the same between Nx and
+ Turborepo. See [our file glob specification](/repo/docs/reference/globs) for
+ details and edge cases.
+
+
+### Global configuration
+
+| Nx | Turborepo |
+| -------------------------- | ----------------------------------------------------------------------------- |
+| `sharedGlobals` | [`globalDependencies`](/repo/docs/reference/configuration#globaldependencies) |
+| `sharedGlobals.env` | [`globalEnv`](/repo/docs/reference/configuration#globalenv) |
+| `sharedGlobals.namedInput` | [`globalDependencies`](/repo/docs/reference/configuration#globaldependencies) |
+| `cacheDirectory` | [`cacheDir`](/repo/docs/reference/configuration#cachedir) |
+
+### Task configuration
+
+| Nx | Turborepo |
+| --------------- | ------------------------------------------------------------------- |
+| `inputs` files | [`tasks[task].inputs`](/repo/docs/reference/configuration#inputs) |
+| `inputs.env` | [`tasks[task].env`](/repo/docs/reference/configuration#env) |
+| `outputs` files | [`tasks[task].outputs`](/repo/docs/reference/configuration#outputs) |
+| `cache` | [`tasks[task].cache`](/repo/docs/reference/configuration#cache) |
+
+### CLI equivalents
+
+| Nx | Turborepo |
+| ---------------- | ---------------------------------------------------------------------------- |
+| `nx generate` | [`turbo generate`](/repo/docs/reference/generate) |
+| `nx run` | [`turbo run`](/repo/docs/reference/run) |
+| `nx run-many` | [`turbo run`](/repo/docs/reference/run) |
+| `nx reset` | [`--force`](/repo/docs/reference/run#--force) |
+| `--parallel` | [`--concurrency`](/repo/docs/reference/run#--concurrency-number--percentage) |
+| `--nxBail` | [`--continue`](/repo/docs/reference/run#--continue) |
+| `--projects` | [`--filter`](/repo/docs/reference/run#--filter-string) |
+| `--graph` | [`--graph`](/repo/docs/reference/run#--graph-file-type) |
+| `--output-style` | [`--log-order`](/repo/docs/reference/run#--log-order-option) |
+| `--no-cloud` | [`--cache`](/repo/docs/reference/run#--cache-options) |
+| `--verbose` | [`--verbosity`](/repo/docs/reference/run#--verbosity) |