diff --git a/ui/build/build.go b/ui/build/build.go
index c61baa1..ecf11cc 100644
--- a/ui/build/build.go
+++ b/ui/build/build.go
@@ -104,10 +104,9 @@
 	// Whether to run ninja on the combined ninja.
 	RunNinja = 1 << iota
 	// Whether to run bazel on the combined ninja.
-	RunBazel        = 1 << iota
-	RunBuildTests   = 1 << iota
-	RunAll          = RunProductConfig | RunSoong | RunKati | RunKatiNinja | RunNinja
-	RunAllWithBazel = RunProductConfig | RunSoong | RunKati | RunKatiNinja | RunBazel
+	RunBazel      = 1 << iota
+	RunBuildTests = 1 << iota
+	RunAll        = RunProductConfig | RunSoong | RunKati | RunKatiNinja | RunNinja
 )
 
 // checkBazelMode fails the build if there are conflicting arguments for which bazel
@@ -256,9 +255,6 @@
 	SetupPath(ctx, config)
 
 	what := RunAll
-	if config.UseBazel() {
-		what = RunAllWithBazel
-	}
 	if config.Checkbuild() {
 		what |= RunBuildTests
 	}
diff --git a/ui/build/config.go b/ui/build/config.go
index 590aeb9..14a99d0 100644
--- a/ui/build/config.go
+++ b/ui/build/config.go
@@ -99,15 +99,9 @@
 
 	pathReplaced bool
 
-	// TODO(b/243077098): Remove useBazel.
-	useBazel      bool
 	bazelProdMode bool
 	bazelDevMode  bool
 
-	// During Bazel execution, Bazel cannot write outside OUT_DIR.
-	// So if DIST_DIR is set to an external dir (outside of OUT_DIR), we need to rig it temporarily and then migrate files at the end of the build.
-	riggedDistDirForBazel string
-
 	// Set by multiproduct_kati
 	emptyNinjaFile bool
 
@@ -439,21 +433,6 @@
 		ctx.Fatalf("Unable to remove bazel profile directory %q: %v", bpd, err)
 	}
 
-	ret.useBazel = ret.environ.IsEnvTrue("USE_BAZEL")
-
-	if ret.UseBazel() {
-		if err := os.MkdirAll(bpd, 0777); err != nil {
-			ctx.Fatalf("Failed to create bazel profile directory %q: %v", bpd, err)
-		}
-	}
-
-	if ret.UseBazel() {
-		ret.riggedDistDirForBazel = filepath.Join(ret.OutDir(), "dist")
-	} else {
-		// Not rigged
-		ret.riggedDistDirForBazel = ret.distDir
-	}
-
 	c := Config{ret}
 	storeConfigMetrics(ctx, c)
 	return c
@@ -486,7 +465,6 @@
 		ForceUseGoma:    proto.Bool(config.ForceUseGoma()),
 		UseGoma:         proto.Bool(config.UseGoma()),
 		UseRbe:          proto.Bool(config.UseRBE()),
-		BazelAsNinja:    proto.Bool(config.UseBazel()),
 		BazelMixedBuild: proto.Bool(config.BazelBuildEnabled()),
 	}
 	c.Targets = append(c.Targets, config.arguments...)
@@ -877,11 +855,7 @@
 }
 
 func (c *configImpl) DistDir() string {
-	if c.UseBazel() {
-		return c.riggedDistDirForBazel
-	} else {
-		return c.distDir
-	}
+	return c.distDir
 }
 
 func (c *configImpl) RealDistDir() string {
@@ -1129,11 +1103,6 @@
 	return false
 }
 
-// TODO(b/243077098): Remove UseBazel.
-func (c *configImpl) UseBazel() bool {
-	return c.useBazel
-}
-
 func (c *configImpl) BazelBuildEnabled() bool {
 	return c.bazelProdMode || c.bazelDevMode
 }
diff --git a/ui/build/config_test.go b/ui/build/config_test.go
index 63716b0..2887f59 100644
--- a/ui/build/config_test.go
+++ b/ui/build/config_test.go
@@ -1017,7 +1017,6 @@
 				ForceUseGoma:    proto.Bool(false),
 				UseGoma:         proto.Bool(false),
 				UseRbe:          proto.Bool(false),
-				BazelAsNinja:    proto.Bool(false),
 				BazelMixedBuild: proto.Bool(false),
 			},
 		},
@@ -1028,7 +1027,6 @@
 				ForceUseGoma:    proto.Bool(true),
 				UseGoma:         proto.Bool(false),
 				UseRbe:          proto.Bool(false),
-				BazelAsNinja:    proto.Bool(false),
 				BazelMixedBuild: proto.Bool(false),
 			},
 		},
@@ -1039,7 +1037,6 @@
 				ForceUseGoma:    proto.Bool(false),
 				UseGoma:         proto.Bool(true),
 				UseRbe:          proto.Bool(false),
-				BazelAsNinja:    proto.Bool(false),
 				BazelMixedBuild: proto.Bool(false),
 			},
 		},
@@ -1050,7 +1047,6 @@
 				ForceUseGoma:    proto.Bool(false),
 				UseGoma:         proto.Bool(false),
 				UseRbe:          proto.Bool(true),
-				BazelAsNinja:    proto.Bool(false),
 				BazelMixedBuild: proto.Bool(false),
 			},
 		},
@@ -1062,7 +1058,6 @@
 				ForceUseGoma:    proto.Bool(false),
 				UseGoma:         proto.Bool(false),
 				UseRbe:          proto.Bool(false),
-				BazelAsNinja:    proto.Bool(true),
 				BazelMixedBuild: proto.Bool(false),
 			},
 		},
@@ -1073,7 +1068,6 @@
 				ForceUseGoma:    proto.Bool(false),
 				UseGoma:         proto.Bool(false),
 				UseRbe:          proto.Bool(false),
-				BazelAsNinja:    proto.Bool(false),
 				BazelMixedBuild: proto.Bool(true),
 			},
 		},
@@ -1085,7 +1079,6 @@
 				ForceUseGoma:    proto.Bool(false),
 				UseGoma:         proto.Bool(false),
 				UseRbe:          proto.Bool(false),
-				BazelAsNinja:    proto.Bool(false),
 				BazelMixedBuild: proto.Bool(true),
 			},
 		},
@@ -1097,7 +1090,6 @@
 				ForceUseGoma:    proto.Bool(false),
 				UseGoma:         proto.Bool(false),
 				UseRbe:          proto.Bool(false),
-				BazelAsNinja:    proto.Bool(false),
 				BazelMixedBuild: proto.Bool(true),
 			},
 		},
@@ -1110,7 +1102,6 @@
 				ForceUseGoma:    proto.Bool(false),
 				UseGoma:         proto.Bool(false),
 				UseRbe:          proto.Bool(false),
-				BazelAsNinja:    proto.Bool(true),
 				BazelMixedBuild: proto.Bool(false),
 				Targets:         []string{"droid", "dist"},
 			},
@@ -1128,7 +1119,6 @@
 				ForceUseGoma:    proto.Bool(true),
 				UseGoma:         proto.Bool(true),
 				UseRbe:          proto.Bool(true),
-				BazelAsNinja:    proto.Bool(true),
 				BazelMixedBuild: proto.Bool(true),
 			},
 		},
@@ -1139,7 +1129,6 @@
 		t.Run(tc.name, func(t *testing.T) {
 			c := &configImpl{
 				environ:       &tc.environ,
-				useBazel:      tc.useBazel,
 				bazelDevMode:  tc.bazelDevMode,
 				bazelProdMode: tc.bazelProdMode,
 				arguments:     tc.arguments,
