diff --git a/dawn.json b/dawn.json
index b3dba41..0a809c2 100644
--- a/dawn.json
+++ b/dawn.json
@@ -77,9 +77,7 @@
         "members": [
             {"name": "label", "type": "char", "annotation": "const*", "length": "strlen", "optional": true},
             {"name": "layout", "type": "bind group layout"},
-            {"name": "binding count", "type": "uint32_t", "default": 0},
-            {"name": "bindings", "type": "bind group entry", "annotation": "const*", "length": "binding count"},
-            {"name": "entry count", "type": "uint32_t", "default": 0},
+            {"name": "entry count", "type": "uint32_t"},
             {"name": "entries", "type": "bind group entry", "annotation": "const*", "length": "entry count"}
         ]
     },
@@ -106,9 +104,7 @@
         "extensible": true,
         "members": [
             {"name": "label", "type": "char", "annotation": "const*", "length": "strlen", "optional": true},
-            {"name": "binding count", "type": "uint32_t", "default": 0},
-            {"name": "bindings", "type": "bind group layout entry", "annotation": "const*", "length": "binding count"},
-            {"name": "entry count", "type": "uint32_t", "default": 0},
+            {"name": "entry count", "type": "uint32_t"},
             {"name": "entries", "type": "bind group layout entry", "annotation": "const*", "length": "entry count"}
         ]
     },
diff --git a/generator/templates/webgpu.h b/generator/templates/webgpu.h
index c3b2f50..4e1c7c8 100644
--- a/generator/templates/webgpu.h
+++ b/generator/templates/webgpu.h
@@ -114,10 +114,6 @@
 
 {% endfor %}
 
-// TODO(dawn:22): Remove this once users use the "Entry" version.
-typedef WGPUBindGroupEntry WGPUBindGroupBinding;
-typedef WGPUBindGroupLayoutEntry WGPUBindGroupLayoutBinding;
-
 #ifdef __cplusplus
 extern "C" {
 #endif
diff --git a/generator/templates/webgpu_cpp.h b/generator/templates/webgpu_cpp.h
index b53f83e..3dde1e8 100644
--- a/generator/templates/webgpu_cpp.h
+++ b/generator/templates/webgpu_cpp.h
@@ -216,10 +216,6 @@
 
     {% endfor %}
 
-    // TODO(dawn:22): Remove this once users use the "Entry" version.
-    using BindGroupBinding = BindGroupEntry;
-    using BindGroupLayoutBinding = BindGroupLayoutEntry;
-
 }  // namespace wgpu
 
 #endif // WEBGPU_CPP_H_
diff --git a/src/dawn_native/Device.cpp b/src/dawn_native/Device.cpp
index c75eed7..efa8d2d 100644
--- a/src/dawn_native/Device.cpp
+++ b/src/dawn_native/Device.cpp
@@ -773,25 +773,10 @@
     MaybeError DeviceBase::CreateBindGroupInternal(BindGroupBase** result,
                                                    const BindGroupDescriptor* descriptor) {
         DAWN_TRY(ValidateIsAlive());
-
-        // TODO(dawn:22): Remove this once users use entries/entryCount
-        BindGroupDescriptor fixedDescriptor = *descriptor;
-        if (fixedDescriptor.bindingCount != 0) {
-            if (fixedDescriptor.entryCount != 0) {
-                return DAWN_VALIDATION_ERROR("Cannot use bindings and entries at the same time");
-            } else {
-                EmitDeprecationWarning(
-                    "BindGroupEntry::bindings/bindingCount is deprecated, use entries/entryCount "
-                    "instead");
-                fixedDescriptor.entryCount = fixedDescriptor.bindingCount;
-                fixedDescriptor.entries = fixedDescriptor.bindings;
-            }
-        }
-
         if (IsValidationEnabled()) {
-            DAWN_TRY(ValidateBindGroupDescriptor(this, &fixedDescriptor));
+            DAWN_TRY(ValidateBindGroupDescriptor(this, descriptor));
         }
-        DAWN_TRY_ASSIGN(*result, CreateBindGroupImpl(&fixedDescriptor));
+        DAWN_TRY_ASSIGN(*result, CreateBindGroupImpl(descriptor));
         return {};
     }
 
