diff --git a/packages/flutter_tools/lib/src/commands/assemble.dart b/packages/flutter_tools/lib/src/commands/assemble.dart
index 9919e65..e5a6659 100644
--- a/packages/flutter_tools/lib/src/commands/assemble.dart
+++ b/packages/flutter_tools/lib/src/commands/assemble.dart
@@ -30,6 +30,8 @@
   @override
   String get name => 'assemble';
 
+  @override
+  bool get isExperimental => true;
 
   @override
   Future<FlutterCommandResult> runCommand() {
@@ -125,6 +127,9 @@
   String get name => 'run';
 
   @override
+  bool get isExperimental => true;
+
+  @override
   Future<FlutterCommandResult> runCommand() async {
     final BuildResult result = await buildSystem.build(targetName, environment, BuildSystemConfig(
       resourcePoolSize: argResults['resource-pool-size'],
@@ -151,6 +156,9 @@
   String get name => 'describe';
 
   @override
+  bool get isExperimental => true;
+
+  @override
   Future<FlutterCommandResult> runCommand() {
     try {
       printStatus(
@@ -173,6 +181,9 @@
   String get name => 'inputs';
 
   @override
+  bool get isExperimental => true;
+
+  @override
   Future<FlutterCommandResult> runCommand() {
     try {
       final List<Map<String, Object>> results = buildSystem.describe(targetName, environment);
@@ -199,6 +210,9 @@
   String get name => 'build-dir';
 
   @override
+  bool get isExperimental => true;
+
+  @override
   Future<FlutterCommandResult> runCommand() {
     printStatus(environment.buildDir.path);
     return null;
diff --git a/packages/flutter_tools/lib/src/commands/build_bundle.dart b/packages/flutter_tools/lib/src/commands/build_bundle.dart
index d15cfa4..ef2235f 100644
--- a/packages/flutter_tools/lib/src/commands/build_bundle.dart
+++ b/packages/flutter_tools/lib/src/commands/build_bundle.dart
@@ -8,10 +8,10 @@
 import '../base/file_system.dart';
 import '../build_info.dart';
 import '../bundle.dart';
-import '../features.dart';
 import '../project.dart';
 import '../reporting/usage.dart';
 import '../runner/flutter_command.dart' show FlutterOptions, FlutterCommandResult;
+import '../version.dart';
 import 'build.dart';
 
 class BuildBundleCommand extends BuildSubCommand {
@@ -98,21 +98,13 @@
     if (platform == null) {
       throwToolExit('Unknown platform: $targetPlatform');
     }
-    // Check for target platforms that are only allowed via feature flags.
+    // Check for target platforms that are only allowed on unstable Flutter.
     switch (platform) {
       case TargetPlatform.darwin_x64:
-        if (!featureFlags.isMacOSEnabled) {
-          throwToolExit('macOS is not a supported target platform.');
-        }
-        break;
       case TargetPlatform.windows_x64:
-        if (!featureFlags.isWindowsEnabled) {
-          throwToolExit('Windows is not a supported target platform.');
-        }
-        break;
       case TargetPlatform.linux_x64:
-        if (!featureFlags.isLinuxEnabled) {
-          throwToolExit('Linux is not a supported target platform.');
+        if (!FlutterVersion.instance.isMaster) {
+          throwToolExit('$targetPlatform is not supported on stable Flutter.');
         }
         break;
       default:
diff --git a/packages/flutter_tools/lib/src/commands/build_fuchsia.dart b/packages/flutter_tools/lib/src/commands/build_fuchsia.dart
index 39e0a84..473f943 100644
--- a/packages/flutter_tools/lib/src/commands/build_fuchsia.dart
+++ b/packages/flutter_tools/lib/src/commands/build_fuchsia.dart
@@ -25,6 +25,9 @@
   final String name = 'fuchsia';
 
   @override
+  bool isExperimental = true;
+
+  @override
   bool hidden = true;
 
   @override
diff --git a/packages/flutter_tools/lib/src/commands/build_linux.dart b/packages/flutter_tools/lib/src/commands/build_linux.dart
index e75e411..4175b6d 100644
--- a/packages/flutter_tools/lib/src/commands/build_linux.dart
+++ b/packages/flutter_tools/lib/src/commands/build_linux.dart
@@ -8,7 +8,6 @@
 import '../base/platform.dart';
 import '../build_info.dart';
 import '../cache.dart';
-import '../features.dart';
 import '../linux/build_linux.dart';
 import '../project.dart';
 import '../runner/flutter_command.dart' show FlutterCommandResult;
@@ -36,6 +35,9 @@
   final String name = 'linux';
 
   @override
+  bool isExperimental = true;
+
+  @override
   bool hidden = true;
 
   @override
@@ -52,9 +54,6 @@
     Cache.releaseLockEarly();
     final BuildInfo buildInfo = getBuildInfo();
     final FlutterProject flutterProject = FlutterProject.current();
-    if (!featureFlags.isLinuxEnabled) {
-      throwToolExit('"build linux" is not currently supported.');
-    }
     if (!platform.isLinux) {
       throwToolExit('"build linux" only supported on Linux hosts.');
     }
diff --git a/packages/flutter_tools/lib/src/commands/build_macos.dart b/packages/flutter_tools/lib/src/commands/build_macos.dart
index f871186..e773f42 100644
--- a/packages/flutter_tools/lib/src/commands/build_macos.dart
+++ b/packages/flutter_tools/lib/src/commands/build_macos.dart
@@ -8,7 +8,6 @@
 import '../base/platform.dart';
 import '../build_info.dart';
 import '../cache.dart';
-import '../features.dart';
 import '../macos/build_macos.dart';
 import '../project.dart';
 import '../runner/flutter_command.dart' show FlutterCommandResult;
@@ -36,6 +35,9 @@
   final String name = 'macos';
 
   @override
+  bool isExperimental = true;
+
+  @override
   bool hidden = true;
 
   @override
@@ -45,16 +47,13 @@
   };
 
   @override
-  String get description => 'build the macOS desktop target.';
+  String get description => 'build the macOS desktop target (Experimental).';
 
   @override
   Future<FlutterCommandResult> runCommand() async {
     Cache.releaseLockEarly();
     final BuildInfo buildInfo = getBuildInfo();
     final FlutterProject flutterProject = FlutterProject.current();
-    if (!featureFlags.isMacOSEnabled) {
-      throwToolExit('"build macos" is not currently supported.');
-    }
     if (!platform.isMacOS) {
       throwToolExit('"build macos" only supported on macOS hosts.');
     }
diff --git a/packages/flutter_tools/lib/src/commands/build_web.dart b/packages/flutter_tools/lib/src/commands/build_web.dart
index 575d1b0..32cea06 100644
--- a/packages/flutter_tools/lib/src/commands/build_web.dart
+++ b/packages/flutter_tools/lib/src/commands/build_web.dart
@@ -4,9 +4,7 @@
 
 import 'dart:async';
 
-import '../base/common.dart';
 import '../build_info.dart';
-import '../features.dart';
 import '../project.dart';
 import '../runner/flutter_command.dart'
     show DevelopmentArtifact, FlutterCommandResult;
@@ -34,13 +32,13 @@
   bool get hidden => true;
 
   @override
-  final String description = 'build a web application bundle.';
+  bool get isExperimental => true;
+
+  @override
+  final String description = '(EXPERIMENTAL) build a web application bundle.';
 
   @override
   Future<FlutterCommandResult> runCommand() async {
-    if (!featureFlags.isWebEnabled) {
-      throwToolExit('"build web" is not currently supported.');
-    }
     final FlutterProject flutterProject = FlutterProject.current();
     final String target = argResults['target'];
     final BuildInfo buildInfo = getBuildInfo();
diff --git a/packages/flutter_tools/lib/src/commands/build_windows.dart b/packages/flutter_tools/lib/src/commands/build_windows.dart
index e41de03..884d26f 100644
--- a/packages/flutter_tools/lib/src/commands/build_windows.dart
+++ b/packages/flutter_tools/lib/src/commands/build_windows.dart
@@ -8,7 +8,6 @@
 import '../base/platform.dart';
 import '../build_info.dart';
 import '../cache.dart';
-import '../features.dart';
 import '../project.dart';
 import '../runner/flutter_command.dart' show FlutterCommandResult;
 import '../windows/build_windows.dart';
@@ -36,6 +35,9 @@
   final String name = 'windows';
 
   @override
+  bool isExperimental = true;
+
+  @override
   bool hidden = true;
 
   @override
@@ -45,16 +47,13 @@
   };
 
   @override
-  String get description => 'build the desktop Windows target.';
+  String get description => 'build the desktop Windows target (Experimental).';
 
   @override
   Future<FlutterCommandResult> runCommand() async {
     Cache.releaseLockEarly();
     final FlutterProject flutterProject = FlutterProject.current();
     final BuildInfo buildInfo = getBuildInfo();
-    if (!featureFlags.isWindowsEnabled) {
-      throwToolExit('"build windows" is not currently supported.');
-    }
     if (!platform.isWindows) {
       throwToolExit('"build windows" only supported on Windows hosts.');
     }
diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart
index 875beae..17458ee 100644
--- a/packages/flutter_tools/lib/src/commands/create.dart
+++ b/packages/flutter_tools/lib/src/commands/create.dart
@@ -20,7 +20,6 @@
 import '../convert.dart';
 import '../dart/pub.dart';
 import '../doctor.dart';
-import '../features.dart';
 import '../globals.dart';
 import '../project.dart';
 import '../reporting/usage.dart';
@@ -614,7 +613,7 @@
       'iosLanguage': iosLanguage,
       'flutterRevision': FlutterVersion.instance.frameworkRevision,
       'flutterChannel': FlutterVersion.instance.channel,
-      'web': web && featureFlags.isWebEnabled,
+      'web': web && FlutterVersion.instance.isMaster
     };
   }
 
diff --git a/packages/flutter_tools/lib/src/commands/run.dart b/packages/flutter_tools/lib/src/commands/run.dart
index 0254e3e..91de004 100644
--- a/packages/flutter_tools/lib/src/commands/run.dart
+++ b/packages/flutter_tools/lib/src/commands/run.dart
@@ -13,7 +13,6 @@
 import '../build_info.dart';
 import '../cache.dart';
 import '../device.dart';
-import '../features.dart';
 import '../globals.dart';
 import '../macos/xcode.dart';
 import '../project.dart';
@@ -411,11 +410,11 @@
       );
       flutterDevices.add(flutterDevice);
     }
-    // Only support "web mode" with a single web device due to resident runner
-    // refactoring required otherwise.
-    final bool webMode = featureFlags.isWebEnabled &&
-                         devices.length == 1  &&
-                         await devices.single.targetPlatform == TargetPlatform.web_javascript;
+    // Only support "web mode" on non-stable branches with a single web device
+    // in a "hot mode".
+    final bool webMode = FlutterVersion.instance.isMaster
+      && devices.length == 1
+      && await devices.single.targetPlatform == TargetPlatform.web_javascript;
 
     ResidentRunner runner;
     final String applicationBinaryPath = argResults['use-application-binary'];
diff --git a/packages/flutter_tools/lib/src/commands/unpack.dart b/packages/flutter_tools/lib/src/commands/unpack.dart
index 481c326..799815e 100644
--- a/packages/flutter_tools/lib/src/commands/unpack.dart
+++ b/packages/flutter_tools/lib/src/commands/unpack.dart
@@ -70,6 +70,9 @@
   bool get hidden => true;
 
   @override
+  bool get isExperimental => true;
+
+  @override
   Future<Set<DevelopmentArtifact>> get requiredArtifacts async {
     final Set<DevelopmentArtifact> result = <DevelopmentArtifact>{
       DevelopmentArtifact.universal,
