diff --git a/include/tint/tint.h b/include/tint/tint.h
index d989f92..ac1c8b3 100644
--- a/include/tint/tint.h
+++ b/include/tint/tint.h
@@ -44,7 +44,6 @@
 
 #if TINT_BUILD_SPV_WRITER
 #include "spirv-tools/libspirv.hpp"
-#include "src/transform/spirv.h"
 #include "src/writer/spirv/generator.h"
 #endif  // TINT_BUILD_SPV_WRITER
 
@@ -53,12 +52,10 @@
 #endif  // TINT_BUILD_WGSL_WRITER
 
 #if TINT_BUILD_MSL_WRITER
-#include "src/transform/msl.h"
 #include "src/writer/msl/generator.h"
 #endif  // TINT_BUILD_MSL_WRITER
 
 #if TINT_BUILD_HLSL_WRITER
-#include "src/transform/hlsl.h"
 #include "src/writer/hlsl/generator.h"
 #endif  // TINT_BUILD_HLSL_WRITER
 
diff --git a/src/writer/hlsl/generator.cc b/src/writer/hlsl/generator.cc
index d6815a3..5dc8693 100644
--- a/src/writer/hlsl/generator.cc
+++ b/src/writer/hlsl/generator.cc
@@ -54,27 +54,6 @@
   return result;
 }
 
-Generator::Generator(const Program* program)
-    : impl_(std::make_unique<GeneratorImpl>(program)) {}
-
-Generator::~Generator() = default;
-
-bool Generator::Generate() {
-  auto ret = impl_->Generate();
-  if (!ret) {
-    error_ = impl_->error();
-  }
-  return ret;
-}
-
-std::string Generator::result() const {
-  return impl_->result();
-}
-
-std::string Generator::error() const {
-  return impl_->error();
-}
-
 }  // namespace hlsl
 }  // namespace writer
 }  // namespace tint
diff --git a/src/writer/hlsl/generator.h b/src/writer/hlsl/generator.h
index 75d47d8..f467348 100644
--- a/src/writer/hlsl/generator.h
+++ b/src/writer/hlsl/generator.h
@@ -69,31 +69,6 @@
 /// @returns the resulting HLSL and supplementary information
 Result Generate(const Program* program, const Options& options);
 
-// TODO(jrprice): Remove this once Dawn is using the new interface.
-/// Class to generate HLSL source
-class Generator : public Text {
- public:
-  /// Constructor
-  /// @param program the program to convert
-  explicit Generator(const Program* program);
-
-  /// Destructor
-  ~Generator() override;
-
-  /// Generates the result data
-  /// @returns true on successful generation; false otherwise
-  bool Generate() override;
-
-  /// @returns the result data
-  std::string result() const override;
-
-  /// @returns the error
-  std::string error() const;
-
- private:
-  std::unique_ptr<GeneratorImpl> impl_;
-};
-
 }  // namespace hlsl
 }  // namespace writer
 }  // namespace tint
diff --git a/src/writer/msl/generator.cc b/src/writer/msl/generator.cc
index 215d650..e73541e 100644
--- a/src/writer/msl/generator.cc
+++ b/src/writer/msl/generator.cc
@@ -53,27 +53,6 @@
   return result;
 }
 
-Generator::Generator(const Program* program)
-    : impl_(std::make_unique<GeneratorImpl>(program)) {}
-
-Generator::~Generator() = default;
-
-bool Generator::Generate() {
-  auto ret = impl_->Generate();
-  if (!ret) {
-    error_ = impl_->error();
-  }
-  return ret;
-}
-
-std::string Generator::result() const {
-  return impl_->result();
-}
-
-std::string Generator::error() const {
-  return impl_->error();
-}
-
 }  // namespace msl
 }  // namespace writer
 }  // namespace tint
diff --git a/src/writer/msl/generator.h b/src/writer/msl/generator.h
index 5028458..9a182d3 100644
--- a/src/writer/msl/generator.h
+++ b/src/writer/msl/generator.h
@@ -76,34 +76,6 @@
 /// @returns the resulting MSL and supplementary information
 Result Generate(const Program* program, const Options& options);
 
