diff --git a/DEPS b/DEPS
index 5552294..ed209a5 100644
--- a/DEPS
+++ b/DEPS
@@ -140,7 +140,7 @@
   "pool_rev": "7abe634002a1ba8a0928eded086062f1307ccfae",
   "process_rev": "56ece43b53b64c63ae51ec184b76bd5360c28d0b",
   "protobuf_rev": "c1eb6cb51af39ccbaa1a8e19349546586a5c8e31",
-  "pub_rev": "9f2ddc02f066c68fb638ff65fbb73761ece23267",
+  "pub_rev": "cd7a43f2109f7e5eb22e73c7f4e15d25fd57598e",
   "pub_semver_rev": "f50d80ef10c4b2fa5f4c8878036a4d9342c0cc82",
   "resource_rev": "6b79867d0becf5395e5819a75720963b8298e9a7",
   "root_certificates_rev": "692f6d6488af68e0121317a9c2c9eb393eb0ee50",
diff --git a/codereview.settings b/codereview.settings
index fe2e4e9..e950dfc 100644
--- a/codereview.settings
+++ b/codereview.settings
@@ -3,3 +3,4 @@
 CODE_REVIEW_SERVER: https://dart-review.googlesource.com
 VIEW_VC: https://dart.googlesource.com/sdk/+
 CC_LIST: reviews@dartlang.org
+USE_PYTHON3: True
diff --git a/pkg/dartdev/lib/dartdev.dart b/pkg/dartdev/lib/dartdev.dart
index fefffae..c50d7d0 100644
--- a/pkg/dartdev/lib/dartdev.dart
+++ b/pkg/dartdev/lib/dartdev.dart
@@ -15,6 +15,7 @@
 import 'package:meta/meta.dart';
 import 'package:pedantic/pedantic.dart';
 import 'package:pub/pub.dart';
+
 import 'package:usage/usage.dart';
 
 import 'src/analytics.dart';
