diff --git a/src/tint/lang/wgsl/ast/transform/BUILD.cmake b/src/tint/lang/wgsl/ast/transform/BUILD.cmake
index 9f17000..dc88a54 100644
--- a/src/tint/lang/wgsl/ast/transform/BUILD.cmake
+++ b/src/tint/lang/wgsl/ast/transform/BUILD.cmake
@@ -262,6 +262,7 @@
   lang/wgsl/ast/transform/first_index_offset_fuzz.cc
   lang/wgsl/ast/transform/fold_constants_fuzz.cc
   lang/wgsl/ast/transform/multiplanar_external_texture_fuzz.cc
+  lang/wgsl/ast/transform/offset_first_index_fuzz.cc
   lang/wgsl/ast/transform/zero_init_workgroup_memory_fuzz.cc
 )
 
diff --git a/src/tint/lang/wgsl/ast/transform/BUILD.gn b/src/tint/lang/wgsl/ast/transform/BUILD.gn
index 76bcf95..62c35ca 100644
--- a/src/tint/lang/wgsl/ast/transform/BUILD.gn
+++ b/src/tint/lang/wgsl/ast/transform/BUILD.gn
@@ -252,6 +252,7 @@
       "first_index_offset_fuzz.cc",
       "fold_constants_fuzz.cc",
       "multiplanar_external_texture_fuzz.cc",
+      "offset_first_index_fuzz.cc",
       "zero_init_workgroup_memory_fuzz.cc",
     ]
     deps = [
diff --git a/src/tint/lang/wgsl/ast/transform/offset_first_index.cc b/src/tint/lang/wgsl/ast/transform/offset_first_index.cc
index 9779347..9c9cfab 100644
--- a/src/tint/lang/wgsl/ast/transform/offset_first_index.cc
+++ b/src/tint/lang/wgsl/ast/transform/offset_first_index.cc
@@ -156,6 +156,8 @@
     return resolver::Resolve(b);
 }
 
+OffsetFirstIndex::Config::Config() = default;
+
 OffsetFirstIndex::Config::Config(std::optional<int32_t> first_vertex_off,
                                  std::optional<int32_t> first_instance_off)
     : first_vertex_offset(first_vertex_off), first_instance_offset(first_instance_off) {}
diff --git a/src/tint/lang/wgsl/ast/transform/offset_first_index.h b/src/tint/lang/wgsl/ast/transform/offset_first_index.h
index 72d2e96..cf70af1 100644
--- a/src/tint/lang/wgsl/ast/transform/offset_first_index.h
+++ b/src/tint/lang/wgsl/ast/transform/offset_first_index.h
@@ -29,6 +29,7 @@
 #define SRC_TINT_LANG_WGSL_AST_TRANSFORM_OFFSET_FIRST_INDEX_H_
 
 #include "src/tint/lang/wgsl/ast/transform/transform.h"
+#include "src/tint/utils/reflection/reflection.h"
 
 namespace tint::ast::transform {
 
@@ -47,7 +48,7 @@
 /// For D3D, this affects both firstVertex and firstInstance. For OpenGL,
 /// it applies to only firstInstance. For this reason, the first_vertex_offset
 /// and first_instance_offset are optional, where std::nullopt indicates that
-/// no subsitution is to be performed.
+/// no substitution is to be performed.
 ///
 /// Before:
 /// ```
@@ -80,6 +81,9 @@
     /// Transform configuration options
     struct Config final : public Castable<Config, ast::transform::Data> {
         /// Constructor
+        Config();
+
+        /// Constructor
         /// @param first_vertex_off Offset of the firstVertex push constant
         /// @param first_instance_off Location of the firstInstance push constant
         Config(std::optional<int32_t> first_vertex_off, std::optional<int32_t> first_instance_off);
@@ -88,10 +92,13 @@
         ~Config() override;
 
         /// Offset of the firstVertex push constant
-        const std::optional<uint32_t> first_vertex_offset;
+        std::optional<uint32_t> first_vertex_offset;
 
         /// Offset of the firstInstance push constant
-        const std::optional<uint32_t> first_instance_offset;
+        std::optional<uint32_t> first_instance_offset;
+
+        /// Reflection for this struct
+        TINT_REFLECT(Config, first_vertex_offset, first_instance_offset);
     };
 
     /// Constructor
diff --git a/src/tint/lang/wgsl/ast/transform/offset_first_index_fuzz.cc b/src/tint/lang/wgsl/ast/transform/offset_first_index_fuzz.cc
new file mode 100644
index 0000000..04c13a2
--- /dev/null
+++ b/src/tint/lang/wgsl/ast/transform/offset_first_index_fuzz.cc
@@ -0,0 +1,66 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+//    list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+//    this list of conditions and the following disclaimer in the documentation
+//    and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+//    contributors may be used to endorse or promote products derived from
+//    this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "src/tint/cmd/fuzz/wgsl/fuzz.h"
+#include "src/tint/lang/wgsl/ast/transform/offset_first_index.h"
+
+namespace tint::ast::transform {
+namespace {
+
+bool CanRun(const Program& program, const OffsetFirstIndex::Config& config) {
+    if ((config.first_instance_offset.value_or(0) & 3) != 0 ||
+        (config.first_vertex_offset.value_or(0) & 3) != 0) {
+        return false;  // Misaligned
+    }
+
+    if (config.first_instance_offset.has_value() &&
+        config.first_instance_offset == config.first_vertex_offset) {
+        return false;  // Offset collision
+    }
+    return true;
+}
+
+void OffsetFirstIndexFuzzer(const Program& program, const OffsetFirstIndex::Config& config) {
+    if (!CanRun(program, config)) {
+        return;
+    }
+
+    DataMap inputs;
+    inputs.Add<OffsetFirstIndex::Config>(std::move(config));
+
+    DataMap outputs;
+    if (auto result = OffsetFirstIndex{}.Apply(program, inputs, outputs)) {
+        if (!result->IsValid()) {
+            TINT_ICE() << "OffsetFirstIndex returned invalid program:\n" << result->Diagnostics();
+        }
+    }
+}
+
+}  // namespace
+}  // namespace tint::ast::transform
+
+TINT_WGSL_PROGRAM_FUZZER(tint::ast::transform::OffsetFirstIndexFuzzer);
