diff --git a/crates/cli-support/src/lib.rs b/crates/cli-support/src/lib.rs
index 3708ad53..8f1a8393 100644
--- a/crates/cli-support/src/lib.rs
+++ b/crates/cli-support/src/lib.rs
@@ -224,7 +224,7 @@ fn extract_programs(module: &mut Module) -> Vec<shared::Program> {
                 ((payload[3] as usize) << 24);
             let (a, b) = payload[4..].split_at(len as usize);
             payload = b;
-            let p: shared::Program = match serde_json::from_slice(&a) {
+            let p: shared::ProgramOnlySchema = match serde_json::from_slice(&a) {
                 Ok(f) => f,
                 Err(e) => {
                     panic!("failed to decode what looked like wasm-bindgen data: {}", e)
@@ -255,6 +255,12 @@ to open an issue at https://github.com/alexcrichton/wasm-bindgen/issues!
 ",
     p.version, version);
             }
+            let p: shared::Program = match serde_json::from_slice(&a) {
+                Ok(f) => f,
+                Err(e) => {
+                    panic!("failed to decode what looked like wasm-bindgen data: {}", e)
+                }
+            };
             ret.push(p);
         }
 
diff --git a/crates/shared/src/lib.rs b/crates/shared/src/lib.rs
index a3836391..be6776bd 100644
--- a/crates/shared/src/lib.rs
+++ b/crates/shared/src/lib.rs
@@ -3,6 +3,12 @@ extern crate serde_derive;
 
 pub const SCHEMA_VERSION: &str = "2";
 
+#[derive(Deserialize)]
+pub struct ProgramOnlySchema {
+    pub schema_version: String,
+    pub version: String,
+}
+
 #[derive(Deserialize, Serialize)]
 pub struct Program {
     pub exports: Vec<Export>,