Repository: axodotdev/cargo-dist
Pull request #414 (2023-09-07 21:03:16)

fix: ignore newlines when checking file equality


Patch:
diff --git a/.gitignore b/.gitignore
index 79c04f87..bf77cdd8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,4 +3,3 @@
 /book/book/
 oranda-debug.log
 cargo-dist/public
-cargo-dist/wix
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e86db190..95c86288 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -44,7 +44,7 @@ If you enable any of these features, we may automatically turn on `precise-build
 
 See the docs for all the details.
 
-* @gankra + @Yatekii [impl](https://github.com/axodotdev/cargo-dist/pull/321)
+* @gankra + @Yatekiii [impl](https://github.com/axodotdev/cargo-dist/pull/321)
 * docs
     * [features](https://opensource.axo.dev/cargo-dist/book/config.html#features)
     * [all-features](https://opensource.axo.dev/cargo-dist/book/config.html#all-features)
diff --git a/Cargo.lock b/Cargo.lock
index b1d15b42..9941b05b 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -37,21 +37,6 @@ dependencies = [
  "memchr",
 ]
 
-[[package]]
-name = "android-tzdata"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
-
-[[package]]
-name = "android_system_properties"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
-dependencies = [
- "libc",
-]
-
 [[package]]
 name = "anstream"
 version = "0.5.0"
@@ -248,9 +233,9 @@ checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
 
 [[package]]
 name = "bytemuck"
-version = "1.14.0"
+version = "1.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
+checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"
 
 [[package]]
 name = "byteorder"
@@ -260,9 +245,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
 
 [[package]]
 name = "bytes"
-version = "1.5.0"
+version = "1.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
 
 [[package]]
 name = "bzip2"
@@ -296,14 +281,13 @@ dependencies = [
 
 [[package]]
 name = "cargo-dist"
-version = "0.3.0-prerelease.2"
+version = "0.3.0-prerelease.1"
 dependencies = [
  "axoasset",
  "axocli",
  "axoproject",
  "camino",
  "cargo-dist-schema",
- "cargo-wix",
  "cargo_metadata 0.17.0",
  "clap",
  "clap-cargo",
@@ -326,12 +310,11 @@ dependencies = [
  "thiserror",
  "toml_edit",
  "tracing",
- "uuid",
 ]
 
 [[package]]
 name = "cargo-dist-schema"
-version = "0.3.0-prerelease.2"
+version = "0.3.0-prerelease.1"
 dependencies = [
  "camino",
  "insta",
@@ -350,32 +333,6 @@ dependencies = [
  "serde",
 ]
 
-[[package]]
-name = "cargo-wix"
-version = "0.3.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73b290f8aa497e7720f9594f7ca4809e7f2b06978f4993e85227be26840e7448"
-dependencies = [
- "camino",
- "cargo_metadata 0.17.0",
- "chrono",
- "clap",
- "encoding_rs_io",
- "env_logger",
- "itertools 0.11.0",
- "lazy_static",
- "log 0.4.20",
- "mustache",
- "regex",
- "rustc-cfg",
- "semver",
- "serde_json",
- "sxd-document",
- "sxd-xpath",
- "termcolor",
- "uuid",
-]
-
 [[package]]
 name = "cargo_metadata"
 version = "0.15.4"
@@ -430,20 +387,6 @@ version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
 
-[[package]]
-name = "chrono"
-version = "0.4.30"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "defd4e7873dbddba6c7c91e199c7fcb946abc4a6a4ac3195400bcfb01b5de877"
-dependencies = [
- "android-tzdata",
- "iana-time-zone",
- "js-sys",
- "num-traits",
- "wasm-bindgen",
- "windows-targets 0.48.5",
-]
-
 [[package]]
 name = "cipher"
 version = "0.4.4"
@@ -456,12 +399,13 @@ dependencies = [
 
 [[package]]
 name = "clap"
-version = "4.4.2"
+version = "4.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a13b88d2c62ff462f88e4a121f17a82c1af05693a2f192b5c38d14de73c19f6"
+checksum = "7c8d502cbaec4595d2e7d5f61e318f05417bd2b66fdc3809498f0d3fdf0bea27"
 dependencies = [
  "clap_builder",
  "clap_derive",
+ "once_cell",
 ]
 
 [[package]]
@@ -476,9 +420,9 @@ dependencies = [
 
 [[package]]
 name = "clap_builder"
-version = "4.4.2"
+version = "4.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2bb9faaa7c2ef94b2743a21f5a29e6f0010dff4caa69ac8e9d6cf8b6fa74da08"
+checksum = "5891c7bc0edb3e1c2204fc5e94009affabeb1821c9e5fdc3959536c5c0bb984d"
 dependencies = [
  "anstream",
  "anstyle",
@@ -488,14 +432,14 @@ dependencies = [
 
 [[package]]
 name = "clap_derive"
-version = "4.4.2"
+version = "4.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873"
+checksum = "c9fd1a5729c4548118d7d70ff234a44868d00489a4b6597b0b020918a0e91a1a"
 dependencies = [
  "heck",
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.29",
 ]
 
 [[package]]
@@ -535,12 +479,6 @@ version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
 
-[[package]]
-name = "core-foundation-sys"
-version = "0.8.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
-
 [[package]]
 name = "cpufeatures"
 version = "0.2.9"
@@ -696,28 +634,6 @@ dependencies = [
  "cfg-if",
 ]
 
-[[package]]
-name = "encoding_rs_io"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1cc3c5651fb62ab8aa3103998dade57efdd028544bd300516baa31840c252a83"
-dependencies = [
- "encoding_rs",
-]
-
-[[package]]
-name = "env_logger"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
-dependencies = [
- "humantime",
- "is-terminal",
- "log 0.4.20",
- "regex",
- "termcolor",
-]
-
 [[package]]
 name = "equivalent"
 version = "1.0.1"
@@ -855,7 +771,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.29",
 ]
 
 [[package]]
@@ -1050,12 +966,6 @@ version = "1.0.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
 
-[[package]]
-name = "humantime"
-version = "2.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
-
 [[package]]
 name = "hyper"
 version = "0.14.27"
@@ -1094,29 +1004,6 @@ dependencies = [
  "tokio-rustls",
 ]
 
-[[package]]
-name = "iana-time-zone"
-version = "0.1.57"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
-dependencies = [
- "android_system_properties",
- "core-foundation-sys",
- "iana-time-zone-haiku",
- "js-sys",
- "wasm-bindgen",
- "windows",
-]
-
-[[package]]
-name = "iana-time-zone-haiku"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
-dependencies = [
- "cc",
-]
-
 [[package]]
 name = "idna"
 version = "0.4.0"
@@ -1329,15 +1216,6 @@ dependencies = [
  "scopeguard",
 ]
 
-[[package]]
-name = "log"
-version = "0.3.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
-dependencies = [
- "log 0.4.20",
-]
-
 [[package]]
 name = "log"
 version = "0.4.20"
@@ -1357,9 +1235,9 @@ dependencies = [
 
 [[package]]
 name = "memchr"
-version = "2.6.3"
+version = "2.6.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c"
+checksum = "5486aed0026218e61b8a01d5fbd5a0a134649abb71a0e53b7bc088529dced86e"
 
 [[package]]
 name = "memo-map"
@@ -1405,7 +1283,7 @@ checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.29",
 ]
 
 [[package]]
@@ -1448,16 +1326,6 @@ dependencies = [
  "windows-sys 0.48.0",
 ]
 
-[[package]]
-name = "mustache"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51956ef1c5d20a1384524d91e616fb44dfc7d8f249bf696d49c97dd3289ecab5"
-dependencies = [
- "log 0.3.9",
- "serde",
-]
-
 [[package]]
 name = "nanorand"
 version = "0.7.0"
@@ -1534,9 +1402,9 @@ dependencies = [
 
 [[package]]
 name = "object"
-version = "0.32.1"
+version = "0.32.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+checksum = "77ac5bbd07aea88c60a577a1ce218075ffd59208b2d7ca97adf9bfc5aeb21ebe"
 dependencies = [
  "memchr",
 ]
@@ -1613,12 +1481,6 @@ version = "2.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
 
-[[package]]
-name = "peresil"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f658886ed52e196e850cfbbfddab9eaa7f6d90dd0929e264c31e5cec07e09e57"
-
 [[package]]
 name = "petgraph"
 version = "0.6.4"
@@ -1646,7 +1508,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.29",
 ]
 
 [[package]]
@@ -1698,12 +1560,6 @@ dependencies = [
  "bytemuck",
 ]
 
-[[package]]
-name = "quick-error"
-version = "1.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
-
 [[package]]
 name = "quote"
 version = "1.0.33"
@@ -1752,9 +1608,9 @@ dependencies = [
 
 [[package]]
 name = "regex"
-version = "1.9.5"
+version = "1.9.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47"
+checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29"
 dependencies = [
  "aho-corasick",
  "memchr",
@@ -1764,9 +1620,9 @@ dependencies = [
 
 [[package]]
 name = "regex-automata"
-version = "0.3.8"
+version = "0.3.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795"
+checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629"
 dependencies = [
  "aho-corasick",
  "memchr",
@@ -1797,7 +1653,7 @@ dependencies = [
  "hyper-rustls",
  "ipnet",
  "js-sys",
- "log 0.4.20",
+ "log",
  "mime",
  "once_cell",
  "percent-encoding",
@@ -1833,15 +1689,6 @@ dependencies = [
  "winapi",
 ]
 
-[[package]]
-name = "rustc-cfg"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ddf7a5e441e8003a5a88aab97f1c6113043ddde252d789ef9dea3871b78633a"
-dependencies = [
- "thiserror",
-]
-
 [[package]]
 name = "rustc-demangle"
 version = "0.1.23"
@@ -1850,9 +1697,9 @@ checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
 
 [[package]]
 name = "rustix"
-version = "0.38.11"
+version = "0.38.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0c3dde1fc030af041adc40e79c0e7fbcf431dd24870053d187d7c66e4b87453"
+checksum = "ed6248e1caa625eb708e266e06159f135e8c26f2bb7ceb72dc4b2766d0340964"
 dependencies = [
  "bitflags 2.4.0",
  "errno",
@@ -1867,7 +1714,7 @@ version = "0.21.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8"
 dependencies = [
- "log 0.4.20",
+ "log",
  "ring",
  "rustls-webpki",
  "sct",
@@ -1979,7 +1826,7 @@ checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.29",
 ]
 
 [[package]]
@@ -2167,27 +2014,6 @@ dependencies = [
  "is-terminal",
 ]
 
-[[package]]
-name = "sxd-document"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "94d82f37be9faf1b10a82c4bd492b74f698e40082f0f40de38ab275f31d42078"
-dependencies = [
- "peresil",
- "typed-arena",
-]
-
-[[package]]
-name = "sxd-xpath"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "36e39da5d30887b5690e29de4c5ebb8ddff64ebd9933f98a01daaa4fd11b36ea"
-dependencies = [
- "peresil",
- "quick-error",
- "sxd-document",
-]
-
 [[package]]
 name = "syn"
 version = "1.0.109"
@@ -2201,9 +2027,9 @@ dependencies = [
 
 [[package]]
 name = "syn"
-version = "2.0.31"
+version = "2.0.29"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "718fa2415bcb8d8bd775917a1bf12a7931b6dfa890753378538118181e0cb398"
+checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -2251,15 +2077,6 @@ dependencies = [
  "windows-sys 0.48.0",
 ]
 
-[[package]]
-name = "termcolor"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
-dependencies = [
- "winapi-util",
-]
-
 [[package]]
 name = "terminal_size"
 version = "0.1.17"
@@ -2283,22 +2100,22 @@ dependencies = [
 
 [[package]]
 name = "thiserror"
-version = "1.0.48"
+version = "1.0.47"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7"
+checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f"
 dependencies = [
  "thiserror-impl",
 ]
 
 [[package]]
 name = "thiserror-impl"
-version = "1.0.48"
+version = "1.0.47"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35"
+checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.29",
 ]
 
 [[package]]
@@ -2432,7 +2249,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
 dependencies = [
  "cfg-if",
- "log 0.4.20",
+ "log",
  "pin-project-lite",
  "tracing-attributes",
  "tracing-core",
@@ -2446,7 +2263,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.29",
 ]
 
 [[package]]
@@ -2466,7 +2283,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
 dependencies = [
  "lazy_static",
- "log 0.4.20",
+ "log",
  "tracing-core",
 ]
 
@@ -2490,12 +2307,6 @@ version = "0.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
 
-[[package]]
-name = "typed-arena"
-version = "1.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9b2228007eba4120145f785df0f6c92ea538f5a3635a612ecf4e334c8c1446d"
-
 [[package]]
 name = "typenum"
 version = "1.16.0"
@@ -2564,15 +2375,6 @@ version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
 
-[[package]]
-name = "uuid"
-version = "1.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
-dependencies = [
- "getrandom",
-]
-
 [[package]]
 name = "valuable"
 version = "0.1.0"
@@ -2587,9 +2389,9 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
 
 [[package]]
 name = "walkdir"
-version = "2.4.0"
+version = "2.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
 dependencies = [
  "same-file",
  "winapi-util",
@@ -2627,11 +2429,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
 dependencies = [
  "bumpalo",
- "log 0.4.20",
+ "log",
  "once_cell",
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.29",
  "wasm-bindgen-shared",
 ]
 
@@ -2665,7 +2467,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.29",
  "wasm-bindgen-backend",
  "wasm-bindgen-shared",
 ]
@@ -2729,15 +2531,6 @@ version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
 
-[[package]]
-name = "windows"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
-dependencies = [
- "windows-targets 0.48.5",
-]
-
 [[package]]
 name = "windows-sys"
 version = "0.45.0"
diff --git a/Cargo.toml b/Cargo.toml
index f0cb1081..8f07890a 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -24,8 +24,6 @@ tap = "axodotdev/homebrew-tap"
 publish-jobs = ["homebrew"]
 # Target platforms to build apps for (Rust target-triple syntax)
 targets = ["x86_64-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-pc-windows-msvc", "aarch64-apple-darwin"]
-# Temporary until a fix in 0.3.0-prerelease.2 lands
-allow-dirty = ["ci"]
 
 # The profile that 'cargo dist' will build with
 [profile.dist]
diff --git a/book/src/concepts.md b/book/src/concepts.md
index 70ff7ae4..de33ba7c 100644
--- a/book/src/concepts.md
+++ b/book/src/concepts.md
@@ -124,7 +124,7 @@ Normally cargo-dist will error out if the Announcement Tag selects no Apps, beca
 
 Now that we have a coherent Announcement and therefore have selected what apps we want to Release, we need to select what artifacts we want to build (or get a manifest for). Enumerating the exact artifacts for each invocation of cargo-dist would be tedious and error-prone, so we provide the `--artifacts=...` flag to specify the *Artifact Mode*, which is a certain subset of the Universe of all Artifacts:
 
-* "local": artifacts that are per-target platform ([executable-zips][executable-zip], symbols, msi installers...)
+* "local": artifacts that are per-target platform ([executable-zips][executable-zip], symbols, MSIs...)
 * "global": artifacts that are one-per-app (shell installer, npm package...)
 * "all": both global and local (so the whole Universe)
 * "host": the default mode that kind of breaks the rules to let you test things out locally
diff --git a/cargo-dist-schema/Cargo.toml b/cargo-dist-schema/Cargo.toml
index 9089c677..53ed35ae 100644
--- a/cargo-dist-schema/Cargo.toml
+++ b/cargo-dist-schema/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 name = "cargo-dist-schema"
 description = "Schema information for cargo-dist's dist-manifest.json"
-version = "0.3.0-prerelease.2"
+version = "0.3.0-prerelease.1"
 edition = "2021"
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/axodotdev/cargo-dist"
diff --git a/cargo-dist/Cargo.toml b/cargo-dist/Cargo.toml
index 6644b54a..1d7118ba 100644
--- a/cargo-dist/Cargo.toml
+++ b/cargo-dist/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 name = "cargo-dist"
 description = "Shippable application packaging for Rust"
-version = "0.3.0-prerelease.2"
+version = "0.3.0-prerelease.1"
 edition = "2021"
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/axodotdev/cargo-dist"
@@ -30,7 +30,7 @@ clap-cargo = { version = "0.10.0", optional = true }
 axocli = { version = "0.1.0", optional = true }
 
 # Features used by the cli and library
-cargo-dist-schema = { version = "=0.3.0-prerelease.2", path = "../cargo-dist-schema" }
+cargo-dist-schema = { version = "=0.3.0-prerelease.1", path = "../cargo-dist-schema" }
 
 axoasset = { version = "0.5.0", features = ["json-serde", "toml-serde", "toml-edit", "compression"] }
 axoproject = { version = "0.4.7", default-features = false, features = ["cargo-projects"] }
@@ -51,8 +51,6 @@ sha2 = "0.10.6"
 minijinja = { version = "1.0.5", features = ["debug", "loader", "builtins", "json", "custom_syntax"] }
 include_dir = "0.7.3"
 itertools = "0.11.0"
-cargo-wix = "0.3.6"
-uuid = { version = "1", features = ["v4"] }
 
 [dev-dependencies]
 insta = { version = "1.26.0", features = ["filters"] }
diff --git a/cargo-dist/src/backend/installer/mod.rs b/cargo-dist/src/backend/installer/mod.rs
index fdb6570e..03c77e49 100644
--- a/cargo-dist/src/backend/installer/mod.rs
+++ b/cargo-dist/src/backend/installer/mod.rs
@@ -11,11 +11,9 @@ use crate::{
 };
 
 use self::homebrew::HomebrewInstallerInfo;
-use self::msi::MsiInstallerInfo;
 use self::npm::NpmInstallerInfo;
 
 pub mod homebrew;
-pub mod msi;
 pub mod npm;
 pub mod powershell;
 pub mod shell;
@@ -32,8 +30,6 @@ pub enum InstallerImpl {
     Npm(NpmInstallerInfo),
     /// Homebrew formula
     Homebrew(HomebrewInstallerInfo),
-    /// Windows msi installer
-    Msi(MsiInstallerInfo),
 }
 
 /// Generic info about an installer
diff --git a/cargo-dist/src/backend/installer/msi.rs b/cargo-dist/src/backend/installer/msi.rs
deleted file mode 100644
index 7dbbc7bb..00000000
--- a/cargo-dist/src/backend/installer/msi.rs
+++ /dev/null
@@ -1,162 +0,0 @@
-//! msi installer
-
-use axoasset::LocalAsset;
-use camino::Utf8PathBuf;
-use tracing::info;
-
-use crate::{backend::diff_files, config, errors::*};
-
-const METADATA_WIX: &str = "wix";
-const WIX_GUID_KEYS: &[&str] = &["upgrade-guid", "path-guid"];
-
-/// Info needed to build an msi
-#[derive(Debug, Clone)]
-pub struct MsiInstallerInfo {
-    /// An ideally unambiguous way to refer to a package for the purpose of cargo -p flags.
-    pub pkg_spec: String,
-    /// Binaries we'll be baking into the msi
-    pub target: String,
-    /// Final file path of the msi
-    pub file_path: Utf8PathBuf,
-    /// Dir stuff goes to
-    pub package_dir: Utf8PathBuf,
-    /// Path to the wxs file this installer uses
-    pub wxs_path: Utf8PathBuf,
-    /// Path to the package Cargo.toml associated with this msi
-    pub manifest_path: Utf8PathBuf,
-}
-
-impl MsiInstallerInfo {
-    /// Build the msi installer
-    ///
-    /// Note that this assumes `write_wsx_to_disk` was run beforehand (via `cargo dist generate`),
-    /// which should be enforced by `check_wsx` (via `cargo dist generate --check`).
-    pub fn build(&self) -> DistResult<()> {
-        info!("building an msi: {}", self.file_path);
-
-        let mut b = wix::create::Builder::new();
-        // Build this specific package
-        b.package(Some(&self.pkg_spec));
-        // cargo-dist already did the build for us
-        b.no_build(true);
-        // It built with the `dist` profile
-        b.profile(Some("dist"));
-        // It explicitly built with this --target
-        b.target(Some(&self.target));
-        // We want the output to go here
-        b.output(Some(self.file_path.as_str()));
-        // Binaries are over here
-        b.target_bin_dir(Some(self.package_dir.as_str()));
-        // Give users better feedback from WiX
-        b.capture_output(false);
-
-        let exec = b.build();
-        exec.run().map_err(|e| DistError::Wix {
-            msi: self.file_path.file_name().unwrap().to_owned(),
-            details: e,
-        })?;
-
-        assert!(self.file_path.exists());
-        Ok(())
-    }
-
-    /// run `cargo wix print wxs` to get what the msi should contain
-    pub fn generate_wxs_string(&self) -> DistResult<String> {
-        let mut b = wix::print::wxs::Builder::new();
-        // Build this specific package
-        b.package(Some(&self.pkg_spec));
-        let exec = b.build();
-        let wsx = exec.render_to_string().map_err(|e| DistError::WixInit {
-            package: self.pkg_spec.clone(),
-            details: e,
-        })?;
-        Ok(wsx)
-    }
-
-    /// msi's impl of `cargo dist genenerate --check`
-    pub fn check_config(&self) -> DistResult<()> {
-        self.check_wix_guids()?;
-        self.check_wxs()?;
-        Ok(())
-    }
-    /// msi's impl of `cargo dist genenerate`
-    pub fn write_config_to_disk(&self) -> DistResult<()> {
-        self.write_wix_guids_to_disk()?;
-        self.write_wxs_to_disk()?;
-        Ok(())
-    }
-
-    /// Write the wxs to disk
-    fn write_wxs_to_disk(&self) -> DistResult<()> {
-        let file = &self.wxs_path;
-        let rendered = self.generate_wxs_string()?;
-
-        LocalAsset::write_new_all(&rendered, file)?;
-        eprintln!("generated msi definition to {}", file);
-
-        Ok(())
-    }
-
-    /// Check whether the new configuration differs from the config on disk
-    /// writhout actually writing the result.
-    fn check_wxs(&self) -> DistResult<()> {
-        let existing = &self.wxs_path;
-
-        let rendered = self.generate_wxs_string()?;
-        diff_files(existing, &rendered)
-    }
-
-    /// Check that wix GUIDs are set in the package's Cargo.toml
-    fn check_wix_guids(&self) -> DistResult<()> {
-        // Ok we have changes to make, let's load the toml
-        let mut package_toml = config::load_cargo_toml(&self.manifest_path)?;
-        if update_wix_metadata(&mut package_toml) {
-            Err(DistError::MissingWixGuids {
-                manifest_path: self.manifest_path.clone(),
-                keys: WIX_GUID_KEYS,
-            })
-        } else {
-            Ok(())
-        }
-    }
-
-    /// Write wix GUIDs to the package's Cargo.toml
-    fn write_wix_guids_to_disk(&self) -> DistResult<()> {
-        let mut package_toml = config::load_cargo_toml(&self.manifest_path)?;
-        if update_wix_metadata(&mut package_toml) {
-            config::save_cargo_toml(&self.manifest_path, package_toml)?;
-        }
-        Ok(())
-    }
-}
-
-/// Ensure [package.metadata.wix] has persisted GUIDs.
-///
-/// This ensures that regenerating the installer produces a stable result.
-/// Returns whether modifications were made (and should be written to disk)
-fn update_wix_metadata(package_toml: &mut toml_edit::Document) -> bool {
-    let metadata = config::get_toml_metadata(package_toml, false);
-
-    // Get the subtable
-    let wix_metadata = &mut metadata[METADATA_WIX];
-    // If there's no table, make one
-    if !wix_metadata.is_table() {
-        *wix_metadata = toml_edit::table();
-    }
-    let table = wix_metadata.as_table_mut().unwrap();
-
-    // Ensure the GUIDs exist, generating them if not
-    let mut modified = false;
-    for key in WIX_GUID_KEYS {
-        if !table.contains_key(key) {
-            modified = true;
-            let val = uuid::Uuid::new_v4()
-                .as_hyphenated()
-                .to_string()
-                .to_uppercase();
-            table.insert(key, toml_edit::value(val));
-        }
-    }
-
-    modified
-}
diff --git a/cargo-dist/src/backend/mod.rs b/cargo-dist/src/backend/mod.rs
index f908680c..e8f846a4 100644
--- a/cargo-dist/src/backend/mod.rs
+++ b/cargo-dist/src/backend/mod.rs
@@ -18,48 +18,46 @@ pub fn diff_files(existing_file: &Utf8Path, new_file_contents: &str) -> DistResu
         SourceFile::new(existing_file.as_str(), String::new())
     };
 
-    if new_file_contents != existing.contents() {
-        // Get more precise info
-        let mut existing_lines = existing.contents().lines();
-        let mut new_lines = new_file_contents.lines();
+    // Check that the files match, ignoring newlines which are too easy
+    // to vary with git crlf settings
+    let mut existing_lines = existing.contents().lines();
+    let mut new_lines = new_file_contents.lines();
 
-        let existing_line_count = existing_lines.clone().count();
-        let new_line_count = new_lines.clone().count();
-        let max_lines = existing_line_count.max(new_line_count);
+    let existing_line_count = existing_lines.clone().count();
+    let new_line_count = new_lines.clone().count();
+    let max_lines = existing_line_count.max(new_line_count);
 
-        for line_number in 1..=max_lines {
-            match (existing_lines.next(), new_lines.next()) {
-                (Some(existing_line), Some(new_line)) => {
-                    if existing_line != new_line {
-                        return Err(DistError::CheckFileMismatch {
-                            existing_line: existing_line.to_owned(),
-                            new_line: new_line.to_owned(),
-                            file: existing,
-                            line_number,
-                        });
-                    }
-                }
-                (None, Some(new_line)) => {
-                    return Err(DistError::CheckFileMismatch {
-                        existing_line: String::new(),
-                        new_line: new_line.to_owned(),
-                        file: existing,
-                        line_number,
-                    });
-                }
-                (Some(existing_line), None) => {
+    for line_number in 1..=max_lines {
+        match (existing_lines.next(), new_lines.next()) {
+            (Some(existing_line), Some(new_line)) => {
+                if existing_line != new_line {
                     return Err(DistError::CheckFileMismatch {
                         existing_line: existing_line.to_owned(),
-                        new_line: String::new(),
+                        new_line: new_line.to_owned(),
                         file: existing,
                         line_number,
                     });
                 }
-                (None, None) => {}
             }
+            (None, Some(new_line)) => {
+                return Err(DistError::CheckFileMismatch {
+                    existing_line: String::new(),
+                    new_line: new_line.to_owned(),
+                    file: existing,
+                    line_number,
+                });
+            }
+            (Some(existing_line), None) => {
+                return Err(DistError::CheckFileMismatch {
+                    existing_line: existing_line.to_owned(),
+                    new_line: String::new(),
+                    file: existing,
+                    line_number,
+                });
+            }
+            (None, None) => {}
         }
-        unreachable!()
-    } else {
-        Ok(())
     }
+
+    Ok(())
 }
diff --git a/cargo-dist/src/cli.rs b/cargo-dist/src/cli.rs
index 02bb7ef2..c151ad87 100644
--- a/cargo-dist/src/cli.rs
+++ b/cargo-dist/src/cli.rs
@@ -173,7 +173,7 @@ pub struct BuildArgs {
     /// Which subset of the Artifacts to build
     ///
     /// Artifacts can be broken up into two major classes: "local" ones, which are
-    /// made for each target system (executable-zips, symbols, msi installers...); and "global" ones,
+    /// made for each target system (executable-zips, symbols, MSIs...); and "global" ones,
     /// which are made once per app (curl-sh installers, npm package, metadata...).
     ///
     /// Having this distinction lets us run cargo-dist independently on
@@ -196,7 +196,7 @@ pub struct BuildArgs {
 /// How we should select the artifacts to build
 #[derive(ValueEnum, Copy, Clone, Debug)]
 pub enum ArtifactMode {
-    /// Build target-specific artifacts like executable-zips and msi installers
+    /// Build target-specific artifacts like executable-zips and MSIs
     Local,
     /// Build unique artifacts like curl-sh installers and npm packages
     Global,
@@ -245,8 +245,6 @@ pub struct InitArgs {
 pub enum GenerateMode {
     /// Generate CI scripts for orchestrating cargo-dist
     Ci,
-    /// Generate .wxs tempaltes for msi installers
-    Msi,
 }
 
 impl GenerateMode {
@@ -254,7 +252,6 @@ impl GenerateMode {
     pub fn to_lib(self) -> cargo_dist::config::GenerateMode {
         match self {
             GenerateMode::Ci => cargo_dist::config::GenerateMode::Ci,
-            GenerateMode::Msi => cargo_dist::config::GenerateMode::Msi,
         }
     }
 }
@@ -308,8 +305,6 @@ pub enum InstallerStyle {
     Npm,
     /// Generates a Homebrew formula
     Homebrew,
-    /// Generates an msi for each windows platform
-    Msi,
 }
 
 impl InstallerStyle {
@@ -320,7 +315,6 @@ impl InstallerStyle {
             InstallerStyle::Powershell => cargo_dist::config::InstallerStyle::Powershell,
             InstallerStyle::Npm => cargo_dist::config::InstallerStyle::Npm,
             InstallerStyle::Homebrew => cargo_dist::config::InstallerStyle::Homebrew,
-            InstallerStyle::Msi => cargo_dist::config::InstallerStyle::Msi,
         }
     }
 }
diff --git a/cargo-dist/src/config.rs b/cargo-dist/src/config.rs
index d14c827c..5fbfbbe3 100644
--- a/cargo-dist/src/config.rs
+++ b/cargo-dist/src/config.rs
@@ -358,7 +358,7 @@ impl DistMetadata {
         if create_release.is_some() {
             warn!("package.metadata.dist.create-release is set, but this is only accepted in workspace.metadata (value is being ignored): {}", package_manifest_path);
         }
-        // Arguably should be package-local for things like msi installers, but doesn't make sense for CI,
+        // Arguably should be package-local for things like MSIs, but doesn't make sense for CI,
         // so let's not support that yet for its complexity!
         if allow_dirty.is_some() {
             warn!("package.metadata.dist.allow-dirty is set, but this is only accepted in workspace.metadata (value is being ignored): {}", package_manifest_path);
@@ -449,7 +449,7 @@ pub struct Config {
 /// How we should select the artifacts to build
 #[derive(Clone, Copy, Debug)]
 pub enum ArtifactMode {
-    /// Build target-specific artifacts like executable-zips, symbols, msi installers
+    /// Build target-specific artifacts like executable-zips, symbols, MSIs...
     Local,
     /// Build globally unique artifacts like curl-sh installers, npm packages, metadata...
     Global,
@@ -491,9 +491,6 @@ pub enum InstallerStyle {
     /// Generate a Homebrew formula that fetches from [`crate::tasks::DistGraph::artifact_download_url`][]
     #[serde(rename = "homebrew")]
     Homebrew,
-    /// Generate an msi installer that embeds the binary
-    #[serde(rename = "msi")]
-    Msi,
 }
 
 impl std::fmt::Display for InstallerStyle {
@@ -503,7 +500,6 @@ impl std::fmt::Display for InstallerStyle {
             InstallerStyle::Powershell => "powershell",
             InstallerStyle::Npm => "npm",
             InstallerStyle::Homebrew => "homebrew",
-            InstallerStyle::Msi => "msi",
         };
         string.fmt(f)
     }
@@ -533,8 +529,6 @@ pub enum ZipStyle {
     Zip,
     /// `.tar.<compression>`
     Tar(CompressionImpl),
-    /// Don't bundle/compress this, it's just a temp dir
-    TempDir,
 }
 
 /// Compression impls (used by [`ZipStyle::Tar`][])
@@ -551,7 +545,6 @@ impl ZipStyle {
     /// Get the extension used for this kind of zip
     pub fn ext(&self) -> &'static str {
         match self {
-            ZipStyle::TempDir => "",
             ZipStyle::Zip => ".zip",
             ZipStyle::Tar(compression) => match compression {
                 CompressionImpl::Gzip => ".tar.gz",
@@ -759,16 +752,12 @@ pub enum GenerateMode {
     /// Generate CI scripts for orchestrating cargo-dist
     #[serde(rename = "ci")]
     Ci,
-    /// Generate wsx (WiX) templates for msi installers
-    #[serde(rename = "msi")]
-    Msi,
 }
 
 impl std::fmt::Display for GenerateMode {
     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
         match self {
             GenerateMode::Ci => "ci".fmt(f),
-            GenerateMode::Msi => "msi".fmt(f),
         }
     }
 }
@@ -837,34 +826,15 @@ pub fn get_project() -> Result<axoproject::WorkspaceInfo> {
 }
 
 /// Load a Cargo.toml into toml-edit form
-pub fn load_cargo_toml(manifest_path: &Utf8Path) -> DistResult<toml_edit::Document> {
+pub fn load_cargo_toml(manifest_path: &Utf8Path) -> Result<toml_edit::Document> {
     let src = axoasset::SourceFile::load_local(manifest_path)?;
     let toml = src.deserialize_toml_edit()?;
     Ok(toml)
 }
 
 /// Save a Cargo.toml from toml-edit form
-pub fn save_cargo_toml(manifest_path: &Utf8Path, toml: toml_edit::Document) -> DistResult<()> {
+pub fn save_cargo_toml(manifest_path: &Utf8Path, toml: toml_edit::Document) -> Result<()> {
     let toml_text = toml.to_string();
     axoasset::LocalAsset::write_new(&toml_text, manifest_path)?;
     Ok(())
 }
-
-/// Get the `[workspace.metadata]` or `[package.metadata]` (based on `is_workspace`)
-pub fn get_toml_metadata(
-    toml: &mut toml_edit::Document,
-    is_workspace: bool,
-) -> &mut toml_edit::Item {
-    // Walk down/prepare the components...
-    let root_key = if is_workspace { "workspace" } else { "package" };
-    let workspace = toml[root_key].or_insert(toml_edit::table());
-    if let Some(t) = workspace.as_table_mut() {
-        t.set_implicit(true)
-    }
-    let metadata = workspace["metadata"].or_insert(toml_edit::table());
-    if let Some(t) = metadata.as_table_mut() {
-        t.set_implicit(true)
-    }
-
-    metadata
-}
diff --git a/cargo-dist/src/errors.rs b/cargo-dist/src/errors.rs
index 394f740b..05035cb2 100644
--- a/cargo-dist/src/errors.rs
+++ b/cargo-dist/src/errors.rs
@@ -43,26 +43,6 @@ pub enum DistError {
         details: minijinja::Error,
     },
 
-    /// Error from (cargo-)wix
-    #[error("WiX returned an error while building {msi}")]
-    Wix {
-        /// The msi we were trying to build
-        msi: String,
-        /// The underyling wix error
-        #[source]
-        details: wix::Error,
-    },
-
-    /// Error from (cargo-)wix init
-    #[error("Couldn't generate main.wxs for {package}'s msi installer")]
-    WixInit {
-        /// The package
-        package: String,
-        /// The underlying wix error
-        #[source]
-        details: wix::Error,
-    },
-
     /// Error parsing metadata in Cargo.toml (json because it's from cargo-metadata)
     #[error("Malformed metadata.dist in {manifest_path}")]
     CargoTomlParse {
@@ -134,7 +114,7 @@ pub enum DistError {
 
     /// Use explicitly requested workspace builds, but had packages with custom feature settings
     #[error("precise-builds = false was set, but some packages have custom build features, making it impossible")]
-    #[diagnostic(help("these packages customized either features, no-default-features, or all-features: {packages:?}"))]
+    #[help("these packages customized either features, no-default-features, or all-features: {packages:?}")]
     PreciseImpossible {
         /// names of problem packages
         packages: Vec<String>,
@@ -179,6 +159,7 @@ pub enum DistError {
         #[source]
         details: semver::Error,
     },
+
     /// Not an error; indicates that a file's contents differ via --check
     #[error("{}:{line_number} has out of date contents and needs to be regenerated:\n-{existing_line}\n+{new_line}", file.origin_path())]
     #[diagnostic(help("run 'cargo dist init' to update the file or set 'allow-dirty' in Cargo.toml to ignore out of date contents"))]
@@ -202,33 +183,6 @@ pub enum DistError {
         /// The problematic mode
         generate_mode: crate::config::GenerateMode,
     },
-    /// msi with too many packages
-    #[error("{artifact_name} depends on multiple packages, which isn't yet supported")]
-    #[diagnostic(help("depends on {spec1} and {spec2}"))]
-    MultiPackageMsi {
-        /// Name of the msi
-        artifact_name: String,
-        /// One of the pacakges
-        spec1: String,
-        /// A different package
-        spec2: String,
-    },
-    /// msi with too few packages
-    #[error("{artifact_name} has no binaries")]
-    #[diagnostic(help("This should be impossible, you did nothing wrong, please file an issue!"))]
-    NoPackageMsi {
-        /// Name of the msi
-        artifact_name: String,
-    },
-    /// These GUIDs for msi's are required and enforced by `cargo dist generate --check`
-    #[error("missing WiX GUIDs in {manifest_path}: {keys:?}")]
-    #[diagnostic(help("run 'cargo dist init' to generate them"))]
-    MissingWixGuids {
-        /// The Cargo.toml missing them
-        manifest_path: Utf8PathBuf,
-        /// The missing keys
-        keys: &'static [&'static str],
-    },
 }
 
 impl From<minijinja::Error> for DistError {
diff --git a/cargo-dist/src/init.rs b/cargo-dist/src/init.rs
index d8b41ed2..c8eb8ddb 100644
--- a/cargo-dist/src/init.rs
+++ b/cargo-dist/src/init.rs
@@ -79,39 +79,26 @@ pub fn do_init(cfg: &Config, args: &InitArgs) -> Result<()> {
     };
 
     if let Some(meta) = &multi_meta.workspace {
-        let metadata = config::get_toml_metadata(&mut workspace_toml, true);
-        apply_dist_to_metadata(metadata, meta);
+        update_toml_metadata(&mut workspace_toml, meta, true);
     }
 
     // Save the workspace toml (potentially an effective no-op if we made no edits)
-    config::save_cargo_toml(&workspace.manifest_path, workspace_toml)?;
     eprintln!("{check} added [workspace.metadata.dist] to your root Cargo.toml");
     eprintln!();
+    config::save_cargo_toml(&workspace.manifest_path, workspace_toml)?;
 
     // Now that we've done the stuff that's definitely part of the root Cargo.toml,
-    // Optionally apply updates to packages
-    for (_idx, package) in workspace.packages() {
-        // Gather up all the things we'd like to be written to this file
-        let meta = multi_meta.packages.get(&package.name);
-        let needs_edit = meta.is_some();
-
-        if needs_edit {
-            // Ok we have changes to make, let's load the toml
-            let mut package_toml = config::load_cargo_toml(&package.manifest_path)?;
-            let metadata = config::get_toml_metadata(&mut package_toml, false);
-
-            // Apply [package.metadata.dist]
-            if let Some(meta) = meta {
-                apply_dist_to_metadata(metadata, meta);
-                eprintln!(
-                    "{check} added [package.metadata.dist] to {}'s Cargo.toml",
-                    package.name
-                );
+    // Optionally apply updates to packages (currently only applies with --with-json-config)
+    for (package_name, meta) in &multi_meta.packages {
+        for (_idx, package) in workspace.packages() {
+            if &package.name == package_name {
+                let mut package_toml = config::load_cargo_toml(&package.manifest_path)?;
+                update_toml_metadata(&mut package_toml, meta, false);
+                eprintln!("{check} added [package.metadata.dist] to {package_name}'s Cargo.toml");
+                eprintln!();
+                config::save_cargo_toml(&package.manifest_path, package_toml)?;
+                break;
             }
-
-            // Save the result
-            eprintln!();
-            config::save_cargo_toml(&package.manifest_path, package_toml)?;
         }
     }
 
@@ -441,7 +428,7 @@ fn get_new_dist_metadata(
     }
 
     // Enable installer backends (if they have a CI backend that can provide URLs)
-    // FIXME: "vendored" installers like msi could be enabled without any CI...
+    // In the future, "vendored" installers like MSIs could be enabled in this situation!
     let has_ci = meta.ci.as_ref().map(|ci| !ci.is_empty()).unwrap_or(false);
     if has_ci {
         let known = &[
@@ -449,7 +436,6 @@ fn get_new_dist_metadata(
             InstallerStyle::Powershell,
             InstallerStyle::Npm,
             InstallerStyle::Homebrew,
-            InstallerStyle::Msi,
         ];
         let mut defaults = vec![];
         let mut keys = vec![];
@@ -473,7 +459,6 @@ fn get_new_dist_metadata(
                 InstallerStyle::Powershell => "powershell",
                 InstallerStyle::Npm => "npm",
                 InstallerStyle::Homebrew => "homebrew",
-                InstallerStyle::Msi => "msi",
             });
         }
 
@@ -645,8 +630,21 @@ fn get_new_dist_metadata(
     Ok(meta)
 }
 
-/// Ensure [*.metadata.dist] has the given values
-fn apply_dist_to_metadata(metadata: &mut toml_edit::Item, meta: &DistMetadata) {
+fn update_toml_metadata(
+    workspace_toml: &mut toml_edit::Document,
+    meta: &DistMetadata,
+    is_workspace: bool,
+) {
+    // Walk down/prepare the components...
+    let root_key = if is_workspace { "workspace" } else { "package" };
+    let workspace = workspace_toml[root_key].or_insert(toml_edit::table());
+    if let Some(t) = workspace.as_table_mut() {
+        t.set_implicit(true)
+    }
+    let metadata = workspace["metadata"].or_insert(toml_edit::table());
+    if let Some(t) = metadata.as_table_mut() {
+        t.set_implicit(true)
+    }
     let dist_metadata = &mut metadata[METADATA_DIST];
 
     // If there's no table, make one
diff --git a/cargo-dist/src/lib.rs b/cargo-dist/src/lib.rs
index 1f4e5e3f..88bf718c 100644
--- a/cargo-dist/src/lib.rs
+++ b/cargo-dist/src/lib.rs
@@ -59,18 +59,20 @@ pub fn do_build(cfg: &Config) -> Result<DistManifest> {
         LocalAsset::create_dir_all(&dist.dist_dir)?;
     }
 
-    eprintln!("building artifacts:");
     for artifact in &dist.artifacts {
-        eprintln!("  {}", artifact.id);
+        eprintln!("bundling {}", artifact.id);
         init_artifact_dir(&dist, artifact)?;
     }
-    eprintln!();
 
     // Run all the build steps
     for step in &dist.build_steps {
         run_build_step(&dist, step)?;
     }
 
+    for artifact in &dist.artifacts {
+        eprintln!("bundled: {}", artifact.file_path);
+    }
+
     Ok(build_manifest(cfg, &dist))
 }
 
@@ -249,11 +251,6 @@ fn manifest_artifact(
             description = Some(info.desc.clone());
             kind = cargo_dist_schema::ArtifactKind::Installer;
         }
-        ArtifactKind::Installer(InstallerImpl::Msi(..)) => {
-            install_hint = None;
-            description = Some("install via msi".to_owned());
-            kind = cargo_dist_schema::ArtifactKind::Installer;
-        }
         ArtifactKind::Checksum(_) => {
             install_hint = None;
             description = None;
@@ -319,7 +316,6 @@ fn generate_and_write_checksum(
 
 /// Generate a checksum for the src_path and return it as a string
 fn generate_checksum(checksum: &ChecksumStyle, src_path: &Utf8Path) -> DistResult<String> {
-    info!("generating {checksum:?} for {src_path}");
     use sha2::Digest;
     use std::fmt::Write;
 
@@ -567,9 +563,6 @@ fn zip_dir(
         ZipStyle::Tar(CompressionImpl::Zstd) => {
             LocalAsset::tar_zstd_dir(src_path, dest_path, with_root)?
         }
-        ZipStyle::TempDir => {
-            // no-op
-        }
     }
     Ok(())
 }
@@ -626,7 +619,12 @@ pub fn run_generate(dist: &DistGraph, args: &GenerateArgs) -> Result<()> {
     // Otherwise, choose any modes that are appropriate
     let inferred = args.modes.is_empty();
     let modes = if inferred {
-        &[GenerateMode::Ci, GenerateMode::Msi]
+        let mut m = vec![];
+        // CI is the only thing to infer at the moment
+        if !&dist.ci_style.is_empty() {
+            m.push(GenerateMode::Ci)
+        }
+        m
     } else {
         // Check that we're not being told to do a contradiction
         for &mode in &args.modes {
@@ -638,15 +636,14 @@ pub fn run_generate(dist: &DistGraph, args: &GenerateArgs) -> Result<()> {
                 })?;
             }
         }
-        &args.modes[..]
+        args.modes.to_owned()
     };
 
     // generate everything we need to
-    // HEY! if you're adding a case to this, add it to the inferred list above!
-    for &mode in modes {
-        if dist.allow_dirty.should_run(mode) {
-            match mode {
-                GenerateMode::Ci => {
+    for mode in modes {
+        match mode {
+            GenerateMode::Ci => {
+                if dist.allow_dirty.should_run(mode) {
                     // If you add a CI backend, call it here
                     let CiInfo { github } = &dist.ci;
                     if let Some(github) = github {
@@ -657,17 +654,6 @@ pub fn run_generate(dist: &DistGraph, args: &GenerateArgs) -> Result<()> {
                         }
                     }
                 }
-                GenerateMode::Msi => {
-                    for artifact in &dist.artifacts {
-                        if let ArtifactKind::Installer(InstallerImpl::Msi(msi)) = &artifact.kind {
-                            if args.check {
-                                msi.check_config()?;
-                            } else {
-                                msi.write_config_to_disk()?;
-                            }
-                        }
-                    }
-                }
             }
         }
     }
@@ -715,7 +701,6 @@ fn generate_installer(dist: &DistGraph, style: &InstallerImpl) -> Result<()> {
         InstallerImpl::Homebrew(info) => {
             installer::homebrew::write_homebrew_formula(&dist.templates, dist, info)?
         }
-        InstallerImpl::Msi(info) => info.build()?,
     }
     Ok(())
 }
diff --git a/cargo-dist/src/main.rs b/cargo-dist/src/main.rs
index 16aba48d..ee762c05 100644
--- a/cargo-dist/src/main.rs
+++ b/cargo-dist/src/main.rs
@@ -292,10 +292,10 @@ fn print_help_markdown(out: &mut dyn Write) -> std::io::Result<()> {
     let mut fake_cli = FakeCli::command().term_width(0);
     let full_command = fake_cli.get_subcommands_mut().next().unwrap();
     full_command.build();
-    let mut work_stack = vec![full_command];
+    let mut todo = vec![full_command];
     let mut is_full_command = true;
 
-    while let Some(command) = work_stack.pop() {
+    while let Some(command) = todo.pop() {
         let mut help_buf = Vec::new();
         command.write_long_help(&mut help_buf)?;
         let help = String::from_utf8(help_buf).unwrap();
@@ -406,11 +406,11 @@ fn print_help_markdown(out: &mut dyn Write) -> std::io::Result<()> {
         }
         writeln!(out)?;
 
-        // The work_stack is necessarily processed in reverse-order, so append
+        // The todo list is a stack, and processed in reverse-order, append
         // these commands to the end in reverse-order so the first command is
         // processed first (i.e. at the end of the list).
         if subcommand_name != "help" {
-            work_stack.extend(
+            todo.extend(
                 command
                     .get_subcommands_mut()
                     .filter(|cmd| !cmd.is_hide_set())
diff --git a/cargo-dist/src/tasks.rs b/cargo-dist/src/tasks.rs
index a7ec4051..d0dda7fd 100644
--- a/cargo-dist/src/tasks.rs
+++ b/cargo-dist/src/tasks.rs
@@ -66,8 +66,8 @@ use crate::config::DirtyMode;
 use crate::{
     backend::{
         installer::{
-            homebrew::HomebrewInstallerInfo, msi::MsiInstallerInfo, npm::NpmInstallerInfo,
-            ExecutableZipFragment, InstallerImpl, InstallerInfo,
+            homebrew::HomebrewInstallerInfo, npm::NpmInstallerInfo, ExecutableZipFragment,
+            InstallerImpl, InstallerInfo,
         },
         templates::Templates,
     },
@@ -250,8 +250,6 @@ pub struct Binary {
     pub pkg_spec: String,
     /// The name of the binary (as defined by the Cargo.toml)
     pub name: String,
-    /// The filename the binary will have
-    pub file_name: String,
     /// The target triple to build it for
     pub target: TargetTriple,
     /// The artifact for this Binary's symbols
@@ -265,7 +263,6 @@ pub struct Binary {
     pub copy_symbols_to: Vec<Utf8PathBuf>,
     /// feature flags!
     pub features: CargoTargetFeatures,
-    pkg_idx: PackageIdx,
 }
 
 /// A build step we would like to perform
@@ -865,36 +862,28 @@ impl<'pkg_graph> DistGraphBuilder<'pkg_graph> {
             let pkg_spec = package.name.clone();
             let id = format!("{binary_name}-v{version}-{target}");
 
+            let features = CargoTargetFeatures {
+                default_features: package_metadata.default_features.unwrap_or(true),
+                features: if let Some(true) = package_metadata.all_features {
+                    CargoTargetFeatureList::All
+                } else {
+                    CargoTargetFeatureList::List(
+                        package_metadata.features.clone().unwrap_or_default(),
+                    )
+                },
+            };
+
+            // If we already are building this binary we don't need to do it again!
             let idx = if let Some(&idx) = self.binaries_by_id.get(&id) {
-                // If we already are building this binary we don't need to do it again!
                 idx
             } else {
-                // Compute the rest of the details and add the binary
-                let features = CargoTargetFeatures {
-                    default_features: package_metadata.default_features.unwrap_or(true),
-                    features: if let Some(true) = package_metadata.all_features {
-                        CargoTargetFeatureList::All
-                    } else {
-                        CargoTargetFeatureList::List(
-                            package_metadata.features.clone().unwrap_or_default(),
-                        )
-                    },
-                };
-
-                let target_is_windows = target.contains("windows");
-                let platform_exe_ext = if target_is_windows { ".exe" } else { "" };
-
-                let file_name = format!("{binary_name}{platform_exe_ext}");
-
                 info!("added binary {id}");
                 let idx = BinaryIdx(self.inner.binaries.len());
                 let binary = Binary {
                     id,
                     pkg_id,
                     pkg_spec,
-                    pkg_idx,
                     name: binary_name,
-                    file_name,
                     target: target.clone(),
                     copy_exe_to: vec![],
                     copy_symbols_to: vec![],
@@ -1003,6 +992,7 @@ impl<'pkg_graph> DistGraphBuilder<'pkg_graph> {
         } else {
             release.unix_archive
         };
+        let platform_exe_ext = if target_is_windows { ".exe" } else { "" };
 
         let artifact_dir_name = variant.id.clone();
         let artifact_dir_path = dist_dir.join(&artifact_dir_name);
@@ -1014,7 +1004,9 @@ impl<'pkg_graph> DistGraphBuilder<'pkg_graph> {
         let mut built_assets = Vec::new();
         for &binary_idx in &variant.binaries {
             let binary = self.binary(binary_idx);
-            built_assets.push((binary_idx, artifact_dir_path.join(&binary.file_name)));
+            let exe_name = &binary.name;
+            let exe_filename = format!("{exe_name}{platform_exe_ext}");
+            built_assets.push((binary_idx, artifact_dir_path.join(exe_filename)));
         }
 
         // When unpacking we currently rely on zips being flat, but --strip-prefix=1 tarballs.
@@ -1047,17 +1039,6 @@ impl<'pkg_graph> DistGraphBuilder<'pkg_graph> {
         )
     }
 
-    /// Register that `for_artifact` requires `binary_idx` to actually be built for
-    /// `for_variant`.
-    ///
-    /// `dest_path` is the file path to copy the binary to (used for Archives)
-    /// as soon as they're built.
-    ///
-    /// Note that it's important to use `dest_path`, as cargo does not guarantee that
-    /// multiple invocations will not overwrite each other's outputs. Since we always
-    /// explicitly pass --target and --profile, this is unlikely to be an issue. But if
-    /// we ever introduce the notion of "feature variants" (ReleaseVariants that differ
-    /// only in the feature flags they take), this will become a problem.
     fn require_binary(
         &mut self,
         for_artifact: ArtifactIdx,
@@ -1122,19 +1103,13 @@ impl<'pkg_graph> DistGraphBuilder<'pkg_graph> {
             .insert(binary_idx, dest_path);
     }
 
-    fn add_installer(
-        &mut self,
-        to_release: ReleaseIdx,
-        installer: &InstallerStyle,
-    ) -> DistResult<()> {
+    fn add_installer(&mut self, to_release: ReleaseIdx, installer: &InstallerStyle) {
         match installer {
             InstallerStyle::Shell => self.add_shell_installer(to_release),
             InstallerStyle::Powershell => self.add_powershell_installer(to_release),
             InstallerStyle::Npm => self.add_npm_installer(to_release),
             InstallerStyle::Homebrew => self.add_homebrew_installer(to_release),
-            InstallerStyle::Msi => self.add_msi_installer(to_release)?,
         }
-        Ok(())
     }
 
     fn add_shell_installer(&mut self, to_release: ReleaseIdx) {
@@ -1573,108 +1548,12 @@ impl<'pkg_graph> DistGraphBuilder<'pkg_graph> {
         self.add_global_artifact(to_release, installer_artifact);
     }
 
-    fn add_msi_installer(&mut self, to_release: ReleaseIdx) -> DistResult<()> {
-        if !self.local_artifacts_enabled() {
-            return Ok(());
-        }
-
-        // Clone info we need from the release to avoid borrowing across the loop
-        let release = self.release(to_release);
-        let variants = release.variants.clone();
-        let checksum = release.checksum;
-
-        // Make an msi for every windows platform
-        for variant_idx in variants {
-            let variant = self.variant(variant_idx);
-            let binaries = variant.binaries.clone();
-            let target = &variant.target;
-            if !target.contains("windows") {
-                continue;
-            }
-
-            let variant_id = &variant.id;
-            let artifact_name = format!("{variant_id}.msi");
-            let artifact_path = self.inner.dist_dir.join(&artifact_name);
-            let dir_name = format!("{variant_id}_msi");
-            let dir_path = self.inner.dist_dir.join(&dir_name);
-
-            // Compute which package we're actually building, based on the binaries
-            let mut package_info: Option<(String, PackageIdx)> = None;
-            for &binary_idx in &binaries {
-                let binary = self.binary(binary_idx);
-                if let Some((existing_spec, _)) = &package_info {
-                    // cargo-wix doesn't clearly support multi-package, so bail
-                    if existing_spec != &binary.pkg_spec {
-                        return Err(DistError::MultiPackageMsi {
-                            artifact_name,
-                            spec1: existing_spec.clone(),
-                            spec2: binary.pkg_spec.clone(),
-                        })?;
-                    }
-                } else {
-                    package_info = Some((binary.pkg_spec.clone(), binary.pkg_idx));
-                }
-            }
-            let Some((pkg_spec, pkg_idx)) = package_info else {
-                return Err(DistError::NoPackageMsi { artifact_name })?;
-            };
-            let manifest_path = self.workspace.package(pkg_idx).manifest_path.clone();
-            let wxs_path = manifest_path
-                .parent()
-                .expect("Cargo.toml had no parent dir!?")
-                .join("wix")
-                .join("main.wxs");
-
-            // Gather up the bundles the installer supports
-            let installer_artifact = Artifact {
-                id: artifact_name,
-                target_triples: vec![target.clone()],
-                file_path: artifact_path.clone(),
-                required_binaries: FastMap::new(),
-                archive: Some(Archive {
-                    with_root: None,
-                    dir_path: dir_path.clone(),
-                    zip_style: ZipStyle::TempDir,
-                    static_assets: vec![],
-                }),
-                checksum: None,
-                kind: ArtifactKind::Installer(InstallerImpl::Msi(MsiInstallerInfo {
-                    package_dir: dir_path.clone(),
-                    pkg_spec,
-                    target: target.clone(),
-                    file_path: artifact_path.clone(),
-                    wxs_path,
-                    manifest_path,
-                })),
-                is_global: false,
-            };
-
-            // Register the artifact to various things
-            let installer_idx = self.add_local_artifact(variant_idx, installer_artifact);
-            for binary_idx in binaries {
-                let binary = self.binary(binary_idx);
-                self.require_binary(
-                    installer_idx,
-                    variant_idx,
-                    binary_idx,
-                    dir_path.join(&binary.file_name),
-                );
-            }
-            if checksum != ChecksumStyle::False {
-                self.add_artifact_checksum(variant_idx, installer_idx, checksum);
-            }
-        }
-
-        Ok(())
-    }
-
     fn add_local_artifact(
         &mut self,
         to_variant: ReleaseVariantIdx,
         artifact: Artifact,
     ) -> ArtifactIdx {
         assert!(self.local_artifacts_enabled());
-        assert!(!artifact.is_global);
 
         let idx = ArtifactIdx(self.inner.artifacts.len());
         let ReleaseVariant {
@@ -1688,7 +1567,6 @@ impl<'pkg_graph> DistGraphBuilder<'pkg_graph> {
 
     fn add_global_artifact(&mut self, to_release: ReleaseIdx, artifact: Artifact) -> ArtifactIdx {
         assert!(self.global_artifacts_enabled());
-        assert!(artifact.is_global);
 
         let idx = ArtifactIdx(self.inner.artifacts.len());
         let Release {
@@ -1994,16 +1872,11 @@ impl<'pkg_graph> DistGraphBuilder<'pkg_graph> {
             if !global_installers.is_empty() {
                 writeln!(gh_body, "## Install {heading_suffix}\n").unwrap();
                 for (_installer, details) in global_installers {
-                    let info = match details {
-                        InstallerImpl::Shell(info)
-                        | InstallerImpl::Homebrew(HomebrewInstallerInfo { inner: info, .. })
-                        | InstallerImpl::Powershell(info)
-                        | InstallerImpl::Npm(NpmInstallerInfo { inner: info, .. }) => info,
-                        InstallerImpl::Msi(_) => {
-                            // Should be unreachable, but let's not crash over it
-                            continue;
-                        }
-                    };
+                    let (InstallerImpl::Shell(info)
+                    | InstallerImpl::Homebrew(HomebrewInstallerInfo { inner: info, .. })
+                    | InstallerImpl::Powershell(info)
+                    | InstallerImpl::Npm(NpmInstallerInfo { inner: info, .. })) = details;
+
                     writeln!(&mut gh_body, "### {}\n", info.desc).unwrap();
                     writeln!(&mut gh_body, "```sh\n{}\n```\n", info.hint).unwrap();
                 }
@@ -2260,7 +2133,7 @@ pub fn gather_work(cfg: &Config) -> Result<DistGraph> {
             }
 
             // Create the variant
-            graph.add_installer(release, installer)?;
+            graph.add_installer(release, installer);
         }
     }
 


Test patch:
diff --git a/cargo-dist/tests/gallery/dist.rs b/cargo-dist/tests/gallery/dist.rs
index c31862dd..3a483252 100644
--- a/cargo-dist/tests/gallery/dist.rs
+++ b/cargo-dist/tests/gallery/dist.rs
@@ -27,7 +27,7 @@ pub static AXOLOTLSAY: TestContextLock<Tools> = TestContextLock::new(
     &Repo {
         repo_owner: "axodotdev",
         repo_name: "axolotlsay",
-        commit_sha: "b9e3554cd0db987494ab844d676a6fd30f861741",
+        commit_sha: "6b8337fb742908e506296eab3371bb71b76283d7",
         app_name: "axolotlsay",
         bins: &["axolotlsay"],
     },
@@ -104,10 +104,9 @@ pub struct PlanResult {
     raw_json: String,
 }
 
-pub struct GenerateResult {
+pub struct GenerateCiResult {
     test_name: String,
     github_ci_path: Option<Utf8PathBuf>,
-    wxs_path: Option<Utf8PathBuf>,
 }
 
 pub struct BuildAndPlanResult {
@@ -160,16 +159,12 @@ impl<'a> TestContext<'a, Tools> {
         self.load_dist_results(test_name)
     }
     /// Run 'cargo dist generate-ci' and return paths to various files that were generated
-    pub fn cargo_dist_generate(&self, test_name: &str) -> Result<GenerateResult> {
+    pub fn cargo_dist_generate(&self, test_name: &str) -> Result<GenerateCiResult> {
         let github_ci_path = Utf8Path::new(".github/workflows/release.yml").to_owned();
-        let wxs_path = Utf8Path::new("wix/main.wxs").to_owned();
-        // Delete files if they already exist
+        // Delete ci.yml if it already exists
         if github_ci_path.exists() {
             LocalAsset::remove_file(&github_ci_path)?;
         }
-        if wxs_path.exists() {
-            LocalAsset::remove_file(&wxs_path)?;
-        }
 
         // run generate-ci
         eprintln!("running cargo dist generate...");
@@ -177,10 +172,9 @@ impl<'a> TestContext<'a, Tools> {
             .cargo_dist
             .output_checked(|cmd| cmd.arg("dist").arg("generate"))?;
 
-        Ok(GenerateResult {
+        Ok(GenerateCiResult {
             test_name: test_name.to_owned(),
             github_ci_path: github_ci_path.exists().then_some(github_ci_path),
-            wxs_path: wxs_path.exists().then_some(wxs_path),
         })
     }
 
@@ -212,20 +206,10 @@ impl<'a> TestContext<'a, Tools> {
         let new_table = new_table_src.deserialize_toml_edit()?;
 
         // Written slightly verbosely to make it easier to isolate which failed
-        let namespaces = ["workspace", "package"];
-        for namespace in namespaces {
-            let Some(new_meta) = new_table.get(namespace).and_then(|t| t.get("metadata")) else {
-                continue;
-            };
-            let old_namespace = toml[namespace].or_insert(toml_edit::table());
-            let old_meta = old_namespace["metadata"].or_insert(toml_edit::table());
-            eprintln!("{new_table}");
-            for (key, new) in new_meta.as_table().unwrap() {
-                let old = &mut old_meta[key];
-                *old = new.clone();
-            }
-        }
-
+        eprintln!("{new_table}");
+        let old = &mut toml["workspace"]["metadata"]["dist"];
+        let new = &new_table["workspace"]["metadata"]["dist"];
+        *old = new.clone();
         let toml_out = toml.to_string();
         eprintln!("writing Cargo.toml...");
         axoasset::LocalAsset::write_new(&toml_out, "Cargo.toml")?;
@@ -519,7 +503,7 @@ impl BuildAndPlanResult {
     }
 }
 
-impl GenerateResult {
+impl GenerateCiResult {
     pub fn check_all(&self) -> Result<Snapshots> {
         self.snapshot()
     }
@@ -536,8 +520,6 @@ impl GenerateResult {
             self.github_ci_path.as_deref(),
         )?;
 
-        append_snapshot_file(&mut snapshots, "main.wxs", self.wxs_path.as_deref())?;
-
         Ok(Snapshots {
             settings: snapshot_settings_with_gallery_filter(),
             name: self.test_name.to_owned(),
diff --git a/cargo-dist/tests/integration-tests.rs b/cargo-dist/tests/integration-tests.rs
index 97461e2e..e19cadbd 100644
--- a/cargo-dist/tests/integration-tests.rs
+++ b/cargo-dist/tests/integration-tests.rs
@@ -34,7 +34,7 @@ fn axolotlsay_basic() -> Result<(), miette::Report> {
         ctx.patch_cargo_toml(format!(r#"
 [workspace.metadata.dist]
 cargo-dist-version = "{dist_version}"
-installers = ["shell", "powershell", "homebrew", "npm", "msi"]
+installers = ["shell", "powershell", "homebrew", "npm"]
 tap = "axodotdev/homebrew-packages"
 publish-jobs = ["homebrew"]
 targets = ["x86_64-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-pc-windows-msvc", "aarch64-apple-darwin"]
@@ -43,10 +43,6 @@ unix-archive = ".tar.gz"
 windows-archive = ".tar.gz"
 scope = "@axodotdev"
 
-[package.metadata.wix]
-upgrade-guid = "B36177BE-EA4D-44FB-B05C-EDDABDAA95CA"
-path-guid = "BFD25009-65A4-4D1E-97F1-0030465D90D6"
-
 "#
         ))?;
 
diff --git a/cargo-dist/tests/snapshots/axolotlsay_basic.snap b/cargo-dist/tests/snapshots/axolotlsay_basic.snap
index f4536723..1da8d988 100644
--- a/cargo-dist/tests/snapshots/axolotlsay_basic.snap
+++ b/cargo-dist/tests/snapshots/axolotlsay_basic.snap
@@ -1781,7 +1781,6 @@ install(false);
   "description": "💬 a CLI for learning to distribute CLIs in rust",
   "repository": "https://github.com/axodotdev/axolotlsay",
   "license": "MIT OR Apache-2.0",
-  "author": "axo.dev",
   "bin": {
     "axolotlsay": "run.js"
   },
@@ -1822,7 +1821,7 @@ maybeInstall(true).then(run);
   "announcement_is_prerelease": false,
   "announcement_title": "Version 0.1.0",
   "announcement_changelog": "```text\n         +------------------------+\n         | the initial release!!! |\n         +------------------------+\n        /\n≽(◕ ᴗ ◕)≼\n```",
-  "announcement_github_body": "## Release Notes\n\n```text\n         +------------------------+\n         | the initial release!!! |\n         +------------------------+\n        /\n≽(◕ ᴗ ◕)≼\n```\n\n## Install axolotlsay 0.1.0\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\nirm https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-installer.ps1 | iex\n```\n\n### Install prebuilt binaries via Homebrew\n\n```sh\nbrew install axodotdev/homebrew-packages/axolotlsay\n```\n\n### Install prebuilt binaries into your npm project\n\n```sh\nnpm install axolotlsay@0.1.0\n```\n\n## Download axolotlsay 0.1.0\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [axolotlsay-aarch64-apple-darwin.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-aarch64-apple-darwin.tar.gz) | macOS Apple Silicon | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-aarch64-apple-darwin.tar.gz.sha256) |\n| [axolotlsay-x86_64-apple-darwin.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-x86_64-apple-darwin.tar.gz) | macOS Intel | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-x86_64-apple-darwin.tar.gz.sha256) |\n| [axolotlsay-x86_64-pc-windows-msvc.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-x86_64-pc-windows-msvc.tar.gz) | Windows x64 | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-x86_64-pc-windows-msvc.tar.gz.sha256) |\n| [axolotlsay-x86_64-unknown-linux-gnu.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-x86_64-unknown-linux-gnu.tar.gz) | Linux x64 | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [axolotlsay-x86_64-pc-windows-msvc.msi](https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-x86_64-pc-windows-msvc.msi) | Windows x64 | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-x86_64-pc-windows-msvc.msi.sha256) |\n\n",
+  "announcement_github_body": "## Release Notes\n\n```text\n         +------------------------+\n         | the initial release!!! |\n         +------------------------+\n        /\n≽(◕ ᴗ ◕)≼\n```\n\n## Install axolotlsay 0.1.0\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\nirm https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-installer.ps1 | iex\n```\n\n### Install prebuilt binaries via Homebrew\n\n```sh\nbrew install axodotdev/homebrew-packages/axolotlsay\n```\n\n### Install prebuilt binaries into your npm project\n\n```sh\nnpm install axolotlsay@0.1.0\n```\n\n## Download axolotlsay 0.1.0\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [axolotlsay-aarch64-apple-darwin.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-aarch64-apple-darwin.tar.gz) | macOS Apple Silicon | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-aarch64-apple-darwin.tar.gz.sha256) |\n| [axolotlsay-x86_64-apple-darwin.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-x86_64-apple-darwin.tar.gz) | macOS Intel | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-x86_64-apple-darwin.tar.gz.sha256) |\n| [axolotlsay-x86_64-pc-windows-msvc.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-x86_64-pc-windows-msvc.tar.gz) | Windows x64 | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-x86_64-pc-windows-msvc.tar.gz.sha256) |\n| [axolotlsay-x86_64-unknown-linux-gnu.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-x86_64-unknown-linux-gnu.tar.gz) | Linux x64 | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.1.0/axolotlsay-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n\n",
   "system_info": {
     "cargo_version_line": "CENSORED"
   },
