diff --git a/src/transform/binding_remapper.cc b/src/transform/binding_remapper.cc
index aed0b0a..8cc1f9c 100644
--- a/src/transform/binding_remapper.cc
+++ b/src/transform/binding_remapper.cc
@@ -34,8 +34,7 @@
 BindingRemapper::BindingRemapper() = default;
 BindingRemapper::~BindingRemapper() = default;
 
-Transform::Output BindingRemapper::Run(const Program* in,
-                                       const DataMap& datamap) {
+Output BindingRemapper::Run(const Program* in, const DataMap& datamap) {
   ProgramBuilder out;
   auto* remappings = datamap.Get<Remappings>();
   if (!remappings) {
diff --git a/src/transform/bound_array_accessors.cc b/src/transform/bound_array_accessors.cc
index 0ba5a49..3f6416b 100644
--- a/src/transform/bound_array_accessors.cc
+++ b/src/transform/bound_array_accessors.cc
@@ -26,7 +26,7 @@
 BoundArrayAccessors::BoundArrayAccessors() = default;
 BoundArrayAccessors::~BoundArrayAccessors() = default;
 
-Transform::Output BoundArrayAccessors::Run(const Program* in, const DataMap&) {
+Output BoundArrayAccessors::Run(const Program* in, const DataMap&) {
   ProgramBuilder out;
   CloneContext ctx(&out, in);
 
diff --git a/src/transform/calculate_array_length.cc b/src/transform/calculate_array_length.cc
index 7d92631..3d37e86 100644
--- a/src/transform/calculate_array_length.cc
+++ b/src/transform/calculate_array_length.cc
@@ -68,7 +68,7 @@
 CalculateArrayLength::CalculateArrayLength() = default;
 CalculateArrayLength::~CalculateArrayLength() = default;
 
-Transform::Output CalculateArrayLength::Run(const Program* in, const DataMap&) {
+Output CalculateArrayLength::Run(const Program* in, const DataMap&) {
   ProgramBuilder out;
   CloneContext ctx(&out, in);
 
diff --git a/src/transform/canonicalize_entry_point_io.cc b/src/transform/canonicalize_entry_point_io.cc
index 22bab4a..622b6b2 100644
--- a/src/transform/canonicalize_entry_point_io.cc
+++ b/src/transform/canonicalize_entry_point_io.cc
@@ -58,8 +58,7 @@
 
 }  // namespace
 
-Transform::Output CanonicalizeEntryPointIO::Run(const Program* in,
-                                                const DataMap&) {
+Output CanonicalizeEntryPointIO::Run(const Program* in, const DataMap&) {
   ProgramBuilder out;
   CloneContext ctx(&out, in);
 
diff --git a/src/transform/decompose_storage_access.cc b/src/transform/decompose_storage_access.cc
index 92ebe5f..d154514 100644
--- a/src/transform/decompose_storage_access.cc
+++ b/src/transform/decompose_storage_access.cc
@@ -609,8 +609,7 @@
 DecomposeStorageAccess::DecomposeStorageAccess() = default;
 DecomposeStorageAccess::~DecomposeStorageAccess() = default;
 
-Transform::Output DecomposeStorageAccess::Run(const Program* in,
-                                              const DataMap&) {
+Output DecomposeStorageAccess::Run(const Program* in, const DataMap&) {
   ProgramBuilder out;
   CloneContext ctx(&out, in);
 
diff --git a/src/transform/emit_vertex_point_size.cc b/src/transform/emit_vertex_point_size.cc
index c4e0464..676d400 100644
--- a/src/transform/emit_vertex_point_size.cc
+++ b/src/transform/emit_vertex_point_size.cc
@@ -25,7 +25,7 @@
 EmitVertexPointSize::EmitVertexPointSize() = default;
 EmitVertexPointSize::~EmitVertexPointSize() = default;
 
-Transform::Output EmitVertexPointSize::Run(const Program* in, const DataMap&) {
+Output EmitVertexPointSize::Run(const Program* in, const DataMap&) {
   if (!in->AST().Functions().HasStage(ast::PipelineStage::kVertex)) {
     // If the module doesn't have any vertex stages, then there's nothing to do.
     return Output(Program(in->Clone()));
diff --git a/src/transform/first_index_offset.cc b/src/transform/first_index_offset.cc
index a1adf66..7a96995 100644
--- a/src/transform/first_index_offset.cc
+++ b/src/transform/first_index_offset.cc
@@ -60,8 +60,7 @@
 
 FirstIndexOffset::~FirstIndexOffset() = default;
 
-Transform::Output FirstIndexOffset::Run(const Program* in,
-                                        const DataMap& data) {
+Output FirstIndexOffset::Run(const Program* in, const DataMap& data) {
   // Get the uniform buffer binding point
   uint32_t ub_binding = binding_;
   uint32_t ub_group = group_;
diff --git a/src/transform/hlsl.cc b/src/transform/hlsl.cc
index 3b4bb80..5a5b6db 100644
--- a/src/transform/hlsl.cc
+++ b/src/transform/hlsl.cc
@@ -33,7 +33,7 @@
 Hlsl::Hlsl() = default;
 Hlsl::~Hlsl() = default;
 
-Transform::Output Hlsl::Run(const Program* in, const DataMap& data) {
+Output Hlsl::Run(const Program* in, const DataMap& data) {
   Manager manager;
   manager.Add<CanonicalizeEntryPointIO>();
   manager.Add<DecomposeStorageAccess>();
diff --git a/src/transform/manager.cc b/src/transform/manager.cc
index ef6f79e..10e3f58 100644
--- a/src/transform/manager.cc
+++ b/src/transform/manager.cc
@@ -20,7 +20,7 @@
 Manager::Manager() = default;
 Manager::~Manager() = default;
 
-Transform::Output Manager::Run(const Program* program, const DataMap& data) {
+Output Manager::Run(const Program* program, const DataMap& data) {
   Output out;
   if (!transforms_.empty()) {
     for (auto& transform : transforms_) {
diff --git a/src/transform/msl.cc b/src/transform/msl.cc
index 5f01358..c1033fa 100644
--- a/src/transform/msl.cc
+++ b/src/transform/msl.cc
@@ -25,7 +25,7 @@
 Msl::Msl() = default;
 Msl::~Msl() = default;
 
-Transform::Output Msl::Run(const Program* in, const DataMap& data) {
+Output Msl::Run(const Program* in, const DataMap& data) {
   Manager manager;
   manager.Add<CanonicalizeEntryPointIO>();
   auto out = manager.Run(in, data);
diff --git a/src/transform/renamer.cc b/src/transform/renamer.cc
index 07f773d..9ed4743 100644
--- a/src/transform/renamer.cc
+++ b/src/transform/renamer.cc
@@ -846,7 +846,7 @@
 
 Renamer::~Renamer() = default;
 
-Transform::Output Renamer::Run(const Program* in, const DataMap&) {
+Output Renamer::Run(const Program* in, const DataMap&) {
   ProgramBuilder out;
   CloneContext ctx(&out, in);
 
diff --git a/src/transform/spirv.cc b/src/transform/spirv.cc
index 2d651e1..1faad8f 100644
--- a/src/transform/spirv.cc
+++ b/src/transform/spirv.cc
@@ -31,7 +31,7 @@
 Spirv::Spirv() = default;
 Spirv::~Spirv() = default;
 
-Transform::Output Spirv::Run(const Program* in, const DataMap&) {
+Output Spirv::Run(const Program* in, const DataMap&) {
   ProgramBuilder out;
   CloneContext ctx(&out, in);
   HandleEntryPointIOTypes(ctx);
diff --git a/src/transform/test_helper.h b/src/transform/test_helper.h
index 52f3a77..dcd11b0 100644
--- a/src/transform/test_helper.h
+++ b/src/transform/test_helper.h
@@ -38,10 +38,9 @@
   /// @param transforms the list of transforms to apply
   /// @param data the optional DataMap to pass to Transform::Run()
   /// @return the transformed output
-  Transform::Output Run(
-      std::string in,
-      std::vector<std::unique_ptr<transform::Transform>> transforms,
-      const DataMap& data = {}) {
+  Output Run(std::string in,
+             std::vector<std::unique_ptr<transform::Transform>> transforms,
+             const DataMap& data = {}) {
     auto file = std::make_unique<Source::File>("test", in);
     auto program = reader::wgsl::Parse(file.get());
 
@@ -49,7 +48,7 @@
     files_.emplace_back(std::move(file));
 
     if (!program.IsValid()) {
-      return Transform::Output(std::move(program));
+      return Output(std::move(program));
     }
 
     Manager manager;
@@ -65,9 +64,9 @@
   /// @param in the input WGSL source
   /// @param data the optional DataMap to pass to Transform::Run()
   /// @return the transformed output
-  Transform::Output Run(std::string in,
-                        std::unique_ptr<transform::Transform> transform,
-                        const DataMap& data = {}) {
+  Output Run(std::string in,
+             std::unique_ptr<transform::Transform> transform,
+             const DataMap& data = {}) {
     std::vector<std::unique_ptr<transform::Transform>> transforms;
     transforms.emplace_back(std::move(transform));
     return Run(std::move(in), std::move(transforms), data);
@@ -79,14 +78,14 @@
   /// @param data the optional DataMap to pass to Transform::Run()
   /// @return the transformed output
   template <typename TRANSFORM>
-  Transform::Output Run(std::string in, const DataMap& data = {}) {
+  Output Run(std::string in, const DataMap& data = {}) {
     return Run(std::move(in), std::make_unique<TRANSFORM>(), data);
   }
 
   /// @param output the output of the transform
   /// @returns the output program as a WGSL string, or an error string if the
   /// program is not valid.
-  std::string str(const Transform::Output& output) {
+  std::string str(const Output& output) {
     diag::Formatter::Style style;
     style.print_newline_at_end = false;
 
diff --git a/src/transform/transform.cc b/src/transform/transform.cc
index a9c3816..503e5a5 100644
--- a/src/transform/transform.cc
+++ b/src/transform/transform.cc
@@ -31,9 +31,10 @@
 DataMap::DataMap() = default;
 DataMap::DataMap(DataMap&&) = default;
 DataMap::~DataMap() = default;
+DataMap& DataMap::operator=(DataMap&&) = default;
 
-Transform::Output::Output() = default;
-Transform::Output::Output(Program&& p) : program(std::move(p)) {}
+Output::Output() = default;
+Output::Output(Program&& p) : program(std::move(p)) {}
 Transform::Transform() = default;
 Transform::~Transform() = default;
 
diff --git a/src/transform/transform.h b/src/transform/transform.h
index 21e9f10..533f0f8 100644
--- a/src/transform/transform.h
+++ b/src/transform/transform.h
@@ -62,6 +62,11 @@
   /// Destructor
   ~DataMap();
 
+  /// Move assignment operator
+  /// @param rhs the DataMap to move into this DataMap
+  /// @return this DataMap
+  DataMap& operator=(DataMap&& rhs);
+
   /// Adds the data into DataMap keyed by the ClassID of type T.
   /// @param data the data to add to the DataMap
   template <typename T>
@@ -114,39 +119,42 @@
   std::unordered_map<const TypeInfo*, std::unique_ptr<Data>> map_;
 };
 
+/// The return type of Run()
+class Output {
+ public:
+  /// Constructor
+  Output();
+
+  /// Constructor
+  /// @param program the program to move into this Output
+  explicit Output(Program&& program);
+
+  /// Constructor
+  /// @param program_ the program to move into this Output
+  /// @param data_ a variadic list of additional data unique_ptrs produced by
+  /// the transform
+  template <typename... DATA>
+  Output(Program&& program_, DATA... data_)
+      : program(std::move(program_)), data(std::forward<DATA>(data_)...) {}
+
+  /// The transformed program. May be empty on error.
+  Program program;
+
+  /// Extra output generated by the transforms.
+  DataMap data;
+};
+
 /// Interface for Program transforms
 class Transform {
  public:
+  /// [DEPRECATED]: Use transform::Output
+  using Output = transform::Output;
+
   /// Constructor
   Transform();
   /// Destructor
   virtual ~Transform();
 
-  /// The return type of Run()
-  class Output {
-   public:
-    /// Constructor
-    Output();
-
-    /// Constructor
-    /// @param program the program to move into this Output
-    explicit Output(Program&& program);
-
-    /// Constructor
-    /// @param program_ the program to move into this Output
-    /// @param data_ a variadic list of additional data unique_ptrs produced by
-    /// the transform
-    template <typename... DATA>
-    Output(Program&& program_, DATA... data_)
-        : program(std::move(program_)), data(std::forward<DATA>(data_)...) {}
-
-    /// The transformed program. May be empty on error.
-    Program program;
-
-    /// Extra output generated by the transforms.
-    DataMap data;
-  };
-
   /// Runs the transform on `program`, returning the transformation result.
   /// @param program the source program to transform
   /// @param data optional extra transform-specific input data
diff --git a/src/transform/vertex_pulling.cc b/src/transform/vertex_pulling.cc
index af4f00b..3657ea5 100644
--- a/src/transform/vertex_pulling.cc
+++ b/src/transform/vertex_pulling.cc
@@ -390,7 +390,7 @@
 
 VertexPulling::~VertexPulling() = default;
 
-Transform::Output VertexPulling::Run(const Program* in, const DataMap& data) {
+Output VertexPulling::Run(const Program* in, const DataMap& data) {
   ProgramBuilder out;
 
   auto cfg = cfg_;
