diff --git a/.github/ISSUE_TEMPLATE/5_performance_speed.md b/.github/ISSUE_TEMPLATE/5_performance_speed.md
index ba7f317..889da8a 100644
--- a/.github/ISSUE_TEMPLATE/5_performance_speed.md
+++ b/.github/ISSUE_TEMPLATE/5_performance_speed.md
@@ -41,7 +41,7 @@
      can have an intuitive understanding of what happened. Don’t use
      "adb screenrecord", as that affects the performance of the profile run.
 
-5.  Open Flutter DevTools and save a timeline trace of the performance issue
+5.  Open Observatory and save a timeline trace of the performance issue
      so we know which functions might be causing it. See "How to Collect
      and Read Timeline Traces" on this blog post:
        https://medium.com/flutter/profiling-flutter-applications-using-the-timeline-a1a434964af3#a499
diff --git a/dev/devicelab/lib/framework/runner.dart b/dev/devicelab/lib/framework/runner.dart
index c6f5c08..3a76a73 100644
--- a/dev/devicelab/lib/framework/runner.dart
+++ b/dev/devicelab/lib/framework/runner.dart
@@ -202,7 +202,7 @@
       .transform<String>(const LineSplitter())
       .listen((String line) {
     if (!uri.isCompleted) {
-      final Uri? serviceUri = parseServiceUri(line, prefix: RegExp('The Dart VM service is listening on '));
+      final Uri? serviceUri = parseServiceUri(line, prefix: RegExp('(Observatory|The Dart VM service is) listening on '));
       if (serviceUri != null) {
         uri.complete(serviceUri);
       }
diff --git a/dev/devicelab/lib/framework/utils.dart b/dev/devicelab/lib/framework/utils.dart
index ea45d19..e30a685 100644
--- a/dev/devicelab/lib/framework/utils.dart
+++ b/dev/devicelab/lib/framework/utils.dart
@@ -664,14 +664,14 @@
 bool canRun(String path) => _processManager.canRun(path);
 
 final RegExp _obsRegExp =
-  RegExp('A Dart VM Service .* is available at: ');
+  RegExp('An Observatory debugger .* is available at: ');
 final RegExp _obsPortRegExp = RegExp(r'(\S+:(\d+)/\S*)$');
 final RegExp _obsUriRegExp = RegExp(r'((http|//)[a-zA-Z0-9:/=_\-\.\[\]]+)');
 
 /// Tries to extract a port from the string.
 ///
 /// The `prefix`, if specified, is a regular expression pattern and must not contain groups.
-/// `prefix` defaults to the RegExp: `A Dart VM Service .* is available at: `.
+/// `prefix` defaults to the RegExp: `An Observatory debugger .* is available at: `.
 int? parseServicePort(String line, {
   Pattern? prefix,
 }) {
@@ -689,7 +689,7 @@
 /// Tries to extract a URL from the string.
 ///
 /// The `prefix`, if specified, is a regular expression pattern and must not contain groups.
-/// `prefix` defaults to the RegExp: `A Dart VM Service .* is available at: `.
+/// `prefix` defaults to the RegExp: `An Observatory debugger .* is available at: `.
 Uri? parseServiceUri(String line, {
   Pattern? prefix,
 }) {
diff --git a/dev/devicelab/lib/tasks/perf_tests.dart b/dev/devicelab/lib/tasks/perf_tests.dart
index b675387..6cc1d0d 100644
--- a/dev/devicelab/lib/tasks/perf_tests.dart
+++ b/dev/devicelab/lib/tasks/perf_tests.dart
@@ -1184,11 +1184,11 @@
       await _generateSkSL();
 
       // Build the app with SkSL artifacts and run that app
-      final String vmServiceUri = await _runApp(skslPath: _skslJsonFileName);
+      final String observatoryUri = await _runApp(skslPath: _skslJsonFileName);
 
       // Attach to the running app and run the final driver test to get metrics.
       final TaskResult result = await internalRun(
-        existingApp: vmServiceUri,
+        existingApp: observatoryUri,
       );
 
       _runProcess.kill();
@@ -1207,8 +1207,8 @@
     // `--write-sksl-on-exit` option doesn't seem to be compatible with
     // `flutter drive --existing-app` as it will complain web socket connection
     // issues.
-    final String vmServiceUri = await _runApp(cacheSkSL: true);
-    await super.internalRun(cacheSkSL: true, existingApp: vmServiceUri);
+    final String observatoryUri = await _runApp(cacheSkSL: true);
+    await super.internalRun(cacheSkSL: true, existingApp: observatoryUri);
     _runProcess.kill();
     await _runProcess.exitCode;
 
diff --git a/dev/devicelab/test/utils_test.dart b/dev/devicelab/test/utils_test.dart
index c51ac5a..ca3e12b 100644
--- a/dev/devicelab/test/utils_test.dart
+++ b/dev/devicelab/test/utils_test.dart
@@ -19,7 +19,7 @@
 
   group('parse service', () {
     const String badOutput = 'No uri here';
-    const String sampleOutput = 'A Dart VM Service on '
+    const String sampleOutput = 'An Observatory debugger and profiler on '
       'Pixel 3 XL is available at: http://127.0.0.1:9090/LpjUpsdEjqI=/';
 
     test('uri', () {
diff --git a/packages/flutter/lib/src/foundation/binding.dart b/packages/flutter/lib/src/foundation/binding.dart
index ad63760..c7fce10 100644
--- a/packages/flutter/lib/src/foundation/binding.dart
+++ b/packages/flutter/lib/src/foundation/binding.dart
@@ -138,7 +138,7 @@
   /// First calls [initInstances] to have bindings initialize their
   /// instance pointers and other state, then calls
   /// [initServiceExtensions] to have bindings initialize their
-  /// VM service extensions, if any.
+  /// observatory service extensions, if any.
   BindingBase() {
     developer.Timeline.startSync('Framework initialization');
     assert(() {
diff --git a/packages/flutter/lib/src/painting/shader_warm_up.dart b/packages/flutter/lib/src/painting/shader_warm_up.dart
index 29bc0ec..6a28c25 100644
--- a/packages/flutter/lib/src/painting/shader_warm_up.dart
+++ b/packages/flutter/lib/src/painting/shader_warm_up.dart
@@ -69,10 +69,10 @@
   ///
   /// To decide which draw operations to be added to your custom warm up
   /// process, consider capturing an skp using `flutter screenshot
-  /// --vm-service-uri=<uri> --type=skia` and analyzing it with
+  /// --observatory-uri=<uri> --type=skia` and analyzing it with
   /// <https://debugger.skia.org/>. Alternatively, one may run the app with
   /// `flutter run --trace-skia` and then examine the raster thread in the
-  /// Flutter DevTools timeline to see which Skia draw operations are commonly used,
+  /// observatory timeline to see which Skia draw operations are commonly used,
   /// and which shader compilations are causing jank.
   @protected
   Future<void> warmUpOnCanvas(ui.Canvas canvas);
diff --git a/packages/flutter/lib/src/widgets/app.dart b/packages/flutter/lib/src/widgets/app.dart
index 4c7380c..6c344b3 100644
--- a/packages/flutter/lib/src/widgets/app.dart
+++ b/packages/flutter/lib/src/widgets/app.dart
@@ -1174,7 +1174,7 @@
 
   /// If true, forces the performance overlay to be visible in all instances.
   ///
-  /// Used by the `showPerformanceOverlay` VM service extension.
+  /// Used by the `showPerformanceOverlay` observatory extension.
   static bool showPerformanceOverlayOverride = false;
 
   /// If true, forces the widget inspector to be visible.
@@ -1184,12 +1184,12 @@
   /// The inspector allows you to select a location on your device or emulator
   /// and view what widgets and render objects associated with it. An outline of
   /// the selected widget and some summary information is shown on device and
-  /// more detailed information is shown in the IDE or DevTools.
+  /// more detailed information is shown in the IDE or Observatory.
   static bool debugShowWidgetInspectorOverride = false;
 
   /// If false, prevents the debug banner from being visible.
   ///
-  /// Used by the `debugAllowBanner` VM service extension.
+  /// Used by the `debugAllowBanner` observatory extension.
   ///
   /// This is how `flutter run` turns off the banner when you take a screen shot
   /// with "s".
diff --git a/packages/flutter/lib/src/widgets/debug.dart b/packages/flutter/lib/src/widgets/debug.dart
index b6245a4..3e8c84d 100644
--- a/packages/flutter/lib/src/widgets/debug.dart
+++ b/packages/flutter/lib/src/widgets/debug.dart
@@ -33,8 +33,8 @@
 /// Combined with [debugPrintScheduleBuildForStacks], this lets you watch a
 /// widget's dirty/clean lifecycle.
 ///
-/// To get similar information but showing it on the timeline available from
-/// Flutter DevTools rather than getting it in the console (where it can be
+/// To get similar information but showing it on the timeline available from the
+/// Observatory rather than getting it in the console (where it can be
 /// overwhelming), consider [debugProfileBuildsEnabled].
 ///
 /// See also:
diff --git a/packages/flutter/lib/src/widgets/widget_inspector.dart b/packages/flutter/lib/src/widgets/widget_inspector.dart
index fb854f1..759e6a3 100644
--- a/packages/flutter/lib/src/widgets/widget_inspector.dart
+++ b/packages/flutter/lib/src/widgets/widget_inspector.dart
@@ -702,7 +702,7 @@
 /// operation making it easier to avoid memory leaks.
 ///
 /// All methods in this class are appropriate to invoke from debugging tools
-/// using the VM service protocol to evaluate Dart expressions of the
+/// using the Observatory service protocol to evaluate Dart expressions of the
 /// form `WidgetInspectorService.instance.methodName(arg1, arg2, ...)`. If you
 /// make changes to any instance method of this class you need to verify that
 /// the [Flutter IntelliJ Plugin](https://github.com/flutter/flutter-intellij/blob/master/README.md)
@@ -711,7 +711,7 @@
 /// All methods returning String values return JSON.
 mixin WidgetInspectorService {
   /// Ring of cached JSON values to prevent JSON from being garbage
-  /// collected before it can be requested over the VM service protocol.
+  /// collected before it can be requested over the Observatory protocol.
   final List<String?> _serializeRing = List<String?>.filled(20, null);
   int _serializeRingIndex = 0;
 
@@ -738,7 +738,7 @@
   /// when the inspection target changes on device.
   InspectorSelectionChangedCallback? selectionChangedCallback;
 
-  /// The VM service protocol does not keep alive object references so this
+  /// The Observatory protocol does not keep alive object references so this
   /// class needs to manually manage groups of objects that should be kept
   /// alive.
   final Map<String, Set<_InspectorReferenceData>> _groups = <String, Set<_InspectorReferenceData>>{};
@@ -1689,7 +1689,7 @@
 
   /// Wrapper around `json.encode` that uses a ring of cached values to prevent
   /// the Dart garbage collector from collecting objects between when
-  /// the value is returned over the VM service protocol and when the
+  /// the value is returned over the Observatory protocol and when the
   /// separate observatory protocol command has to be used to retrieve its full
   /// contents.
   //
diff --git a/packages/flutter_tools/bin/fuchsia_tester.dart b/packages/flutter_tools/bin/fuchsia_tester.dart
index b18a419..d4ca214 100644
--- a/packages/flutter_tools/bin/fuchsia_tester.dart
+++ b/packages/flutter_tools/bin/fuchsia_tester.dart
@@ -148,7 +148,7 @@
         ),
       ),
       watcher: collector,
-      enableVmService: collector != null,
+      enableObservatory: collector != null,
       precompiledDillFiles: tests,
       concurrency: math.max(1, globals.platform.numberOfProcessors - 2),
       icudtlPath: globals.fs.path.absolute(argResults[_kOptionIcudtl] as String),
diff --git a/packages/flutter_tools/bin/xcode_backend.dart b/packages/flutter_tools/bin/xcode_backend.dart
index 8eeab92..ec85e9c 100644
--- a/packages/flutter_tools/bin/xcode_backend.dart
+++ b/packages/flutter_tools/bin/xcode_backend.dart
@@ -60,9 +60,9 @@
         // Thinning is handled during the bundle asset assemble build target, so just embed.
         embedFlutterFrameworks();
         break;
-      case 'test_vm_service_bonjour_service':
+      case 'test_observatory_bonjour_service':
         // Exposed for integration testing only.
-        addVmServiceBonjourService();
+        addObservatoryBonjourService();
     }
   }
 
@@ -220,11 +220,11 @@
       ],
     );
 
-    addVmServiceBonjourService();
+    addObservatoryBonjourService();
   }
 
-  // Add the vmService publisher Bonjour service to the produced app bundle Info.plist.
-  void addVmServiceBonjourService() {
+  // Add the observatory publisher Bonjour service to the produced app bundle Info.plist.
+  void addObservatoryBonjourService() {
     final String buildMode = parseFlutterBuildMode();
 
     // Debug and profile only.
@@ -239,13 +239,13 @@
       // The file will be present on re-run.
       echo(
         '${environment['INFOPLIST_PATH'] ?? ''} does not exist. Skipping '
-        '_dartVmService._tcp NSBonjourServices insertion. Try re-building to '
+        '_dartobservatory._tcp NSBonjourServices insertion. Try re-building to '
         'enable "flutter attach".');
       return;
     }
 
     // If there are already NSBonjourServices specified by the app (uncommon),
-    // insert the vmService service name to the existing list.
+    // insert the observatory service name to the existing list.
     ProcessResult result = runSync(
       'plutil',
       <String>[
@@ -265,19 +265,19 @@
           '-insert',
           'NSBonjourServices.0',
           '-string',
-          '_dartVmService._tcp',
+          '_dartobservatory._tcp',
           builtProductsPlist,
         ],
       );
     } else {
-      // Otherwise, add the NSBonjourServices key and vmService service name.
+      // Otherwise, add the NSBonjourServices key and observatory service name.
       runSync(
         'plutil',
         <String>[
           '-insert',
           'NSBonjourServices',
           '-json',
-          '["_dartVmService._tcp"]',
+          '["_dartobservatory._tcp"]',
           builtProductsPlist,
         ],
       );
diff --git a/packages/flutter_tools/doc/attach.md b/packages/flutter_tools/doc/attach.md
index 565115d..303cb80 100644
--- a/packages/flutter_tools/doc/attach.md
+++ b/packages/flutter_tools/doc/attach.md
@@ -17,7 +17,7 @@
 will search for an already running Flutter app or module if available.
 Otherwise, the tool will wait for the next Flutter app or module to launch
 before attaching.
-1. If the app or module is already running and the specific VM Service port is
+1. If the app or module is already running and the specific observatory port is
 known, it can be explicitly provided to attach via the command-line, e.g.
 `$ flutter attach --debug-port 12345`
 
diff --git a/packages/flutter_tools/doc/daemon.md b/packages/flutter_tools/doc/daemon.md
index 7750829..15d144c 100644
--- a/packages/flutter_tools/doc/daemon.md
+++ b/packages/flutter_tools/doc/daemon.md
@@ -140,7 +140,7 @@
 
 #### app.debugPort
 
-This is sent when a VM service port is available for a started app. The `params` field will be a map with the fields `appId`, `port`, and `wsUri`. Clients should prefer using the `wsUri` field in preference to synthesizing a URI using the `port` field. An optional field, `baseUri`, is populated if a path prefix is required for setting breakpoints on the target device.
+This is sent when an observatory port is available for a started app. The `params` field will be a map with the fields `appId`, `port`, and `wsUri`. Clients should prefer using the `wsUri` field in preference to synthesizing a URI using the `port` field. An optional field, `baseUri`, is populated if a path prefix is required for setting breakpoints on the target device.
 
 #### app.started
 
diff --git a/packages/flutter_tools/lib/src/android/android_device.dart b/packages/flutter_tools/lib/src/android/android_device.dart
index eadc603..964c078 100644
--- a/packages/flutter_tools/lib/src/android/android_device.dart
+++ b/packages/flutter_tools/lib/src/android/android_device.dart
@@ -599,12 +599,12 @@
     }
 
     final bool traceStartup = platformArgs['trace-startup'] as bool? ?? false;
-    ProtocolDiscovery? vmServiceDiscovery;
+    ProtocolDiscovery? observatoryDiscovery;
 
     if (debuggingOptions.debuggingEnabled) {
-      vmServiceDiscovery = ProtocolDiscovery.vmService(
+      observatoryDiscovery = ProtocolDiscovery.observatory(
         // Avoid using getLogReader, which returns a singleton instance, because the
-        // VM Service discovery will dipose at the end. creating a new logger here allows
+        // observatory discovery will dipose at the end. creating a new logger here allows
         // logs to be surfaced normally during `flutter drive`.
         await AdbLogReader.createLogReader(
           this,
@@ -687,13 +687,13 @@
     }
 
     // Wait for the service protocol port here. This will complete once the
-    // device has printed "VM Service is listening on...".
-    _logger.printTrace('Waiting for VM Service port to be available...');
+    // device has printed "Observatory is listening on...".
+    _logger.printTrace('Waiting for observatory port to be available...');
     try {
-      Uri? vmServiceUri;
+      Uri? observatoryUri;
       if (debuggingOptions.buildInfo.isDebug || debuggingOptions.buildInfo.isProfile) {
-        vmServiceUri = await vmServiceDiscovery?.uri;
-        if (vmServiceUri == null) {
+        observatoryUri = await observatoryDiscovery?.uri;
+        if (observatoryUri == null) {
           _logger.printError(
             'Error waiting for a debug connection: '
             'The log reader stopped unexpectedly',
@@ -701,12 +701,12 @@
           return LaunchResult.failed();
         }
       }
-      return LaunchResult.succeeded(vmServiceUri: vmServiceUri);
+      return LaunchResult.succeeded(observatoryUri: observatoryUri);
     } on Exception catch (error) {
       _logger.printError('Error waiting for a debug connection: $error');
       return LaunchResult.failed();
     } finally {
-      await vmServiceDiscovery?.cancel();
+      await observatoryDiscovery?.cancel();
     }
   }
 
diff --git a/packages/flutter_tools/lib/src/base/dds.dart b/packages/flutter_tools/lib/src/base/dds.dart
index eba8d38..c7fe0fa 100644
--- a/packages/flutter_tools/lib/src/base/dds.dart
+++ b/packages/flutter_tools/lib/src/base/dds.dart
@@ -35,7 +35,7 @@
   final Completer<void> _completer = Completer<void>();
 
   Future<void> startDartDevelopmentService(
-    Uri vmServiceUri, {
+    Uri observatoryUri, {
     required Logger logger,
     int? hostPort,
     bool? ipv6,
@@ -49,11 +49,11 @@
     );
     logger.printTrace(
       'Launching a Dart Developer Service (DDS) instance at $ddsUri, '
-      'connecting to VM service at $vmServiceUri.',
+      'connecting to VM service at $observatoryUri.',
     );
     try {
       _ddsInstance = await ddsLauncherCallback(
-          vmServiceUri,
+          observatoryUri,
           serviceUri: ddsUri,
           enableAuthCodes: disableServiceAuthCodes != true,
           ipv6: ipv6 ?? false,
diff --git a/packages/flutter_tools/lib/src/build_info.dart b/packages/flutter_tools/lib/src/build_info.dart
index 1df9fba..db7d729 100644
--- a/packages/flutter_tools/lib/src/build_info.dart
+++ b/packages/flutter_tools/lib/src/build_info.dart
@@ -394,16 +394,16 @@
     throw ArgumentError('$value is not a supported build mode');
   }
 
-  /// Built in JIT mode with no optimizations, enabled asserts, and a VM service.
+  /// Built in JIT mode with no optimizations, enabled asserts, and an observatory.
   static const BuildMode debug = BuildMode._('debug');
 
-  /// Built in AOT mode with some optimizations and a VM service.
+  /// Built in AOT mode with some optimizations and an observatory.
   static const BuildMode profile = BuildMode._('profile');
 
-  /// Built in AOT mode with all optimizations and no VM service.
+  /// Built in AOT mode with all optimizations and no observatory.
   static const BuildMode release = BuildMode._('release');
 
-  /// Built in JIT mode with all optimizations and no VM service.
+  /// Built in JIT mode with all optimizations and no observatory.
   static const BuildMode jitRelease = BuildMode._('jit_release');
 
   static const List<BuildMode> values = <BuildMode>[
diff --git a/packages/flutter_tools/lib/src/commands/attach.dart b/packages/flutter_tools/lib/src/commands/attach.dart
index 6469f29..438681b 100644
--- a/packages/flutter_tools/lib/src/commands/attach.dart
+++ b/packages/flutter_tools/lib/src/commands/attach.dart
@@ -56,7 +56,7 @@
 /// ```
 /// $ flutter attach
 /// ```
-/// As soon as a new VM Service is detected the command attaches to it and
+/// As soon as a new observatory is detected the command attaches to it and
 /// enables hot reloading.
 ///
 /// To attach to a flutter mod running on a fuchsia device, `--module` must
@@ -97,18 +97,18 @@
       ..addOption(
         'debug-port',
         hide: !verboseHelp,
-        help: '(deprecated) Device port where the Dart VM Service is listening. Requires '
+        help: '(deprecated) Device port where the observatory is listening. Requires '
               '"--disable-service-auth-codes" to also be provided to the Flutter '
               'application at launch, otherwise this command will fail to connect to '
               'the application. In general, "--debug-url" should be used instead.',
       )..addOption(
         'debug-url',
         aliases: <String>[ 'debug-uri' ], // supported for historical reasons
-        help: 'The URL at which the Dart VM Service is listening.',
+        help: 'The URL at which the observatory is listening.',
       )..addOption(
         'app-id',
         help: 'The package name (Android) or bundle identifier (iOS) for the app. '
-              'This can be specified to avoid being prompted if multiple Dart VM Service ports '
+              'This can be specified to avoid being prompted if multiple observatory ports '
               'are advertised.\n'
               'If you have multiple devices or emulators running, you should include the '
               'device hostname as well, e.g. "com.example.myApp@my-iphone".\n'
@@ -169,7 +169,7 @@
 --module=mod_name`. This can be called either before or after the application
 is started.
 
-If the app or module is already running and the specific vmService port is
+If the app or module is already running and the specific observatory port is
 known, it can be explicitly provided to attach via the command-line, e.g.
 `$ flutter attach --debug-port 12345`''';
 
@@ -225,10 +225,10 @@
         'the value of --ipv6 on its own.',
       );
     }
-    if (debugPort == null && debugUri == null && argResults!.wasParsed(FlutterCommand.vmServicePortOption)) {
+    if (debugPort == null && debugUri == null && argResults!.wasParsed(FlutterCommand.observatoryPortOption)) {
       throwToolExit(
         'When the --debug-port or --debug-url is unknown, this command does not use '
-        'the value of --vm-service-port.',
+        'the value of --observatory-port.',
       );
     }
     if (debugPort != null && debugUri != null) {
@@ -281,7 +281,7 @@
         )
       : null;
 
-    Stream<Uri>? vmServiceUri;
+    Stream<Uri>? observatoryUri;
     bool usesIpv6 = ipv6!;
     final String ipv6Loopback = InternetAddress.loopbackIPv6.address;
     final String ipv4Loopback = InternetAddress.loopbackIPv4.address;
@@ -298,7 +298,7 @@
         FuchsiaIsolateDiscoveryProtocol? isolateDiscoveryProtocol;
         try {
           isolateDiscoveryProtocol = device.getIsolateDiscoveryProtocol(module);
-          vmServiceUri = Stream<Uri>.value(await isolateDiscoveryProtocol.uri).asBroadcastStream();
+          observatoryUri = Stream<Uri>.value(await isolateDiscoveryProtocol.uri).asBroadcastStream();
         } on Exception {
           isolateDiscoveryProtocol?.dispose();
           final List<ForwardedPort> ports = device.portForwarder.forwardedPorts.toList();
@@ -351,7 +351,7 @@
 
         Future<Uri?>? protocolDiscoveryFuture;
         if (compatibleWithProtocolDiscovery) {
-          final ProtocolDiscovery vmServiceDiscovery = ProtocolDiscovery.vmService(
+          final ProtocolDiscovery vmServiceDiscovery = ProtocolDiscovery.observatory(
             device.getLogReader(),
             portForwarder: device.portForwarder,
             ipv6: ipv6!,
@@ -372,14 +372,14 @@
         }
         discoveryStatus.stop();
 
-        vmServiceUri = foundUrl == null
+        observatoryUri = foundUrl == null
           ? null
           : Stream<Uri>.value(foundUrl).asBroadcastStream();
       }
       // If MDNS discovery fails or we're not on iOS, fallback to ProtocolDiscovery.
-      if (vmServiceUri == null) {
-        final ProtocolDiscovery vmServiceDiscovery =
-          ProtocolDiscovery.vmService(
+      if (observatoryUri == null) {
+        final ProtocolDiscovery observatoryDiscovery =
+          ProtocolDiscovery.observatory(
             // If it's an Android device, attaching relies on past log searching
             // to find the service protocol.
             await device.getLogReader(includePastLogs: device is AndroidDevice),
@@ -390,12 +390,12 @@
             logger: _logger,
           );
         _logger.printStatus('Waiting for a connection from Flutter on ${device.name}...');
-        vmServiceUri = vmServiceDiscovery.uris;
+        observatoryUri = observatoryDiscovery.uris;
         // Determine ipv6 status from the scanned logs.
-        usesIpv6 = vmServiceDiscovery.ipv6;
+        usesIpv6 = observatoryDiscovery.ipv6;
       }
     } else {
-      vmServiceUri = Stream<Uri>
+      observatoryUri = Stream<Uri>
         .fromFuture(
           buildVMServiceUri(
             device,
@@ -413,7 +413,7 @@
       int? result;
       if (daemon != null) {
         final ResidentRunner runner = await createResidentRunner(
-          vmServiceUris: vmServiceUri,
+          observatoryUris: observatoryUri,
           device: device,
           flutterProject: flutterProject,
           usesIpv6: usesIpv6,
@@ -446,7 +446,7 @@
       }
       while (true) {
         final ResidentRunner runner = await createResidentRunner(
-          vmServiceUris: vmServiceUri,
+          observatoryUris: observatoryUri,
           device: device,
           flutterProject: flutterProject,
           usesIpv6: usesIpv6,
@@ -476,7 +476,7 @@
         }
         terminalHandler?.stop();
         assert(result != null);
-        if (runner.exited || !runner.isWaitingForVmService) {
+        if (runner.exited || !runner.isWaitingForObservatory) {
           break;
         }
         _logger.printStatus('Waiting for a new connection from Flutter on ${device.name}...');
@@ -495,7 +495,7 @@
   }
 
   Future<ResidentRunner> createResidentRunner({
-    required Stream<Uri> vmServiceUris,
+    required Stream<Uri> observatoryUris,
     required Device device,
     required FlutterProject flutterProject,
     required bool usesIpv6,
@@ -510,7 +510,7 @@
       userIdentifier: userIdentifier,
       platform: _platform,
     );
-    flutterDevice.vmServiceUris = vmServiceUris;
+    flutterDevice.observatoryUris = observatoryUris;
     final List<FlutterDevice> flutterDevices =  <FlutterDevice>[flutterDevice];
     final DebuggingOptions debuggingOptions = DebuggingOptions.enabled(
       buildInfo,
diff --git a/packages/flutter_tools/lib/src/commands/custom_devices.dart b/packages/flutter_tools/lib/src/commands/custom_devices.dart
index cc54bf1..40dc89c 100644
--- a/packages/flutter_tools/lib/src/commands/custom_devices.dart
+++ b/packages/flutter_tools/lib/src/commands/custom_devices.dart
@@ -650,7 +650,7 @@
       description: 'Should the device use port forwarding? '
         'Using port forwarding is the default because it works in all cases, however if your '
         'remote device has a static IP address and you have a way of '
-        'specifying the "--vm-service-host=<ip>" engine option, you might prefer '
+        'specifying the "--observatory-host=<ip>" engine option, you might prefer '
         'not using port forwarding.',
     );
 
diff --git a/packages/flutter_tools/lib/src/commands/daemon.dart b/packages/flutter_tools/lib/src/commands/daemon.dart
index cec6f1d..45f6b19 100644
--- a/packages/flutter_tools/lib/src/commands/daemon.dart
+++ b/packages/flutter_tools/lib/src/commands/daemon.dart
@@ -1014,9 +1014,7 @@
     );
     return <String, Object?>{
       'started': result.started,
-      'vmServiceUri': result.vmServiceUri?.toString(),
-      // TODO(bkonyi): remove once clients have migrated to relying on vmServiceUri.
-      'observatoryUri': result.vmServiceUri?.toString(),
+      'observatoryUri': result.observatoryUri?.toString(),
     };
   }
 
diff --git a/packages/flutter_tools/lib/src/commands/drive.dart b/packages/flutter_tools/lib/src/commands/drive.dart
index 379009a..01918fb 100644
--- a/packages/flutter_tools/lib/src/commands/drive.dart
+++ b/packages/flutter_tools/lib/src/commands/drive.dart
@@ -81,7 +81,7 @@
               'running, and "--no-keep-app-running" overrides it.',
       )
       ..addOption('use-existing-app',
-        help: 'Connect to an already running instance via the given Dart VM Service URL. '
+        help: 'Connect to an already running instance via the given observatory URL. '
               'If this option is given, the application will not be automatically started, '
               'and it will only be stopped if "--no-keep-app-running" is explicitly set.',
         valueHelp: 'url',
diff --git a/packages/flutter_tools/lib/src/commands/screenshot.dart b/packages/flutter_tools/lib/src/commands/screenshot.dart
index c291acb..6152c8e 100644
--- a/packages/flutter_tools/lib/src/commands/screenshot.dart
+++ b/packages/flutter_tools/lib/src/commands/screenshot.dart
@@ -15,7 +15,7 @@
 
 const String _kOut = 'out';
 const String _kType = 'type';
-const String _kVmServiceUrl = 'vm-service-url';
+const String _kObservatoryUrl = 'observatory-url';
 const String _kDeviceType = 'device';
 const String _kSkiaType = 'skia';
 const String _kRasterizerType = 'rasterizer';
@@ -29,13 +29,13 @@
       help: 'Location to write the screenshot.',
     );
     argParser.addOption(
-      _kVmServiceUrl,
+      _kObservatoryUrl,
       aliases: <String>[ 'observatory-url' ], // for historical reasons
       valueHelp: 'URI',
-      help: 'The VM Service URL to which to connect.\n'
+      help: 'The Observatory URL to which to connect.\n'
           'This is required when "--$_kType" is "$_kSkiaType" or "$_kRasterizerType".\n'
-          'To find the VM service URL, use "flutter run" and look for '
-          '"A Dart VM Service ... is available at" in the output.',
+          'To find the Observatory URL, use "flutter run" and look for '
+          '"An Observatory ... is available at" in the output.',
     );
     argParser.addOption(
       _kType,
@@ -46,8 +46,8 @@
         _kDeviceType: "Delegate to the device's native screenshot capabilities. This "
                       'screenshots the entire screen currently being displayed (including content '
                       'not rendered by Flutter, like the device status bar).',
-        _kSkiaType: 'Render the Flutter app as a Skia picture. Requires "--$_kVmServiceUrl".',
-        _kRasterizerType: 'Render the Flutter app using the rasterizer. Requires "--$_kVmServiceUrl."',
+        _kSkiaType: 'Render the Flutter app as a Skia picture. Requires "--$_kObservatoryUrl".',
+        _kRasterizerType: 'Render the Flutter app using the rasterizer. Requires "--$_kObservatoryUrl."',
       },
       defaultsTo: _kDeviceType,
     );
@@ -70,11 +70,11 @@
 
   Device? device;
 
-  Future<void> _validateOptions(String? screenshotType, String? vmServiceUrl) async {
+  Future<void> _validateOptions(String? screenshotType, String? observatoryUrl) async {
     switch (screenshotType) {
       case _kDeviceType:
-        if (vmServiceUrl != null) {
-          throwToolExit('VM Service URI cannot be provided for screenshot type $screenshotType');
+        if (observatoryUrl != null) {
+          throwToolExit('Observatory URI cannot be provided for screenshot type $screenshotType');
         }
         device = await findTargetDevice();
         if (device == null) {
@@ -85,18 +85,18 @@
         }
         break;
       default:
-        if (vmServiceUrl == null) {
-          throwToolExit('VM Service URI must be specified for screenshot type $screenshotType');
+        if (observatoryUrl == null) {
+          throwToolExit('Observatory URI must be specified for screenshot type $screenshotType');
         }
-        if (vmServiceUrl.isEmpty || Uri.tryParse(vmServiceUrl) == null) {
-          throwToolExit('VM Service URI "$vmServiceUrl" is invalid');
+        if (observatoryUrl.isEmpty || Uri.tryParse(observatoryUrl) == null) {
+          throwToolExit('Observatory URI "$observatoryUrl" is invalid');
         }
     }
   }
 
   @override
   Future<FlutterCommandResult> verifyThenRunCommand(String? commandPath) async {
-    await _validateOptions(stringArgDeprecated(_kType), stringArgDeprecated(_kVmServiceUrl));
+    await _validateOptions(stringArgDeprecated(_kType), stringArgDeprecated(_kObservatoryUrl));
     return super.verifyThenRunCommand(commandPath);
   }
 
@@ -150,8 +150,8 @@
   }
 
   Future<bool> runSkia(File? outputFile) async {
-    final Uri vmServiceUrl = Uri.parse(stringArgDeprecated(_kVmServiceUrl)!);
-    final FlutterVmService vmService = await connectToVmService(vmServiceUrl, logger: globals.logger);
+    final Uri observatoryUrl = Uri.parse(stringArgDeprecated(_kObservatoryUrl)!);
+    final FlutterVmService vmService = await connectToVmService(observatoryUrl, logger: globals.logger);
     final vm_service.Response? skp = await vmService.screenshotSkp();
     if (skp == null) {
       globals.printError(
@@ -174,8 +174,8 @@
   }
 
   Future<bool> runRasterizer(File? outputFile) async {
-    final Uri vmServiceUrl = Uri.parse(stringArgDeprecated(_kVmServiceUrl)!);
-    final FlutterVmService vmService = await connectToVmService(vmServiceUrl, logger: globals.logger);
+    final Uri observatoryUrl = Uri.parse(stringArgDeprecated(_kObservatoryUrl)!);
+    final FlutterVmService vmService = await connectToVmService(observatoryUrl, logger: globals.logger);
     final vm_service.Response? response = await vmService.screenshot();
     if (response == null) {
       globals.printError(
diff --git a/packages/flutter_tools/lib/src/commands/test.dart b/packages/flutter_tools/lib/src/commands/test.dart
index 99215e3..7c5c774 100644
--- a/packages/flutter_tools/lib/src/commands/test.dart
+++ b/packages/flutter_tools/lib/src/commands/test.dart
@@ -453,7 +453,7 @@
       tags: tags,
       excludeTags: excludeTags,
       watcher: watcher,
-      enableVmService: collector != null || startPaused || boolArgDeprecated('enable-vmservice'),
+      enableObservatory: collector != null || startPaused || boolArgDeprecated('enable-vmservice'),
       ipv6: boolArgDeprecated('ipv6'),
       machine: machine,
       updateGoldens: boolArgDeprecated('update-goldens'),
diff --git a/packages/flutter_tools/lib/src/custom_devices/custom_device.dart b/packages/flutter_tools/lib/src/custom_devices/custom_device.dart
index 7285345..cfbcf9f 100644
--- a/packages/flutter_tools/lib/src/custom_devices/custom_device.dart
+++ b/packages/flutter_tools/lib/src/custom_devices/custom_device.dart
@@ -309,7 +309,7 @@
         'purge-persistent-cache=true',
       if (debuggingOptions.debuggingEnabled) ...<String>[
         if (debuggingOptions.deviceVmServicePort != null)
-          'vm-service-port=${debuggingOptions.deviceVmServicePort}',
+          'observatory-port=${debuggingOptions.deviceVmServicePort}',
         if (debuggingOptions.buildInfo.isDebug) ...<String>[
           'enable-checked-mode=true',
           'verify-entry-points=true',
@@ -374,7 +374,7 @@
     assert(_process == null);
     _process = process;
 
-    final ProtocolDiscovery discovery = ProtocolDiscovery.vmService(
+    final ProtocolDiscovery discovery = ProtocolDiscovery.observatory(
       logReader,
       portForwarder: _device._config.usesPortForwarding ? _device.portForwarder : null,
       logger: _logger,
@@ -388,14 +388,14 @@
     // in the same microtask AFAICT but this way we're on the safe side.
     logReader.listenToProcessOutput(process);
 
-    final Uri? vmServiceUri = await discovery.uri;
+    final Uri? observatoryUri = await discovery.uri;
     await discovery.cancel();
 
     if (_device._config.usesPortForwarding) {
-      _forwardedHostPort = vmServiceUri?.port;
+      _forwardedHostPort = observatoryUri?.port;
     }
 
-    return LaunchResult.succeeded(vmServiceUri: vmServiceUri);
+    return LaunchResult.succeeded(observatoryUri: observatoryUri);
   }
 
   void _maybeUnforwardPort() {
diff --git a/packages/flutter_tools/lib/src/debug_adapters/flutter_test_adapter.dart b/packages/flutter_tools/lib/src/debug_adapters/flutter_test_adapter.dart
index 22f83d7..3072d19 100644
--- a/packages/flutter_tools/lib/src/debug_adapters/flutter_test_adapter.dart
+++ b/packages/flutter_tools/lib/src/debug_adapters/flutter_test_adapter.dart
@@ -153,7 +153,7 @@
 
   /// Handles the test.processStarted event from Flutter that provides the VM Service URL.
   void _handleTestStartedProcess(Map<String, Object?> params) {
-    final String? vmServiceUriString = params['vmServiceUri'] as String?;
+    final String? vmServiceUriString = params['observatoryUri'] as String?;
     // For no-debug mode, this event may be still sent so ignore it if we know
     // we're not debugging, or its URI is null.
     if (!enableDebugger || vmServiceUriString == null) {
diff --git a/packages/flutter_tools/lib/src/desktop_device.dart b/packages/flutter_tools/lib/src/desktop_device.dart
index 8041365..ae1df62 100644
--- a/packages/flutter_tools/lib/src/desktop_device.dart
+++ b/packages/flutter_tools/lib/src/desktop_device.dart
@@ -152,17 +152,17 @@
     if (debuggingOptions.buildInfo.isRelease == true) {
       return LaunchResult.succeeded();
     }
-    final ProtocolDiscovery vmServiceDiscovery = ProtocolDiscovery.vmService(_deviceLogReader,
+    final ProtocolDiscovery observatoryDiscovery = ProtocolDiscovery.observatory(_deviceLogReader,
       devicePort: debuggingOptions.deviceVmServicePort,
       hostPort: debuggingOptions.hostVmServicePort,
       ipv6: ipv6,
       logger: _logger,
     );
     try {
-      final Uri? vmServiceUri = await vmServiceDiscovery.uri;
-      if (vmServiceUri != null) {
+      final Uri? observatoryUri = await observatoryDiscovery.uri;
+      if (observatoryUri != null) {
         onAttached(package, buildInfo, process);
-        return LaunchResult.succeeded(vmServiceUri: vmServiceUri);
+        return LaunchResult.succeeded(observatoryUri: observatoryUri);
       }
       _logger.printError(
         'Error waiting for a debug connection: '
@@ -171,7 +171,7 @@
     } on Exception catch (error) {
       _logger.printError('Error waiting for a debug connection: $error');
     } finally {
-      await vmServiceDiscovery.cancel();
+      await observatoryDiscovery.cancel();
     }
     return LaunchResult.failed();
   }
@@ -270,7 +270,7 @@
     // tool and the device, usually in debug or profile mode.
     if (debuggingOptions.debuggingEnabled) {
       if (debuggingOptions.deviceVmServicePort != null) {
-        addFlag('vm-service-port=${debuggingOptions.deviceVmServicePort}');
+        addFlag('observatory-port=${debuggingOptions.deviceVmServicePort}');
       }
       if (debuggingOptions.buildInfo.isDebug) {
         addFlag('enable-checked-mode=true');
diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart
index ac7ac91..55ec8da 100644
--- a/packages/flutter_tools/lib/src/device.dart
+++ b/packages/flutter_tools/lib/src/device.dart
@@ -933,7 +933,7 @@
     return <String>[
       if (enableDartProfiling) '--enable-dart-profiling',
       if (disableServiceAuthCodes) '--disable-service-auth-codes',
-      if (disablePortPublication) '--disable-vm-service-publication',
+      if (disablePortPublication) '--disable-observatory-publication',
       if (startPaused) '--start-paused',
       // Wrap dart flags in quotes for physical devices
       if (environmentType == EnvironmentType.physical && dartVmFlags.isNotEmpty)
@@ -960,14 +960,14 @@
       if (platformArgs['trace-startup'] as bool? ?? false) '--trace-startup',
       if (enableImpeller) '--enable-impeller',
       if (environmentType == EnvironmentType.physical && deviceVmServicePort != null)
-        '--vm-service-port=$deviceVmServicePort',
+        '--observatory-port=$deviceVmServicePort',
       // The simulator "device" is actually on the host machine so no ports will be forwarded.
       // Use the suggested host port.
       if (environmentType == EnvironmentType.simulator && hostVmServicePort != null)
-        '--vm-service-port=$hostVmServicePort',
-      // Tell the VM service to listen on all interfaces, don't restrict to the loopback.
+        '--observatory-port=$hostVmServicePort',
+      // Tell the observatory to listen on all interfaces, don't restrict to the loopback.
       if (interfaceType == IOSDeviceConnectionInterface.network)
-        '--vm-service-host=${ipv6 ? '::0' : '0.0.0.0'}',
+        '--observatory-host=${ipv6 ? '::0' : '0.0.0.0'}',
     ];
   }
 
@@ -1066,21 +1066,21 @@
 }
 
 class LaunchResult {
-  LaunchResult.succeeded({ this.vmServiceUri }) : started = true;
+  LaunchResult.succeeded({ this.observatoryUri }) : started = true;
   LaunchResult.failed()
     : started = false,
-      vmServiceUri = null;
+      observatoryUri = null;
 
-  bool get hasVmService => vmServiceUri != null;
+  bool get hasObservatory => observatoryUri != null;
 
   final bool started;
-  final Uri? vmServiceUri;
+  final Uri? observatoryUri;
 
   @override
   String toString() {
     final StringBuffer buf = StringBuffer('started=$started');
-    if (vmServiceUri != null) {
-      buf.write(', vmService=$vmServiceUri');
+    if (observatoryUri != null) {
+      buf.write(', observatory=$observatoryUri');
     }
     return buf.toString();
   }
@@ -1109,9 +1109,9 @@
 
 /// Describes an app running on the device.
 class DiscoveredApp {
-  DiscoveredApp(this.id, this.vmServicePort);
+  DiscoveredApp(this.id, this.observatoryPort);
   final String id;
-  final int vmServicePort;
+  final int observatoryPort;
 }
 
 // An empty device log reader
diff --git a/packages/flutter_tools/lib/src/drive/drive_service.dart b/packages/flutter_tools/lib/src/drive/drive_service.dart
index b3340db..30c0d04 100644
--- a/packages/flutter_tools/lib/src/drive/drive_service.dart
+++ b/packages/flutter_tools/lib/src/drive/drive_service.dart
@@ -196,7 +196,7 @@
       throwToolExit('Application failed to start. Will not run test. Quitting.', exitCode: 1);
     }
     return reuseApplication(
-      result.vmServiceUri!,
+      result.observatoryUri!,
       device,
       debuggingOptions,
       ipv6,
diff --git a/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart b/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
index 0f06943..60744d4 100644
--- a/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
+++ b/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
@@ -52,11 +52,11 @@
 
 Future<void> _kDefaultDartDevelopmentServiceStarter(
   Device device,
-  Uri vmServiceUri,
+  Uri observatoryUri,
   bool disableServiceAuthCodes,
 ) async {
   await device.dds.startDartDevelopmentService(
-    vmServiceUri,
+    observatoryUri,
     hostPort: 0,
     ipv6: true,
     disableServiceAuthCodes: disableServiceAuthCodes,
@@ -458,12 +458,12 @@
     globals.printTrace(
         'App started in a non-release mode. Setting up vmservice connection.');
 
-    // In a debug or profile build, try to find the vmService uri.
+    // In a debug or profile build, try to find the observatory uri.
     final FuchsiaIsolateDiscoveryProtocol discovery =
         getIsolateDiscoveryProtocol(appName);
     try {
-      final Uri vmServiceUri = await discovery.uri;
-      return LaunchResult.succeeded(vmServiceUri: vmServiceUri);
+      final Uri observatoryUri = await discovery.uri;
+      return LaunchResult.succeeded(observatoryUri: observatoryUri);
     } finally {
       discovery.dispose();
     }
@@ -620,7 +620,7 @@
     return addr;
   }();
 
-  /// List the ports currently running a dart vmService.
+  /// List the ports currently running a dart observatory.
   Future<List<int>> servicePorts() async {
     const String findCommand = 'find /hub -name vmservice-port';
     final RunResult findResult = await shell(findCommand);
diff --git a/packages/flutter_tools/lib/src/globals.dart b/packages/flutter_tools/lib/src/globals.dart
index 596c5a6..260eaf5 100644
--- a/packages/flutter_tools/lib/src/globals.dart
+++ b/packages/flutter_tools/lib/src/globals.dart
@@ -284,4 +284,5 @@
 const String kDefaultFrameworkChannel = 'master';
 
 // Used to build RegExp instances which can detect the VM service message.
-final RegExp kVMServiceMessageRegExp = RegExp(r'The Dart VM service is listening on ((http|//)[a-zA-Z0-9:/=_\-\.\[\]]+)');
+const String kServicePrefixRegExp = '(?:Observatory|The Dart VM service is)';
+final RegExp kVMServiceMessageRegExp = RegExp(kServicePrefixRegExp + r' listening on ((http|//)[a-zA-Z0-9:/=_\-\.\[\]]+)');
diff --git a/packages/flutter_tools/lib/src/ios/devices.dart b/packages/flutter_tools/lib/src/ios/devices.dart
index 00db24a..c58de37 100644
--- a/packages/flutter_tools/lib/src/ios/devices.dart
+++ b/packages/flutter_tools/lib/src/ios/devices.dart
@@ -357,10 +357,10 @@
       'Installing and launching...',
     );
     try {
-      ProtocolDiscovery? vmServiceDiscovery;
+      ProtocolDiscovery? observatoryDiscovery;
       int installationResult = 1;
       if (debuggingOptions.debuggingEnabled) {
-        _logger.printTrace('Debugging is enabled, connecting to vmService');
+        _logger.printTrace('Debugging is enabled, connecting to observatory');
         final DeviceLogReader deviceLogReader = getLogReader(app: package);
 
         // If the device supports syslog reading, prefer launching the app without
@@ -379,7 +379,7 @@
           }
         }
         // Don't port foward if debugging with a network device.
-        vmServiceDiscovery = ProtocolDiscovery.vmService(
+        observatoryDiscovery = ProtocolDiscovery.observatory(
           deviceLogReader,
           portForwarder: interfaceType == IOSDeviceConnectionInterface.network ? null : portForwarder,
           hostPort: debuggingOptions.hostVmServicePort,
@@ -435,7 +435,7 @@
       Uri? localUri;
       if (interfaceType == IOSDeviceConnectionInterface.network) {
         // Wait for Dart VM Service to start up.
-        final Uri? serviceURL = await vmServiceDiscovery?.uri;
+        final Uri? serviceURL = await observatoryDiscovery?.uri;
         if (serviceURL == null) {
           await iosDeployDebugger?.stopAndDumpBacktrace();
           return LaunchResult.failed();
@@ -463,14 +463,14 @@
 
         mDNSLookupTimer.cancel();
       } else {
-        localUri = await vmServiceDiscovery?.uri;
+        localUri = await observatoryDiscovery?.uri;
       }
       timer.cancel();
       if (localUri == null) {
         await iosDeployDebugger?.stopAndDumpBacktrace();
         return LaunchResult.failed();
       }
-      return LaunchResult.succeeded(vmServiceUri: localUri);
+      return LaunchResult.succeeded(observatoryUri: localUri);
     } on ProcessException catch (e) {
       await iosDeployDebugger?.stopAndDumpBacktrace();
       _logger.printError(e.message);
diff --git a/packages/flutter_tools/lib/src/ios/simulators.dart b/packages/flutter_tools/lib/src/ios/simulators.dart
index c4b852a..1c9bf39 100644
--- a/packages/flutter_tools/lib/src/ios/simulators.dart
+++ b/packages/flutter_tools/lib/src/ios/simulators.dart
@@ -450,9 +450,9 @@
       platformArgs,
     );
 
-    ProtocolDiscovery? vmServiceDiscovery;
+    ProtocolDiscovery? observatoryDiscovery;
     if (debuggingOptions.debuggingEnabled) {
-      vmServiceDiscovery = ProtocolDiscovery.vmService(
+      observatoryDiscovery = ProtocolDiscovery.observatory(
         getLogReader(app: package),
         ipv6: ipv6,
         hostPort: debuggingOptions.hostVmServicePort,
@@ -485,13 +485,13 @@
     }
 
     // Wait for the service protocol port here. This will complete once the
-    // device has printed "Dart VM Service is listening on..."
-    globals.printTrace('Waiting for VM Service port to be available...');
+    // device has printed "Observatory is listening on..."
+    globals.printTrace('Waiting for observatory port to be available...');
 
     try {
-      final Uri? deviceUri = await vmServiceDiscovery?.uri;
+      final Uri? deviceUri = await observatoryDiscovery?.uri;
       if (deviceUri != null) {
-        return LaunchResult.succeeded(vmServiceUri: deviceUri);
+        return LaunchResult.succeeded(observatoryUri: deviceUri);
       }
       globals.printError(
         'Error waiting for a debug connection: '
@@ -500,7 +500,7 @@
     } on Exception catch (error) {
       globals.printError('Error waiting for a debug connection: $error');
     } finally {
-      await vmServiceDiscovery?.cancel();
+      await observatoryDiscovery?.cancel();
     }
     return LaunchResult.failed();
   }
diff --git a/packages/flutter_tools/lib/src/macos/application_package.dart b/packages/flutter_tools/lib/src/macos/application_package.dart
index f022cf0..3debf60 100644
--- a/packages/flutter_tools/lib/src/macos/application_package.dart
+++ b/packages/flutter_tools/lib/src/macos/application_package.dart
@@ -29,7 +29,7 @@
   /// `applicationBinary` is the path to the framework directory created by an
   /// Xcode build. By default, this is located under
   /// "~/Library/Developer/Xcode/DerivedData/" and contains an executable
-  /// which is expected to start the application and send the vmService
+  /// which is expected to start the application and send the observatory
   /// port over stdout.
   static MacOSApp? fromPrebuiltApp(FileSystemEntity applicationBinary) {
     final _BundleInfo? bundleInfo = _executableFromBundle(applicationBinary);
diff --git a/packages/flutter_tools/lib/src/mdns_discovery.dart b/packages/flutter_tools/lib/src/mdns_discovery.dart
index bff5d06..c4b1f8f 100644
--- a/packages/flutter_tools/lib/src/mdns_discovery.dart
+++ b/packages/flutter_tools/lib/src/mdns_discovery.dart
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'dart:async';
-
 import 'package:meta/meta.dart';
 import 'package:multicast_dns/multicast_dns.dart';
 
@@ -41,7 +39,7 @@
   final Usage _flutterUsage;
 
   @visibleForTesting
-  static const String dartVmServiceName = '_dartVmService._tcp.local';
+  static const String dartVmServiceName = '_dartobservatory._tcp.local';
 
   static MDnsVmServiceDiscovery? get instance => context.get<MDnsVmServiceDiscovery>();
 
diff --git a/packages/flutter_tools/lib/src/preview_device.dart b/packages/flutter_tools/lib/src/preview_device.dart
index aff36ee..9c2a7bb 100644
--- a/packages/flutter_tools/lib/src/preview_device.dart
+++ b/packages/flutter_tools/lib/src/preview_device.dart
@@ -139,16 +139,16 @@
     _process = process;
     _logReader.initializeProcess(process);
 
-    final ProtocolDiscovery vmServiceDiscovery = ProtocolDiscovery.vmService(_logReader,
+    final ProtocolDiscovery observatoryDiscovery = ProtocolDiscovery.observatory(_logReader,
       devicePort: debuggingOptions.deviceVmServicePort,
       hostPort: debuggingOptions.hostVmServicePort,
       ipv6: ipv6,
       logger: _logger,
     );
     try {
-      final Uri? vmServiceUri = await vmServiceDiscovery.uri;
-      if (vmServiceUri != null) {
-        return LaunchResult.succeeded(vmServiceUri: vmServiceUri);
+      final Uri? observatoryUri = await observatoryDiscovery.uri;
+      if (observatoryUri != null) {
+        return LaunchResult.succeeded(observatoryUri: observatoryUri);
       }
       _logger.printError(
         'Error waiting for a debug connection: '
@@ -157,7 +157,7 @@
     } on Exception catch (error) {
       _logger.printError('Error waiting for a debug connection: $error');
     } finally {
-      await vmServiceDiscovery.cancel();
+      await observatoryDiscovery.cancel();
     }
     return LaunchResult.failed();
   }
diff --git a/packages/flutter_tools/lib/src/protocol_discovery.dart b/packages/flutter_tools/lib/src/protocol_discovery.dart
index 197346c..a220863 100644
--- a/packages/flutter_tools/lib/src/protocol_discovery.dart
+++ b/packages/flutter_tools/lib/src/protocol_discovery.dart
@@ -29,7 +29,7 @@
     );
   }
 
-  factory ProtocolDiscovery.vmService(
+  factory ProtocolDiscovery.observatory(
     DeviceLogReader logReader, {
     DevicePortForwarder? portForwarder,
     Duration? throttleDuration,
@@ -38,10 +38,10 @@
     required bool ipv6,
     required Logger logger,
   }) {
-    const String kVmServiceService = 'VM Service';
+    const String kObservatoryService = 'Observatory';
     return ProtocolDiscovery._(
       logReader,
-      kVmServiceService,
+      kObservatoryService,
       portForwarder: portForwarder,
       throttleDuration: throttleDuration ?? const Duration(milliseconds: 200),
       hostPort: hostPort,
@@ -59,7 +59,7 @@
   final bool ipv6;
   final Logger _logger;
 
-  /// The time to wait before forwarding a new VM Service URIs from [logReader].
+  /// The time to wait before forwarding a new observatory URIs from [logReader].
   final Duration throttleDuration;
 
   StreamSubscription<String>? _deviceLogSubscription;
@@ -81,12 +81,12 @@
 
   /// The discovered service URLs.
   ///
-  /// When a new VM Service URL: is available in [logReader],
+  /// When a new observatory URL: is available in [logReader],
   /// the URLs are forwarded at most once every [throttleDuration].
   /// Returns when no event has been observed for [throttleTimeout].
   ///
   /// Port forwarding is only attempted when this is invoked,
-  /// for each VM Service URL in the stream.
+  /// for each observatory URL in the stream.
   Stream<Uri> get uris {
     final Stream<Uri> uriStream = _uriStreamController.stream
       .transform(_throttle<Uri>(
@@ -107,7 +107,7 @@
     return globals.kVMServiceMessageRegExp.firstMatch(line);
   }
 
-  Uri? _getVmServiceUri(String line) {
+  Uri? _getObservatoryUri(String line) {
     final Match? match = _getPatternMatch(line);
     if (match != null) {
       return Uri.parse(match[1]!);
@@ -118,7 +118,7 @@
   void _handleLine(String line) {
     Uri? uri;
     try {
-      uri = _getVmServiceUri(line);
+      uri = _getObservatoryUri(line);
     } on FormatException catch (error, stackTrace) {
       _uriStreamController.addError(error, stackTrace);
     }
@@ -126,7 +126,7 @@
       return;
     }
     if (devicePort != null && uri.port != devicePort) {
-      _logger.printTrace('skipping potential VM Service $uri due to device port mismatch');
+      _logger.printTrace('skipping potential observatory $uri due to device port mismatch');
       return;
     }
     _uriStreamController.add(uri);
diff --git a/packages/flutter_tools/lib/src/proxied_devices/devices.dart b/packages/flutter_tools/lib/src/proxied_devices/devices.dart
index 40d560a..2f6bed2 100644
--- a/packages/flutter_tools/lib/src/proxied_devices/devices.dart
+++ b/packages/flutter_tools/lib/src/proxied_devices/devices.dart
@@ -245,12 +245,12 @@
       'userIdentifier': userIdentifier,
     }));
     final bool started = _cast<bool>(result['started']);
-    final String? vmServiceUriStr = _cast<String?>(result['vmServiceUri']);
-    final Uri? vmServiceUri = vmServiceUriStr == null ? null : Uri.parse(vmServiceUriStr);
+    final String? observatoryUriStr = _cast<String?>(result['observatoryUri']);
+    final Uri? observatoryUri = observatoryUriStr == null ? null : Uri.parse(observatoryUriStr);
     if (started) {
-      if (vmServiceUri != null) {
-        final int hostPort = await proxiedPortForwarder.forward(vmServiceUri.port);
-        return LaunchResult.succeeded(vmServiceUri: vmServiceUri.replace(port: hostPort));
+      if (observatoryUri != null) {
+        final int hostPort = await proxiedPortForwarder.forward(observatoryUri.port);
+        return LaunchResult.succeeded(observatoryUri: observatoryUri.replace(port: hostPort));
       } else {
         return LaunchResult.succeeded();
       }
diff --git a/packages/flutter_tools/lib/src/resident_devtools_handler.dart b/packages/flutter_tools/lib/src/resident_devtools_handler.dart
index 2dc0aae..0d210fd 100644
--- a/packages/flutter_tools/lib/src/resident_devtools_handler.dart
+++ b/packages/flutter_tools/lib/src/resident_devtools_handler.dart
@@ -114,7 +114,7 @@
     if (_residentRunner.reportedDebuggers) {
       // Since the DevTools only just became available, we haven't had a chance to
       // report their URLs yet. Do so now.
-      _residentRunner.printDebuggerList(includeVmService: false);
+      _residentRunner.printDebuggerList(includeObservatory: false);
     }
   }
 
diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart
index 6844423..b19b771 100644
--- a/packages/flutter_tools/lib/src/resident_runner.dart
+++ b/packages/flutter_tools/lib/src/resident_runner.dart
@@ -224,21 +224,21 @@
   final DevelopmentSceneImporter? developmentSceneImporter;
 
   DevFSWriter? devFSWriter;
-  Stream<Uri?>? vmServiceUris;
+  Stream<Uri?>? observatoryUris;
   FlutterVmService? vmService;
   DevFS? devFS;
   ApplicationPackage? package;
   // ignore: cancel_subscriptions
   StreamSubscription<String>? _loggingSubscription;
-  bool? _isListeningForVmServiceUri;
+  bool? _isListeningForObservatoryUri;
 
-  /// Whether the stream [vmServiceUris] is still open.
-  bool get isWaitingForVmService => _isListeningForVmServiceUri ?? false;
+  /// Whether the stream [observatoryUris] is still open.
+  bool get isWaitingForObservatory => _isListeningForObservatoryUri ?? false;
 
   /// If the [reloadSources] parameter is not null the 'reloadSources' service
   /// will be registered.
   /// The 'reloadSources' service can be used by other Service Protocol clients
-  /// connected to the VM (e.g. VmService) to request a reload of the source
+  /// connected to the VM (e.g. Observatory) to request a reload of the source
   /// code of the running application (a.k.a. HotReload).
   /// The 'compileExpression' service can be used to compile user-provided
   /// expressions requested during debugging of the application.
@@ -262,29 +262,29 @@
     late StreamSubscription<void> subscription;
     bool isWaitingForVm = false;
 
-    subscription = vmServiceUris!.listen((Uri? vmServiceUri) async {
+    subscription = observatoryUris!.listen((Uri? observatoryUri) async {
       // FYI, this message is used as a sentinel in tests.
-      globals.printTrace('Connecting to service protocol: $vmServiceUri');
+      globals.printTrace('Connecting to service protocol: $observatoryUri');
       isWaitingForVm = true;
       bool existingDds = false;
       FlutterVmService? service;
       if (enableDds) {
         void handleError(Exception e, StackTrace st) {
-          globals.printTrace('Fail to connect to service protocol: $vmServiceUri: $e');
+          globals.printTrace('Fail to connect to service protocol: $observatoryUri: $e');
           if (!completer.isCompleted) {
-            completer.completeError('failed to connect to $vmServiceUri', st);
+            completer.completeError('failed to connect to $observatoryUri', st);
           }
         }
-        // First check if the VM service is actually listening on vmServiceUri as
+        // First check if the VM service is actually listening on observatoryUri as
         // this may not be the case when scraping logcat for URIs. If this URI is
         // from an old application instance, we shouldn't try and start DDS.
         try {
-          service = await connectToVmService(vmServiceUri!, logger: globals.logger);
+          service = await connectToVmService(observatoryUri!, logger: globals.logger);
           await service.dispose();
         } on Exception catch (exception) {
-          globals.printTrace('Fail to connect to service protocol: $vmServiceUri: $exception');
-          if (!completer.isCompleted && !_isListeningForVmServiceUri!) {
-            completer.completeError('failed to connect to $vmServiceUri');
+          globals.printTrace('Fail to connect to service protocol: $observatoryUri: $exception');
+          if (!completer.isCompleted && !_isListeningForObservatoryUri!) {
+            completer.completeError('failed to connect to $observatoryUri');
           }
           return;
         }
@@ -294,7 +294,7 @@
         // attaching to a VM service with existing clients, etc.).
         try {
           await device!.dds.startDartDevelopmentService(
-            vmServiceUri,
+            observatoryUri,
             hostPort: ddsPort,
             ipv6: ipv6,
             disableServiceAuthCodes: disableServiceAuthCodes,
@@ -324,7 +324,7 @@
         service = await Future.any<dynamic>(
           <Future<dynamic>>[
             connectToVmService(
-              enableDds ? (device!.dds.uri ?? vmServiceUri!): vmServiceUri!,
+              enableDds ? (device!.dds.uri ?? observatoryUri!): observatoryUri!,
               reloadSources: reloadSources,
               restart: restart,
               compileExpression: compileExpression,
@@ -338,30 +338,30 @@
           ]
         ) as FlutterVmService?;
       } on Exception catch (exception) {
-        globals.printTrace('Fail to connect to service protocol: $vmServiceUri: $exception');
-        if (!completer.isCompleted && !_isListeningForVmServiceUri!) {
-          completer.completeError('failed to connect to $vmServiceUri');
+        globals.printTrace('Fail to connect to service protocol: $observatoryUri: $exception');
+        if (!completer.isCompleted && !_isListeningForObservatoryUri!) {
+          completer.completeError('failed to connect to $observatoryUri');
         }
         return;
       }
       if (completer.isCompleted) {
         return;
       }
-      globals.printTrace('Successfully connected to service protocol: $vmServiceUri');
+      globals.printTrace('Successfully connected to service protocol: $observatoryUri');
 
       vmService = service;
       (await device!.getLogReader(app: package)).connectedVMService = vmService;
       completer.complete();
       await subscription.cancel();
     }, onError: (dynamic error) {
-      globals.printTrace('Fail to handle VM Service URI: $error');
+      globals.printTrace('Fail to handle observatory URI: $error');
     }, onDone: () {
-      _isListeningForVmServiceUri = false;
+      _isListeningForObservatoryUri = false;
       if (!completer.isCompleted && !isWaitingForVm) {
         completer.completeError(Exception('connection to device ended too early'));
       }
     });
-    _isListeningForVmServiceUri = true;
+    _isListeningForObservatoryUri = true;
     return completer.future;
   }
 
@@ -471,12 +471,12 @@
       await stopEchoingDeviceLog();
       return 2;
     }
-    if (result.hasVmService) {
-      vmServiceUris = Stream<Uri?>
-        .value(result.vmServiceUri)
+    if (result.hasObservatory) {
+      observatoryUris = Stream<Uri?>
+        .value(result.observatoryUri)
         .asBroadcastStream();
     } else {
-      vmServiceUris = const Stream<Uri>
+      observatoryUris = const Stream<Uri>
         .empty()
         .asBroadcastStream();
     }
@@ -536,12 +536,12 @@
       await stopEchoingDeviceLog();
       return 2;
     }
-    if (result.hasVmService) {
-      vmServiceUris = Stream<Uri?>
-        .value(result.vmServiceUri)
+    if (result.hasObservatory) {
+      observatoryUris = Stream<Uri?>
+        .value(result.observatoryUri)
         .asBroadcastStream();
     } else {
-      vmServiceUris = const Stream<Uri>
+      observatoryUris = const Stream<Uri>
         .empty()
         .asBroadcastStream();
     }
@@ -1131,10 +1131,10 @@
   @override
   bool hotMode;
 
-  /// Returns true if every device is streaming vmService URIs.
-  bool get isWaitingForVmService {
+  /// Returns true if every device is streaming observatory URIs.
+  bool get isWaitingForObservatory {
     return flutterDevices.every((FlutterDevice? device) {
-      return device!.isWaitingForVmService;
+      return device!.isWaitingForObservatory;
     });
   }
 
@@ -1478,7 +1478,7 @@
   bool get reportedDebuggers => _reportedDebuggers;
   bool _reportedDebuggers = false;
 
-  void printDebuggerList({ bool includeVmService = true, bool includeDevtools = true }) {
+  void printDebuggerList({ bool includeObservatory = true, bool includeDevtools = true }) {
     final DevToolsServerAddress? devToolsServerAddress = residentDevtoolsHandler!.activeDevToolsServer;
     if (!residentDevtoolsHandler!.readyToAnnounce) {
       includeDevtools = false;
@@ -1488,10 +1488,10 @@
       if (device!.vmService == null) {
         continue;
       }
-      if (includeVmService) {
+      if (includeObservatory) {
         // Caution: This log line is parsed by device lab tests.
         globals.printStatus(
-          'A Dart VM Service on ${device.device!.name} is available at: '
+          'An Observatory debugger and profiler on ${device.device!.name} is available at: '
           '${device.vmService!.httpAddress}',
         );
       }
diff --git a/packages/flutter_tools/lib/src/run_cold.dart b/packages/flutter_tools/lib/src/run_cold.dart
index f8dc2571..a8ba6cf 100644
--- a/packages/flutter_tools/lib/src/run_cold.dart
+++ b/packages/flutter_tools/lib/src/run_cold.dart
@@ -69,7 +69,7 @@
       return 1;
     }
 
-    // Connect to the VM Service.
+    // Connect to observatory.
     if (debuggingEnabled) {
       try {
         await connectToServiceProtocol(allowExistingDdsInstance: false);
@@ -93,7 +93,7 @@
       }
     }
 
-    if (flutterDevices.first.vmServiceUris != null) {
+    if (flutterDevices.first.observatoryUris != null) {
       // For now, only support one debugger connection.
       connectionInfoCompleter?.complete(DebugConnectionInfo(
         httpUri: flutterDevices.first.vmService!.httpAddress,
diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart
index a8c8d45..e8c8955 100644
--- a/packages/flutter_tools/lib/src/runner/flutter_command.dart
+++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart
@@ -139,8 +139,8 @@
   /// Will be `null` until the top-most command has begun execution.
   static FlutterCommand? get current => context.get<FlutterCommand>();
 
-  /// The option name for a custom VM Service port.
-  static const String vmServicePortOption = 'vm-service-port';
+  /// The option name for a custom observatory port.
+  static const String observatoryPortOption = 'observatory-port';
 
   /// The option name for a custom DevTools server address.
   static const String kDevToolsServerAddress = 'devtools-server-address';
@@ -379,15 +379,14 @@
       );
   }
 
-  /// Adds options for connecting to the Dart VM Service port.
+  /// Adds options for connecting to the Dart VM observatory port.
   void usesPortOptions({ required bool verboseHelp }) {
-    argParser.addOption(vmServicePortOption,
-        aliases: const <String>['observatory-port'],
+    argParser.addOption(observatoryPortOption,
         help: '(deprecated; use host-vmservice-port instead) '
-              'Listen to the given port for a Dart VM Service connection.\n'
+              'Listen to the given port for an observatory debugger connection.\n'
               'Specifying port 0 (the default) will find a random free port.\n '
               'if the Dart Development Service (DDS) is enabled, this will not be the port '
-              'of the VmService instance advertised on the command line.',
+              'of the Observatory instance advertised on the command line.',
         hide: !verboseHelp,
     );
     argParser.addOption('device-vmservice-port',
@@ -491,19 +490,19 @@
     return ddsEnabled;
   }();
 
-  bool get _hostVmServicePortProvided => (argResults?.wasParsed('vm-service-port') ?? false)
+  bool get _hostVmServicePortProvided => (argResults?.wasParsed('observatory-port') ?? false)
       || (argResults?.wasParsed('host-vmservice-port') ?? false);
 
   int _tryParseHostVmservicePort() {
-    final String? vmServicePort = stringArgDeprecated('vm-service-port');
+    final String? observatoryPort = stringArgDeprecated('observatory-port');
     final String? hostPort = stringArgDeprecated('host-vmservice-port');
-    if (vmServicePort == null && hostPort == null) {
-      throwToolExit('Invalid port for `--vm-service-port/--host-vmservice-port`');
+    if (observatoryPort == null && hostPort == null) {
+      throwToolExit('Invalid port for `--observatory-port/--host-vmservice-port`');
     }
     try {
-      return int.parse((vmServicePort ?? hostPort)!);
+      return int.parse((observatoryPort ?? hostPort)!);
     } on FormatException catch (error) {
-      throwToolExit('Invalid port for `--vm-service-port/--host-vmservice-port`: $error');
+      throwToolExit('Invalid port for `--observatory-port/--host-vmservice-port`: $error');
     }
   }
 
@@ -529,10 +528,10 @@
     return null;
   }
 
-  /// Gets the vmservice port provided to in the 'vm-service-port' or
+  /// Gets the vmservice port provided to in the 'observatory-port' or
   /// 'host-vmservice-port option.
   ///
-  /// Only one of "host-vmservice-port" and "vm-service-port" may be
+  /// Only one of "host-vmservice-port" and "observatory-port" may be
   /// specified.
   ///
   /// If no port is set, returns null.
@@ -540,9 +539,9 @@
     if (!_usesPortOption || !_hostVmServicePortProvided) {
       return null;
     }
-    if ((argResults?.wasParsed('vm-service-port') ?? false)
+    if ((argResults?.wasParsed('observatory-port') ?? false)
         && (argResults?.wasParsed('host-vmservice-port') ?? false)) {
-      throwToolExit('Only one of "--vm-service-port" and '
+      throwToolExit('Only one of "--observatory-port" and '
         '"--host-vmservice-port" may be specified.');
     }
     // If DDS is enabled and no explicit DDS port is provided, use the
diff --git a/packages/flutter_tools/lib/src/test/coverage_collector.dart b/packages/flutter_tools/lib/src/test/coverage_collector.dart
index 2dd3aa3..02cd152 100644
--- a/packages/flutter_tools/lib/src/test/coverage_collector.dart
+++ b/packages/flutter_tools/lib/src/test/coverage_collector.dart
@@ -100,18 +100,18 @@
   /// has been run to completion so that all coverage data has been recorded.
   ///
   /// The returned [Future] completes when the coverage is collected.
-  Future<void> collectCoverageIsolate(Uri vmServiceUri) async {
-    _logMessage('collecting coverage data from $vmServiceUri...');
+  Future<void> collectCoverageIsolate(Uri observatoryUri) async {
+    _logMessage('collecting coverage data from $observatoryUri...');
     final Map<String, dynamic> data = await collect(
-        vmServiceUri, libraryNames, branchCoverage: branchCoverage);
+        observatoryUri, libraryNames, branchCoverage: branchCoverage);
 
-    _logMessage('($vmServiceUri): collected coverage data; merging...');
+    _logMessage('($observatoryUri): collected coverage data; merging...');
     _addHitmap(await coverage.HitMap.parseJson(
       data['coverage'] as List<Map<String, dynamic>>,
       packagePath: packageDirectory,
       checkIgnoredLines: true,
     ));
-    _logMessage('($vmServiceUri): done merging coverage data into global coverage map.');
+    _logMessage('($observatoryUri): done merging coverage data into global coverage map.');
   }
 
   /// Collects coverage for the given [Process] using the given `port`.
@@ -136,11 +136,11 @@
       test: (Object error) => error is TestDeviceException,
     );
 
-    final Future<void> collectionComplete = testDevice.vmServiceUri
-      .then((Uri? vmServiceUri) {
-        _logMessage('collecting coverage data from $testDevice at $vmServiceUri...');
+    final Future<void> collectionComplete = testDevice.observatoryUri
+      .then((Uri? observatoryUri) {
+        _logMessage('collecting coverage data from $testDevice at $observatoryUri...');
         return collect(
-            vmServiceUri!, libraryNames, serviceOverride: serviceOverride,
+            observatoryUri!, libraryNames, serviceOverride: serviceOverride,
             branchCoverage: branchCoverage)
           .then<void>((Map<String, dynamic> result) {
             _logMessage('Collected coverage data.');
diff --git a/packages/flutter_tools/lib/src/test/event_printer.dart b/packages/flutter_tools/lib/src/test/event_printer.dart
index 3cc572a..4c99bf7 100644
--- a/packages/flutter_tools/lib/src/test/event_printer.dart
+++ b/packages/flutter_tools/lib/src/test/event_printer.dart
@@ -17,10 +17,10 @@
   final TestWatcher? _parent;
 
   @override
-  void handleStartedDevice(Uri? vmServiceUri) {
+  void handleStartedDevice(Uri? observatoryUri) {
     _sendEvent('test.startedProcess',
-        <String, dynamic>{'vmServiceUri': vmServiceUri?.toString()});
-    _parent?.handleStartedDevice(vmServiceUri);
+        <String, dynamic>{'observatoryUri': observatoryUri?.toString()});
+    _parent?.handleStartedDevice(observatoryUri);
   }
 
   @override
diff --git a/packages/flutter_tools/lib/src/test/flutter_platform.dart b/packages/flutter_tools/lib/src/test/flutter_platform.dart
index c7a9840..b8cc9d5 100644
--- a/packages/flutter_tools/lib/src/test/flutter_platform.dart
+++ b/packages/flutter_tools/lib/src/test/flutter_platform.dart
@@ -34,7 +34,7 @@
 import 'watcher.dart';
 
 /// The address at which our WebSocket server resides and at which the sky_shell
-/// processes will host the VmService server.
+/// processes will host the Observatory server.
 final Map<InternetAddressType, InternetAddress> _kHosts = <InternetAddressType, InternetAddress>{
   InternetAddressType.IPv4: InternetAddress.loopbackIPv4,
   InternetAddressType.IPv6: InternetAddress.loopbackIPv6,
@@ -46,13 +46,13 @@
 ///
 /// On systems where each [FlutterPlatform] is only used to run one test suite
 /// (that is, one Dart file with a `*_test.dart` file name and a single `void
-/// main()`), you can set a VM Service port explicitly.
+/// main()`), you can set an observatory port explicitly.
 FlutterPlatform installHook({
   TestWrapper testWrapper = const TestWrapper(),
   required String shellPath,
   required DebuggingOptions debuggingOptions,
   TestWatcher? watcher,
-  bool enableVmService = false,
+  bool enableObservatory = false,
   bool machine = false,
   String? precompiledDillPath,
   Map<String, String>? precompiledDillFiles,
@@ -68,7 +68,7 @@
   TestTimeRecorder? testTimeRecorder,
   UriConverter? uriConverter,
 }) {
-  assert(enableVmService || (!debuggingOptions.startPaused && debuggingOptions.hostVmServicePort == null));
+  assert(enableObservatory || (!debuggingOptions.startPaused && debuggingOptions.hostVmServicePort == null));
 
   // registerPlatformPlugin can be injected for testing since it's not very mock-friendly.
   platformPluginRegistration ??= (FlutterPlatform platform) {
@@ -84,7 +84,7 @@
     debuggingOptions: debuggingOptions,
     watcher: watcher,
     machine: machine,
-    enableVmService: enableVmService,
+    enableObservatory: enableObservatory,
     host: _kHosts[serverType],
     precompiledDillPath: precompiledDillPath,
     precompiledDillFiles: precompiledDillFiles,
@@ -276,7 +276,7 @@
     required this.shellPath,
     required this.debuggingOptions,
     this.watcher,
-    this.enableVmService,
+    this.enableObservatory,
     this.machine,
     this.host,
     this.precompiledDillPath,
@@ -295,7 +295,7 @@
   final String shellPath;
   final DebuggingOptions debuggingOptions;
   final TestWatcher? watcher;
-  final bool? enableVmService;
+  final bool? enableObservatory;
   final bool? machine;
   final InternetAddress? host;
   final String? precompiledDillPath;
@@ -357,7 +357,7 @@
     if (_testCount > 0) {
       // Fail if there will be a port conflict.
       if (debuggingOptions.hostVmServicePort != null) {
-        throwToolExit('installHook() was called with a VM Service port or debugger mode enabled, but then more than one test suite was run.');
+        throwToolExit('installHook() was called with an observatory port or debugger mode enabled, but then more than one test suite was run.');
       }
       // Fail if we're passing in a precompiled entry-point.
       if (precompiledDillPath != null) {
@@ -424,7 +424,7 @@
       processManager: globals.processManager,
       logger: globals.logger,
       shellPath: shellPath,
-      enableVmService: enableVmService!,
+      enableObservatory: enableObservatory!,
       machine: machine,
       debuggingOptions: debuggingOptions,
       host: host,
@@ -512,13 +512,13 @@
       await Future.any<void>(<Future<void>>[
         testDevice.finished,
         () async {
-          final Uri? processVmServiceUri = await testDevice.vmServiceUri;
-          if (processVmServiceUri != null) {
-            globals.printTrace('test $ourTestCount: VM Service uri is available at $processVmServiceUri');
+          final Uri? processObservatoryUri = await testDevice.observatoryUri;
+          if (processObservatoryUri != null) {
+            globals.printTrace('test $ourTestCount: Observatory uri is available at $processObservatoryUri');
           } else {
-            globals.printTrace('test $ourTestCount: VM Service uri is not available');
+            globals.printTrace('test $ourTestCount: Observatory uri is not available');
           }
-          watcher?.handleStartedDevice(processVmServiceUri);
+          watcher?.handleStartedDevice(processObservatoryUri);
 
           final StreamChannel<String> remoteChannel = await remoteChannelFuture;
           globals.printTrace('test $ourTestCount: connected to test device, now awaiting test result');
diff --git a/packages/flutter_tools/lib/src/test/flutter_tester_device.dart b/packages/flutter_tools/lib/src/test/flutter_tester_device.dart
index 8a39c2d..9b09f12 100644
--- a/packages/flutter_tools/lib/src/test/flutter_tester_device.dart
+++ b/packages/flutter_tools/lib/src/test/flutter_tester_device.dart
@@ -36,7 +36,7 @@
     required this.logger,
     required this.shellPath,
     required this.debuggingOptions,
-    required this.enableVmService,
+    required this.enableObservatory,
     required this.machine,
     required this.host,
     required this.testAssetDirectory,
@@ -45,8 +45,8 @@
     required this.compileExpression,
     required this.fontConfigManager,
     required this.uriConverter,
-  })  : assert(!debuggingOptions.startPaused || enableVmService),
-        _gotProcessVmServiceUri = enableVmService
+  })  : assert(!debuggingOptions.startPaused || enableObservatory),
+        _gotProcessObservatoryUri = enableObservatory
             ? Completer<Uri?>() : (Completer<Uri?>()..complete());
 
   /// Used for logging to identify the test that is currently being executed.
@@ -57,7 +57,7 @@
   final Logger logger;
   final String shellPath;
   final DebuggingOptions debuggingOptions;
-  final bool enableVmService;
+  final bool enableObservatory;
   final bool? machine;
   final InternetAddress? host;
   final String? testAssetDirectory;
@@ -67,7 +67,7 @@
   final FontConfigManager fontConfigManager;
   final UriConverter? uriConverter;
 
-  final Completer<Uri?> _gotProcessVmServiceUri;
+  final Completer<Uri?> _gotProcessObservatoryUri;
   final Completer<int> _exitCode = Completer<int>();
 
   Process? _process;
@@ -89,7 +89,7 @@
     logger.printTrace('test $id: test harness socket server is running at port:${_server!.port}');
     final List<String> command = <String>[
       shellPath,
-      if (enableVmService) ...<String>[
+      if (enableObservatory) ...<String>[
         // Some systems drive the _FlutterPlatform class in an unusual way, where
         // only one test file is processed at a time, and the operating
         // environment hands out specific ports ahead of time in a cooperative
@@ -99,12 +99,12 @@
         //
         // I mention this only so that you won't be tempted, as I was, to apply
         // the obvious simplification to this code and remove this entire feature.
-        '--vm-service-port=${debuggingOptions.enableDds ? 0 : debuggingOptions.hostVmServicePort }',
+        '--observatory-port=${debuggingOptions.enableDds ? 0 : debuggingOptions.hostVmServicePort }',
         if (debuggingOptions.startPaused) '--start-paused',
         if (debuggingOptions.disableServiceAuthCodes) '--disable-service-auth-codes',
       ]
       else
-        '--disable-vm-service',
+        '--disable-observatory',
       if (host!.type == InternetAddressType.IPv6) '--ipv6',
       if (icudtlPath != null) '--icu-data-file-path=$icudtlPath',
       '--enable-checked-mode',
@@ -154,11 +154,11 @@
     logger.printTrace('test $id: Started flutter_tester process at pid ${_process!.pid}');
 
     // Pipe stdout and stderr from the subprocess to our printStatus console.
-    // We also keep track of what VM Service port the engine used, if any.
+    // We also keep track of what observatory port the engine used, if any.
     _pipeStandardStreamsToConsole(
       process: _process!,
-      reportVmServiceUri: (Uri detectedUri) async {
-        assert(!_gotProcessVmServiceUri.isCompleted);
+      reportObservatoryUri: (Uri detectedUri) async {
+        assert(!_gotProcessObservatoryUri.isCompleted);
         assert(debuggingOptions.hostVmServicePort == null ||
             debuggingOptions.hostVmServicePort == detectedUri.port);
 
@@ -194,11 +194,12 @@
 
         if (debuggingOptions.startPaused && !machine!) {
           logger.printStatus('The test process has been started.');
-          logger.printStatus('You can now connect to it using vmService. To connect, load the following Web site in your browser:');
+          logger.printStatus('You can now connect to it using observatory. To connect, load the following Web site in your browser:');
           logger.printStatus('  $forwardingUri');
           logger.printStatus('You should first set appropriate breakpoints, then resume the test in the debugger.');
         }
-        _gotProcessVmServiceUri.complete(forwardingUri);
+
+        _gotProcessObservatoryUri.complete(forwardingUri);
       },
     );
 
@@ -206,8 +207,8 @@
   }
 
   @override
-  Future<Uri?> get vmServiceUri {
-    return _gotProcessVmServiceUri.future;
+  Future<Uri?> get observatoryUri {
+    return _gotProcessObservatoryUri.future;
   }
 
   @override
@@ -292,7 +293,7 @@
 
   void _pipeStandardStreamsToConsole({
     required Process process,
-    required Future<void> Function(Uri uri) reportVmServiceUri,
+    required Future<void> Function(Uri uri) reportObservatoryUri,
   }) {
     for (final Stream<List<int>> stream in <Stream<List<int>>>[
       process.stderr,
@@ -309,9 +310,9 @@
           if (match != null) {
             try {
               final Uri uri = Uri.parse(match[1]!);
-              await reportVmServiceUri(uri);
+              await reportObservatoryUri(uri);
             } on Exception catch (error) {
-              logger.printError('Could not parse shell VM Service port message: $error');
+              logger.printError('Could not parse shell observatory port message: $error');
             }
           } else {
             logger.printStatus('Shell: $line');
diff --git a/packages/flutter_tools/lib/src/test/flutter_web_goldens.dart b/packages/flutter_tools/lib/src/test/flutter_web_goldens.dart
index ce71755..3cc7c89 100644
--- a/packages/flutter_tools/lib/src/test/flutter_web_goldens.dart
+++ b/packages/flutter_tools/lib/src/test/flutter_web_goldens.dart
@@ -84,7 +84,7 @@
     }
     final List<String> command = <String>[
       shellPath!,
-      '--disable-vm-service',
+      '--disable-observatory',
       '--non-interactive',
       '--packages=${_fileSystem.path.join('.dart_tool', 'package_config.json')}',
       output,
diff --git a/packages/flutter_tools/lib/src/test/integration_test_device.dart b/packages/flutter_tools/lib/src/test/integration_test_device.dart
index 598bcc7..4993090 100644
--- a/packages/flutter_tools/lib/src/test/integration_test_device.dart
+++ b/packages/flutter_tools/lib/src/test/integration_test_device.dart
@@ -35,7 +35,7 @@
 
   ApplicationPackage? _applicationPackage;
   final Completer<void> _finished = Completer<void>();
-  final Completer<Uri> _gotProcessVmServiceUri = Completer<Uri>();
+  final Completer<Uri> _gotProcessObservatoryUri = Completer<Uri>();
 
   /// Starts the device.
   ///
@@ -62,19 +62,19 @@
     if (!launchResult.started) {
       throw TestDeviceException('Unable to start the app on the device.', StackTrace.current);
     }
-    final Uri? vmServiceUri = launchResult.vmServiceUri;
-    if (vmServiceUri == null) {
-      throw TestDeviceException('The VM Service is not available on the test device.', StackTrace.current);
+    final Uri? observatoryUri = launchResult.observatoryUri;
+    if (observatoryUri == null) {
+      throw TestDeviceException('Observatory is not available on the test device.', StackTrace.current);
     }
 
     // No need to set up the log reader because the logs are captured and
     // streamed to the package:test_core runner.
 
-    _gotProcessVmServiceUri.complete(vmServiceUri);
+    _gotProcessObservatoryUri.complete(observatoryUri);
 
     globals.printTrace('test $id: Connecting to vm service');
     final FlutterVmService vmService = await connectToVmService(
-      vmServiceUri,
+      observatoryUri,
       logger: globals.logger,
       compileExpression: compileExpression,
     ).timeout(
@@ -116,7 +116,7 @@
   }
 
   @override
-  Future<Uri> get vmServiceUri => _gotProcessVmServiceUri.future;
+  Future<Uri> get observatoryUri => _gotProcessObservatoryUri.future;
 
   @override
   Future<void> kill() async {
diff --git a/packages/flutter_tools/lib/src/test/runner.dart b/packages/flutter_tools/lib/src/test/runner.dart
index d8a62d8..02789aa 100644
--- a/packages/flutter_tools/lib/src/test/runner.dart
+++ b/packages/flutter_tools/lib/src/test/runner.dart
@@ -30,7 +30,7 @@
     List<String> plainNames = const <String>[],
     String? tags,
     String? excludeTags,
-    bool enableVmService = false,
+    bool enableObservatory = false,
     bool ipv6 = false,
     bool machine = false,
     String? precompiledDillPath,
@@ -67,7 +67,7 @@
     List<String> plainNames = const <String>[],
     String? tags,
     String? excludeTags,
-    bool enableVmService = false,
+    bool enableObservatory = false,
     bool ipv6 = false,
     bool machine = false,
     String? precompiledDillPath,
@@ -192,7 +192,7 @@
       shellPath: shellPath,
       debuggingOptions: debuggingOptions,
       watcher: watcher,
-      enableVmService: enableVmService,
+      enableObservatory: enableObservatory,
       machine: machine,
       serverType: serverType,
       precompiledDillPath: precompiledDillPath,
diff --git a/packages/flutter_tools/lib/src/test/test_device.dart b/packages/flutter_tools/lib/src/test/test_device.dart
index 722fe60..28ff364 100644
--- a/packages/flutter_tools/lib/src/test/test_device.dart
+++ b/packages/flutter_tools/lib/src/test/test_device.dart
@@ -21,8 +21,8 @@
   /// or raw source file.
   Future<StreamChannel<String>> start(String entrypointPath);
 
-  /// Should complete with null if the VM Service is not enabled.
-  Future<Uri?> get vmServiceUri;
+  /// Should complete with null if the observatory is not enabled.
+  Future<Uri?> get observatoryUri;
 
   /// Terminates the test device.
   Future<void> kill();
diff --git a/packages/flutter_tools/lib/src/test/watcher.dart b/packages/flutter_tools/lib/src/test/watcher.dart
index 55b6d14..028bfec 100644
--- a/packages/flutter_tools/lib/src/test/watcher.dart
+++ b/packages/flutter_tools/lib/src/test/watcher.dart
@@ -8,9 +8,9 @@
 abstract class TestWatcher {
   /// Called after the test device starts.
   ///
-  /// If startPaused was true, the caller needs to resume in DevTools to
+  /// If startPaused was true, the caller needs to resume in Observatory to
   /// start running the tests.
-  void handleStartedDevice(Uri? vmServiceUri) { }
+  void handleStartedDevice(Uri? observatoryUri) { }
 
   /// Called after the tests finish but before the test device exits.
   ///
diff --git a/packages/flutter_tools/lib/src/tester/flutter_tester.dart b/packages/flutter_tools/lib/src/tester/flutter_tester.dart
index 9dd9206..162370f 100644
--- a/packages/flutter_tools/lib/src/tester/flutter_tester.dart
+++ b/packages/flutter_tools/lib/src/tester/flutter_tester.dart
@@ -174,11 +174,11 @@
       if (debuggingOptions.disableServiceAuthCodes)
         '--disable-service-auth-codes',
       if (debuggingOptions.hostVmServicePort != null)
-        '--vm-service-port=${debuggingOptions.hostVmServicePort}',
+        '--observatory-port=${debuggingOptions.hostVmServicePort}',
       applicationKernelFilePath,
     ];
 
-    ProtocolDiscovery? vmServiceDiscovery;
+    ProtocolDiscovery? observatoryDiscovery;
     try {
       _logger.printTrace(command.join(' '));
       _process = await _processManager.start(command,
@@ -190,7 +190,7 @@
         return LaunchResult.succeeded();
       }
 
-      vmServiceDiscovery = ProtocolDiscovery.vmService(
+      observatoryDiscovery = ProtocolDiscovery.observatory(
         getLogReader(),
         hostPort: debuggingOptions.hostVmServicePort,
         devicePort: debuggingOptions.deviceVmServicePort,
@@ -199,9 +199,9 @@
       );
       _logReader.initializeProcess(_process!);
 
-      final Uri? vmServiceUri = await vmServiceDiscovery.uri;
-      if (vmServiceUri != null) {
-        return LaunchResult.succeeded(vmServiceUri: vmServiceUri);
+      final Uri? observatoryUri = await observatoryDiscovery.uri;
+      if (observatoryUri != null) {
+        return LaunchResult.succeeded(observatoryUri: observatoryUri);
       }
       _logger.printError(
         'Failed to launch $package: '
@@ -210,7 +210,7 @@
     } on Exception catch (error) {
       _logger.printError('Failed to launch $package: $error');
     } finally {
-      await vmServiceDiscovery?.cancel();
+      await observatoryDiscovery?.cancel();
     }
     return LaunchResult.failed();
   }
diff --git a/packages/flutter_tools/lib/src/tracing.dart b/packages/flutter_tools/lib/src/tracing.dart
index 6e43d19..0ed9456 100644
--- a/packages/flutter_tools/lib/src/tracing.dart
+++ b/packages/flutter_tools/lib/src/tracing.dart
@@ -120,7 +120,7 @@
   }
 }
 
-/// Download the startup trace information from the given VM Service client and
+/// Download the startup trace information from the given observatory client and
 /// store it to `$output/start_up_info.json`.
 Future<void> downloadStartupTrace(FlutterVmService vmService, {
   bool awaitFirstFrame = true,
diff --git a/packages/flutter_tools/lib/src/vmservice.dart b/packages/flutter_tools/lib/src/vmservice.dart
index 2fbb8cd..50d62ff 100644
--- a/packages/flutter_tools/lib/src/vmservice.dart
+++ b/packages/flutter_tools/lib/src/vmservice.dart
@@ -73,7 +73,7 @@
 /// The VM Service Protocol allows clients to register custom services that
 /// can be invoked by other clients through the service protocol itself.
 ///
-/// Clients like VmService use external 'reloadSources' services,
+/// Clients like Observatory use external 'reloadSources' services,
 /// when available, instead of the VM internal one. This allows these clients to
 /// invoke Flutter HotReload when connected to a Flutter Application started in
 /// hot mode.
diff --git a/packages/flutter_tools/lib/src/web/web_device.dart b/packages/flutter_tools/lib/src/web/web_device.dart
index 9c54bb2..17a535f 100644
--- a/packages/flutter_tools/lib/src/web/web_device.dart
+++ b/packages/flutter_tools/lib/src/web/web_device.dart
@@ -153,7 +153,7 @@
       );
     }
     _logger.sendEvent('app.webLaunchUrl', <String, Object>{'url': url, 'launched': launchChrome});
-    return LaunchResult.succeeded(vmServiceUri: Uri.parse(url));
+    return LaunchResult.succeeded(observatoryUri: Uri.parse(url));
   }
 
   @override
@@ -474,7 +474,7 @@
       'Consider using the Chrome or Edge devices for an improved development workflow.'
     );
     _logger.sendEvent('app.webLaunchUrl', <String, Object?>{'url': url, 'launched': false});
-    return LaunchResult.succeeded(vmServiceUri: url != null ? Uri.parse(url): null);
+    return LaunchResult.succeeded(observatoryUri: url != null ? Uri.parse(url): null);
   }
 
   @override
diff --git a/packages/flutter_tools/static/custom-devices.schema.json b/packages/flutter_tools/static/custom-devices.schema.json
index da0a784..8bac5c0 100644
--- a/packages/flutter_tools/static/custom-devices.schema.json
+++ b/packages/flutter_tools/static/custom-devices.schema.json
@@ -91,14 +91,14 @@
             ]
           },
           "runDebug": {
-            "description": "The command to be invoked to run the app in debug mode. The name of the app to be started is available via the ${appName} string interpolation. Make sure the flutter cmdline output is available via this commands stdout/stderr since the SDK needs the \"VM Service is now listening on ...\" message to function. If the forwardPort command is not specified, the VM Service URL will be connected to as-is, without any port forwarding. In that case you need to make sure it is reachable from your host device, possibly via the \"--vm-service-host=<ip>\" engine flag.",
+            "description": "The command to be invoked to run the app in debug mode. The name of the app to be started is available via the ${appName} string interpolation. Make sure the flutter cmdline output is available via this commands stdout/stderr since the SDK needs the \"Observatory is now listening on ...\" message to function. If the forwardPort command is not specified, the observatory URL will be connected to as-is, without any port forwarding. In that case you need to make sure it is reachable from your host device, possibly via the \"--observatory-host=<ip>\" engine flag.",
             "type": "array",
             "items": {
               "type": "string"
             },
             "minItems": 1,
             "default": [
-              "ssh", "pi@raspberrypi", "flutter-pi /tmp/${appName} --vm-service-host=192.168.178.123"
+              "ssh", "pi@raspberrypi", "flutter-pi /tmp/${appName} --observatory-host=192.168.178.123"
             ]
           },
           "forwardPort": {
diff --git a/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart
index 4e716d3..42d91c6 100644
--- a/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart
+++ b/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart
@@ -118,8 +118,8 @@
         testDeviceManager.devices = <Device>[device];
         final Completer<void> completer = Completer<void>();
         final StreamSubscription<String> loggerSubscription = logger.stream.listen((String message) {
-          if (message == '[verbose] VM Service URL on device: http://127.0.0.1:$devicePort') {
-            // The "VM Service URL on device" message is output by the ProtocolDiscovery when it found the VM Service.
+          if (message == '[verbose] Observatory URL on device: http://127.0.0.1:$devicePort') {
+            // The "Observatory URL on device" message is output by the ProtocolDiscovery when it found the observatory.
             completer.complete();
           }
         });
@@ -131,7 +131,7 @@
           bool enableDevTools,
         ) async => 0;
         hotRunner.exited = false;
-        hotRunner.isWaitingForVmService = false;
+        hotRunner.isWaitingForObservatory = false;
         final FakeHotRunnerFactory hotRunnerFactory = FakeHotRunnerFactory()
           ..hotRunner = hotRunner;
 
@@ -186,7 +186,7 @@
           bool enableDevTools,
         ) async => 0;
         hotRunner.exited = false;
-        hotRunner.isWaitingForVmService = false;
+        hotRunner.isWaitingForObservatory = false;
         final FakeHotRunnerFactory hotRunnerFactory = FakeHotRunnerFactory()
           ..hotRunner = hotRunner;
 
@@ -207,8 +207,8 @@
         expect(portForwarder.hostPort, hostPort);
         expect(hotRunnerFactory.devices, hasLength(1));
         final FlutterDevice flutterDevice = hotRunnerFactory.devices.first;
-        final Uri? vmServiceUri = await flutterDevice.vmServiceUris?.first;
-        expect(vmServiceUri.toString(), 'http://127.0.0.1:$hostPort/xyz/');
+        final Uri? observatoryUri = await flutterDevice.observatoryUris?.first;
+        expect(observatoryUri.toString(), 'http://127.0.0.1:$hostPort/xyz/');
       }, overrides: <Type, Generator>{
         FileSystem: () => testFileSystem,
         ProcessManager: () => FakeProcessManager.any(),
@@ -252,7 +252,7 @@
           bool enableDevTools,
         ) async => 0;
         hotRunner.exited = false;
-        hotRunner.isWaitingForVmService = false;
+        hotRunner.isWaitingForObservatory = false;
         final FakeHotRunnerFactory hotRunnerFactory = FakeHotRunnerFactory()
           ..hotRunner = hotRunner;
 
@@ -274,8 +274,8 @@
         expect(hotRunnerFactory.devices, hasLength(1));
 
         final FlutterDevice flutterDevice = hotRunnerFactory.devices.first;
-        final Uri? vmServiceUri = await flutterDevice.vmServiceUris?.first;
-        expect(vmServiceUri.toString(), 'http://111.111.111.111:123/xyz/');
+        final Uri? observatoryUri = await flutterDevice.observatoryUris?.first;
+        expect(observatoryUri.toString(), 'http://111.111.111.111:123/xyz/');
       }, overrides: <Type, Generator>{
         FileSystem: () => testFileSystem,
         ProcessManager: () => FakeProcessManager.any(),
@@ -324,7 +324,7 @@
           bool enableDevTools,
         ) async => 0;
         hotRunner.exited = false;
-        hotRunner.isWaitingForVmService = false;
+        hotRunner.isWaitingForObservatory = false;
         final FakeHotRunnerFactory hotRunnerFactory = FakeHotRunnerFactory()
           ..hotRunner = hotRunner;
 
@@ -346,8 +346,8 @@
         expect(hotRunnerFactory.devices, hasLength(1));
 
         final FlutterDevice flutterDevice = hotRunnerFactory.devices.first;
-        final Uri? vmServiceUri = await flutterDevice.vmServiceUris?.first;
-        expect(vmServiceUri.toString(), 'http://111.111.111.111:123/xyz/');
+        final Uri? observatoryUri = await flutterDevice.observatoryUris?.first;
+        expect(observatoryUri.toString(), 'http://111.111.111.111:123/xyz/');
       }, overrides: <Type, Generator>{
         FileSystem: () => testFileSystem,
         ProcessManager: () => FakeProcessManager.any(),
@@ -400,7 +400,7 @@
           bool enableDevTools,
         ) async => 0;
         hotRunner.exited = false;
-        hotRunner.isWaitingForVmService = false;
+        hotRunner.isWaitingForObservatory = false;
         final FakeHotRunnerFactory hotRunnerFactory = FakeHotRunnerFactory()
           ..hotRunner = hotRunner;
 
@@ -422,8 +422,8 @@
         expect(hotRunnerFactory.devices, hasLength(1));
 
         final FlutterDevice flutterDevice = hotRunnerFactory.devices.first;
-        final Uri? vmServiceUri = await flutterDevice.vmServiceUris?.first;
-        expect(vmServiceUri.toString(), 'http://111.111.111.111:123/xyz/');
+        final Uri? observatoryUri = await flutterDevice.observatoryUris?.first;
+        expect(observatoryUri.toString(), 'http://111.111.111.111:123/xyz/');
       }, overrides: <Type, Generator>{
         FileSystem: () => testFileSystem,
         ProcessManager: () => FakeProcessManager.any(),
@@ -460,7 +460,7 @@
         ),
       });
 
-      testUsingContext('finds VM Service port and forwards', () async {
+      testUsingContext('finds observatory port and forwards', () async {
         device.onGetLogReader = () {
           fakeLogReader.addLine('Foo');
           fakeLogReader.addLine('The Dart VM service is listening on http://127.0.0.1:$devicePort');
@@ -469,8 +469,8 @@
         testDeviceManager.devices = <Device>[device];
         final Completer<void> completer = Completer<void>();
         final StreamSubscription<String> loggerSubscription = logger.stream.listen((String message) {
-          if (message == '[verbose] VM Service URL on device: http://127.0.0.1:$devicePort') {
-            // The "VM Service URL on device" message is output by the ProtocolDiscovery when it found the VM Service.
+          if (message == '[verbose] Observatory URL on device: http://127.0.0.1:$devicePort') {
+            // The "Observatory URL on device" message is output by the ProtocolDiscovery when it found the observatory.
             completer.complete();
           }
         });
@@ -499,7 +499,7 @@
         DeviceManager: () => testDeviceManager,
       });
 
-      testUsingContext('Fails with tool exit on bad VmService uri', () async {
+      testUsingContext('Fails with tool exit on bad Observatory uri', () async {
         device.onGetLogReader = () {
           fakeLogReader.addLine('Foo');
           fakeLogReader.addLine('The Dart VM service is listening on http://127.0.0.1:$devicePort');
@@ -545,7 +545,7 @@
           bool enableDevTools,
         ) async => 0;
         hotRunner.exited = false;
-        hotRunner.isWaitingForVmService = false;
+        hotRunner.isWaitingForObservatory = false;
 
         final FakeHotRunnerFactory hotRunnerFactory = FakeHotRunnerFactory()
           ..hotRunner = hotRunner;
@@ -618,7 +618,7 @@
         DeviceManager: () => testDeviceManager,
       },);
 
-      testUsingContext('exits when vm-service-port is specified and debug-port is not', () async {
+      testUsingContext('exits when observatory-port is specified and debug-port is not', () async {
         device.onGetLogReader = () {
           fakeLogReader.addLine('Foo');
           fakeLogReader.addLine('The Dart VM service is listening on http://127.0.0.1:$devicePort');
@@ -637,10 +637,10 @@
           fileSystem: testFileSystem,
         );
         await expectLater(
-          createTestCommandRunner(command).run(<String>['attach', '--vm-service-port', '100']),
+          createTestCommandRunner(command).run(<String>['attach', '--observatory-port', '100']),
           throwsToolExit(
             message: 'When the --debug-port or --debug-url is unknown, this command does not use '
-                     'the value of --vm-service-port.',
+                     'the value of --observatory-port.',
           ),
         );
       }, overrides: <Type, Generator>{
@@ -735,7 +735,7 @@
         DeviceManager: () => testDeviceManager,
       });
 
-      testUsingContext('skips in ipv4 mode with a provided VM Service port', () async {
+      testUsingContext('skips in ipv4 mode with a provided observatory port', () async {
         testDeviceManager.devices = <Device>[device];
 
         final Completer<void> completer = Completer<void>();
@@ -760,7 +760,7 @@
             'attach',
             '--debug-port',
             '$devicePort',
-            '--vm-service-port',
+            '--observatory-port',
             '$hostPort',
             // Ensure DDS doesn't use hostPort by binding to a random port.
             '--dds-port',
@@ -780,7 +780,7 @@
         DeviceManager: () => testDeviceManager,
       });
 
-      testUsingContext('skips in ipv6 mode with a provided VM Service port', () async {
+      testUsingContext('skips in ipv6 mode with a provided observatory port', () async {
         testDeviceManager.devices = <Device>[device];
 
         final Completer<void> completer = Completer<void>();
@@ -805,7 +805,7 @@
             'attach',
             '--debug-port',
             '$devicePort',
-            '--vm-service-port',
+            '--observatory-port',
             '$hostPort',
             '--ipv6',
             // Ensure DDS doesn't use hostPort by binding to a random port.
@@ -992,7 +992,7 @@
   bool exited = false;
 
   @override
-  bool isWaitingForVmService = true;
+  bool isWaitingForObservatory = true;
 
   @override
   Future<int> attach({
@@ -1198,7 +1198,7 @@
 
   @override
   Future<void> startDartDevelopmentService(
-    Uri vmServiceUri, {
+    Uri observatoryUri, {
     required Logger logger,
     int? hostPort,
     bool? ipv6,
diff --git a/packages/flutter_tools/test/commands.shard/hermetic/daemon_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/daemon_test.dart
index a50433e..18f76e8 100644
--- a/packages/flutter_tools/test/commands.shard/hermetic/daemon_test.dart
+++ b/packages/flutter_tools/test/commands.shard/hermetic/daemon_test.dart
@@ -430,8 +430,8 @@
         final String? applicationPackageId = applicationPackageIdResponse.data['result'] as String?;
 
         // Try starting the app.
-        final Uri vmServiceUri = Uri.parse('http://127.0.0.1:12345/vmService');
-        device.launchResult = LaunchResult.succeeded(vmServiceUri: vmServiceUri);
+        final Uri observatoryUri = Uri.parse('http://127.0.0.1:12345/observatory');
+        device.launchResult = LaunchResult.succeeded(observatoryUri: observatoryUri);
         daemonStreams.inputs.add(DaemonMessage(<String, Object?>{
           'id': 1,
           'method': 'device.startApp',
@@ -446,7 +446,7 @@
         expect(device.startAppPackage, applicationPackage);
         final Map<String, Object?> startAppResult = startAppResponse.data['result']! as Map<String, Object?>;
         expect(startAppResult['started'], true);
-        expect(startAppResult['vmServiceUri'], vmServiceUri.toString());
+        expect(startAppResult['observatoryUri'], observatoryUri.toString());
 
         // Try stopping the app.
         daemonStreams.inputs.add(DaemonMessage(<String, Object?>{
diff --git a/packages/flutter_tools/test/commands.shard/hermetic/proxied_devices_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/proxied_devices_test.dart
index fed7e60..a77e516 100644
--- a/packages/flutter_tools/test/commands.shard/hermetic/proxied_devices_test.dart
+++ b/packages/flutter_tools/test/commands.shard/hermetic/proxied_devices_test.dart
@@ -161,8 +161,8 @@
       final FakeApplicationPackage applicationPackage = FakeApplicationPackage();
       applicationPackageFactory.applicationPackage = applicationPackage;
 
-      final Uri vmServiceUri = Uri.parse('http://127.0.0.1:12345/vmService');
-      fakeDevice.launchResult = LaunchResult.succeeded(vmServiceUri: vmServiceUri);
+      final Uri observatoryUri = Uri.parse('http://127.0.0.1:12345/observatory');
+      fakeDevice.launchResult = LaunchResult.succeeded(observatoryUri: observatoryUri);
 
       final LaunchResult launchResult = await device.startApp(
         prebuiltApplicationPackage,
@@ -170,8 +170,8 @@
       );
 
       expect(launchResult.started, true);
-      // The returned vmServiceUri was a forwarded port, so we cannot compare them directly.
-      expect(launchResult.vmServiceUri!.path, vmServiceUri.path);
+      // The returned observatoryUri was a forwarded port, so we cannot compare them directly.
+      expect(launchResult.observatoryUri!.path, observatoryUri.path);
 
       expect(applicationPackageFactory.applicationBinaryRequested!.readAsStringSync(), 'dummy content');
       expect(applicationPackageFactory.platformRequested, TargetPlatform.android_arm);
diff --git a/packages/flutter_tools/test/commands.shard/hermetic/screenshot_command_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/screenshot_command_test.dart
index 42954dc..f3a4d25 100644
--- a/packages/flutter_tools/test/commands.shard/hermetic/screenshot_command_test.dart
+++ b/packages/flutter_tools/test/commands.shard/hermetic/screenshot_command_test.dart
@@ -28,26 +28,26 @@
       };
 
       await expectLater(() => createTestCommandRunner(ScreenshotCommand(fs: MemoryFileSystem.test()))
-        .run(<String>['screenshot', '--type=skia', '--vm-service-url=http://localhost:8181']),
+        .run(<String>['screenshot', '--type=skia', '--observatory-url=http://localhost:8181']),
         throwsA(isException.having((Exception exception) => exception.toString(), 'message', contains('dummy'))),
       );
 
       await expectLater(() => createTestCommandRunner(ScreenshotCommand(fs: MemoryFileSystem.test()))
-        .run(<String>['screenshot', '--type=rasterizer', '--vm-service-url=http://localhost:8181']),
+        .run(<String>['screenshot', '--type=rasterizer', '--observatory-url=http://localhost:8181']),
         throwsA(isException.having((Exception exception) => exception.toString(), 'message', contains('dummy'))),
       );
     });
 
 
-    testUsingContext('rasterizer and skia screenshots require VM Service uri', () async {
+    testUsingContext('rasterizer and skia screenshots require observatory uri', () async {
       await expectLater(() => createTestCommandRunner(ScreenshotCommand(fs: MemoryFileSystem.test()))
         .run(<String>['screenshot', '--type=skia']),
-        throwsToolExit(message: 'VM Service URI must be specified for screenshot type skia')
+        throwsToolExit(message: 'Observatory URI must be specified for screenshot type skia')
       );
 
       await expectLater(() => createTestCommandRunner(ScreenshotCommand(fs: MemoryFileSystem.test()))
         .run(<String>['screenshot', '--type=rasterizer',]),
-        throwsToolExit(message: 'VM Service URI must be specified for screenshot type rasterizer'),
+        throwsToolExit(message: 'Observatory URI must be specified for screenshot type rasterizer'),
       );
     });
 
@@ -58,10 +58,10 @@
       );
     });
 
-    testUsingContext('device screenshots cannot provided VM Service', () async {
+    testUsingContext('device screenshots cannot provided Observatory', () async {
       await expectLater(() => createTestCommandRunner(ScreenshotCommand(fs: MemoryFileSystem.test()))
-        .run(<String>['screenshot',  '--vm-service-url=http://localhost:8181']),
-        throwsToolExit(message: 'VM Service URI cannot be provided for screenshot type device'),
+        .run(<String>['screenshot',  '--observatory-url=http://localhost:8181']),
+        throwsToolExit(message: 'Observatory URI cannot be provided for screenshot type device'),
       );
     });
   });
diff --git a/packages/flutter_tools/test/commands.shard/hermetic/test_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/test_test.dart
index 4fc3daa..4eba15e 100644
--- a/packages/flutter_tools/test/commands.shard/hermetic/test_test.dart
+++ b/packages/flutter_tools/test/commands.shard/hermetic/test_test.dart
@@ -296,7 +296,7 @@
     Cache: () => Cache.test(processManager: FakeProcessManager.any()),
   });
 
-  testUsingContext('Pipes enable-vmService', () async {
+  testUsingContext('Pipes enable-observatory', () async {
     final FakeFlutterTestRunner testRunner = FakeFlutterTestRunner(0);
 
     final TestCommand testCommand = TestCommand(testRunner: testRunner);
@@ -311,7 +311,7 @@
       'test/fake_test.dart',
     ]);
     expect(
-      testRunner.lastEnableVmServiceValue,
+      testRunner.lastEnableObservatoryValue,
       true,
     );
 
@@ -324,7 +324,7 @@
       'test/fake_test.dart',
     ]);
     expect(
-      testRunner.lastEnableVmServiceValue,
+      testRunner.lastEnableObservatoryValue,
       true,
     );
 
@@ -335,7 +335,7 @@
       'test/fake_test.dart',
     ]);
     expect(
-      testRunner.lastEnableVmServiceValue,
+      testRunner.lastEnableObservatoryValue,
       false,
     );
   }, overrides: <Type, Generator>{
@@ -811,7 +811,7 @@
 
   int exitCode;
   Duration? leastRunTime;
-  bool? lastEnableVmServiceValue;
+  bool? lastEnableObservatoryValue;
   late DebuggingOptions lastDebuggingOptionsValue;
   String? lastReporterOption;
 
@@ -824,7 +824,7 @@
     List<String> plainNames = const <String>[],
     String? tags,
     String? excludeTags,
-    bool enableVmService = false,
+    bool enableObservatory = false,
     bool ipv6 = false,
     bool machine = false,
     String? precompiledDillPath,
@@ -847,7 +847,7 @@
     String? integrationTestUserIdentifier,
     TestTimeRecorder? testTimeRecorder,
   }) async {
-    lastEnableVmServiceValue = enableVmService;
+    lastEnableObservatoryValue = enableObservatory;
     lastDebuggingOptionsValue = debuggingOptions;
     lastReporterOption = reporter;
 
diff --git a/packages/flutter_tools/test/general.shard/android/android_device_start_test.dart b/packages/flutter_tools/test/general.shard/android/android_device_start_test.dart
index ac67828..1ed77e1 100644
--- a/packages/flutter_tools/test/general.shard/android/android_device_start_test.dart
+++ b/packages/flutter_tools/test/general.shard/android/android_device_start_test.dart
@@ -285,7 +285,7 @@
       userIdentifier: '10',
     );
 
-    // This fails to start due to VM Service discovery issues.
+    // This fails to start due to observatory discovery issues.
     expect(launchResult.started, false);
     expect(processManager, hasNoRemainingExpectations);
   });
diff --git a/packages/flutter_tools/test/general.shard/cold_test.dart b/packages/flutter_tools/test/general.shard/cold_test.dart
index 8688166..84f3c4f 100644
--- a/packages/flutter_tools/test/general.shard/cold_test.dart
+++ b/packages/flutter_tools/test/general.shard/cold_test.dart
@@ -141,7 +141,7 @@
   FakeFlutterDevice(this.device);
 
   @override
-  Stream<Uri> get vmServiceUris => const Stream<Uri>.empty();
+  Stream<Uri> get observatoryUris => const Stream<Uri>.empty();
 
   @override
   final Device device;
diff --git a/packages/flutter_tools/test/general.shard/coverage_collector_test.dart b/packages/flutter_tools/test/general.shard/coverage_collector_test.dart
index be5792e..aa41240 100644
--- a/packages/flutter_tools/test/general.shard/coverage_collector_test.dart
+++ b/packages/flutter_tools/test/general.shard/coverage_collector_test.dart
@@ -647,7 +647,7 @@
   Future<void> kill() => Future<void>.value();
 
   @override
-  Future<Uri?> get vmServiceUri => Future<Uri?>.value(Uri());
+  Future<Uri?> get observatoryUri => Future<Uri?>.value(Uri());
 
   @override
   Future<StreamChannel<String>> start(String entrypointPath) {
diff --git a/packages/flutter_tools/test/general.shard/custom_devices/custom_device_test.dart b/packages/flutter_tools/test/general.shard/custom_devices/custom_device_test.dart
index 7a56f6c..56e70f2 100644
--- a/packages/flutter_tools/test/general.shard/custom_devices/custom_device_test.dart
+++ b/packages/flutter_tools/test/general.shard/custom_devices/custom_device_test.dart
@@ -359,7 +359,7 @@
     expect(forwardPortCommandCompleter.isCompleted, true);
   });
 
-  testWithoutContext('CustomDevice forwards VM Service port correctly when port forwarding is configured', () async {
+  testWithoutContext('CustomDevice forwards observatory port correctly when port forwarding is configured', () async {
     final Completer<void> runDebugCompleter = Completer<void>();
     final Completer<void> forwardPortCompleter = Completer<void>();
 
@@ -391,7 +391,7 @@
     final LaunchResult launchResult = await appSession.start(debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug));
 
     expect(launchResult.started, true);
-    expect(launchResult.vmServiceUri, Uri.parse('http://127.0.0.1:12345/abcd/'));
+    expect(launchResult.observatoryUri, Uri.parse('http://127.0.0.1:12345/abcd/'));
     expect(runDebugCompleter.isCompleted, false);
     expect(forwardPortCompleter.isCompleted, false);
 
@@ -400,7 +400,7 @@
     expect(forwardPortCompleter.isCompleted, true);
   });
 
-  testWithoutContext('CustomDeviceAppSession forwards VM Service port correctly when port forwarding is not configured', () async {
+  testWithoutContext('CustomDeviceAppSession forwards observatory port correctly when port forwarding is not configured', () async {
     final Completer<void> runDebugCompleter = Completer<void>();
 
     final FakeProcessManager processManager = FakeProcessManager.list(
@@ -428,7 +428,7 @@
     final LaunchResult launchResult = await appSession.start(debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug));
 
     expect(launchResult.started, true);
-    expect(launchResult.vmServiceUri, Uri.parse('http://192.168.178.123:12345/abcd/'));
+    expect(launchResult.observatoryUri, Uri.parse('http://192.168.178.123:12345/abcd/'));
     expect(runDebugCompleter.isCompleted, false);
 
     expect(await appSession.stop(), true);
@@ -501,8 +501,8 @@
         bundleBuilder: FakeBundleBuilder()
       );
       expect(result.started, true);
-      expect(result.hasVmService, true);
-      expect(result.vmServiceUri, Uri.tryParse('http://127.0.0.1:12345/abcd/'));
+      expect(result.hasObservatory, true);
+      expect(result.observatoryUri, Uri.tryParse('http://127.0.0.1:12345/abcd/'));
       expect(runDebugCompleter.isCompleted, false);
       expect(forwardPortCompleter.isCompleted, false);
 
diff --git a/packages/flutter_tools/test/general.shard/desktop_device_test.dart b/packages/flutter_tools/test/general.shard/desktop_device_test.dart
index 582e50e..937f0c7 100644
--- a/packages/flutter_tools/test/general.shard/desktop_device_test.dart
+++ b/packages/flutter_tools/test/general.shard/desktop_device_test.dart
@@ -96,7 +96,7 @@
       );
 
       expect(result.started, true);
-      expect(result.vmServiceUri, Uri.parse('http://127.0.0.1/0'));
+      expect(result.observatoryUri, Uri.parse('http://127.0.0.1/0'));
     });
 
     testWithoutContext('Null executable path fails gracefully', () async {
diff --git a/packages/flutter_tools/test/general.shard/device_test.dart b/packages/flutter_tools/test/general.shard/device_test.dart
index 6b4e1bc..d97a6a2 100644
--- a/packages/flutter_tools/test/general.shard/device_test.dart
+++ b/packages/flutter_tools/test/general.shard/device_test.dart
@@ -509,7 +509,7 @@
         <String>[
           '--enable-dart-profiling',
           '--disable-service-auth-codes',
-          '--disable-vm-service-publication',
+          '--disable-observatory-publication',
           '--start-paused',
           '--dart-flags="--foo,--null_assertions"',
           '--use-test-fonts',
@@ -529,7 +529,7 @@
           '--route=/test',
           '--trace-startup',
           '--enable-impeller',
-          '--vm-service-port=0',
+          '--observatory-port=0',
         ].join(' '),
       );
     });
@@ -573,7 +573,7 @@
           '--enable-dart-profiling',
           '--enable-checked-mode',
           '--verify-entry-points',
-          '--vm-service-host=0.0.0.0',
+          '--observatory-host=0.0.0.0',
         ].join(' '),
       );
     });
@@ -597,7 +597,7 @@
           '--enable-dart-profiling',
           '--enable-checked-mode',
           '--verify-entry-points',
-          '--vm-service-host=::0',
+          '--observatory-host=::0',
         ].join(' '),
       );
     });
@@ -669,7 +669,7 @@
         <String>[
           '--enable-dart-profiling',
           '--disable-service-auth-codes',
-          '--disable-vm-service-publication',
+          '--disable-observatory-publication',
           '--start-paused',
           '--dart-flags=--foo,--null_assertions',
           '--use-test-fonts',
@@ -689,7 +689,7 @@
           '--route=/test',
           '--trace-startup',
           '--enable-impeller',
-          '--vm-service-port=1',
+          '--observatory-port=1',
         ].join(' '),
       );
     });
diff --git a/packages/flutter_tools/test/general.shard/drive/drive_service_test.dart b/packages/flutter_tools/test/general.shard/drive/drive_service_test.dart
index dc68e7d..e40e567 100644
--- a/packages/flutter_tools/test/general.shard/drive/drive_service_test.dart
+++ b/packages/flutter_tools/test/general.shard/drive/drive_service_test.dart
@@ -114,7 +114,7 @@
     ]);
     final DriverService driverService = setUpDriverService(processManager: processManager, vmService: fakeVmServiceHost.vmService);
     final Device device = FakeDevice(LaunchResult.succeeded(
-      vmServiceUri: Uri.parse('http://127.0.0.1:63426/1UasC_ihpXY=/'),
+      observatoryUri: Uri.parse('http://127.0.0.1:63426/1UasC_ihpXY=/'),
     ))..failOnce = true;
 
     await expectLater(
@@ -139,7 +139,7 @@
     ]);
     final DriverService driverService = setUpDriverService(processManager: processManager, vmService: fakeVmServiceHost.vmService);
     final Device device = FakeDevice(LaunchResult.succeeded(
-      vmServiceUri: Uri.parse('http://127.0.0.1:63426/1UasC_ihpXY=/'),
+      observatoryUri: Uri.parse('http://127.0.0.1:63426/1UasC_ihpXY=/'),
     ));
 
     await driverService.start(BuildInfo.profile, device, DebuggingOptions.enabled(BuildInfo.profile), true);
@@ -170,7 +170,7 @@
     final FakeDevtoolsLauncher launcher = FakeDevtoolsLauncher();
     final DriverService driverService = setUpDriverService(processManager: processManager, vmService: fakeVmServiceHost.vmService, devtoolsLauncher: launcher);
     final Device device = FakeDevice(LaunchResult.succeeded(
-      vmServiceUri: Uri.parse('http://127.0.0.1:63426/1UasC_ihpXY=/'),
+      observatoryUri: Uri.parse('http://127.0.0.1:63426/1UasC_ihpXY=/'),
     ));
 
     await driverService.start(BuildInfo.profile, device, DebuggingOptions.enabled(BuildInfo.profile), true);
@@ -202,7 +202,7 @@
     ]);
     final DriverService driverService = setUpDriverService(processManager: processManager, vmService: fakeVmServiceHost.vmService);
     final Device device = FakeDevice(LaunchResult.succeeded(
-      vmServiceUri: Uri.parse('http://127.0.0.1:63426/1UasC_ihpXY=/'),
+      observatoryUri: Uri.parse('http://127.0.0.1:63426/1UasC_ihpXY=/'),
     ));
 
     await driverService.start(BuildInfo.profile, device, DebuggingOptions.enabled(BuildInfo.profile), true);
@@ -232,7 +232,7 @@
     ]);
     final DriverService driverService = setUpDriverService(processManager: processManager, vmService: fakeVmServiceHost.vmService);
     final Device device = FakeDevice(LaunchResult.succeeded(
-      vmServiceUri: Uri.parse('http://127.0.0.1:63426/1UasC_ihpXY=/'),
+      observatoryUri: Uri.parse('http://127.0.0.1:63426/1UasC_ihpXY=/'),
     ));
     final FakeDartDevelopmentService dds = device.dds as FakeDartDevelopmentService;
 
@@ -258,7 +258,7 @@
     final FakeProcessManager processManager = FakeProcessManager.empty();
     final DriverService driverService = setUpDriverService(processManager: processManager, vmService: fakeVmServiceHost.vmService);
     final FakeDevice device = FakeDevice(LaunchResult.succeeded(
-      vmServiceUri: Uri.parse('http://127.0.0.1:63426/1UasC_ihpXY=/'),
+      observatoryUri: Uri.parse('http://127.0.0.1:63426/1UasC_ihpXY=/'),
     ));
 
     await driverService.start(BuildInfo.profile, device, DebuggingOptions.enabled(BuildInfo.profile), true);
@@ -290,7 +290,7 @@
     final FakeProcessManager processManager = FakeProcessManager.empty();
     final DriverService driverService = setUpDriverService(processManager: processManager, vmService: fakeVmServiceHost.vmService);
     final FakeDevice device = FakeDevice(LaunchResult.succeeded(
-      vmServiceUri: Uri.parse('http://127.0.0.1:63426/1UasC_ihpXY=/'),
+      observatoryUri: Uri.parse('http://127.0.0.1:63426/1UasC_ihpXY=/'),
     ));
 
     await driverService.start(BuildInfo.profile, device, DebuggingOptions.enabled(BuildInfo.profile), true);
@@ -551,7 +551,7 @@
 
   @override
   Future<void> startDartDevelopmentService(
-    Uri vmServiceUri, {
+    Uri observatoryUri, {
     required Logger logger,
     int? hostPort,
     bool? ipv6,
diff --git a/packages/flutter_tools/test/general.shard/flutter_platform_test.dart b/packages/flutter_tools/test/general.shard/flutter_platform_test.dart
index 89510dc..68e457d 100644
--- a/packages/flutter_tools/test/general.shard/flutter_platform_test.dart
+++ b/packages/flutter_tools/test/general.shard/flutter_platform_test.dart
@@ -26,14 +26,14 @@
 
   group('FlutterPlatform', () {
     testUsingContext('ensureConfiguration throws an error if an '
-      'explicitVmServicePort is specified and more than one test file', () async {
+      'explicitObservatoryPort is specified and more than one test file', () async {
       final FlutterPlatform flutterPlatform = FlutterPlatform(
         shellPath: '/',
         debuggingOptions: DebuggingOptions.enabled(
           BuildInfo.debug,
           hostVmServicePort: 1234,
         ),
-        enableVmService: false,
+        enableObservatory: false,
       );
       flutterPlatform.loadChannel('test1.dart', FakeSuitePlatform());
 
@@ -49,7 +49,7 @@
         debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug),
         shellPath: '/',
         precompiledDillPath: 'example.dill',
-        enableVmService: false,
+        enableObservatory: false,
       );
       flutterPlatform.loadChannel('test1.dart', FakeSuitePlatform());
 
@@ -87,7 +87,7 @@
           disableServiceAuthCodes: true,
           hostVmServicePort: 200,
         ),
-        enableVmService: true,
+        enableObservatory: true,
         machine: true,
         precompiledDillPath: 'def',
         precompiledDillFiles: expectedPrecompiledDillFiles,
@@ -107,7 +107,7 @@
       expect(flutterPlatform.debuggingOptions.startPaused, equals(true));
       expect(flutterPlatform.debuggingOptions.disableServiceAuthCodes, equals(true));
       expect(flutterPlatform.debuggingOptions.hostVmServicePort, equals(200));
-      expect(flutterPlatform.enableVmService, equals(true));
+      expect(flutterPlatform.enableObservatory, equals(true));
       expect(flutterPlatform.machine, equals(true));
       expect(flutterPlatform.host, InternetAddress.loopbackIPv6);
       expect(flutterPlatform.precompiledDillPath, equals('def'));
diff --git a/packages/flutter_tools/test/general.shard/flutter_tester_device_test.dart b/packages/flutter_tools/test/general.shard/flutter_tester_device_test.dart
index ac29e20..8edeafa 100644
--- a/packages/flutter_tools/test/general.shard/flutter_tester_device_test.dart
+++ b/packages/flutter_tools/test/general.shard/flutter_tester_device_test.dart
@@ -38,13 +38,13 @@
 
   FlutterTesterTestDevice createDevice({
     List<String> dartEntrypointArgs = const <String>[],
-    bool enableVmService = false,
+    bool enableObservatory = false,
   }) =>
     TestFlutterTesterDevice(
       platform: platform,
       fileSystem: fileSystem,
       processManager: processManager,
-      enableVmService: enableVmService,
+      enableObservatory: enableObservatory,
       dartEntrypointArgs: dartEntrypointArgs,
       uriConverter: (String input) => '$input/converted',
     );
@@ -63,7 +63,7 @@
     FakeCommand flutterTestCommand(String expectedFlutterTestValue) {
       return FakeCommand(command: const <String>[
         '/',
-        '--disable-vm-service',
+        '--disable-observatory',
         '--ipv6',
         '--enable-checked-mode',
         '--verify-entry-points',
@@ -121,7 +121,7 @@
         const FakeCommand(
           command: <String>[
             '/',
-            '--disable-vm-service',
+            '--disable-observatory',
             '--ipv6',
             '--enable-checked-mode',
             '--verify-entry-points',
@@ -156,7 +156,7 @@
         const FakeCommand(
           command: <String>[
             '/',
-            '--vm-service-port=0',
+            '--observatory-port=0',
             '--ipv6',
             '--enable-checked-mode',
             '--verify-entry-points',
@@ -173,12 +173,12 @@
           stderr: 'failure',
         ),
       ]);
-      device = createDevice(enableVmService: true);
+      device = createDevice(enableObservatory: true);
     });
 
-    testUsingContext('skips setting VM Service port and uses the input port for DDS instead', () async {
+    testUsingContext('skips setting observatory port and uses the input port for DDS instead', () async {
       await device.start('example.dill');
-      await device.vmServiceUri;
+      await device.observatoryUri;
 
       final Uri uri = await (device as TestFlutterTesterDevice).ddsServiceUriFuture();
       expect(uri.port, 1234);
@@ -186,7 +186,7 @@
 
     testUsingContext('sets up UriConverter from context', () async {
       await device.start('example.dill');
-      await device.vmServiceUri;
+      await device.observatoryUri;
 
       final FakeDartDevelopmentService dds = (device as TestFlutterTesterDevice).dds
       as FakeDartDevelopmentService;
@@ -206,7 +206,7 @@
     required super.platform,
     required super.fileSystem,
     required super.processManager,
-    required super.enableVmService,
+    required super.enableObservatory,
     required List<String> dartEntrypointArgs,
     required UriConverter uriConverter,
   }) : super(
diff --git a/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_start_test.dart b/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_start_test.dart
index eb1cb57..f7e23f7 100644
--- a/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_start_test.dart
+++ b/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_start_test.dart
@@ -152,7 +152,7 @@
       final LaunchResult launchResult =
           await setupAndStartApp(prebuilt: true, mode: BuildMode.release);
       expect(launchResult.started, isFalse);
-      expect(launchResult.hasVmService, isFalse);
+      expect(launchResult.hasObservatory, isFalse);
     }, overrides: <Type, Generator>{
       Artifacts: () => artifacts,
       FileSystem: () => memoryFileSystem,
@@ -167,7 +167,7 @@
       final LaunchResult launchResult =
           await setupAndStartApp(prebuilt: true, mode: BuildMode.release);
       expect(launchResult.started, isTrue);
-      expect(launchResult.hasVmService, isFalse);
+      expect(launchResult.hasObservatory, isFalse);
     }, overrides: <Type, Generator>{
       Artifacts: () => artifacts,
       FileSystem: () => memoryFileSystem,
@@ -194,7 +194,7 @@
       final LaunchResult launchResult = await device.startApp(app,
           prebuiltApplication: true, debuggingOptions: debuggingOptions);
       expect(launchResult.started, isFalse);
-      expect(launchResult.hasVmService, isFalse);
+      expect(launchResult.hasObservatory, isFalse);
     }, overrides: <Type, Generator>{
       Artifacts: () => artifacts,
       FileSystem: () => memoryFileSystem,
@@ -220,7 +220,7 @@
       final LaunchResult launchResult = await device.startApp(app,
           prebuiltApplication: true, debuggingOptions: debuggingOptions);
       expect(launchResult.started, isTrue);
-      expect(launchResult.hasVmService, isFalse);
+      expect(launchResult.hasObservatory, isFalse);
       expect(await device.stopApp(app), isTrue);
     }, overrides: <Type, Generator>{
       Artifacts: () => artifacts,
@@ -252,7 +252,7 @@
       final LaunchResult launchResult =
           await setupAndStartApp(prebuilt: true, mode: BuildMode.debug);
       expect(launchResult.started, isTrue);
-      expect(launchResult.hasVmService, isTrue);
+      expect(launchResult.hasObservatory, isTrue);
     }, overrides: <Type, Generator>{
       Artifacts: () => artifacts,
       FileSystem: () => memoryFileSystem,
@@ -413,7 +413,7 @@
       final LaunchResult launchResult =
           await setupAndStartApp(prebuilt: true, mode: BuildMode.release);
       expect(launchResult.started, isFalse);
-      expect(launchResult.hasVmService, isFalse);
+      expect(launchResult.hasObservatory, isFalse);
     }, overrides: <Type, Generator>{
       Artifacts: () => artifacts,
       FileSystem: () => memoryFileSystem,
@@ -429,7 +429,7 @@
       final LaunchResult launchResult =
           await setupAndStartApp(prebuilt: true, mode: BuildMode.release);
       expect(launchResult.started, isFalse);
-      expect(launchResult.hasVmService, isFalse);
+      expect(launchResult.hasObservatory, isFalse);
     }, overrides: <Type, Generator>{
       Artifacts: () => artifacts,
       FileSystem: () => memoryFileSystem,
diff --git a/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_test.dart b/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_test.dart
index 641d4e0..d3d5114 100644
--- a/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_test.dart
+++ b/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_test.dart
@@ -1035,7 +1035,7 @@
     implements DartDevelopmentService {
   @override
   Future<void> startDartDevelopmentService(
-    Uri vmServiceUri, {
+    Uri observatoryUri, {
     required Logger logger,
     int? hostPort,
     bool? ipv6,
diff --git a/packages/flutter_tools/test/general.shard/integration_test_device_test.dart b/packages/flutter_tools/test/general.shard/integration_test_device_test.dart
index 804275e..6d2a90c 100644
--- a/packages/flutter_tools/test/general.shard/integration_test_device_test.dart
+++ b/packages/flutter_tools/test/general.shard/integration_test_device_test.dart
@@ -58,7 +58,7 @@
   },
 );
 
-final Uri vmServiceUri = Uri.parse('http://localhost:1234');
+final Uri observatoryUri = Uri.parse('http://localhost:1234');
 
 void main() {
   late FakeVmServiceHost fakeVmServiceHost;
@@ -71,7 +71,7 @@
         'ephemeral',
         'ephemeral',
         type: PlatformType.android,
-        launchResult: LaunchResult.succeeded(vmServiceUri: vmServiceUri),
+        launchResult: LaunchResult.succeeded(observatoryUri: observatoryUri),
       ),
       debuggingOptions: DebuggingOptions.enabled(
         BuildInfo.debug,
@@ -126,7 +126,7 @@
   testUsingContext('Can start the entrypoint', () async {
     await testDevice.start('entrypointPath');
 
-    expect(await testDevice.vmServiceUri, vmServiceUri);
+    expect(await testDevice.observatoryUri, observatoryUri);
     expect(testDevice.finished, doesNotComplete);
   }, overrides: <Type, Generator>{
     ApplicationPackageFactory: () => FakeApplicationPackageFactory(),
@@ -161,7 +161,7 @@
     }) async => fakeVmServiceHost.vmService,
   });
 
-  testUsingContext('when the device starts without providing an vmService URI', () async {
+  testUsingContext('when the device starts without providing an observatory URI', () async {
     final TestDevice testDevice = IntegrationTestTestDevice(
       id: 1,
       device: FakeDevice(
diff --git a/packages/flutter_tools/test/general.shard/ios/ios_device_start_prebuilt_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_device_start_prebuilt_test.dart
index 916c3e2..e26ef2b 100644
--- a/packages/flutter_tools/test/general.shard/ios/ios_device_start_prebuilt_test.dart
+++ b/packages/flutter_tools/test/general.shard/ios/ios_device_start_prebuilt_test.dart
@@ -85,7 +85,7 @@
       if (!isNetworkDevice) '--no-wifi',
       '--args',
       if (isNetworkDevice)
-        '--enable-dart-profiling --enable-checked-mode --verify-entry-points --vm-service-host=0.0.0.0'
+        '--enable-dart-profiling --enable-checked-mode --verify-entry-points --observatory-host=0.0.0.0'
       else
         '--enable-dart-profiling --enable-checked-mode --verify-entry-points',
     ],
@@ -152,7 +152,7 @@
     );
 
     expect(launchResult.started, true);
-    expect(launchResult.hasVmService, true);
+    expect(launchResult.hasObservatory, true);
     expect(await device.stopApp(iosApp), false);
   });
 
@@ -190,7 +190,7 @@
     );
 
     expect(launchResult.started, true);
-    expect(launchResult.hasVmService, true);
+    expect(launchResult.hasObservatory, true);
     expect(await device.stopApp(iosApp), false);
   });
 
@@ -230,7 +230,7 @@
     );
 
     expect(launchResult.started, true);
-    expect(launchResult.hasVmService, true);
+    expect(launchResult.hasObservatory, true);
     expect(await device.stopApp(iosApp), false);
     expect(logger.errorText, contains('The Dart VM Service was not discovered after 30 seconds. This is taking much longer than expected...'));
     expect(utf8.decoder.convert(stdin.writes.first), contains('process interrupt'));
@@ -275,7 +275,7 @@
     );
 
     expect(launchResult.started, true);
-    expect(launchResult.hasVmService, true);
+    expect(launchResult.hasObservatory, true);
     expect(await device.stopApp(iosApp), false);
     expect(logger.errorText, contains('The Dart VM Service was not discovered after 45 seconds. This is taking much longer than expected...'));
     expect(logger.errorText, contains('Click "Allow" to the prompt asking if you would like to find and connect devices on your local network.'));
@@ -308,7 +308,7 @@
     );
 
     expect(launchResult.started, true);
-    expect(launchResult.hasVmService, false);
+    expect(launchResult.hasObservatory, false);
     expect(await device.stopApp(iosApp), false);
     expect(processManager, hasNoRemainingExpectations);
   });
@@ -335,7 +335,7 @@
           <String>[
             '--enable-dart-profiling',
             '--disable-service-auth-codes',
-            '--disable-vm-service-publication',
+            '--disable-observatory-publication',
             '--start-paused',
             '--dart-flags="--foo,--null_assertions"',
             '--use-test-fonts',
diff --git a/packages/flutter_tools/test/general.shard/ios/simulators_test.dart b/packages/flutter_tools/test/general.shard/ios/simulators_test.dart
index 3bd597e..367b784 100644
--- a/packages/flutter_tools/test/general.shard/ios/simulators_test.dart
+++ b/packages/flutter_tools/test/general.shard/ios/simulators_test.dart
@@ -1067,7 +1067,7 @@
         '--purge-persistent-cache',
         '--dart-flags=--baz,--null_assertions',
         '--enable-impeller',
-        '--vm-service-port=0',
+        '--observatory-port=0',
       ]));
     }, overrides: <Type, Generator>{
       PlistParser: () => testPlistParser,
diff --git a/packages/flutter_tools/test/general.shard/preview_device_test.dart b/packages/flutter_tools/test/general.shard/preview_device_test.dart
index fa94d86..f1f4426 100644
--- a/packages/flutter_tools/test/general.shard/preview_device_test.dart
+++ b/packages/flutter_tools/test/general.shard/preview_device_test.dart
@@ -78,7 +78,7 @@
     );
 
     expect(result.started, true);
-    expect(result.vmServiceUri, Uri.parse('http://127.0.0.1:64494/fZ_B2N6JRwY=/'));
+    expect(result.observatoryUri, Uri.parse('http://127.0.0.1:64494/fZ_B2N6JRwY=/'));
   });
 }
 
diff --git a/packages/flutter_tools/test/general.shard/protocol_discovery_test.dart b/packages/flutter_tools/test/general.shard/protocol_discovery_test.dart
index 0bd89a3..cea1746 100644
--- a/packages/flutter_tools/test/general.shard/protocol_discovery_test.dart
+++ b/packages/flutter_tools/test/general.shard/protocol_discovery_test.dart
@@ -17,7 +17,7 @@
 
     setUp(() {
       logReader = FakeDeviceLogReader();
-      discoverer = ProtocolDiscovery.vmService(
+      discoverer = ProtocolDiscovery.observatory(
         logReader,
         ipv6: false,
         throttleDuration: const Duration(milliseconds: 5),
@@ -106,7 +106,7 @@
 
       testWithoutContext('uri waits for correct log line', () async {
         final Future<Uri?> uriFuture = discoverer.uri;
-        logReader.addLine('VM Service not listening...');
+        logReader.addLine('Observatory not listening...');
         final Uri timeoutUri = Uri.parse('http://timeout');
         final Uri? actualUri = await uriFuture.timeout(
           const Duration(milliseconds: 100),
@@ -139,7 +139,7 @@
       });
 
       testWithoutContext('skips uri if port does not match the requested vmservice - requested last', () async {
-        discoverer = ProtocolDiscovery.vmService(
+        discoverer = ProtocolDiscovery.observatory(
           logReader,
           ipv6: false,
           devicePort: 12346,
@@ -155,7 +155,7 @@
       });
 
       testWithoutContext('skips uri if port does not match the requested vmservice - requested first', () async {
-        discoverer = ProtocolDiscovery.vmService(
+        discoverer = ProtocolDiscovery.observatory(
           logReader,
           ipv6: false,
           devicePort: 12346,
@@ -179,7 +179,7 @@
       });
 
       testWithoutContext('first uri in the stream is the last one from the log that matches the port', () async {
-        discoverer = ProtocolDiscovery.vmService(
+        discoverer = ProtocolDiscovery.observatory(
           logReader,
           ipv6: false,
           devicePort: 12345,
@@ -195,7 +195,7 @@
       });
 
       testWithoutContext('protocol discovery does not crash if the log reader is closed while delaying', () async {
-        discoverer = ProtocolDiscovery.vmService(
+        discoverer = ProtocolDiscovery.observatory(
           logReader,
           ipv6: false,
           devicePort: 12346,
@@ -216,7 +216,7 @@
         const Duration kThrottleDuration = Duration(milliseconds: 10);
 
         FakeAsync().run((FakeAsync time) {
-          discoverer = ProtocolDiscovery.vmService(
+          discoverer = ProtocolDiscovery.observatory(
             logReader,
             ipv6: false,
             throttleDuration: kThrottleDuration,
@@ -250,7 +250,7 @@
         const Duration kThrottleTimeInMilliseconds = Duration(milliseconds: 10);
 
         FakeAsync().run((FakeAsync time) {
-          discoverer = ProtocolDiscovery.vmService(
+          discoverer = ProtocolDiscovery.observatory(
             logReader,
             ipv6: false,
             devicePort: 12345,
@@ -285,7 +285,7 @@
     group('port forwarding', () {
       testWithoutContext('default port', () async {
         final FakeDeviceLogReader logReader = FakeDeviceLogReader();
-        final ProtocolDiscovery discoverer = ProtocolDiscovery.vmService(
+        final ProtocolDiscovery discoverer = ProtocolDiscovery.observatory(
           logReader,
           portForwarder: MockPortForwarder(99),
           ipv6: false,
@@ -305,7 +305,7 @@
 
       testWithoutContext('specified port', () async {
         final FakeDeviceLogReader logReader = FakeDeviceLogReader();
-        final ProtocolDiscovery discoverer = ProtocolDiscovery.vmService(
+        final ProtocolDiscovery discoverer = ProtocolDiscovery.observatory(
           logReader,
           portForwarder: MockPortForwarder(99),
           hostPort: 1243,
@@ -326,7 +326,7 @@
 
       testWithoutContext('specified port zero', () async {
         final FakeDeviceLogReader logReader = FakeDeviceLogReader();
-        final ProtocolDiscovery discoverer = ProtocolDiscovery.vmService(
+        final ProtocolDiscovery discoverer = ProtocolDiscovery.observatory(
           logReader,
           portForwarder: MockPortForwarder(99),
           hostPort: 0,
@@ -347,7 +347,7 @@
 
       testWithoutContext('ipv6', () async {
         final FakeDeviceLogReader logReader = FakeDeviceLogReader();
-        final ProtocolDiscovery discoverer = ProtocolDiscovery.vmService(
+        final ProtocolDiscovery discoverer = ProtocolDiscovery.observatory(
           logReader,
           portForwarder: MockPortForwarder(99),
           hostPort: 54777,
@@ -368,7 +368,7 @@
 
       testWithoutContext('ipv6 with Ascii Escape code', () async {
         final FakeDeviceLogReader logReader = FakeDeviceLogReader();
-        final ProtocolDiscovery discoverer = ProtocolDiscovery.vmService(
+        final ProtocolDiscovery discoverer = ProtocolDiscovery.observatory(
           logReader,
           portForwarder: MockPortForwarder(99),
           hostPort: 54777,
diff --git a/packages/flutter_tools/test/general.shard/resident_devtools_handler_test.dart b/packages/flutter_tools/test/general.shard/resident_devtools_handler_test.dart
index 8c36d4e..171030c 100644
--- a/packages/flutter_tools/test/general.shard/resident_devtools_handler_test.dart
+++ b/packages/flutter_tools/test/general.shard/resident_devtools_handler_test.dart
@@ -421,7 +421,7 @@
     expect(handler.launchedInBrowser, isTrue);
   });
 
-  testWithoutContext('Converts a VM Service URI with a query parameter to a pretty display string', () {
+  testWithoutContext('Converts a VmService URI with a query parameter to a pretty display string', () {
     const String value = 'http://127.0.0.1:9100?uri=http%3A%2F%2F127.0.0.1%3A57922%2F_MXpzytpH20%3D%2F';
     final Uri uri = Uri.parse(value);
 
diff --git a/packages/flutter_tools/test/general.shard/resident_runner_test.dart b/packages/flutter_tools/test/general.shard/resident_runner_test.dart
index c0e1012..f9c9f61 100644
--- a/packages/flutter_tools/test/general.shard/resident_runner_test.dart
+++ b/packages/flutter_tools/test/general.shard/resident_runner_test.dart
@@ -1492,7 +1492,7 @@
           commandHelp.c,
           commandHelp.q,
           '',
-          'A Dart VM Service on FakeDevice is available at: null',
+          'An Observatory debugger and profiler on FakeDevice is available at: null',
           '',
         ].join('\n')
     ));
@@ -1521,7 +1521,7 @@
           commandHelp.c,
           commandHelp.q,
           '',
-          'A Dart VM Service on FakeDevice is available at: null',
+          'An Observatory debugger and profiler on FakeDevice is available at: null',
           '',
         ].join('\n')
     ));
@@ -2123,7 +2123,7 @@
     };
     final TestFlutterDevice flutterDevice = TestFlutterDevice(
       device,
-      vmServiceUris: Stream<Uri>.value(testUri),
+      observatoryUris: Stream<Uri>.value(testUri),
     );
     bool caught = false;
     final Completer<void>done = Completer<void>();
@@ -2166,7 +2166,7 @@
     };
     final TestFlutterDevice flutterDevice = TestFlutterDevice(
       device,
-      vmServiceUris: Stream<Uri>.value(testUri),
+      observatoryUris: Stream<Uri>.value(testUri),
     );
     final Completer<void> done = Completer<void>();
     await runZonedGuarded(
@@ -2199,7 +2199,7 @@
     };
     final TestFlutterDevice flutterDevice = TestFlutterDevice(
       device,
-      vmServiceUris: Stream<Uri>.value(testUri),
+      observatoryUris: Stream<Uri>.value(testUri),
     );
     final Completer<void>done = Completer<void>();
     await runZonedGuarded(
@@ -2238,7 +2238,7 @@
     };
     final TestFlutterDevice flutterDevice = TestFlutterDevice(
       device,
-      vmServiceUris: Stream<Uri>.value(testUri),
+      observatoryUris: Stream<Uri>.value(testUri),
     );
     await flutterDevice.connect(allowExistingDdsInstance: true, ipv6: true, disableServiceAuthCodes: true);
     await done.future;
@@ -2279,7 +2279,7 @@
     };
     final TestFlutterDevice flutterDevice = TestFlutterDevice(
       device,
-      vmServiceUris: Stream<Uri>.value(testUri),
+      observatoryUris: Stream<Uri>.value(testUri),
     );
     await flutterDevice.connect(allowExistingDdsInstance: true, ipv6: true, disableServiceAuthCodes: true);
     await done.future;
@@ -2319,7 +2319,7 @@
     };
     final TestFlutterDevice flutterDevice = TestFlutterDevice(
       device,
-      vmServiceUris: Stream<Uri>.value(testUri),
+      observatoryUris: Stream<Uri>.value(testUri),
     );
     bool caught = false;
     final Completer<void>done = Completer<void>();
@@ -2487,13 +2487,13 @@
 }
 
 class TestFlutterDevice extends FlutterDevice {
-  TestFlutterDevice(super.device, { Stream<Uri>? vmServiceUris })
-    : _vmServiceUris = vmServiceUris, super(buildInfo: BuildInfo.debug, developmentShaderCompiler: const FakeShaderCompiler());
+  TestFlutterDevice(super.device, { Stream<Uri>? observatoryUris })
+    : _observatoryUris = observatoryUris, super(buildInfo: BuildInfo.debug, developmentShaderCompiler: const FakeShaderCompiler());
 
-  final Stream<Uri>? _vmServiceUris;
+  final Stream<Uri>? _observatoryUris;
 
   @override
-  Stream<Uri> get vmServiceUris => _vmServiceUris!;
+  Stream<Uri> get observatoryUris => _observatoryUris!;
 }
 
 class ThrowingForwardingFileSystem extends ForwardingFileSystem {
@@ -2530,7 +2530,7 @@
   TargetPlatform get targetPlatform => TargetPlatform.android;
 
   @override
-  Stream<Uri?> get vmServiceUris => Stream<Uri?>.value(testUri);
+  Stream<Uri?> get observatoryUris => Stream<Uri?>.value(testUri);
 
   @override
   FlutterVmService? get vmService => vmServiceHost?.call()?.vmService;
diff --git a/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart b/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart
index d00bbba..4d38c6e 100644
--- a/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart
+++ b/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart
@@ -1597,7 +1597,7 @@
   ResidentCompiler? generator;
 
   @override
-  Stream<Uri?> get vmServiceUris => Stream<Uri?>.value(testUri);
+  Stream<Uri?> get observatoryUris => Stream<Uri?>.value(testUri);
 
   @override
   DevelopmentShaderCompiler get developmentShaderCompiler => const FakeShaderCompiler();
diff --git a/packages/flutter_tools/test/general.shard/test/event_printer_test.dart b/packages/flutter_tools/test/general.shard/test/event_printer_test.dart
index 7cb7d28..5d1117f 100644
--- a/packages/flutter_tools/test/general.shard/test/event_printer_test.dart
+++ b/packages/flutter_tools/test/general.shard/test/event_printer_test.dart
@@ -10,7 +10,7 @@
 
 void main() {
   group(EventPrinter, () {
-    final Uri vmServiceUri = Uri.parse('http://localhost:1234');
+    final Uri observatoryUri = Uri.parse('http://localhost:1234');
     late EventPrinter eventPrinter;
     late StringBuffer output;
 
@@ -23,30 +23,30 @@
       final FakeDevice device = FakeDevice();
 
       expect(() => eventPrinter.handleFinishedTest(device), returnsNormally);
-      expect(() => eventPrinter.handleStartedDevice(vmServiceUri), returnsNormally);
+      expect(() => eventPrinter.handleStartedDevice(observatoryUri), returnsNormally);
       expect(() => eventPrinter.handleTestCrashed(device), returnsNormally);
       expect(() => eventPrinter.handleTestTimedOut(device), returnsNormally);
     });
 
     group('handleStartedDevice', () {
-      testWithoutContext('with non-null VM Service', () {
-        eventPrinter.handleStartedDevice(vmServiceUri);
+      testWithoutContext('with non-null observatory', () {
+        eventPrinter.handleStartedDevice(observatoryUri);
 
         expect(
           output.toString(),
           '\n'
-          '[{"event":"test.startedProcess","params":{"vmServiceUri":"http://localhost:1234"}}]'
+          '[{"event":"test.startedProcess","params":{"observatoryUri":"http://localhost:1234"}}]'
           '\n',
         );
       });
 
-      testWithoutContext('with null VM Service', () {
+      testWithoutContext('with null observatory', () {
         eventPrinter.handleStartedDevice(null);
 
         expect(
           output.toString(),
           '\n'
-          '[{"event":"test.startedProcess","params":{"vmServiceUri":null}}]'
+          '[{"event":"test.startedProcess","params":{"observatoryUri":null}}]'
           '\n',
         );
       });
diff --git a/packages/flutter_tools/test/general.shard/tester/flutter_tester_test.dart b/packages/flutter_tools/test/general.shard/tester/flutter_tester_test.dart
index c284f76..27751bb 100644
--- a/packages/flutter_tools/test/general.shard/tester/flutter_tester_test.dart
+++ b/packages/flutter_tools/test/general.shard/tester/flutter_tester_test.dart
@@ -140,7 +140,7 @@
 
     testUsingContext('performs a build and starts in debug mode', () async {
       final FlutterTesterApp app = FlutterTesterApp.fromCurrentDirectory(fileSystem);
-      final Uri vmServiceUri = Uri.parse('http://127.0.0.1:6666/');
+      final Uri observatoryUri = Uri.parse('http://127.0.0.1:6666/');
       final Completer<void> completer = Completer<void>();
       fakeProcessManager.addCommand(FakeCommand(
         command: const <String>[
@@ -155,7 +155,7 @@
         completer: completer,
         stdout:
         '''
-The Dart VM service is listening on $vmServiceUri
+The Dart VM service is listening on $observatoryUri
 Hello!
 ''',
       ));
@@ -166,14 +166,14 @@
       );
 
       expect(result.started, isTrue);
-      expect(result.vmServiceUri, vmServiceUri);
+      expect(result.observatoryUri, observatoryUri);
       expect(logLines.last, 'Hello!');
       expect(fakeProcessManager, hasNoRemainingExpectations);
     }, overrides: startOverrides);
 
     testUsingContext('performs a build and starts in debug mode with track-widget-creation', () async {
       final FlutterTesterApp app = FlutterTesterApp.fromCurrentDirectory(fileSystem);
-      final Uri vmServiceUri = Uri.parse('http://127.0.0.1:6666/');
+      final Uri observatoryUri = Uri.parse('http://127.0.0.1:6666/');
       final Completer<void> completer = Completer<void>();
       fakeProcessManager.addCommand(FakeCommand(
         command: const <String>[
@@ -188,7 +188,7 @@
         completer: completer,
         stdout:
         '''
-The Dart VM service is listening on $vmServiceUri
+The Dart VM service is listening on $observatoryUri
 Hello!
 ''',
       ));
@@ -199,7 +199,7 @@
       );
 
       expect(result.started, isTrue);
-      expect(result.vmServiceUri, vmServiceUri);
+      expect(result.observatoryUri, observatoryUri);
       expect(logLines.last, 'Hello!');
       expect(fakeProcessManager, hasNoRemainingExpectations);
     }, overrides: startOverrides);
diff --git a/packages/flutter_tools/test/general.shard/vmservice_test.dart b/packages/flutter_tools/test/general.shard/vmservice_test.dart
index c5238a3..837706b 100644
--- a/packages/flutter_tools/test/general.shard/vmservice_test.dart
+++ b/packages/flutter_tools/test/general.shard/vmservice_test.dart
@@ -59,7 +59,7 @@
 );
 
 void main() {
-  testWithoutContext('VM Service registers reloadSources', () async {
+  testWithoutContext('VmService registers reloadSources', () async {
     Future<void> reloadSources(String isolateId, { bool? pause, bool? force}) async {}
 
     final MockVMService mockVMService = MockVMService();
@@ -76,7 +76,7 @@
     expect(mockVMService.services, containsPair('reloadSources', 'Flutter Tools'));
   });
 
-  testWithoutContext('VM Service registers flutterMemoryInfo service', () async {
+  testWithoutContext('VmService registers flutterMemoryInfo service', () async {
     final FakeDevice mockDevice = FakeDevice();
 
     final MockVMService mockVMService = MockVMService();
@@ -93,7 +93,7 @@
     expect(mockVMService.services, containsPair('flutterMemoryInfo', 'Flutter Tools'));
   });
 
-  testWithoutContext('VM Service registers flutterGetSkSL service', () async {
+  testWithoutContext('VmService registers flutterGetSkSL service', () async {
     final MockVMService mockVMService = MockVMService();
     await setUpVmService(
       null,
@@ -108,7 +108,7 @@
     expect(mockVMService.services, containsPair('flutterGetSkSL', 'Flutter Tools'));
   });
 
-  testWithoutContext('VM Service throws tool exit on service registration failure.', () async {
+  testWithoutContext('VmService throws tool exit on service registration failure.', () async {
     final MockVMService mockVMService = MockVMService()
       ..errorOnRegisterService = true;
 
@@ -123,7 +123,7 @@
     ), throwsToolExit());
   });
 
-  testWithoutContext('VM Service throws tool exit on service registration failure with awaited future.', () async {
+  testWithoutContext('VmService throws tool exit on service registration failure with awaited future.', () async {
     final MockVMService mockVMService = MockVMService()
       ..errorOnRegisterService = true;
 
@@ -138,7 +138,7 @@
     ), throwsToolExit());
   });
 
-  testWithoutContext('VM Service registers flutterPrintStructuredErrorLogMethod', () async {
+  testWithoutContext('VmService registers flutterPrintStructuredErrorLogMethod', () async {
     final MockVMService mockVMService = MockVMService();
     await setUpVmService(
       null,
@@ -152,7 +152,7 @@
     expect(mockVMService.listenedStreams, contains(vm_service.EventStreams.kExtension));
   });
 
-  testWithoutContext('VM Service returns correct FlutterVersion', () async {
+  testWithoutContext('VMService returns correct FlutterVersion', () async {
     final MockVMService mockVMService = MockVMService();
     await setUpVmService(
       null,
@@ -167,7 +167,7 @@
     expect(mockVMService.services, containsPair('flutterVersion', 'Flutter Tools'));
   });
 
-  testUsingContext('VM Service prints messages for connection failures', () {
+  testUsingContext('VMService prints messages for connection failures', () {
     final BufferLogger logger = BufferLogger.test();
     FakeAsync().run((FakeAsync time) {
       final Uri uri = Uri.parse('ws://127.0.0.1:12345/QqL7EFEDNG0=/ws');
diff --git a/packages/flutter_tools/test/general.shard/web/golden_comparator_test.dart b/packages/flutter_tools/test/general.shard/web/golden_comparator_test.dart
index 7f3570e..32ad2c2 100644
--- a/packages/flutter_tools/test/general.shard/web/golden_comparator_test.dart
+++ b/packages/flutter_tools/test/general.shard/web/golden_comparator_test.dart
@@ -40,7 +40,7 @@
       processManager.addCommand(FakeCommand(
         command: const <String>[
           'shell',
-          '--disable-vm-service',
+          '--disable-observatory',
           '--non-interactive',
           '--packages=.dart_tool/package_config.json',
           'compiler_output',
@@ -74,7 +74,7 @@
       processManager.addCommand(FakeCommand(
         command: const <String>[
           'shell',
-          '--disable-vm-service',
+          '--disable-observatory',
           '--non-interactive',
           '--packages=.dart_tool/package_config.json',
           'compiler_output',
@@ -107,7 +107,7 @@
       processManager.addCommand(FakeCommand(
         command: const <String>[
           'shell',
-          '--disable-vm-service',
+          '--disable-observatory',
           '--non-interactive',
           '--packages=.dart_tool/package_config.json',
           'compiler_output',
@@ -143,7 +143,7 @@
       processManager.addCommand(FakeCommand(
         command: const <String>[
           'shell',
-          '--disable-vm-service',
+          '--disable-observatory',
           '--non-interactive',
           '--packages=.dart_tool/package_config.json',
           'compiler_output',
@@ -152,7 +152,7 @@
       processManager.addCommand(FakeCommand(
         command: const <String>[
           'shell',
-          '--disable-vm-service',
+          '--disable-observatory',
           '--non-interactive',
           '--packages=.dart_tool/package_config.json',
           'compiler_output',
@@ -186,7 +186,7 @@
       processManager.addCommand(FakeCommand(
         command: const <String>[
           'shell',
-          '--disable-vm-service',
+          '--disable-observatory',
           '--non-interactive',
           '--packages=.dart_tool/package_config.json',
           'compiler_output',
diff --git a/packages/flutter_tools/test/general.shard/xcode_backend_test.dart b/packages/flutter_tools/test/general.shard/xcode_backend_test.dart
index fe7bb29..626db26 100644
--- a/packages/flutter_tools/test/general.shard/xcode_backend_test.dart
+++ b/packages/flutter_tools/test/general.shard/xcode_backend_test.dart
@@ -195,12 +195,12 @@
     });
   });
 
-  group('test_vm_service_bonjour_service', () {
+  group('test_observatory_bonjour_service', () {
     test('handles when the Info.plist is missing', () {
       final Directory buildDir = fileSystem.directory('/path/to/builds');
       buildDir.createSync(recursive: true);
       final TestContext context = TestContext(
-        <String>['test_vm_service_bonjour_service'],
+        <String>['test_observatory_bonjour_service'],
         <String, String>{
           'CONFIGURATION': 'Debug',
           'BUILT_PRODUCTS_DIR': buildDir.path,
@@ -212,7 +212,7 @@
       expect(
         context.stdout,
         contains(
-            'Info.plist does not exist. Skipping _dartVmService._tcp NSBonjourServices insertion.'),
+            'Info.plist does not exist. Skipping _dartobservatory._tcp NSBonjourServices insertion.'),
       );
     });
   });
diff --git a/packages/flutter_tools/test/host_cross_arch.shard/ios_content_validation_test.dart b/packages/flutter_tools/test/host_cross_arch.shard/ios_content_validation_test.dart
index fd2a7f7..6b0081f 100644
--- a/packages/flutter_tools/test/host_cross_arch.shard/ios_content_validation_test.dart
+++ b/packages/flutter_tools/test/host_cross_arch.shard/ios_content_validation_test.dart
@@ -157,7 +157,7 @@
           expect(_containsBitcode(outputFlutterFrameworkBinary.path, processManager), isFalse);
         });
 
-        testWithoutContext('Info.plist dart VM Service Bonjour service', () {
+        testWithoutContext('Info.plist dart observatory Bonjour service', () {
           final String infoPlistPath = fileSystem.path.join(
             outputApp.path,
             'Info.plist',
@@ -173,7 +173,7 @@
               infoPlistPath,
             ],
           );
-          final bool bonjourServicesFound = (bonjourServices.stdout as String).contains('_dartVmService._tcp');
+          final bool bonjourServicesFound = (bonjourServices.stdout as String).contains('_dartobservatory._tcp');
           expect(bonjourServicesFound, buildMode == BuildMode.debug);
 
           final ProcessResult localNetworkUsage = processManager.runSync(
diff --git a/packages/flutter_tools/test/integration.shard/flutter_run_with_error_test.dart b/packages/flutter_tools/test/integration.shard/flutter_run_with_error_test.dart
index 4088ce9..19b3bca 100644
--- a/packages/flutter_tools/test/integration.shard/flutter_run_with_error_test.dart
+++ b/packages/flutter_tools/test/integration.shard/flutter_run_with_error_test.dart
@@ -52,7 +52,7 @@
     transformToLines(process.stdout).listen((String line) async {
       stdout.writeln(line);
 
-      if (line.startsWith('A Dart VM Service on')) {
+      if (line.startsWith('An Observatory debugger')) {
         final RegExp exp = RegExp(r'http://127.0.0.1:(\d+)/');
         final RegExpMatch match = exp.firstMatch(line)!;
         final String port = match.group(1)!;
diff --git a/packages/flutter_tools/test/integration.shard/observatory_port_test.dart b/packages/flutter_tools/test/integration.shard/observatory_port_test.dart
index 453ce8c..e1d4241 100644
--- a/packages/flutter_tools/test/integration.shard/observatory_port_test.dart
+++ b/packages/flutter_tools/test/integration.shard/observatory_port_test.dart
@@ -20,13 +20,13 @@
   return port;
 }
 
-Future<void> waitForVmServiceMessage(Process process, int port) async {
+Future<void> waitForObservatoryMessage(Process process, int port) async {
   final Completer<void> completer = Completer<void>();
   process.stdout
     .transform(utf8.decoder)
     .listen((String line) {
       printOnFailure(line);
-      if (line.contains('A Dart VM Service on Flutter test device is available at')) {
+      if (line.contains('An Observatory debugger and profiler on Flutter test device is available at')) {
         if (line.contains('http://127.0.0.1:$port')) {
           completer.complete();
         } else {
@@ -53,43 +53,43 @@
     tryToDelete(tempDir);
   });
 
-  testWithoutContext('flutter run --vm-service-port', () async {
+  testWithoutContext('flutter run --observatory-port', () async {
     final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
     final int port = await getFreePort();
-    // If only --vm-service-port is provided, --vm-service-port will be used by DDS
+    // If only --observatory-port is provided, --observatory-port will be used by DDS
     // and the VM service will bind to a random port.
     final Process process = await processManager.start(<String>[
       flutterBin,
       'run',
       '--show-test-device',
-      '--vm-service-port=$port',
+      '--observatory-port=$port',
       '-d',
       'flutter-tester',
     ], workingDirectory: tempDir.path);
-    await waitForVmServiceMessage(process, port);
+    await waitForObservatoryMessage(process, port);
     process.kill();
     await process.exitCode;
   });
 
-  testWithoutContext('flutter run --dds-port --vm-service-port', () async {
+  testWithoutContext('flutter run --dds-port --observatory-port', () async {
     final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
-    final int vmServicePort = await getFreePort();
+    final int observatoryPort = await getFreePort();
     int ddsPort = await getFreePort();
-    while(ddsPort == vmServicePort) {
+    while(ddsPort == observatoryPort) {
       ddsPort = await getFreePort();
     }
-    // If both --dds-port and --vm-service-port are provided, --dds-port will be used by
-    // DDS and --vm-service-port will be used by the VM service.
+    // If both --dds-port and --observatory-port are provided, --dds-port will be used by
+    // DDS and --observatory-port will be used by the VM service.
     final Process process = await processManager.start(<String>[
       flutterBin,
       'run',
       '--show-test-device',
-      '--vm-service-port=$vmServicePort',
+      '--observatory-port=$observatoryPort',
       '--dds-port=$ddsPort',
       '-d',
       'flutter-tester',
     ], workingDirectory: tempDir.path);
-    await waitForVmServiceMessage(process, ddsPort);
+    await waitForObservatoryMessage(process, ddsPort);
     process.kill();
     await process.exitCode;
   });
@@ -107,7 +107,7 @@
       '-d',
       'flutter-tester',
     ], workingDirectory: tempDir.path);
-    await waitForVmServiceMessage(process, ddsPort);
+    await waitForObservatoryMessage(process, ddsPort);
     process.kill();
     await process.exitCode;
   });
diff --git a/packages/flutter_tools/test/integration.shard/overall_experience_test.dart b/packages/flutter_tools/test/integration.shard/overall_experience_test.dart
index 76de27c..5572048 100644
--- a/packages/flutter_tools/test/integration.shard/overall_experience_test.dart
+++ b/packages/flutter_tools/test/integration.shard/overall_experience_test.dart
@@ -499,7 +499,7 @@
         <String>['run', '-dflutter-tester', testScript],
         testDirectory,
         <Transition>[
-          Barrier(RegExp(r'^A Dart VM Service on Flutter test device is available at: ')),
+          Barrier(RegExp(r'^An Observatory debugger and profiler on Flutter test device is available at: ')),
           Barrier(RegExp(r'^The Flutter DevTools debugger and profiler on Flutter test device is available at: '), handler: (String line) {
             return 'r';
           }),
@@ -591,7 +591,7 @@
       'c Clear the screen',
       'q Quit (terminate the application on the device).',
       '',
-      startsWith('A Dart VM Service on Flutter test device is available at: http://'),
+      startsWith('An Observatory debugger and profiler on Flutter test device is available at: http://'),
       startsWith('The Flutter DevTools debugger and profiler on Flutter test device is available at: http://'),
       '',
       'Flutter run key commands.',
@@ -618,7 +618,7 @@
       'c Clear the screen',
       'q Quit (terminate the application on the device).',
       '',
-      startsWith('A Dart VM Service on Flutter test device is available at: http://'),
+      startsWith('An Observatory debugger and profiler on Flutter test device is available at: http://'),
       startsWith('The Flutter DevTools debugger and profiler on Flutter test device is available at: http://'),
       '',
       'Application finished.',
diff --git a/packages/flutter_tools/test/integration.shard/test_driver.dart b/packages/flutter_tools/test/integration.shard/test_driver.dart
index b96cd95..f233b37 100644
--- a/packages/flutter_tools/test/integration.shard/test_driver.dart
+++ b/packages/flutter_tools/test/integration.shard/test_driver.dart
@@ -806,7 +806,7 @@
     if (withDebugger) {
       final Map<String, Object?> startedProcessParams =
           (await _waitFor(event: 'test.startedProcess', timeout: appStartTimeout))['params']! as Map<String, Object?>;
-      final String vmServiceHttpString = startedProcessParams['vmServiceUri']! as String;
+      final String vmServiceHttpString = startedProcessParams['observatoryUri']! as String;
       _vmServiceWsUri = Uri.parse(vmServiceHttpString).replace(scheme: 'ws', path: '/ws');
       await connectToVmService(pauseOnExceptions: pauseOnExceptions);
       // Allow us to run code before we start, eg. to set up breakpoints.
diff --git a/packages/flutter_tools/test/integration.shard/xcode_backend_test.dart b/packages/flutter_tools/test/integration.shard/xcode_backend_test.dart
index 36cfa61..01484aa 100644
--- a/packages/flutter_tools/test/integration.shard/xcode_backend_test.dart
+++ b/packages/flutter_tools/test/integration.shard/xcode_backend_test.dart
@@ -66,7 +66,7 @@
     expect(result.exitCode, isNot(0));
   }, skip: !io.Platform.isMacOS); // [intended] requires macos toolchain.
 
-  group('vmService Bonjour service keys', () {
+  group('observatory Bonjour service keys', () {
     late Directory buildDirectory;
     late File infoPlist;
 
@@ -78,7 +78,7 @@
     test('handles when the Info.plist is missing', () async {
       final ProcessResult result = await Process.run(
         xcodeBackendPath,
-        <String>['test_vm_service_bonjour_service'],
+        <String>['test_observatory_bonjour_service'],
         environment: <String, String>{
           'CONFIGURATION': 'Debug',
           'BUILT_PRODUCTS_DIR': buildDirectory.path,
@@ -102,7 +102,7 @@
 
       final ProcessResult result = await Process.run(
         xcodeBackendPath,
-        <String>['test_vm_service_bonjour_service'],
+        <String>['test_observatory_bonjour_service'],
         environment: <String, String>{
           'CONFIGURATION': 'Release',
           'BUILT_PRODUCTS_DIR': buildDirectory.path,
@@ -112,7 +112,7 @@
 
       final String actualInfoPlist = infoPlist.readAsStringSync();
       expect(actualInfoPlist, isNot(contains('NSBonjourServices')));
-      expect(actualInfoPlist, isNot(contains('dartVmService')));
+      expect(actualInfoPlist, isNot(contains('dartobservatory')));
       expect(actualInfoPlist, isNot(contains('NSLocalNetworkUsageDescription')));
 
       expect(result.exitCode, 0);
@@ -124,7 +124,7 @@
 
         final ProcessResult result = await Process.run(
           xcodeBackendPath,
-          <String>['test_vm_service_bonjour_service'],
+          <String>['test_observatory_bonjour_service'],
           environment: <String, String>{
             'CONFIGURATION': buildConfiguration,
             'BUILT_PRODUCTS_DIR': buildDirectory.path,
@@ -134,7 +134,7 @@
 
         final String actualInfoPlist = infoPlist.readAsStringSync();
         expect(actualInfoPlist, contains('NSBonjourServices'));
-        expect(actualInfoPlist, contains('dartVmService'));
+        expect(actualInfoPlist, contains('dartobservatory'));
         expect(actualInfoPlist, contains('NSLocalNetworkUsageDescription'));
 
         expect(result.exitCode, 0);
@@ -158,7 +158,7 @@
 
       final ProcessResult result = await Process.run(
         xcodeBackendPath,
-        <String>['test_vm_service_bonjour_service'],
+        <String>['test_observatory_bonjour_service'],
         environment: <String, String>{
           'CONFIGURATION': 'Debug',
           'BUILT_PRODUCTS_DIR': buildDirectory.path,
@@ -173,7 +173,7 @@
 <dict>
 	<key>NSBonjourServices</key>
 	<array>
-		<string>_dartVmService._tcp</string>
+		<string>_dartobservatory._tcp</string>
 		<string>_bogus._tcp</string>
 	</array>
 	<key>NSLocalNetworkUsageDescription</key>
