diff --git a/Cargo.toml b/Cargo.toml
index 8e23e237a..36160b7b9 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -106,7 +106,7 @@ fern = "0.7"
 flume = "0.11"
 futures-lite = "2"
 glam = "0.29"
-half = "2.5" # We require 2.5 to have `Arbitrary` support.
+half = { version = "2.5", default-features = false } # We require 2.5 to have `Arbitrary` support.
 hashbrown = { version = "0.15.2", default-features = false, features = [
     "default-hasher",
     "inline-more",
diff --git a/naga/Cargo.toml b/naga/Cargo.toml
index f63826550..fef8c9b43 100644
--- a/naga/Cargo.toml
+++ b/naga/Cargo.toml
@@ -50,7 +50,13 @@ deserialize = [
     "hashbrown/serde",
     "indexmap/serde",
 ]
-arbitrary = ["dep:arbitrary", "bitflags/arbitrary", "indexmap/arbitrary"]
+arbitrary = [
+    "dep:arbitrary",
+    "bitflags/arbitrary",
+    "indexmap/arbitrary",
+    "half/arbitrary",
+    "half/std",
+]
 spv-in = ["dep:petgraph", "dep:spirv"]
 spv-out = ["dep:spirv"]
 wgsl-in = [
@@ -85,12 +91,12 @@ codespan-reporting = { workspace = true, default-features = false, features = [
     "termcolor",
 ] }
 hashbrown.workspace = true
-half = { workspace = true, features = ["arbitrary", "num-traits"] }
+half = { workspace = true, default-features = false, features = ["num-traits"] }
 rustc-hash.workspace = true
 indexmap.workspace = true
 log = "0.4"
 # `half` requires 0.2.16 for `FromBytes` and `ToBytes`.
-num-traits = "0.2.16"
+num-traits = { version = "0.2.16", default-features = false }
 strum = { workspace = true, optional = true }
 spirv = { version = "0.3", optional = true }
 thiserror.workspace = true
diff --git a/tests/Cargo.toml b/tests/Cargo.toml
index cc8c60f10..5c206d4ba 100644
--- a/tests/Cargo.toml
+++ b/tests/Cargo.toml
@@ -44,7 +44,7 @@ cfg-if.workspace = true
 ctor.workspace = true
 futures-lite.workspace = true
 glam.workspace = true
-half = { workspace = true, features = ["bytemuck"] }
+half = { workspace = true, features = ["bytemuck", "std"] }
 itertools.workspace = true
 image.workspace = true
 libtest-mimic.workspace = true