diff --git a/goldens/public-api/angular/build/index.api.md b/goldens/public-api/angular/build/index.api.md
index 79240b301679..482e152629ad 100644
--- a/goldens/public-api/angular/build/index.api.md
+++ b/goldens/public-api/angular/build/index.api.md
@@ -109,7 +109,7 @@ export enum BuildOutputFileType {
 // @public
 export type DevServerBuilderOptions = {
     allowedHosts?: AllowedHosts;
-    buildTarget: string;
+    buildTarget?: string;
     headers?: {
         [key: string]: string;
     };
diff --git a/packages/angular/build/src/builders/dev-server/options.ts b/packages/angular/build/src/builders/dev-server/options.ts
index 3e0f59319117..0f953d036fc0 100644
--- a/packages/angular/build/src/builders/dev-server/options.ts
+++ b/packages/angular/build/src/builders/dev-server/options.ts
@@ -36,8 +36,10 @@ export async function normalizeOptions(
 
   const cacheOptions = normalizeCacheOptions(projectMetadata, workspaceRoot);
 
-  // Target specifier defaults to the current project's build target using a development configuration
-  const buildTargetSpecifier = options.buildTarget ?? `::development`;
+  // Target specifier defaults to the current project's build target using the provided dev-server
+  // configuration if a configuration is present or the 'development' configuration if not.
+  const buildTargetSpecifier =
+    options.buildTarget ?? `::${context.target?.configuration || 'development'}`;
   const buildTarget = targetFromTargetString(buildTargetSpecifier, projectName, 'build');
 
   // Get the application builder options.
diff --git a/packages/angular/build/src/builders/dev-server/schema.json b/packages/angular/build/src/builders/dev-server/schema.json
index 41902e43d8d0..09d30c2ca84e 100644
--- a/packages/angular/build/src/builders/dev-server/schema.json
+++ b/packages/angular/build/src/builders/dev-server/schema.json
@@ -127,5 +127,5 @@
     }
   },
   "additionalProperties": false,
-  "required": ["buildTarget"]
+  "required": []
 }
diff --git a/packages/angular/cli/src/commands/serve/cli.ts b/packages/angular/cli/src/commands/serve/cli.ts
index 3b38fa122acd..9324487946e8 100644
--- a/packages/angular/cli/src/commands/serve/cli.ts
+++ b/packages/angular/cli/src/commands/serve/cli.ts
@@ -6,6 +6,7 @@
  * found in the LICENSE file at https://angular.dev/license
  */
 
+import { workspaces } from '@angular-devkit/core';
 import { ArchitectCommandModule } from '../../command-builder/architect-command-module';
 import { CommandModuleImplementation } from '../../command-builder/command-module';
 import { RootCommands } from '../command-config';
@@ -19,4 +20,41 @@ export default class ServeCommandModule
   aliases = RootCommands['serve'].aliases;
   describe = 'Builds and serves your application, rebuilding on file changes.';
   longDescriptionPath?: string | undefined;
+
+  override async findDefaultBuilderName(
+    project: workspaces.ProjectDefinition,
+  ): Promise<string | undefined> {
+    // Only application type projects have a dev server target
+    if (project.extensions['projectType'] !== 'application') {
+      return;
+    }
+
+    const buildTarget = project.targets.get('build');
+    if (!buildTarget) {
+      // No default if there is no build target
+      return;
+    }
+
+    // Provide a default based on the defined builder for the 'build' target
+    switch (buildTarget.builder) {
+      case '@angular-devkit/build-angular:application':
+      case '@angular-devkit/build-angular:browser-esbuild':
+      case '@angular-devkit/build-angular:browser':
+        return '@angular-devkit/build-angular:dev-server';
+      case '@angular/build:application':
+        return '@angular/build:dev-server';
+    }
+
+    // For other builders, attempt to resolve a 'dev-server' builder from the 'build' target package name
+    const [buildPackageName] = buildTarget.builder.split(':', 1);
+    if (buildPackageName) {
+      try {
+        const qualifiedBuilderName = `${buildPackageName}:dev-server`;
+        await this.getArchitectHost().resolveBuilder(qualifiedBuilderName);
+
+        // Use builder if it resolves successfully
+        return qualifiedBuilderName;
+      } catch {}
+    }
+  }
 }
diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/options.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/options.ts
index 6fa23123a236..88844b3e51eb 100644
--- a/packages/angular_devkit/build_angular/src/builders/dev-server/options.ts
+++ b/packages/angular_devkit/build_angular/src/builders/dev-server/options.ts
@@ -36,8 +36,10 @@ export async function normalizeOptions(
 
   const cacheOptions = normalizeCacheOptions(projectMetadata, workspaceRoot);
 
-  // Target specifier defaults to the current project's build target using a development configuration
-  const buildTargetSpecifier = options.buildTarget ?? `::development`;
+  // Target specifier defaults to the current project's build target using the provided dev-server
+  // configuration if a configuration is present or the 'development' configuration if not.
+  const buildTargetSpecifier =
+    options.buildTarget ?? `::${context.target?.configuration || 'development'}`;
   const buildTarget = targetFromTargetString(buildTargetSpecifier, projectName, 'build');
 
   // Get the application builder options.
diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/schema.json b/packages/angular_devkit/build_angular/src/builders/dev-server/schema.json
index 495f244b1722..38d91d5dd2d1 100644
--- a/packages/angular_devkit/build_angular/src/builders/dev-server/schema.json
+++ b/packages/angular_devkit/build_angular/src/builders/dev-server/schema.json
@@ -130,6 +130,5 @@
       ]
     }
   },
-  "additionalProperties": false,
-  "required": ["buildTarget"]
+  "additionalProperties": false
 }