@@ -799,25 +784,10 @@
         BindGroupLayoutBase** result,
         const BindGroupLayoutDescriptor* descriptor) {
         DAWN_TRY(ValidateIsAlive());
-
-        // TODO(dawn:22): Remove this once users use entries/entryCount
-        BindGroupLayoutDescriptor fixedDescriptor = *descriptor;
-        if (fixedDescriptor.bindingCount != 0) {
-            if (fixedDescriptor.entryCount != 0) {
-                return DAWN_VALIDATION_ERROR("Cannot use bindings and entries at the same time");
-            } else {
-                EmitDeprecationWarning(
-                    "BindGroupLayoutEntry::bindings/bindingCount is deprecated, use "
-                    "entries/entryCount instead");
-                fixedDescriptor.entryCount = fixedDescriptor.bindingCount;
-                fixedDescriptor.entries = fixedDescriptor.bindings;
-            }
-        }
-
         if (IsValidationEnabled()) {
-            DAWN_TRY(ValidateBindGroupLayoutDescriptor(this, &fixedDescriptor));
+            DAWN_TRY(ValidateBindGroupLayoutDescriptor(this, descriptor));
         }
-        DAWN_TRY_ASSIGN(*result, GetOrCreateBindGroupLayout(&fixedDescriptor));
+        DAWN_TRY_ASSIGN(*result, GetOrCreateBindGroupLayout(descriptor));
         return {};
     }
 
diff --git a/src/tests/end2end/DeprecatedAPITests.cpp b/src/tests/end2end/DeprecatedAPITests.cpp
index 63770fd..e95c7e1 100644
--- a/src/tests/end2end/DeprecatedAPITests.cpp
+++ b/src/tests/end2end/DeprecatedAPITests.cpp
@@ -82,8 +82,6 @@
     entryDesc.textureDimension = wgpu::TextureViewDimension::e2D;
 
     wgpu::BindGroupLayoutDescriptor bglDesc;
-    bglDesc.bindingCount = 0;
-    bglDesc.bindings = nullptr;
     bglDesc.entryCount = 1;
     bglDesc.entries = &entryDesc;
     EXPECT_DEPRECATION_WARNING(device.CreateBindGroupLayout(&bglDesc));
@@ -97,8 +95,6 @@
     entryDesc.type = wgpu::BindingType::Sampler;
 
     wgpu::BindGroupLayoutDescriptor bglDesc;
-    bglDesc.bindingCount = 0;
-    bglDesc.bindings = nullptr;
     bglDesc.entryCount = 1;
     bglDesc.entries = &entryDesc;
     device.CreateBindGroupLayout(&bglDesc);
@@ -113,8 +109,6 @@
     entryDesc.viewDimension = wgpu::TextureViewDimension::e2D;
 
     wgpu::BindGroupLayoutDescriptor bglDesc;
-    bglDesc.bindingCount = 0;
-    bglDesc.bindings = nullptr;
     bglDesc.entryCount = 1;
     bglDesc.entries = &entryDesc;
     ASSERT_DEVICE_ERROR(device.CreateBindGroupLayout(&bglDesc));
@@ -130,8 +124,6 @@
     entryDesc.textureDimension = wgpu::TextureViewDimension::Cube;
 
     wgpu::BindGroupLayoutDescriptor bglDesc = {};
-    bglDesc.bindingCount = 0;
-    bglDesc.bindings = nullptr;
     bglDesc.entryCount = 1;
     bglDesc.entries = &entryDesc;
     wgpu::BindGroupLayout layout;
@@ -160,153 +152,6 @@
     ASSERT_DEVICE_ERROR(utils::MakeBindGroup(device, layout, {{0, arrayView}}));
 }
 
