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 78b5ce1..f4dd874 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 af01875..81452f4 100644
--- a/packages/flutter/lib/src/widgets/app.dart
+++ b/packages/flutter/lib/src/widgets/app.dart
@@ -1172,7 +1172,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.
@@ -1182,12 +1182,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 6cc84ed..6db53bf 100644
--- a/packages/flutter/lib/src/widgets/widget_inspector.dart
+++ b/packages/flutter/lib/src/widgets/widget_inspector.dart
@@ -703,7 +703,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)
@@ -712,7 +712,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;
 
@@ -739,7 +739,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>>{};
@@ -1690,7 +1690,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 c0017d2..e62b299 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 b1e2f5f..7ea3690 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..7b43e08 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 dispose 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 aec955e..c667ace 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 559880e..e8bf089 100644
--- a/packages/flutter_tools/lib/src/commands/daemon.dart
+++ b/packages/flutter_tools/lib/src/commands/daemon.dart
@@ -1016,9 +1016,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 801856b..19e0572 100644
--- a/packages/flutter_tools/lib/src/commands/test.dart
+++ b/packages/flutter_tools/lib/src/commands/test.dart
@@ -464,7 +464,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 864c592..0093d57 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 8d4b8c9..276670a 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,24 +1066,21 @@
 }
 
 class LaunchResult {
-  LaunchResult.succeeded({ Uri? vmServiceUri, Uri? observatoryUri }) :
-    started = true,
-    vmServiceUri = vmServiceUri ?? observatoryUri;
-
+  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();
   }
@@ -1112,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 cddf8bd..1640f7d 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..470c253 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
@@ -378,8 +378,8 @@
             deviceLogReader.debuggerStream = iosDeployDebugger;
           }
         }
-        // Don't port foward if debugging with a network device.
-        vmServiceDiscovery = ProtocolDiscovery.vmService(
+        // Don't port forward if debugging with a network device.
+        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 63d005e..f9a98cc 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 d900865..c230b6d 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 cb808a3..e8c8955 100644
--- a/packages/flutter_tools/lib/src/runner/flutter_command.dart
+++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart
@@ -139,10 +139,7 @@
   /// 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 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.
@@ -382,22 +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,
-        help: '(deprecated; use host-vmservice-port instead) '
-              'Listen to the given port for a Dart VM Service 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.',
-        hide: !verboseHelp,
-    );
     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',
@@ -501,21 +490,19 @@
     return ddsEnabled;
   }();
 
-  bool get _hostVmServicePortProvided => (argResults?.wasParsed(vmServicePortOption) ?? false)
-      || (argResults?.wasParsed(observatoryPortOption) ?? false)
+  bool get _hostVmServicePortProvided => (argResults?.wasParsed('observatory-port') ?? false)
       || (argResults?.wasParsed('host-vmservice-port') ?? false);
 
   int _tryParseHostVmservicePort() {
-    final String? vmServicePort = stringArgDeprecated(vmServicePortOption) ??
-                                  stringArgDeprecated(observatoryPortOption);
+    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');
     }
   }
 
@@ -541,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.
@@ -552,10 +539,9 @@
     if (!_usesPortOption || !_hostVmServicePortProvided) {
       return null;
     }