@@ -36,6 +37,15 @@
 /// analytics logic, it has been moved here.
 Future<void> runDartdev(List<String> args, SendPort port) async {
   VmInteropHandler.initialize(port);
+
+  // TODO(sigurdm): Remove when top-level pub is removed.
+  if (args[0] == '__deprecated_pub') {
+    // This is the entry-point supporting the top-level `pub` script.
+    // ignore: deprecated_member_use
+    VmInteropHandler.exit(await deprecatedpubCommand().run(args.skip(1)));
+    return;
+  }
+
   if (args.contains('run')) {
     // These flags have a format that can't be handled by package:args, so while
     // they are valid flags we'll assume the VM has verified them by this point.
diff --git a/pkg/dartdev/lib/src/commands/create.dart b/pkg/dartdev/lib/src/commands/create.dart
index da41f79..9819614 100644
--- a/pkg/dartdev/lib/src/commands/create.dart
+++ b/pkg/dartdev/lib/src/commands/create.dart
@@ -102,14 +102,11 @@
     );
 
     if (argResults['pub']) {
-      if (!Sdk.checkArtifactExists(sdk.pubSnapshot)) {
-        return 255;
-      }
       log.stdout('');
       var progress = log.progress('Running pub get');
       var process = await startDartProcess(
         sdk,
-        [sdk.pubSnapshot, 'get', '--no-precompile'],
+        ['pub', 'get'],
         cwd: dir,
       );
 
diff --git a/pkg/dartdev/lib/src/sdk.dart b/pkg/dartdev/lib/src/sdk.dart
index 833df09..dde3acf 100644
--- a/pkg/dartdev/lib/src/sdk.dart
+++ b/pkg/dartdev/lib/src/sdk.dart
@@ -78,13 +78,6 @@
         'devtools',
       );
 
-  String get pubSnapshot => path.absolute(
-        sdkPath,
-        'bin',
-        'snapshots',
-        'pub.dart.snapshot',
-      );
-
   static bool checkArtifactExists(String path) {
     if (!File(path).existsSync()) {
       log.stderr('Could not find $path. Have you built the full '
diff --git a/pkg/dartdev/test/analytics_test.dart b/pkg/dartdev/test/analytics_test.dart
index 83050f7..b3e1f8b 100644
--- a/pkg/dartdev/test/analytics_test.dart
+++ b/pkg/dartdev/test/analytics_test.dart
@@ -99,7 +99,8 @@
     });
     test('create', () {
       final p = project(logAnalytics: true);
-      final result = p.runSync(['create', '-tpackage-simple', 'name']);
+      final result =
+          p.runSync(['create', '--no-pub', '-tpackage-simple', 'name']);
       expect(extractAnalytics(result), [
         {
           'hitType': 'screenView',
@@ -113,7 +114,7 @@
             'label': null,
             'value': null,
             'cd1': '0',
-            'cd3': ' template ',
+            'cd3': ' pub template ',
           }
         },
         {
diff --git a/pkg/dartdev/test/sdk_test.dart b/pkg/dartdev/test/sdk_test.dart
index 2f0acab..34dbfc7 100644
--- a/pkg/dartdev/test/sdk_test.dart
+++ b/pkg/dartdev/test/sdk_test.dart
@@ -25,10 +25,6 @@
     expectFileExists(Sdk().analysisServerSnapshot);
   });
 
-  test('pub snapshot', () {
-    expectFileExists(Sdk().pubSnapshot);
-  });
-
   test('dds snapshot', () {
     expectFileExists(Sdk().ddsSnapshot);
   });
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 1e568ba..ea6bf68 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -1079,7 +1079,7 @@
 rs
 runnable
 s
-sand
+sandboxed
 sanitizing
 saw
 say
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index 6ec4b57..89c8686 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -820,7 +820,7 @@
 rows
 runtimes
 rv
-sand
+sandboxed
 saves
 scans
 scheduler
diff --git a/pkg/front_end/tool/ast_model.dart b/pkg/front_end/tool/ast_model.dart
index a0708e4..ae209a2 100644
--- a/pkg/front_end/tool/ast_model.dart
+++ b/pkg/front_end/tool/ast_model.dart
@@ -505,17 +505,24 @@
 ///
 /// If [printDump] is `true`, a dump of the model printed to stdout.
 Future<AstModel> deriveAstModel(Uri repoDir, {bool printDump: false}) async {
+  bool errorsFound = false;
   CompilerOptions options = new CompilerOptions();
   options.sdkRoot = computePlatformBinariesLocation(forceBuildDir: true);
   options.packagesFileUri = computePackageConfig(repoDir);
   options.onDiagnostic = (DiagnosticMessage message) {
     printDiagnosticMessage(message, print);
+    if (message.severity == Severity.error) {
+      errorsFound = true;
+    }
   };
 
   InternalCompilerResult compilerResult = (await kernelForProgramInternal(
       astLibraryUri, options,
       retainDataForTesting: true,
       requireMain: false)) as InternalCompilerResult;
+  if (errorsFound) {
+    throw 'Errors found';
+  }
   ClassHierarchy classHierarchy = compilerResult.classHierarchy!;
   CoreTypes coreTypes = compilerResult.coreTypes!;
   TypeEnvironment typeEnvironment =
@@ -524,7 +531,6 @@
   Library astLibrary = compilerResult.component!.libraries
       .singleWhere((library) => library.importUri == astLibraryUri);
 
-  bool errorsFound = false;
   void reportError(String message) {
     print(message);
     errorsFound = true;
diff --git a/pkg/front_end/tool/generate_ast_coverage.dart b/pkg/front_end/tool/generate_ast_coverage.dart
index 423f2d6..cc2a6a9 100644
--- a/pkg/front_end/tool/generate_ast_coverage.dart
+++ b/pkg/front_end/tool/generate_ast_coverage.dart
@@ -30,6 +30,10 @@
   Map<String, Set<String>> nestedClassNames = {};
 
   @override
+  String get generatorCommand =>
+      'dart pkg/front_end/tool/generate_ast_coverage.dart';
+
+  @override
   String get returnType => 'void';
 
   @override
diff --git a/pkg/front_end/tool/generate_ast_equivalence.dart b/pkg/front_end/tool/generate_ast_equivalence.dart
index 83f689e..22af276 100644
--- a/pkg/front_end/tool/generate_ast_equivalence.dart
+++ b/pkg/front_end/tool/generate_ast_equivalence.dart
@@ -31,6 +31,10 @@
   EquivalenceVisitorStrategy();
 
   @override
+  String get generatorCommand =>
+      'dart pkg/front_end/tool/generate_ast_equivalence.dart';
+
+  @override
   String get argumentType => 'Node';
 
   @override
@@ -414,13 +418,7 @@
 
   void generateHeader(AstModel astModel, StringBuffer sb) {
     sb.writeln('''
-// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// NOTE: THIS FILE IS GENERATED. DO NOT EDIT.
-//
-// Run 'dart pkg/front_end/tool/generate_ast_equivalence.dart' to update.
+$preamble
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/src/printer.dart';
@@ -434,7 +432,7 @@
 /// current assumptions. The current state has two modes. In the asserting mode,
 /// the default, inequivalences are registered when found. In the non-asserting
 /// mode, inequivalences are _not_ registered. The latter is used to compute
-/// equivalences in sand boxed state, for instance to determine which elements
+/// equivalences in sandboxed state, for instance to determine which elements
 /// to pair when checking equivalence of two sets.
 class $visitorName$visitorTypeParameters
     implements Visitor1<$returnType, $argumentType> {
diff --git a/pkg/front_end/tool/visitor_generator.dart b/pkg/front_end/tool/visitor_generator.dart
index d4befb5..22bef62 100644
--- a/pkg/front_end/tool/visitor_generator.dart
+++ b/pkg/front_end/tool/visitor_generator.dart
@@ -84,6 +84,23 @@
 abstract class VisitorStrategy {
   const VisitorStrategy();
 
+  /// Preamble comment used in the generated file.
+  String get preamble => '''
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// NOTE: THIS FILE IS GENERATED. DO NOT EDIT.
+//
+// Run '$generatorCommand' to update.
+''';
+
+  /// The command used to generate the visitor.
+  ///
+  /// This is inserted in the [preamble] along with a comment that the file
+  /// is generated.
+  String get generatorCommand;
+
   /// Comment used as doc comment for the generated visitor class.
   String get visitorComment => '';
 
@@ -128,6 +145,8 @@
 
   void generateHeader(AstModel astModel, StringBuffer sb) {
     sb.writeln('''
+$preamble
+
 import 'package:kernel/ast.dart';
 
 $visitorComment
@@ -199,7 +218,7 @@
 }
 
 /// Strategy for creating an empty `Visitor<void>` implementation.
-class VoidVisitor0Strategy extends Visitor0Strategy {
+abstract class VoidVisitor0Strategy extends Visitor0Strategy {
   const VoidVisitor0Strategy();
 
   @override
@@ -312,7 +331,7 @@
 }
 
 /// Strategy for creating an empty `Visitor1<void,Null>` implementation.
-class VoidVisitor1Strategy extends Visitor1Strategy {
+abstract class VoidVisitor1Strategy extends Visitor1Strategy {
   const VoidVisitor1Strategy();
 
   @override
diff --git a/pkg/kernel/lib/src/coverage.dart b/pkg/kernel/lib/src/coverage.dart
index cfcd11d..01b9483 100644
--- a/pkg/kernel/lib/src/coverage.dart
+++ b/pkg/kernel/lib/src/coverage.dart
@@ -1,3 +1,11 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// NOTE: THIS FILE IS GENERATED. DO NOT EDIT.
+//
+// Run 'dart pkg/front_end/tool/generate_ast_coverage.dart' to update.
+
 import 'package:kernel/ast.dart';
 
 /// Recursive visitor that collects kinds for all visited nodes.
diff --git a/pkg/kernel/lib/src/equivalence.dart b/pkg/kernel/lib/src/equivalence.dart
index 2f9fab4..a8edddb 100644
--- a/pkg/kernel/lib/src/equivalence.dart
+++ b/pkg/kernel/lib/src/equivalence.dart
@@ -18,7 +18,7 @@
 /// current assumptions. The current state has two modes. In the asserting mode,
 /// the default, inequivalences are registered when found. In the non-asserting
 /// mode, inequivalences are _not_ registered. The latter is used to compute
-/// equivalences in sand boxed state, for instance to determine which elements
+/// equivalences in sandboxed state, for instance to determine which elements
 /// to pair when checking equivalence of two sets.
 class EquivalenceVisitor implements Visitor1<bool, Node> {
   final EquivalenceStrategy strategy;
diff --git a/pkg/kernel/lib/src/union_find.dart b/pkg/kernel/lib/src/union_find.dart
index 4dffab0..bab7fc6 100644
--- a/pkg/kernel/lib/src/union_find.dart
+++ b/pkg/kernel/lib/src/union_find.dart
@@ -2,6 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+/// Implementation of a union-find algorithm.
+///
+/// See https://en.wikipedia.org/wiki/Disjoint-set_data_structure
+
 import 'dart:collection';
 
 class UnionFindNode<T> {
@@ -46,6 +50,7 @@
 
   UnionFindNode<T> findNode(UnionFindNode<T> node) {
     if (node.parent != null) {
+      // Perform path compression by updating to the effective target.
       return node.parent = findNode(node.parent!);
     }
     return node;
diff --git a/pkg/kernel/test/equivalence_test.dart b/pkg/kernel/test/equivalence_test.dart
index de5ec47..f57f2a0 100644
--- a/pkg/kernel/test/equivalence_test.dart
+++ b/pkg/kernel/test/equivalence_test.dart
@@ -67,23 +67,22 @@
 '''),
   Test(component1, component2),
   Test(component1.libraries[0], component2.libraries[0]),
-  Test(component1.libraries[0], component2.libraries[0]),
   Test(component1.libraries[0], component2.libraries[1], inequivalence: '''
 Inequivalent nodes
-1: library file://uri1/
-2: library file://uri2/
+1: library import://uri1
+2: library import://uri2
 .root
 '''),
   Test(component1.libraries[1], component2.libraries[2], inequivalence: '''
 Inequivalent nodes
-1: library file://uri2/
-2: library file://uri3/
+1: library import://uri2
+2: library import://uri3
 .root
 '''),
   Test(component1.libraries[1], component2.libraries[3], inequivalence: '''
 Values file://uri2/ and file://uri3/ are not equivalent
 .root
- Library(library file://uri2/).fileUri
+ Library(library import://uri2).fileUri
 '''),
   Test(component1.libraries[0].procedures[0],
       component2.libraries[0].procedures[1],
@@ -173,31 +172,34 @@
 
 Component createComponent() {
   Component component = new Component();
-  Uri uri1 = Uri.parse('file://uri1');
-  Uri uri2 = Uri.parse('file://uri2');
-  Uri uri3 = Uri.parse('file://uri3');
-  Library library1 = new Library(uri1, fileUri: uri1);
+  Uri fileUri1 = Uri.parse('file://uri1');
+  Uri fileUri2 = Uri.parse('file://uri2');
+  Uri fileUri3 = Uri.parse('file://uri3');
+  Uri importUri1 = Uri.parse('import://uri1');
+  Uri importUri2 = Uri.parse('import://uri2');
+  Uri importUri3 = Uri.parse('import://uri3');
+  Library library1 = new Library(importUri1, fileUri: fileUri1);
   component.libraries.add(library1);
   Procedure procedure1foo = new Procedure(
       new Name('foo'), ProcedureKind.Method, new FunctionNode(null),
-      fileUri: uri1);
+      fileUri: fileUri1);
   library1.addProcedure(procedure1foo);
   Procedure procedure1bar = new Procedure(
       new Name('bar'), ProcedureKind.Method, new FunctionNode(null),
-      fileUri: uri1);
+      fileUri: fileUri1);
   library1.addProcedure(procedure1bar);
 
-  Library library2 = new Library(uri2, fileUri: uri2);
+  Library library2 = new Library(importUri2, fileUri: fileUri2);
   component.libraries.add(library2);
 
-  Library library3 = new Library(uri3, fileUri: uri2);
+  Library library3 = new Library(importUri3, fileUri: fileUri2);
   component.libraries.add(library3);
   Procedure procedure3foo = new Procedure(
       new Name('foo'), ProcedureKind.Method, new FunctionNode(null),
-      fileUri: uri1);
+      fileUri: fileUri1);
   library3.addProcedure(procedure3foo);
 
-  Library library4 = new Library(uri2, fileUri: uri3);
+  Library library4 = new Library(importUri2, fileUri: fileUri3);
   component.libraries.add(library4);
 
   return component;
diff --git a/pkg/test_runner/tool/update_static_error_tests.dart b/pkg/test_runner/tool/update_static_error_tests.dart
index 053dcbd..23be296 100644
--- a/pkg/test_runner/tool/update_static_error_tests.dart
+++ b/pkg/test_runner/tool/update_static_error_tests.dart
@@ -112,32 +112,27 @@
         parser, "Must provide at least one flag for an operation to perform.");
   }
 
-  if (results.rest.length != 1) {
-    _usageError(
-        parser, "Must provide a file path or glob for which tests to update.");
-  }
+  for (var result in results.rest) {
+    // Allow tests to be specified without the extension for compatibility with
+    // the regular test runner syntax.
+    if (!result.endsWith(".dart")) {
+      result += ".dart";
+    }
 
-  var result = results.rest.single;
+    // Allow tests to be specified either relative to the "tests" directory
+    // or relative to the current directory.
+    var root = result.startsWith("tests") ? "." : "tests";
+    var glob = Glob(result, recursive: true);
+    for (var entry in glob.listSync(root: root)) {
+      if (!entry.path.endsWith(".dart")) continue;
 
-  // Allow tests to be specified without the extension for compatibility with
-  // the regular test runner syntax.
-  if (!result.endsWith(".dart")) {
-    result += ".dart";
-  }
-
-  // Allow tests to be specified either relative to the "tests" directory
-  // or relative to the current directory.
-  var root = result.startsWith("tests") ? "." : "tests";
-  var glob = Glob(result, recursive: true);
-  for (var entry in glob.listSync(root: root)) {
-    if (!entry.path.endsWith(".dart")) continue;
-
-    if (entry is pkg_file.File) {
-      await _processFile(entry,
-          dryRun: dryRun,
-          includeContext: includeContext,
-          remove: removeSources,
-          insert: insertSources);
+      if (entry is pkg_file.File) {
+        await _processFile(entry,
+            dryRun: dryRun,
+            includeContext: includeContext,
+            remove: removeSources,
+            insert: insertSources);
+      }
     }
   }
 }
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 654967a..a505d5c 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -56,7 +56,6 @@
 # ........gen_kernel.dart.snapshot (if not on ia32)
 # ........kernel-service.dart.snapshot
 # ........kernel_worker.dart.snapshot
-# ........pub.dart.snapshot
 # ......resources/
 # ........dartdoc/
 # ...........packages
@@ -140,10 +139,6 @@
     "frontend_server",
     "../utils/kernel-service:frontend_server",
   ],
-  [
-    "pub",
-    "../utils/pub",
-  ],
 ]
 if (create_kernel_service_snapshot) {
   _platform_sdk_snapshots += [ [
diff --git a/sdk/bin/pub b/sdk/bin/pub
deleted file mode 100755
index 85ad5d6..0000000
--- a/sdk/bin/pub
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/env bash
-# Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-# Run pub.dart on the Dart VM. This script is only used when running pub from
-# within the Dart source repo. The shipped SDK instead uses "pub_sdk", which is
-# renamed to "pub" when the SDK is built.
-
-function follow_links() {
-  file="$1"
-  while [ -h "$file" ]; do
-    # On Mac OS, readlink -f doesn't work.
-    file="$(readlink "$file")"
-  done
-  echo "$file"
-}
-
-# Unlike $0, $BASH_SOURCE points to the absolute path of this file.
-PROG_NAME="$(follow_links "$BASH_SOURCE")"
-
-# Handle the case where dart-sdk/bin has been symlinked to.
-BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
-
-SDK_DIR="$(cd "${BIN_DIR}/.." ; pwd -P)"
-
-SNAPSHOT="$BIN_DIR/snapshots/pub.dart.snapshot"
-
-unset VM_OPTIONS
-declare -a VM_OPTIONS
-
-if [[ `uname` == 'Darwin' ]];
-then
-  OUT_DIR="$BIN_DIR"/../../xcodebuild/
-else
-  OUT_DIR="$BIN_DIR"/../../out/
-fi
-
-# Allow extra VM options to be passed in through an environment variable.
-if [[ $DART_VM_OPTIONS ]]; then
-  read -a OPTIONS <<< "$DART_VM_OPTIONS"
-  VM_OPTIONS+=("${OPTIONS[@]}")
-fi
-
-if [ -z "$DART_CONFIGURATION" ];
-then
-  DIRS=$( ls "$OUT_DIR" )
-  # list of possible configurations in decreasing desirability
-  CONFIGS=("ReleaseX64" "ReleaseIA32" "DebugX64" "DebugIA32"
-    "ReleaseARM" "ReleaseARM64" "DebugARM" "DebugARM64" )
-  DART_CONFIGURATION="None"
-  for CONFIG in ${CONFIGS[*]}
-  do
-    for DIR in $DIRS;
-    do
-      if [ "$CONFIG" = "$DIR" ];
-      then
-        # choose most desirable configuration that is available and break
-        DART_CONFIGURATION="$DIR"
-        break 2
-      fi
-    done
-  done
-  if [ "$DART_CONFIGURATION" = "None" ]
-  then
-    echo "No valid dart configuration found in $OUT_DIR"
-    exit 1
-  fi
-fi
-
-if [[ `uname` == 'Darwin' ]];
-then
-  BUILD_DIR="$SDK_DIR/../xcodebuild/$DART_CONFIGURATION"
-else
-  BUILD_DIR="$SDK_DIR/../out/$DART_CONFIGURATION"
-fi
-
-# Use the Dart binary in the built SDK so pub can find the version file next
-# to it.
-DART="$BUILD_DIR/dart-sdk/bin/dart"
-
-# Run pub.
-PUB="$SDK_DIR/../third_party/pkg/pub/bin/pub.dart"
-exec "$DART" "--packages=$SDK_DIR/../.packages" "${VM_OPTIONS[@]}" "$PUB" "$@"
diff --git a/sdk/bin/pub_sdk b/sdk/bin/pub_sdk
index 4d29878..17ce14c 100755
--- a/sdk/bin/pub_sdk
+++ b/sdk/bin/pub_sdk
@@ -28,7 +28,7 @@
 
 # Handle the case where dart-sdk/bin has been symlinked to.
 BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
-
+DART="$BIN_DIR/dart"
 
 unset VM_OPTIONS
 declare -a VM_OPTIONS
@@ -39,12 +39,9 @@
   VM_OPTIONS+=("${OPTIONS[@]}")
 fi
 
-# Run the pub snapshot.
-DART="$BIN_DIR/dart"
-if array_contains "--no-preview-dart-2" "${VM_OPTIONS[@]}"; then
-  echo "Pub no longer supports Dart 1"
-  exit -1
-else
-  SNAPSHOT="$BIN_DIR/snapshots/pub.dart.snapshot"
-  exec "$DART" "${VM_OPTIONS[@]}" "$SNAPSHOT" "$@"
+if [ -t 2 ]; then # Only print warning when run in terminal.
+  >&2 echo 'The top level `pub` command is deprecated. Use `dart pub` instead.'
 fi
+
+# Forward to the `dart __deprecatedpub` command.
+exec "$DART" "${VM_OPTIONS[@]}" __deprecated_pub "$@"
diff --git a/sdk/bin/pub_sdk.bat b/sdk/bin/pub_sdk.bat
index 2fe828b..e882aac 100644
--- a/sdk/bin/pub_sdk.bat
+++ b/sdk/bin/pub_sdk.bat
@@ -28,11 +28,8 @@
   )
 )
 
-if defined USING_DART_1 (
-  echo "Pub no longer supports Dart 1"
-) else (
-  "%BIN_DIR%\dart" %VM_OPTIONS% "%BIN_DIR%\snapshots\pub.dart.snapshot" %*
-)
+echo "The top level `pub.bat` command is deprecated. Use `dart pub` instead." 1>&2
+"%BIN_DIR%\dart" %VM_OPTIONS% __deprecated_pub %*
 
 endlocal
 
diff --git a/tools/VERSION b/tools/VERSION
index f249fa0..401980d 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 48
+PRERELEASE 49
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/utils/pub/.gitignore b/utils/pub/.gitignore
deleted file mode 100644
index cfb192d..0000000
--- a/utils/pub/.gitignore
+++ /dev/null
@@ -1,21 +0,0 @@
-/Makefile
-/out
-/xcodebuild
-/*.Makefile
-/*.sln
-/*.target.mk
-/*.vcproj
-/*.vcxproj
-/*.vcxproj.filters
-/*.vcxproj.user
-/*.xcodeproj
-/Debug
-/DebugARM
-/DebugIA32
-/DebugSIMARM
-/DebugX64
-/Release
-/ReleaseARM
-/ReleaseIA32
-/ReleaseSIMARM
-/ReleaseX64
diff --git a/utils/pub/BUILD.gn b/utils/pub/BUILD.gn
deleted file mode 100644
index de93998..0000000
--- a/utils/pub/BUILD.gn
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-import("../application_snapshot.gni")
-
-application_snapshot("pub") {
-  main_dart = "../../third_party/pkg/pub/bin/pub.dart"
-
-  training_args = [ "--help" ]
-}