-// TODO(jrprice): Remove this once Dawn is using the new interface.
-/// Class to generate MSL source
-class Generator : public Text {
- public:
-  /// Constructor
-  /// @param program the program to convert
-  explicit Generator(const Program* program);
-
-  /// Destructor
-  ~Generator() override;
-
-  /// Generates the result data
-  /// @returns true on successful generation; false otherwise
-  bool Generate() override;
-
-  /// @returns the result data
-  std::string result() const override;
-
-  /// @returns the error
-  std::string error() const;
-
- private:
-  Generator(const Generator&) = delete;
-  Generator& operator=(const Generator&) = delete;
-
-  std::unique_ptr<GeneratorImpl> impl_;
-};
-
 }  // namespace msl
 }  // namespace writer
 }  // namespace tint
diff --git a/src/writer/spirv/generator.cc b/src/writer/spirv/generator.cc
index 8fae66c..6270e50 100644
--- a/src/writer/spirv/generator.cc
+++ b/src/writer/spirv/generator.cc
@@ -57,27 +57,6 @@
   return result;
 }
 
-Generator::Generator(const Program* program)
-    : builder_(std::make_unique<Builder>(program)),
-      writer_(std::make_unique<BinaryWriter>()) {}
-
-Generator::~Generator() = default;
-
-bool Generator::Generate() {
-  if (!builder_->Build()) {
-    set_error(builder_->error());
-    return false;
-  }
-
-  writer_->WriteHeader(builder_->id_bound());
-  writer_->WriteBuilder(builder_.get());
-  return true;
-}
-
-const std::vector<uint32_t>& Generator::result() const {
-  return writer_->result();
-}
-
 }  // namespace spirv
 }  // namespace writer
 }  // namespace tint
diff --git a/src/writer/spirv/generator.h b/src/writer/spirv/generator.h
index 122f12b..2b06032 100644
--- a/src/writer/spirv/generator.h
+++ b/src/writer/spirv/generator.h
@@ -69,29 +69,6 @@
 /// @returns the resulting SPIR-V and supplementary information
 Result Generate(const Program* program, const Options& options);
 
-// TODO(jrprice): Remove this once Dawn is using the new interface.
-/// Class to generate SPIR-V from a Tint program
-class Generator : public writer::Writer {
- public:
-  /// Constructor
-  /// @param program the program to convert
-  explicit Generator(const Program* program);
-
-  /// Destructor
-  ~Generator() override;
-
-  /// Generates the result data
-  /// @returns true on successful generation; false otherwise
-  bool Generate() override;
-
-  /// @returns the result data
-  const std::vector<uint32_t>& result() const;
-
- private:
-  std::unique_ptr<Builder> builder_;
-  std::unique_ptr<BinaryWriter> writer_;
-};
-
 }  // namespace spirv
 }  // namespace writer
 }  // namespace tint
diff --git a/src/writer/wgsl/generator.cc b/src/writer/wgsl/generator.cc
index 48e1ceb..b7c3566 100644
--- a/src/writer/wgsl/generator.cc
+++ b/src/writer/wgsl/generator.cc
@@ -35,27 +35,6 @@
   return result;
 }
 
-Generator::Generator(const Program* program)
-    : impl_(std::make_unique<GeneratorImpl>(program)) {}
-
-Generator::~Generator() = default;
-
-bool Generator::Generate() {
-  auto ret = impl_->Generate();
-  if (!ret) {
-    error_ = impl_->error();
-  }
-  return ret;
-}
-
-std::string Generator::result() const {
-  return impl_->result();
-}
-
-std::string Generator::error() const {
-  return impl_->error();
-}
-
 }  // namespace wgsl
 }  // namespace writer
 }  // namespace tint
diff --git a/src/writer/wgsl/generator.h b/src/writer/wgsl/generator.h
index 35f194f..9e93c76 100644
--- a/src/writer/wgsl/generator.h
+++ b/src/writer/wgsl/generator.h
@@ -62,34 +62,6 @@
 /// @returns the resulting WGSL and supplementary information
 Result Generate(const Program* program, const Options& options);
 
-// TODO(jrprice): Remove this once Dawn is using the new interface.
-/// Class to generate WGSL source
-class Generator : public Text {
- public:
-  /// Constructor
-  /// @param program the program to convert
-  explicit Generator(const Program* program);
-
-  /// Destructor
-  ~Generator() override;
-
-  /// Generates the result data
-  /// @returns true on successful generation; false otherwise
-  bool Generate() override;
-
-  /// @returns the result data
-  std::string result() const override;
-
-  /// @returns the error
-  std::string error() const;
-
- private:
-  Generator(const Generator&) = delete;
-  Generator& operator=(const Generator&) = delete;
-
-  std::unique_ptr<GeneratorImpl> impl_;
-};
-
 }  // namespace wgsl
 }  // namespace writer
 }  // namespace tint