-    if ((argResults?.wasParsed(vmServicePortOption) ?? false)
-        && (argResults?.wasParsed(observatoryPortOption) ?? 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 1881fb64..d41732c 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`.
@@ -141,11 +141,11 @@
       }
     );
 
-    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 a9bf867..c4f02e0 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,15 +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,
-  // TODO(bkonyi): remove after roll into google3.
   bool enableObservatory = false,
-  bool enableVmService = false,
   bool machine = false,
   String? precompiledDillPath,
   Map<String, String>? precompiledDillFiles,
@@ -70,7 +68,7 @@
   TestTimeRecorder? testTimeRecorder,
   UriConverter? uriConverter,
 }) {
-  assert(enableVmService || enableObservatory || (!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) {
@@ -86,7 +84,7 @@
     debuggingOptions: debuggingOptions,
     watcher: watcher,
     machine: machine,
-    enableVmService: enableVmService || enableObservatory,
+    enableObservatory: enableObservatory,
     host: _kHosts[serverType],
     precompiledDillPath: precompiledDillPath,
     precompiledDillFiles: precompiledDillFiles,
@@ -278,7 +276,7 @@
     required this.shellPath,
     required this.debuggingOptions,
     this.watcher,
-    this.enableVmService,
+    this.enableObservatory,
     this.machine,
     this.host,
     this.precompiledDillPath,
@@ -297,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;
@@ -359,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) {
@@ -426,7 +424,7 @@
       processManager: globals.processManager,
       logger: globals.logger,
       shellPath: shellPath,
-      enableVmService: enableVmService!,
+      enableObservatory: enableObservatory!,
       machine: machine,
       debuggingOptions: debuggingOptions,
       host: host,
@@ -514,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 cb0390c..107af2b 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,
@@ -68,7 +68,7 @@
     List<String> plainNames = const <String>[],
     String? tags,
     String? excludeTags,
-    bool enableVmService = false,
+    bool enableObservatory = false,
     bool ipv6 = false,
     bool machine = false,
     String? precompiledDillPath,
@@ -197,7 +197,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 f0096a0..d37d611 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 8969fa5..3938a96 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 ed189de..e783add 100644
--- a/packages/flutter_tools/test/commands.shard/hermetic/test_test.dart
+++ b/packages/flutter_tools/test/commands.shard/hermetic/test_test.dart
@@ -298,7 +298,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);
@@ -313,7 +313,7 @@
       'test/fake_test.dart',
     ]);
     expect(
-      testRunner.lastEnableVmServiceValue,
+      testRunner.lastEnableObservatoryValue,
       true,
     );
 
@@ -326,7 +326,7 @@
       'test/fake_test.dart',
     ]);
     expect(
-      testRunner.lastEnableVmServiceValue,
+      testRunner.lastEnableObservatoryValue,
       true,
     );
 
@@ -337,7 +337,7 @@
       'test/fake_test.dart',
     ]);
     expect(
-      testRunner.lastEnableVmServiceValue,
+      testRunner.lastEnableObservatoryValue,
       false,
     );
   }, overrides: <Type, Generator>{
@@ -848,7 +848,7 @@
 
   int exitCode;
   Duration? leastRunTime;
-  bool? lastEnableVmServiceValue;
+  bool? lastEnableObservatoryValue;
   late DebuggingOptions lastDebuggingOptionsValue;
   String? lastFileReporterValue;
   String? lastReporterOption;
@@ -862,7 +862,7 @@
     List<String> plainNames = const <String>[],
     String? tags,
     String? excludeTags,
-    bool enableVmService = false,
+    bool enableObservatory = false,
     bool ipv6 = false,
     bool machine = false,
     String? precompiledDillPath,
@@ -886,7 +886,7 @@
     String? integrationTestUserIdentifier,
     TestTimeRecorder? testTimeRecorder,
   }) async {
-    lastEnableVmServiceValue = enableVmService;
+    lastEnableObservatoryValue = enableObservatory;
     lastDebuggingOptionsValue = debuggingOptions;
     lastFileReporterValue = fileReporter;
     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 aab4d50..636e752 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 3ee5ecd..cb7bd83 100644
--- a/packages/flutter_tools/test/integration.shard/overall_experience_test.dart
+++ b/packages/flutter_tools/test/integration.shard/overall_experience_test.dart
@@ -502,7 +502,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';
           }),
@@ -594,7 +594,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.',
@@ -621,7 +621,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 c7894d8..2a6a19f 100644
--- a/packages/flutter_tools/test/integration.shard/test_driver.dart
+++ b/packages/flutter_tools/test/integration.shard/test_driver.dart
@@ -812,7 +812,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>