@@ -1841,8 +1840,6 @@ maybeInstall(true).then(run);
         "axolotlsay-x86_64-apple-darwin.tar.gz.sha256",
         "axolotlsay-x86_64-pc-windows-msvc.tar.gz",
         "axolotlsay-x86_64-pc-windows-msvc.tar.gz.sha256",
-        "axolotlsay-x86_64-pc-windows-msvc.msi",
-        "axolotlsay-x86_64-pc-windows-msvc.msi.sha256",
         "axolotlsay-x86_64-unknown-linux-gnu.tar.gz",
         "axolotlsay-x86_64-unknown-linux-gnu.tar.gz.sha256"
       ]
@@ -2017,29 +2014,6 @@ maybeInstall(true).then(run);
         "x86_64-apple-darwin"
       ]
     },
-    "axolotlsay-x86_64-pc-windows-msvc.msi": {
-      "name": "axolotlsay-x86_64-pc-windows-msvc.msi",
-      "kind": "installer",
-      "target_triples": [
-        "x86_64-pc-windows-msvc"
-      ],
-      "assets": [
-        {
-          "name": "axolotlsay",
-          "path": "axolotlsay.exe",
-          "kind": "executable"
-        }
-      ],
-      "description": "install via msi",
-      "checksum": "axolotlsay-x86_64-pc-windows-msvc.msi.sha256"
-    },
-    "axolotlsay-x86_64-pc-windows-msvc.msi.sha256": {
-      "name": "axolotlsay-x86_64-pc-windows-msvc.msi.sha256",
-      "kind": "checksum",
-      "target_triples": [
-        "x86_64-pc-windows-msvc"
-      ]
-    },
     "axolotlsay-x86_64-pc-windows-msvc.tar.gz": {
       "name": "axolotlsay-x86_64-pc-windows-msvc.tar.gz",
       "kind": "executable-zip",
@@ -2393,234 +2367,4 @@ jobs:
           prerelease: ${{ fromJson(needs.plan.outputs.val).announcement_is_prerelease }}
           artifacts: "artifacts/*"
 
-================ main.wxs ================
-<?xml version='1.0' encoding='windows-1252'?>
-<!--
-  Copyright (C) 2017 Christopher R. Field.
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-
-<!--
-  The "cargo wix" subcommand provides a variety of predefined variables available
-  for customization of this template. The values for each variable are set at
-  installer creation time. The following variables are available:
-
-  TargetTriple      = The rustc target triple name.
-  TargetEnv         = The rustc target environment. This is typically either
-                      "msvc" or "gnu" depending on the toolchain downloaded and
-                      installed.
-  TargetVendor      = The rustc target vendor. This is typically "pc", but Rust
-                      does support other vendors, like "uwp".
-  CargoTargetBinDir = The complete path to the directory containing the
-                      binaries (exes) to include. The default would be
-                      "target\release\". If an explicit rustc target triple is
-                      used, i.e. cross-compiling, then the default path would
-                      be "target\<CARGO_TARGET>\<CARGO_PROFILE>",
-                      where "<CARGO_TARGET>" is replaced with the "CargoTarget"
-                      variable value and "<CARGO_PROFILE>" is replaced with the
-                      value from the "CargoProfile" variable. This can also
-                      be overriden manually with tne "target-bin-dir" flag.
-  CargoTargetDir    = The path to the directory for the build artifacts, i.e.
-                      "target".
-  CargoProfile      = The cargo profile used to build the binaries
-                      (usually "debug" or "release").
-  Version           = The version for the installer. The default is the
-                      "Major.Minor.Fix" semantic versioning number of the Rust
-                      package.
--->
-
-<!--
-  Please do not remove these pre-processor If-Else blocks. These are used with
-  the `cargo wix` subcommand to automatically determine the installation
-  destination for 32-bit versus 64-bit installers. Removal of these lines will
-  cause installation errors.
--->
-<?if $(sys.BUILDARCH) = x64 or $(sys.BUILDARCH) = arm64 ?>
-    <?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
-<?else ?>
-    <?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
-<?endif ?>
-
-<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
-
-    <Product
-        Id='*'
-        Name='axolotlsay'
-        UpgradeCode='B36177BE-EA4D-44FB-B05C-EDDABDAA95CA'
-        Manufacturer='axo.dev'
-        Language='1033'
-        Codepage='1252'
-        Version='$(var.Version)'>
-
-        <Package Id='*'
-            Keywords='Installer'
-            Description='💬 a CLI for learning to distribute CLIs in rust'
-            Manufacturer='axo.dev'
-            InstallerVersion='450'
-            Languages='1033'
-            Compressed='yes'
-            InstallScope='perMachine'
-            SummaryCodepage='1252'
-            />
-
-        <MajorUpgrade
-            Schedule='afterInstallInitialize'
-            DowngradeErrorMessage='A newer version of [ProductName] is already installed. Setup will now exit.'/>
-
-        <Media Id='1' Cabinet='media1.cab' EmbedCab='yes' DiskPrompt='CD-ROM #1'/>
-        <Property Id='DiskPrompt' Value='axolotlsay Installation'/>
-
-        <Directory Id='TARGETDIR' Name='SourceDir'>
-            <Directory Id='$(var.PlatformProgramFilesFolder)' Name='PFiles'>
-                <Directory Id='APPLICATIONFOLDER' Name='axolotlsay'>
-                    
-                    <!--
-                      Enabling the license sidecar file in the installer is a four step process:
-
-                      1. Uncomment the `Component` tag and its contents.
-                      2. Change the value for the `Source` attribute in the `File` tag to a path
-                         to the file that should be included as the license sidecar file. The path
-                         can, and probably should be, relative to this file.
-                      3. Change the value for the `Name` attribute in the `File` tag to the
-                         desired name for the file when it is installed alongside the `bin` folder
-                         in the installation directory. This can be omitted if the desired name is
-                         the same as the file name.
-                      4. Uncomment the `ComponentRef` tag with the Id attribute value of "License"
-                         further down in this file.
-                    -->
-                    <!--
-                    <Component Id='License' Guid='*'>
-                        <File Id='LicenseFile' Name='ChangeMe' DiskId='1' Source='C:\Path\To\File' KeyPath='yes'/>
-                    </Component>
-                    -->
-
-                    <Directory Id='Bin' Name='bin'>
-                        <Component Id='Path' Guid='BFD25009-65A4-4D1E-97F1-0030465D90D6' KeyPath='yes'>
-                            <Environment
-                                Id='PATH'
-                                Name='PATH'
-                                Value='[Bin]'
-                                Permanent='no'
-                                Part='last'
-                                Action='set'
-                                System='yes'/>
-                        </Component>
-                        <Component Id='binary0' Guid='*'>
-                            <File
-                                Id='exe0'
-                                Name='axolotlsay.exe'
-                                DiskId='1'
-                                Source='$(var.CargoTargetBinDir)\axolotlsay.exe'
-                                KeyPath='yes'/>
-                        </Component>
-                    </Directory>
-                </Directory>
-            </Directory>
-        </Directory>
-
-        <Feature
-            Id='Binaries'
-            Title='Application'
-            Description='Installs all binaries and the license.'
-            Level='1'
-            ConfigurableDirectory='APPLICATIONFOLDER'
-            AllowAdvertise='no'
-            Display='expand'
-            Absent='disallow'>
-            
-            <!--
-              Uncomment the following `ComponentRef` tag to add the license
-              sidecar file to the installer.
-            -->
-            <!--<ComponentRef Id='License'/>-->
-
-            <ComponentRef Id='binary0'/>
-
-            <Feature
-                Id='Environment'
-                Title='PATH Environment Variable'
-                Description='Add the install location of the [ProductName] executable to the PATH system environment variable. This allows the [ProductName] executable to be called from any location.'
-                Level='1'
-                Absent='allow'>
-                <ComponentRef Id='Path'/>
-            </Feature>
-        </Feature>
-
-        <SetProperty Id='ARPINSTALLLOCATION' Value='[APPLICATIONFOLDER]' After='CostFinalize'/>
-
-        
-        <!--
-          Uncomment the following `Icon` and `Property` tags to change the product icon.
-
-          The product icon is the graphic that appears in the Add/Remove
-          Programs control panel for the application.
-        -->
-        <!--<Icon Id='ProductICO' SourceFile='wix\Product.ico'/>-->
-        <!--<Property Id='ARPPRODUCTICON' Value='ProductICO' />-->
-
-        <Property Id='ARPHELPLINK' Value='https://github.com/axodotdev/axolotlsay'/>
-        
-        <UI>
-            <UIRef Id='WixUI_FeatureTree'/>
-            
-            <!--
-              Enabling the EULA dialog in the installer is a three step process:
-
-                1. Comment out or remove the two `Publish` tags that follow the
-                   `WixVariable` tag.
-                2. Uncomment the `<WixVariable Id='WixUILicenseRtf' Value='Path\to\Eula.rft'>` tag futher down
-                3. Replace the `Value` attribute of the `WixVariable` tag with
-                   the path to a RTF file that will be used as the EULA and
-                   displayed in the license agreement dialog.
-            -->
-            <Publish Dialog='WelcomeDlg' Control='Next' Event='NewDialog' Value='CustomizeDlg' Order='99'>1</Publish>
-            <Publish Dialog='CustomizeDlg' Control='Back' Event='NewDialog' Value='WelcomeDlg' Order='99'>1</Publish>
-
-        </UI>
-
-        
-        <!--
-          Enabling the EULA dialog in the installer requires uncommenting
-          the following `WixUILicenseRTF` tag and changing the `Value`
-          attribute.
-        -->
-        <!-- <WixVariable Id='WixUILicenseRtf' Value='Relative\Path\to\Eula.rtf'/> -->
-
-        
-        <!--
-          Uncomment the next `WixVariable` tag to customize the installer's
-          Graphical User Interface (GUI) and add a custom banner image across
-          the top of each screen. See the WiX Toolset documentation for details
-          about customization.
-
-          The banner BMP dimensions are 493 x 58 pixels.
-        -->
-        <!--<WixVariable Id='WixUIBannerBmp' Value='wix\Banner.bmp'/>-->
-
-        
-        <!--
-          Uncomment the next `WixVariable` tag to customize the installer's
-          Graphical User Interface (GUI) and add a custom image to the first
-          dialog, or screen. See the WiX Toolset documentation for details about
-          customization.
-
-          The dialog BMP dimensions are 493 x 312 pixels.
-        -->
-        <!--<WixVariable Id='WixUIDialogBmp' Value='wix\Dialog.bmp'/>-->
-
-    </Product>
-
-</Wix>
-
 
diff --git a/cargo-dist/tests/snapshots/axolotlsay_edit_existing.snap b/cargo-dist/tests/snapshots/axolotlsay_edit_existing.snap
index 31647c49..a0f3af56 100644
--- a/cargo-dist/tests/snapshots/axolotlsay_edit_existing.snap
+++ b/cargo-dist/tests/snapshots/axolotlsay_edit_existing.snap
@@ -1781,7 +1781,6 @@ install(false);
   "description": "💬 a CLI for learning to distribute CLIs in rust",
   "repository": "https://github.com/axodotdev/axolotlsay",
   "license": "MIT OR Apache-2.0",
-  "author": "axo.dev",
   "bin": {
     "axolotlsay": "run.js"
   },
diff --git a/cargo-dist/tests/snapshots/axolotlsay_no_homebrew_publish.snap b/cargo-dist/tests/snapshots/axolotlsay_no_homebrew_publish.snap
index b5df6e90..d86d4008 100644
--- a/cargo-dist/tests/snapshots/axolotlsay_no_homebrew_publish.snap
+++ b/cargo-dist/tests/snapshots/axolotlsay_no_homebrew_publish.snap
@@ -1781,7 +1781,6 @@ install(false);
   "description": "💬 a CLI for learning to distribute CLIs in rust",
   "repository": "https://github.com/axodotdev/axolotlsay",
   "license": "MIT OR Apache-2.0",
-  "author": "axo.dev",
   "bin": {
     "axolotlsay": "run.js"
   },
diff --git a/cargo-dist/tests/snapshots/long-help.snap b/cargo-dist/tests/snapshots/long-help.snap
index 444e4bcd..0e9df482 100644
--- a/cargo-dist/tests/snapshots/long-help.snap
+++ b/cargo-dist/tests/snapshots/long-help.snap
@@ -61,7 +61,6 @@ GLOBAL OPTIONS:
           - powershell: Generates a powershell script that fetches/installs the right build
           - npm:        Generates an npm project that fetches the right build to your node_modules
           - homebrew:   Generates a Homebrew formula
-          - msi:        Generates an msi for each windows platform
 
   -c, --ci <CI>
           CI we want to support
diff --git a/cargo-dist/tests/snapshots/markdown-help.snap b/cargo-dist/tests/snapshots/markdown-help.snap
index b4137d02..1def9c4e 100644
--- a/cargo-dist/tests/snapshots/markdown-help.snap
+++ b/cargo-dist/tests/snapshots/markdown-help.snap
@@ -63,7 +63,6 @@ Possible values:
 - powershell: Generates a powershell script that fetches/installs the right build
 - npm:        Generates an npm project that fetches the right build to your node_modules
 - homebrew:   Generates a Homebrew formula
-- msi:        Generates an msi for each windows platform
 
 #### `-c, --ci <CI>`
 CI we want to support
@@ -107,7 +106,7 @@ cargo dist build [OPTIONS]
 #### `-a, --artifacts <ARTIFACTS>`
 Which subset of the Artifacts to build
 
-Artifacts can be broken up into two major classes: "local" ones, which are made for each target system (executable-zips, symbols, msi installers...); and "global" ones, which are made once per app (curl-sh installers, npm package, metadata...).
+Artifacts can be broken up into two major classes: "local" ones, which are made for each target system (executable-zips, symbols, MSIs...); and "global" ones, which are made once per app (curl-sh installers, npm package, metadata...).
 
 Having this distinction lets us run cargo-dist independently on multiple machines without collisions between the outputs.
 
@@ -118,7 +117,7 @@ The specifics of "host" mode are intentionally unspecified to enable us to provi
 \[default: host]  
 
 Possible values:
-- local:  Build target-specific artifacts like executable-zips and msi installers
+- local:  Build target-specific artifacts like executable-zips and MSIs
 - global: Build unique artifacts like curl-sh installers and npm packages
 - host:   Fuzzily build "as much as possible" for the host system
 - all:    Build all the artifacts; useful for `cargo dist manifest`
@@ -176,8 +175,7 @@ cargo dist generate [OPTIONS] [MODE]...
 Which type of configuration to generate
 
 Possible values:
-- ci:  Generate CI scripts for orchestrating cargo-dist
-- msi: Generate .wxs tempaltes for msi installers
+- ci: Generate CI scripts for orchestrating cargo-dist
 
 ### Options
 #### `--check`
@@ -229,7 +227,7 @@ cargo dist manifest [OPTIONS]
 #### `-a, --artifacts <ARTIFACTS>`
 Which subset of the Artifacts to build
 
-Artifacts can be broken up into two major classes: "local" ones, which are made for each target system (executable-zips, symbols, msi installers...); and "global" ones, which are made once per app (curl-sh installers, npm package, metadata...).
+Artifacts can be broken up into two major classes: "local" ones, which are made for each target system (executable-zips, symbols, MSIs...); and "global" ones, which are made once per app (curl-sh installers, npm package, metadata...).
 
 Having this distinction lets us run cargo-dist independently on multiple machines without collisions between the outputs.
 
@@ -240,7 +238,7 @@ The specifics of "host" mode are intentionally unspecified to enable us to provi
 \[default: host]  
 
 Possible values:
-- local:  Build target-specific artifacts like executable-zips and msi installers
+- local:  Build target-specific artifacts like executable-zips and MSIs
 - global: Build unique artifacts like curl-sh installers and npm packages
 - host:   Fuzzily build "as much as possible" for the host system
 - all:    Build all the artifacts; useful for `cargo dist manifest`
diff --git a/cargo-dist/tests/snapshots/short-help.snap b/cargo-dist/tests/snapshots/short-help.snap
index 2525f497..162cbd61 100644
--- a/cargo-dist/tests/snapshots/short-help.snap
+++ b/cargo-dist/tests/snapshots/short-help.snap
@@ -26,7 +26,7 @@ GLOBAL OPTIONS:
   -o, --output-format <OUTPUT_FORMAT>  The format of the output [default: human] [possible values: human, json]
       --no-local-paths                 Strip local paths from output (e.g. in the dist manifest json)
   -t, --target <TARGET>                Target triples we want to build
-  -i, --installer <INSTALLER>          Installers we want to build [possible values: shell, powershell, npm, homebrew, msi]
+  -i, --installer <INSTALLER>          Installers we want to build [possible values: shell, powershell, npm, homebrew]
   -c, --ci <CI>                        CI we want to support [possible values: github]
       --tag <TAG>                      The (git) tag to use for the Announcement that each invocation of cargo-dist is performing
       --allow-dirty                    Allow generated files like CI scripts to be out of date