-// Test for BindGroupLayout::bindings/bindingCount -> entries/entryCount
-
-// Test that creating a BGL with bindings emits a deprecation warning.
-TEST_P(DeprecationTests, BGLDescBindingIsDeprecated) {
-    wgpu::BindGroupLayoutEntry entryDesc;
-    entryDesc.binding = 0;
-    entryDesc.visibility = wgpu::ShaderStage::None;
-    entryDesc.type = wgpu::BindingType::Sampler;
-
-    wgpu::BindGroupLayoutDescriptor bglDesc;
-    bglDesc.bindingCount = 1;
-    bglDesc.bindings = &entryDesc;
-    bglDesc.entryCount = 0;
-    bglDesc.entries = nullptr;
-    EXPECT_DEPRECATION_WARNING(device.CreateBindGroupLayout(&bglDesc));
-}
-
-// Test that creating a BGL with both entries and bindings is an error
-TEST_P(DeprecationTests, BGLDescBindingAndEntriesIsInvalid) {
-    wgpu::BindGroupLayoutEntry entryDesc;
-    entryDesc.binding = 0;
-    entryDesc.visibility = wgpu::ShaderStage::None;
-    entryDesc.type = wgpu::BindingType::Sampler;
-
-    wgpu::BindGroupLayoutDescriptor bglDesc;
-    bglDesc.bindingCount = 1;
-    bglDesc.bindings = &entryDesc;
-    bglDesc.entryCount = 1;
-    bglDesc.entries = &entryDesc;
-    ASSERT_DEVICE_ERROR(device.CreateBindGroupLayout(&bglDesc));
-}
-
-// Test that creating a BGL with both entries and bindings to 0 doesn't emit warnings
-TEST_P(DeprecationTests, BGLDescBindingAndEntriesBothZeroEmitsNoWarning) {
-    wgpu::BindGroupLayoutDescriptor bglDesc;
-    bglDesc.bindingCount = 0;
-    bglDesc.bindings = nullptr;
-    bglDesc.entryCount = 0;
-    bglDesc.entries = nullptr;
-    device.CreateBindGroupLayout(&bglDesc);
-}
-
-// Test that creating a BGL with bindings still does correct state tracking
-TEST_P(DeprecationTests, BGLDescBindingStateTracking) {
-    wgpu::BindGroupLayoutEntry entryDesc;
-    entryDesc.binding = 0;
-    entryDesc.type = wgpu::BindingType::Sampler;
-    entryDesc.visibility = wgpu::ShaderStage::None;
-
-    wgpu::BindGroupLayoutDescriptor bglDesc;
-    bglDesc.bindingCount = 1;
-    bglDesc.bindings = &entryDesc;
-    bglDesc.entryCount = 0;
-    bglDesc.entries = nullptr;
-    wgpu::BindGroupLayout layout;
-    EXPECT_DEPRECATION_WARNING(layout = device.CreateBindGroupLayout(&bglDesc));
-
-    // Test a case where if |bindings| wasn't taken into account, no validation error would happen
-    // because the layout would be empty
-    wgpu::BindGroupDescriptor badBgDesc;
-    badBgDesc.layout = layout;
-    badBgDesc.bindingCount = 0;
-    badBgDesc.bindings = nullptr;
-    badBgDesc.entryCount = 0;
-    badBgDesc.entries = nullptr;
-    ASSERT_DEVICE_ERROR(device.CreateBindGroup(&badBgDesc));
-}
-
-// Test for BindGroup::bindings/bindingCount -> entries/entryCount
-
-// Test that creating a BG with bindings emits a deprecation warning.
-TEST_P(DeprecationTests, BGDescBindingIsDeprecated) {
-    wgpu::SamplerDescriptor samplerDesc = {};
-    wgpu::Sampler sampler = device.CreateSampler(&samplerDesc);
-
-    wgpu::BindGroupLayout layout = utils::MakeBindGroupLayout(
-        device, {{0, wgpu::ShaderStage::Fragment, wgpu::BindingType::Sampler}});
-
-    wgpu::BindGroupEntry entryDesc;
-    entryDesc.binding = 0;
-    entryDesc.sampler = sampler;
-
-    wgpu::BindGroupDescriptor bgDesc;
-    bgDesc.layout = layout;
-    bgDesc.bindingCount = 1;
-    bgDesc.bindings = &entryDesc;
-    bgDesc.entryCount = 0;
-    bgDesc.entries = nullptr;
-    EXPECT_DEPRECATION_WARNING(device.CreateBindGroup(&bgDesc));
-}
-
-// Test that creating a BG with both entries and bindings is an error
-TEST_P(DeprecationTests, BGDescBindingAndEntriesIsInvalid) {
-    wgpu::SamplerDescriptor samplerDesc = {};
-    wgpu::Sampler sampler = device.CreateSampler(&samplerDesc);
-
-    wgpu::BindGroupLayout layout = utils::MakeBindGroupLayout(
-        device, {{0, wgpu::ShaderStage::Fragment, wgpu::BindingType::Sampler}});
-
-    wgpu::BindGroupEntry entryDesc = {};
-    entryDesc.binding = 0;
-    entryDesc.sampler = sampler;
-
-    wgpu::BindGroupDescriptor bgDesc;
-    bgDesc.layout = layout;
-    bgDesc.bindingCount = 1;
-    bgDesc.bindings = &entryDesc;
-    bgDesc.entryCount = 1;
-    bgDesc.entries = &entryDesc;
-    ASSERT_DEVICE_ERROR(device.CreateBindGroup(&bgDesc));
-}
-
-// Test that creating a BG with both entries and bindings to 0 doesn't emit warnings
-TEST_P(DeprecationTests, BGDescBindingAndEntriesBothZeroEmitsNoWarning) {
-    wgpu::BindGroupLayout layout = utils::MakeBindGroupLayout(device, {});
-
-    wgpu::BindGroupDescriptor bgDesc;
-    bgDesc.layout = layout;
-    bgDesc.bindingCount = 0;
-    bgDesc.bindings = nullptr;
-    bgDesc.entryCount = 0;
-    bgDesc.entries = nullptr;
-    device.CreateBindGroup(&bgDesc);
-}
-
-// Test that creating a BG with bindings still does correct state tracking
-TEST_P(DeprecationTests, BGDescBindingStateTracking) {
-    wgpu::BindGroupLayout layout = utils::MakeBindGroupLayout(device, {});
-
-    // Test a case where if |bindings| wasn't taken into account, no validation error would happen
-    // because it would match the empty layout.
-    wgpu::SamplerDescriptor samplerDesc = {};
-    wgpu::Sampler sampler = device.CreateSampler(&samplerDesc);
-
-    wgpu::BindGroupEntry entryDesc = {};
-    entryDesc.binding = 0;
-    entryDesc.sampler = sampler;
-
-    wgpu::BindGroupDescriptor bgDesc;
-    bgDesc.layout = layout;
-    bgDesc.bindingCount = 1;
-    bgDesc.bindings = &entryDesc;
-    bgDesc.entryCount = 0;
-    bgDesc.entries = nullptr;
-    EXPECT_DEPRECATION_WARNING(ASSERT_DEVICE_ERROR(device.CreateBindGroup(&bgDesc)));
-}
-
 // Tests for ShaderModuleDescriptor.code/codeSize -> ShaderModuleSPIRVDescriptor
 
 static const char kEmptyShader[] = R"(#version 450
diff --git a/src/tests/unittests/wire/WireMultipleDeviceTests.cpp b/src/tests/unittests/wire/WireMultipleDeviceTests.cpp
index 0be91b4..3ba0da0 100644
--- a/src/tests/unittests/wire/WireMultipleDeviceTests.cpp
+++ b/src/tests/unittests/wire/WireMultipleDeviceTests.cpp
@@ -174,7 +174,7 @@
 
     wireA.FlushClient();
 
-    std::array<WGPUBindGroupBinding, 2> entries = {};
+    std::array<WGPUBindGroupEntry, 2> entries = {};
 
     // Create a buffer on wire A.
     WGPUBufferDescriptor bufferDesc = {};
