# Changelog

## 🤍 Unreleased

## ☀️ 0.13.1

- ### ✨ Features

  - **Requests using proxy settings from env - [jjyr], [pull/1438]**

    This enables ureq to use proxy settings from env, it solves lots of pain in network restricted environments.

    [pull/1438]: https://github.com/rustwasm/wasm-pack/pull/1438
    [jjyr]: https://github.com/jjyr

- ### 🤕 Fixes

  - **Update binary-install to v0.4.1 - [drager], [pull/1407]**

    Release v0.4.0 of binary-install introduced a regression that caused failures on some platforms. This release fixes that regression.

    [pull/1407]: https://github.com/rustwasm/wasm-pack/pull/1407
    [drager]: https://github.com/drager

  - ** Allow npm binary upgrades - [net], [pull/1439]**

    Fixes an issue where upgrading `wasm-pack` via NPM would not update the underlying binary.
    Previously, the binary was stored in the `binary-install` package's directory without versioning, causing version upgrades to silently fail as the old binary continued to be used.
    The binary is now stored in `node_modules/wasm-pack/binary/`, ensuring proper version updates when upgrading the package.

    **Before:** Upgrading from `0.12.1` to `0.13.0` would continue using the `0.12.1` binary
    **After:** Each `wasm-pack` version manages its own binary, enabling proper version upgrades

    [pull/1439]: https://github.com/rustwasm/wasm-pack/pull/1439
    [net]: https://github.com/net

- ### 🛠️ Maintenance
  - ** Remove unmaintained dependency atty in favor of stdlib - [mariusvniekerk], [pull/1436]**

    [pull/1436]: https://github.com/rustwasm/wasm-pack/pull/1436
    [mariusvniekerk]: https://github.com/mariusvniekerk

## ☀️ 0.13.0

- ### ✨ Features

  - **Add option to skip optimization with wasm-opt - [sisou], [pull/1321]**

    This feature introduces the `--no-opt` option to wasm-pack, providing a significant improvement in build efficiency for projects requiring multiple wasm-pack executions.

    [pull/1321]: https://github.com/rustwasm/wasm-pack/pull/1321
    [sisou]: https://github.com/sisou

  - **Add support geckodriver for linux-aarch64 - [EstebanBorai], [pull/1371]**

    Introduces support to download Geckodriver in Linux aarch64.

    [pull/1371]: https://github.com/rustwasm/wasm-pack/pull/1371
    [EstebanBorai]: https://github.com/EstebanBorai

  - **Add wasm-opt linux aarch64 condition - [dkristia], [issue/1392], [pull/1393]**

    A linux aarch64 build for wasm-opt exists in the newest binaryen versions.

    [issue/1392]: https://github.com/rustwasm/wasm-pack/issues/1392
    [pull/1393]: https://github.com/rustwasm/wasm-pack/pull/1393
    [dkristia]: https://github.com/dkristia

- ### 🤕 Fixes

  - **Fix passing relative paths to cargo - [dfaust], [issue/704], [issue/1156], [issue/1252], [pull/1331]**

    When building a crate located in a sub-directory, relative paths, passed as extra options to cargo (like `--target-dir`), are now handled correctly.

    [issue/704]: https://github.com/rustwasm/wasm-pack/issues/704
    [issue/1156]: https://github.com/rustwasm/wasm-pack/issues/1156
    [issue/1252]: https://github.com/rustwasm/wasm-pack/issues/1252
    [pull/1331]: https://github.com/rustwasm/wasm-pack/pull/1331
    [dfaust]: https://github.com/dfaust

  - **Rewrite wasm_target to use target-libdir - [daidoji], [issue/1342], [pull/1343]**

    Rewritten wasm_target to use target libdir from the rustc tool rather than looking through sysroot. This is to accomodate non-rustup installations.

    [issue/1342]: https://github.com/rustwasm/wasm-pack/issues/1342
    [pull/1343]: https://github.com/rustwasm/wasm-pack/pull/1343
    [daidoji]: https://github.com/daidoji

  - **Declare ES module in package.json - [gthb], [issue/1039], [pull/1061]**

    In bundler mode, generate package.json with "type": "module" and use the "main" attribute instead of the "module" attribute.

    This change makes the built ES module palatable to Node.js (when run with --experimental-vm-modules --experimental-wasm-modules),
    while it remains also palatable to webpack as illustrated in webpack/webpack#14313
    (where the pkg subfolder is generated with wasm-pack built with this change).
    This resolves the headache of using a wasm-pack-built package in a library that one needs to both run directly in Node and include in a webpack build.

    [issue/1039]: https://github.com/rustwasm/wasm-pack/issues/1039
    [pull/1061]: https://github.com/rustwasm/wasm-pack/pull/1061
    [gthb]: https://github.com/gthb

  - **Use new chromdriver endpoint and fix CI - [Myriad-Dreamin], [kade-robertson], [issue/1315], [issue/1390], [pull/1325], [pull/1391]**

    [issue/1315]: https://github.com/rustwasm/wasm-pack/issues/1315
    [issue/1390]: https://github.com/rustwasm/wasm-pack/issues/1390
    [pull/1325]: https://github.com/rustwasm/wasm-pack/pull/1325
    [pull/1391]: https://github.com/rustwasm/wasm-pack/pull/1391
    [Myriad-Dreamin]: https://github.com/Myriad-Dreamin
    [kade-robertson]: https://github.com/kade-robertson

  - **Add mingw support to npm package - [nathaniel-daniel], [issue/1354], [issue/1359], [pull/1363]**

     Fixes the NPM package's platform detection for mingw.

    [issue/1354]: https://github.com/rustwasm/wasm-pack/issues/1354
    [issue/1359]: https://github.com/rustwasm/wasm-pack/issues/1359
    [pull/1363]: https://github.com/rustwasm/wasm-pack/pull/1363
    [nathaniel-daniel]: https://github.com/nathaniel-daniel

  - **pkg-dir option for pack and publish commands - [danielronnkvist], [issue/1369], [pull/1370]**

    To be able to use these commands when the output directory option to the build command isn't the default pkg.

    [issue/1369]: https://github.com/rustwasm/wasm-pack/issues/1369
    [pull/1370]: https://github.com/rustwasm/wasm-pack/pull/1370
    [danielronnkvist]: https://github.com/danielronnkvist

  - **Optimize out-dir display - [ahaoboy], [issue/1395], [pull/1396]**

    Optimize out-dir display.

    from:

    `[INFO]: 📦 Your wasm pkg is ready to publish at /root/code/fib-wasm/fib-rs/../fib-wasm/wasm.`

    to:

    `[INFO]: 📦 Your wasm pkg is ready to publish at /root/code/fib-wasm/fib-wasm/wasm.`


    [issue/1395]: https://github.com/rustwasm/wasm-pack/issues/1395
    [pull/1396]: https://github.com/rustwasm/wasm-pack/pull/1396
    [ahaoboy]: https://github.com/ahaoboy

- ### 🛠️ Maintenance
  - **Fix error and warnings in install script - [lucashorward], [issue/1159], [issue/1217], [issue/1283], [pull/1320]**

    [issue/1159]: https://github.com/rustwasm/wasm-pack/issues/1159
    [issue/1217]: https://github.com/rustwasm/wasm-pack/issues/1217
    [issue/1283]: https://github.com/rustwasm/wasm-pack/issues/1283
    [pull/1320]: https://github.com/rustwasm/wasm-pack/pull/1320
    [lucashorward]: https://github.com/lucashorward

  - **Bump follow-redirects from 1.14.9 to 1.15.6 in /npm - [dependabot], [pull/1375]**

    [pull/1375]: https://github.com/rustwasm/wasm-pack/pull/1375

  - **Bump rustls-webpki from 0.100.1 to 0.100.2 - [dependabot], [pull/1323]**

    [pull/1341]: https://github.com/rustwasm/wasm-pack/pull/1341

  - **Bump rustix from 0.37.20 to 0.37.25 - [dependabot], [pull/1341]**

    [pull/1323]: https://github.com/rustwasm/wasm-pack/pull/1323
    [dependabot]: https://github.com/apps/dependabot

  - **Bump rustls from 0.21.9 to 0.21.11 - [dependabot], [pull/1385]**

    [pull/1385]: https://github.com/rustwasm/wasm-pack/pull/1385
    [dependabot]: https://github.com/apps/dependabot

  - **Bump tar from 6.1.11 to 6.2.1 in /npm - [dependabot], [pull/1379]**

    [pull/1379]: https://github.com/rustwasm/wasm-pack/pull/1379
    [dependabot]: https://github.com/apps/dependabot

- ### 📖 Documentation

  - **Fix typo in README - [Lionelf329], [pull/1368]**

    [pull/1268]: https://github.com/rustwasm/wasm-pack/pull/1368
    [Lionelf329]: https://github.com/Lionelf329

  - **Add a description of build --target deno - [puxiao], [pull/1344]**

    [pull/1344]: https://github.com/rustwasm/wasm-pack/pull/1344
    [puxiao]: https://github.com/puxiao

  - **Document deno in build target - [sigmaSd], [pull/1348]**

    [pull/1348]: https://github.com/rustwasm/wasm-pack/pull/1348
    [sigmaSd]: https://github.com/sigmaSd

  - **Fix local navigation backing one step too far in docs - [SamuSoft], [pull/1387]**

    [pull/1387]: https://github.com/rustwasm/wasm-pack/pull/1387
    [SamuSoft]: https://github.com/SamuSoft

  - **Add --target web to quick start build command - [josephrocca], [pull/1367]**

    [pull/1367]: https://github.com/rustwasm/wasm-pack/pull/1367
    [josephrocca]: https://github.com/josephrocca

## ☀️ 0.12.1

- ### 🤕 Fixes

  - **Restore --version command - [lynn], [issue/1301], [pull/1305]**

    The --version command got lost in space in v0.12.0. It's now brought back!

    [issue/1301]: https://github.com/rustwasm/wasm-pack/issues/1301
    [pull/1305]: https://github.com/rustwasm/wasm-pack/pull/1305
    [lynn]: https://github.com/lynn

  - **Fix value parser for Option<PathBuf> - [Myriad-Dreamin], [issue/1304], [pull/1307]**

    A value parser for OsString cannot parse a command line argument for Option<PathBuf>,
    which let it failed to specify paths for pack, publish and test commands, this faulty behavior
    was introduced in v0.12.0.

    [issue/1304]: https://github.com/rustwasm/wasm-pack/issues/1304
    [pull/1307]: https://github.com/rustwasm/wasm-pack/pull/1307
    [Myriad-Dreamin]: https://github.com/Myriad-Dreamin

## ☀️ 0.12.0

- ### ✨ Features

  - **Add --no-pack flag to build command - [hamza1311], [ashleygwilliams], [issue/691], [issue/811], [pull/695], [pull/1291]**

    When calling wasm-pack build a user can optionally pass --no-pack and wasm-pack will build your wasm, generate js, and not build a package.json.

    [issue/691]: https://github.com/rustwasm/wasm-pack/issues/691
    [issue/811]: https://github.com/rustwasm/wasm-pack/issues/811
    [pull/695]: https://github.com/rustwasm/wasm-pack/pull/695
    [pull/1291]: https://github.com/rustwasm/wasm-pack/pull/1291
    [ashleygwilliams]: https://github.com/ashleygwilliams

  - **Add wasmbindgen option: omit_default_module_path - [matthiasgeihs], [pull/1272]**

    Adds an option to call wasm-bindgen with --omit_default_module_path.

    [pull/1272]: https://github.com/rustwasm/wasm-pack/pull/1272
    [matthiasgeihs]: https://github.com/matthiasgeihs

- ### 🤕 Fixes

  - **Add HTTP header USER-AGENT - [LeviticusNelson], [issue/1266], [pull/1285]**

    We encountered some issues when we didn't send an User-Agent. This is now fixed.

    [issue/1266]: https://github.com/rustwasm/wasm-pack/issues/1266
    [pull/1285]: https://github.com/rustwasm/wasm-pack/pull/1285
    [LeviticusNelson]: https://github.com/LeviticusNelson

  - **Replace curl with ureq - [hamza1311], [issue/650], [issue/823], [issue/997], [issue/1079], [issue/1203], [issue/1234], [issue/1281], [pull/1290]**

    The HTTP client is now pure Rust. Removes the dependency of openssl which have caused a lot of issues for people using wasm-pack on various distributions.

    [issue/650]: https://github.com/rustwasm/wasm-pack/issues/650
    [issue/823]: https://github.com/rustwasm/wasm-pack/issues/823
    [issue/997]: https://github.com/rustwasm/wasm-pack/issues/997
    [issue/1079]: https://github.com/rustwasm/wasm-pack/issues/1079
    [issue/1203]: https://github.com/rustwasm/wasm-pack/issues/1203
    [issue/1234]: https://github.com/rustwasm/wasm-pack/issues/1234
    [issue/1281]: https://github.com/rustwasm/wasm-pack/issues/1281
    [pull/1290]: https://github.com/rustwasm/wasm-pack/pull/1290
    [hamza1311]: https://github.com/hamza1311

  - **Update binary-install to 0.2.0. binary-install replaced curl with ureq - [drager]**

    See [PR](https://github.com/rustwasm/binary-install/pull/24) in binary-install repo for more information.

    [drager]: https://github.com/drager

  - **Remove --always-auth from npm login - [EstebanBorai], [pull/1288]**

    npm login doesn't support --always-auth anymore, instead it is under the adduser subcommand.

    [pull/1288]: https://github.com/rustwasm/wasm-pack/pull/1288
    [EstebanBorai]: https://github.com/EstebanBorai

  - **Turn off cargo colors during log level test - [dtolnay], [pull/1294]**

    [pull/1294]: https://github.com/rustwasm/wasm-pack/pull/1294
    [dtolnay]: https://github.com/dtolnay

  - **Fix getting the target-dir in wasm_bindgen_build - [tomasol], [issue/1278], [pull/1279]**

    Fixes a wasm-pack panic if --target-dir was supplied (and arguments are not sorted).

    [issue/1278]: https://github.com/rustwasm/wasm-pack/issues/1278
    [pull/1279]: https://github.com/rustwasm/wasm-pack/pull/1279
    [tomasol]: https://github.com/tomasol

  - **Respect package.readme in Cargo.toml - [heaths], [issue/1215], [pull/1298], [pull/1216]**

    wasm-pack now respects specifying readme=false:

    ```toml
    [package]
    readme = false
    ```

    [issue/1215]: https://github.com/rustwasm/wasm-pack/issues/1215
    [pull/1298]: https://github.com/rustwasm/wasm-pack/pull/1298
    [pull/1216]: https://github.com/rustwasm/wasm-pack/pull/1216
    [heaths]: https://github.com/heaths

- ### 📖 Documentation

  - **Don't hide install options behind link - [oyamauchi], [issue/355], [pull/1242]**

    [issue/355]: https://github.com/rustwasm/wasm-pack/issues/355
    [pull/1242]: https://github.com/rustwasm/wasm-pack/issues/1242
    [oyamauchi]: https://github.com/oyamauchi

- ### 🛠️ Maintenance

  - **Bump cargo-generate version to 0.18.2 - [sassman], [issue/1245] [pull/1269]**

    [issue/1245]: https://github.com/rustwasm/wasm-pack/issues/1245
    [pull/1269]: https://github.com/rustwasm/wasm-pack/pull/1269
    [sassman]: https://github.com/sassman

  - **Replace unmaintained actions-rs/toolchain action in CI workflows - [striezel], [pull/1246]**

    Now we are using https://github.com/dtolnay/rust-toolchain instead.

    [pull/1246]: https://github.com/rustwasm/wasm-pack/pull/1246
    [striezel]: https://github.com/striezel

  - **Update several dependencies - [hamza1311], [pull/1292]**

    Updated clap, toml, predicates and serial_test to their latest versions.

    [pull/1292]: https://github.com/rustwasm/wasm-pack/pull/1292

## 🌦️ 0.11.1

- ### 🤕 Fixes

  - **Fix discovery of locally installed `wasm-opt` - [Liamolucko], [issue/1247], [pull/1257]**

    [issue/1247]: https://github.com/rustwasm/wasm-pack/issues/1247
    [pull/1257]: https://github.com/rustwasm/wasm-pack/pull/1257
    [Liamolucko]: https://github.com/Liamolucko

  - **Fix wasm-pack bin script entry - [ahippler], [issue/1248], [pull/1250]**

    [issue/1248]: https://github.com/rustwasm/wasm-pack/issues/1248
    [pull/1250]: https://github.com/rustwasm/wasm-pack/pull/1250
    [ahippler]: https://github.com/ahippler

- ### 🛠️ Maintenance

  - **bump openssl from 0.10.46 to 0.10.48 - [pull/1254]**

    [pull/1254]: https://github.com/rustwasm/wasm-pack/pull/1254

## 🌦️ 0.11.0

- ### ✨ Features

  - **Make Deno target available - [egfx-notifications], [issue/672], [issue/879], [pull/1117]**

    [issue/672]: https://github.com/rustwasm/wasm-pack/issues/672
    [issue/879]: https://github.com/rustwasm/wasm-pack/issues/879
    [pull/1117]: https://github.com/rustwasm/wasm-pack/pull/1117
    [egfx-notifications]: https://github.com/egfx-notifications

  - **Add support for more platforms to installer script - [omninonsense], [issue/1064], [issue/952], [issue/1125], [pull/1122]**

    This makes the installation script work on M1 macs, as well as inside docker (especially when combined with buildx) for aarch64/arm64 architectures.

    [issue/1064]: https://github.com/rustwasm/wasm-pack/issues/1064
    [issue/952]: https://github.com/rustwasm/wasm-pack/issues/952
    [issue/1125]: https://github.com/rustwasm/wasm-pack/issues/1125
    [pull/1122]: https://github.com/rustwasm/wasm-pack/pull/1122
    [omninonsense]: https://github.com/omninonsense

  - **Add Linux arm64 support - [nnelgxorz], [issue/1169], [pull/1170]**

    [issue/1169]: https://github.com/rustwasm/wasm-pack/issues/1169
    [pull/1170]: https://github.com/rustwasm/wasm-pack/pull/1170
    [nnelgxorz]: https://github.com/nnelgxorz

  - **Add support for workspace inheritance - [printfn], [issue/1180], [pull/1185]**

    [issue/1180]: https://github.com/rustwasm/wasm-pack/issues/1180
    [pull/1185]: https://github.com/rustwasm/wasm-pack/pull/1185

- ### 🤕 Fixes

  - **--target-dir as extra option is now considered as expected - [sassman], [issue/1076], [pull/1082]**

    [issue/1076]: https://github.com/rustwasm/wasm-pack/issues/1076
    [pull/1082]: https://github.com/rustwasm/wasm-pack/pull/1082
    [sassman]: https://github.com/sassman

  - **Pass through --weak-refs --reference-types flags to bindgen - [serprex], [issue/930], [pull/937]**

    [issue/930]: https://github.com/rustwasm/wasm-pack/issues/930
    [pull/937]: https://github.com/rustwasm/wasm-pack/pull/937
    [serprex]: https://github.com/serprex

  - **Fix binaryen URL and use updated binary-install to fix installation on macOS - [matheus23], [printfn], [pull/1188]**

    Use the updated binary-install crate (rustwasm/binary-install#21), switches from failure to anyhow to match what binary-install uses, and fixes wasm-opt installation on macOS.

    [pull/1188]: https://github.com/rustwasm/wasm-pack/pull/1188
    [matheus23]: https://github.com/matheus23
    [printfn]: https://github.com/printfn
    [rustwasm/binary-install#21]: https://github.com/rustwasm/binary-install/pull/21

  - **Mark snippets and the bundler target's main file as having side effects - [Liamolucko], [issue/972], [rustwasm/wasm-bindgen/3276], [pull/1224]**

    [issue/972]: https://github.com/rustwasm/wasm-pack/issues/972
    [rustwasm/wasm-bindgen/3276]: https://github.com/rustwasm/wasm-bindgen/issues/3276
    [pull/1224]: https://github.com/rustwasm/wasm-pack/pull/1224
    [Liamolucko]: https://github.com/Liamolucko

- ### 📖 Documentation

  - **Fix typos in non-rustup-setups.md - [dallasbrittany], [issue/1141], [pull/1142]**

    [issue/1141]: https://github.com/rustwasm/wasm-pack/issues/1141
    [pull/1142]: https://github.com/rustwasm/wasm-pack/issues/1141
    [dallasbrittany]: https://github.com/dallasbrittany

  - **Fix typos in considerations.md - [lhjt], [pull/1066]**

    [pull/1066]: https://github.com/rustwasm/wasm-pack/pull/1066
    [lhjt]: https://github.com/lhjt

  - **Grammar and typo fixes - [helixbass], [pull/1143]**

    [pull/1143]: https://github.com/rustwasm/wasm-pack/pull/1143
    [helixbass]: https://github.com/helixbass

  - **Replace two mentions of wasm-pack init with wasm-pack build in the docs - [mstange], [pull/1086]**

    [pull/1086]: https://github.com/rustwasm/wasm-pack/pull/1086
    [mstange]: https://github.com/mstange

  - **Update npm installation link - [benediktwerner], [pull/1227]**

    [pull/1227]: https://github.com/rustwasm/wasm-pack/pull/1227
    [benediktwerner]: https://github.com/benediktwerner

- ### 🛠️ Maintenance

  - **Bump wasm-opt to version 108 - [MichaelMauderer], [issue/1135] [pull/1136]**

    [pull/1136]: https://github.com/rustwasm/wasm-pack/pull/1136
    [issue/1135]: https://github.com/rustwasm/wasm-pack/issues/1135
    [MichaelMauderer]: https://github.com/MichaelMauderer

  - **Update binary-install to v1.0.1 - [EverlastingBugstopper], [pull/1130]**

    [pull/1130]: https://github.com/rustwasm/wasm-pack/pull/1130

  - **Add back run.js to npm installer - [EverlastingBugstopper], [pull/1149]**

    [pull/1149]: https://github.com/rustwasm/wasm-pack/pull/1149

  - **Fix some typos in the codebase - [striezel], [pull/1220]**

    [pull/1220]: https://github.com/rustwasm/wasm-pack/pull/1220
    [striezel]: https://github.com/striezel

  - **Update actions/checkout in GitHub Actions workflows to v3 - [striezel], [pull/1221]**

    [pull/1221]: https://github.com/rustwasm/wasm-pack/pull/1221

  - **Update actions/cache in GitHub Actions workflows to v3 - [striezel], [pull/1222]**

    [pull/1222]: https://github.com/rustwasm/wasm-pack/pull/1222

  - **Update JamesIves/github-pages-deploy-action in GHA workflow to v4.4.1 - [striezel], [pull/1223]**

    [pull/1223]: https://github.com/rustwasm/wasm-pack/pull/1223

## 🌦️ 0.10.3

- ### 🤕 Fixes

  - **Use bash to create release tarballs - [nasso], [issue/1097] [pull/1144]**

     Fixes Windows installer failure due to malformatted tar.

    [pull/1144]: https://github.com/rustwasm/wasm-pack/pull/1144
    [issue/1097]: https://github.com/rustwasm/wasm-pack/issues/1097
    [nasso]: https://github.com/nasso

  - **Clean up package.json from previous runs - [main--], [issue/1110-comment] [pull/1119]**

     Remove the package.json file from previous runs to avoid crashes.

    [pull/1119]: https://github.com/rustwasm/wasm-pack/pull/1119
    [issue/1110-comment]: https://github.com/rustwasm/wasm-pack/pull/1110#issuecomment-1059008962
    [main--]: https://github.com/main--

  - **Do not remove the pkg directory - [huntc], [issue/1099] [pull/1110]**

     A recent change ensured that the pkg directory was removed as the first step of attempting to create it.
     Unfortunately, this caused a problem for webpack when watching the pkg directory.
     Webpack was unable to recover its watching and so any watch server must be restarted,
     which is a blocker when using it. This PR and release fixes this.

    [pull/1110]: https://github.com/rustwasm/wasm-pack/pull/1110
    [issue/1099]: https://github.com/rustwasm/wasm-pack/issues/1099
    [huntc]: https://github.com/huntc

  - **Bump regex from 1.5.4 to 1.5.6 - [dependabot], [pull/1147]**

    Version 1.5.5 of the regex crate fixed a security bug in the regex compiler.

    [pull/1147]: https://github.com/rustwasm/wasm-pack/pull/1147

  - **Bump openssl-src from 111.17.0+1.1.1m to 111.20.0+1.1.1o - [dependabot], [pull/1146]**

    Bring in bug fixes from the new version of openssl-src.

    [pull/1146]: https://github.com/rustwasm/wasm-pack/pull/1146
    [dependabot]: https://github.com/apps/dependabot


## 🌦️ 0.10.2

- ### ✨ Features

  - **Implement support for RFC 8, transitive NPM dependencies - [jpgneves], [issue/606] [pull/986]**

    [pull/986]: https://github.com/rustwasm/wasm-pack/pull/986
    [issue/606]: https://github.com/rustwasm/wasm-pack/issues/606
    [jpgneves]: https://github.com/jpgneves

- ### 🤕 Fixes

  - **Add support for macos aarch64 - [d3lm], [issue/913] [pull/1088]**

     This fixes aarch64 for MacOS and will download x86_64-apple-darwin.

    [pull/1088]: https://github.com/rustwasm/wasm-pack/pull/1088
    [issue/913]: https://github.com/rustwasm/wasm-pack/issues/913
    [d3lm]: https://github.com/d3lm

  - **Add linux/arm64 to release workflow - [nacardin], [issue/1064] [pull/1065]**

    [pull/1065]: https://github.com/rustwasm/wasm-pack/pull/1065
    [issue/1064]: https://github.com/rustwasm/wasm-pack/issues/1064
    [nacardin]: https://github.com/nacardin

  - **Force axios version - [drager], [pull/1094]**

    Forces npm package `axios` to version `0.21.2` in order to get security fix for a security vulnerability present in axios
    before version `0.21.2`.

    [pull/1094]: https://github.com/rustwasm/wasm-pack/pull/1094

- ### 📖 Documentation

  - **Update docs for how to pass extra options to cargo - [FrankenApps], [issue/1059] [pull/1073]**

    [FrankenApps]: https://github.com/FrankenApps
    [pull/1073]: https://github.com/rustwasm/wasm-pack/pull/1073
    [issue/1059]: https://github.com/rustwasm/wasm-pack/issues/1059


## 🌦️ 0.10.1

- ### 🤕 Fixes

  - **Add exe to binary name if windows - [drager], [issue/1038] [pull/1055]**

    [pull/1055]: https://github.com/rustwasm/wasm-pack/pull/1055
    [issue/1038]: https://github.com/rustwasm/wasm-pack/issues/1038

## 🌦️ 0.10.0

- ### ✨ Features

  - **Added keywords - [lucashorward], [issue/707] [pull/838]**

    `package.json` files usually contain a keywords array so that npm can make searching easier.
    This PR extracts keywords from `Cargo.toml` and puts them into `package.json`.

    [lucashorward]: https://github.com/lucashorward
    [pull/838]: https://github.com/rustwasm/wasm-pack/pull/838
    [issue/707]: https://github.com/rustwasm/wasm-pack/issues/707

- ### 🤕 Fixes

  - **Update binary-install to get fix for axios security vulnerability - [simlay], [Rizary], [issue/958] [pull/973] [pull/1012]**

    Updates `binary-install` npm package to version `^0.1.0` in order to get security fix for a security vulnerability in axios.

    [simlay]: https://github.com/simlay
    [rizary]: https://github.com/Rizary
    [pull/973]: https://github.com/rustwasm/wasm-pack/pull/973
    [pull/1012]: https://github.com/rustwasm/wasm-pack/pull/1012
    [issue/958]: https://github.com/rustwasm/wasm-pack/issues/958

  - **Fix cargo-generate installation - [bradyjoslin], [issue/975] [issue/907] [pull/983]**

    `wasm-pack new hello-wasm` didn't work due to a bad link when trying to install `cargo-generate`.

    This PR points the installation to the correct place and makes `wasm-pack new` working again!

    [bradyjoslin]: https://github.com/bradyjoslin
    [pull/983]: https://github.com/rustwasm/wasm-pack/pull/983
    [issue/975]: https://github.com/rustwasm/wasm-pack/issues/975
    [issue/907]: https://github.com/rustwasm/wasm-pack/issues/907

  - **Pass through extra options when building tests - [azriel91], [issue/698] [pull/851]**

    `wasm-pack test` accepts extra options to pass through to `cargo` when running tests.
    Under the hood, this runs `cargo build` before `cargo test`, and the additional options were only passed through to the `test` command. This meant that crates that enabled native features by default could not be built using `wasm-pack`, as it would attempt to build tests for the `wasm32-unknown-unknown` target with the native features enabled.

    This PR passes through the extra options to `cargo` when building the tests as well.

    [azriel91]: https://github.com/azriel91
    [pull/851]: https://github.com/rustwasm/wasm-pack/pull/851
    [issue/698]: https://github.com/rustwasm/wasm-pack/issues/698

  - **Corrected files included in package.json for bundler / no target - [lucashorward], [issue/837] [pull/839]**

    `wasm-pack build` and `wasm-pack build --target bundler` generates a \_bg.js file, but it was not added to the `package.json`.
    The file that is added, \*.js will however reference the \_bg.js, so when the package was distributed (both through pack or publish) it is not usable.

    This PR includes that \_bg.js file in `package.json`.

    [pull/839]: https://github.com/rustwasm/wasm-pack/pull/839
    [issue/837]: https://github.com/rustwasm/wasm-pack/issues/837

  - **Find the main package if multiple packages have the same name - [ghost], [pull/830]**

    If there were 2 packages with the same name, `wasm-pack` would sometimes use the wrong one and errored.

    [ghost]: https://github.com/ghost
    [pull/830]: https://github.com/rustwasm/wasm-pack/pull/830
    [issue/829]: https://github.com/rustwasm/wasm-pack/issues/829

- ### 📖 Documentation

  - **Remove duplicated "is" in the wee_alloc tutorial- [pione30], [issue/1003] [pull/1004]**

    [pione30]: https://github.com/pione30
    [pull/1004]: https://github.com/rustwasm/wasm-pack/pull/1004
    [issue/1003]: https://github.com/rustwasm/wasm-pack/issues/1003

  - **Fix TOC links - [Swaagie], [pull/1007]**

    [swaagie]: https://github.com/Swaagie
    [pull/1007]: https://github.com/rustwasm/wasm-pack/pull/1007

  - **Remove outdated TOC heading- [gthb], [pull/1011]**

    [gthb]: https://github.com/gthb
    [pull/1011]: https://github.com/rustwasm/wasm-pack/pull/1011

  - **Add link to template repo - [milahu], [pull/942]**

    [milahu]: https://github.com/milahu
    [pull/942]: https://github.com/rustwasm/wasm-pack/pull/942

  - **Remove greenkeeper reference - [cdvv7788], [crotwell], [issue/1001] [pull/844] [pull/1002]**

    [cdvv7788]: https://github.com/cdvv7788
    [crotwell]: https://github.com/crotwell
    [pull/844]: https://github.com/rustwasm/wasm-pack/pull/844
    [pull/1002]: https://github.com/rustwasm/wasm-pack/pull/1002
    [issue/1001]: https://github.com/rustwasm/wasm-pack/issues/1001

- ### 🛠️ Maintenance

  - **Fix CI. Remove appveyor and travis and use Github actions - [ashleygwilliams], [drager], [issue/594] [issue/979] [pull/947]**

    [pull/947]: https://github.com/rustwasm/wasm-pack/pull/947
    [issue/594]: https://github.com/rustwasm/wasm-pack/issues/594
    [issue/979]: https://github.com/rustwasm/wasm-pack/issues/979

  - **Cargo update - [ashleygwilliams], [pull/800]**

    [ashleygwilliams]: https://github.com/ashleygwilliams
    [pull/800]: https://github.com/rustwasm/wasm-pack/pull/800

  - **Remove dirs dependency - [brightly-salty], [issue/943] [pull/944]**

    [brightly-salty]: https://github.com/brightly-salty
    [pull/944]: https://github.com/rustwasm/wasm-pack/pull/944
    [issue/943]: https://github.com/rustwasm/wasm-pack/issues/943

  - **Fix logs for uniformity - [petosorus], [issue/716] [pull/723]**

    [petosorus]: https://github.com/petosorus
    [pull/723]: https://github.com/rustwasm/wasm-pack/pull/723
    [issue/716]: https://github.com/rustwasm/wasm-pack/issues/716

  - **Fixing build error - [Pauan], [pull/841]**

    [pull/841]: https://github.com/rustwasm/wasm-pack/pull/841

## ☁️  0.9.1

- ### 🤕 Fixes

  - **Bump binaryen to version_90 - [ashleygwilliams], [issue/781] [issue/782] [pull/687]**

    Previously, wasm-pack was hardcoded to install and attempt to execute wasm-opt on every build
    using binaryen version 78. This version had various issues on Unix/Linux and caused broken CI
    builds for many folks (we're so sorry!).

    This PR updates the binaryen version to 90, which should fix the issues folks were having. 

    Long-term, we'd like to create an auto-updating mechanism so that we can install and use the
    latest release of binaryen as we do for other binaries we orchestrate.

    [ashleygwilliams]: https://github.com/ashleygwilliams
    [pull/687]: https://github.com/rustwasm/wasm-pack/pull/687
    [issue/782]: https://github.com/rustwasm/wasm-pack/issues/782
    [issue/781]: https://github.com/rustwasm/wasm-pack/issues/781

- ### 🛠️ Maintenance

  - **Consolidate wasm-opt installation into existing binary install logic - [ashleygwilliams], [issue/685] [pull/687]**

    [ashleygwilliams]: https://github.com/ashleygwilliams
    [pull/687]: https://github.com/rustwasm/wasm-pack/pull/687
    [issue/685]: https://github.com/rustwasm/wasm-pack/issues/685

## 🌥️ 0.9.0

- ### ✨ Features

  - **Adding in `--quiet` and `--log-level` flags to control the console output - [Pauan], [pull/694]**

    The `--verbose` flag has long existed as a way to get more console output, but now there are two flags to get *less* console output:

    * `--quiet` will silence *all* stdout, so only errors will be displayed.
    * `--log-level` can be used to silence `[INFO]` or `[WARN]` output from wasm-pack.

    You can cause it to display even *more* information by using `--verbose`, or you can silence *all* stdout by using `--quiet`.

    You can also use `--log-level` to have fine-grained control over wasm-pack's log output:

    * `--log-level info` is the default, it causes all messages to be logged.
    * `--log-level warn` causes warnings and errors to be displayed, but not info.
    * `--log-level error` causes only errors to be displayed.

    These flags are global flags, so they can be used with every command, and they must come *before* the command:

    ```sh
    wasm-pack --log-level error build
    wasm-pack --quiet build
    ```

    [Pauan]: https://github.com/Pauan
    [pull/694]: https://github.com/rustwasm/wasm-pack/pull/694

  - **Wrap `cargo-generate` with `wasm-pack new` - [ashleygwilliams], [issue/373] [pull/623]**

    One of the first steps in getting started with `wasm-pack` is to `cargo install cargo-generate` to bootstrap some project templates. This can take a while and is an extra burden on users just getting started with `wasm-pack`. `wasm-pack new` uses `cargo-generate` to bootstrap new projects, removing the need to install the tool on your own. You can read more about this feature [here](https://github.com/rustwasm/wasm-pack/blob/master/docs/src/commands/new.md).

    [ashleygwilliams]: https://github.com/ashleygwilliams
    [pull/623]: https://github.com/rustwasm/wasm-pack/pull/623
    [issue/373]: https://github.com/rustwasm/wasm-pack/issues/373

  - **Allow `wasm-pack` to be run from subdirectories - [gameldar], [issue/620] [pull/624]**

    If a crate path is not specified when running `wasm-pack` and there is no `Cargo.toml` in the current working directory, `wasm-pack` will walk up the directory structure to find a `Cargo.toml`.

    [gameldar]: https://github.com/gameldar
    [pull/624]: https://github.com/rustwasm/wasm-pack/pull/624
    [issue/620]: https://github.com/rustwasm/wasm-pack/issues/620

  - **Automatically execute `wasm-opt` on produced binaries - [alexcrichton], [issue/159] [pull/625]**

    When `wasm-pack` builds binaries in released and profiling modes, it will execute `wasm-opt` on the binary, making the result smaller and more performant.

    [alexcrichton]: https://github.com/alexcrichton
    [pull/625]: https://github.com/rustwasm/wasm-pack/pull/625
    [issue/159]: https://github.com/rustwasm/wasm-pack/issues/159  

  - **Helpful error message when wasm-bindgen fails because of an old version - [gameldar], [ashleygwilliams], [issue/627] [pull/633]**

    `wasm-pack` will pass a `--web` flag to `wasm-bindgen` when `wasm-pack build --target web` is run. Before, if the user had an old version of `wasm-bindgen` in their dependencies, they would receive a cryptic error message. Now they will be notified that they need to update their `wasm-bindgen` dependency if they want to build for the `web` target.

    [gameldar]: https://github.com/gameldar
    [pull/633]: https://github.com/rustwasm/wasm-pack/pull/633
    [issue/627]: https://github.com/rustwasm/wasm-pack/issues/627

  - **Publish releases by tag to npm - [Tarnadas], [pull/690]**

    You can now use `wasm-pack publish` to publish tagged releases with the optional `--tag` argument. You can read more about [distribution tags](https://docs.npmjs.com/cli/dist-tag) on NPM, and more about this feature in [our docs](https://github.com/Tarnadas/wasm-pack/blob/master/docs/src/commands/pack-and-publish.md#publishing-tagged-releases).

    [Tarnadas]: https://github.com/Tarnadas
    [pull/690]: https://github.com/rustwasm/wasm-pack/pull/690

- ### 🤕 Fixes

  - **Only use exactly v0.24.0 geckodriver on Windows - [ashleygwilliams], [issue/770] [pull/774]**

    `wasm-pack test` is a great way to test your web Wasm modules- and it very nicely sets up and configures
    the necessary browser engine drivers to do so!

    For the v0.25.0 release of geckodriver, the team switched their build environment- which introduced a new
    surprise runtime dependency, Visual C++ redistributable package, to their windows binaries. You can read
    more about the issue here, [mozilla/geckodriver/issue/1617].

    Becuase the introduction of this runtime dependency is considered a bug, and should be eventually fixed,
    the team decided that the least invasive solution would be to hold geckodriver binaries, on Windows, at
    v0.24.0, and to disable the auto-update logic, until the bug is fixed.

    [ashleygwilliams]: https://github.com/ashleygwilliams
    [issue/770]: https://github.com/rustwasm/wasm-pack/issues/770
    [pull/774]: https://github.com/rustwasm/wasm-pack/pull/774
    [mozilla/geckodriver/issue/1617]: https://github.com/mozilla/geckodriver/issues/1617#issuecomment-532168958

  - **Handle version check failures - [drager], [issue/652], [issue/653] [pull/660]**

    Every day, `wasm-pack` checks the crates.io API for the latest version number and lets the user know if their installation is out of date. Now, when these API calls fail, `wasm-pack` alerts the user of the failure and waits until the next day to make another call to crates.io.

    [drager]: https://github.com/drager
    [pull/660]: https://github.com/rustwasm/wasm-pack/pull/660
    [issue/652]: https://github.com/rustwasm/wasm-pack/issues/652
    [issue/653]: https://github.com/rustwasm/wasm-pack/issues/653

  - **Add user agent for version check - [drager], [issue/651] [pull/658]**

    crates.io requires tools to set a version check `User-Agent` header when requesting the latest version. Now, when `wasm-pack` performs an API request to crates.io, it sends `User-Agent: wasm-pack/0.9.0`.

    [drager]: https://github.com/drager
    [pull/658]: https://github.com/rustwasm/wasm-pack/pull/658
    [issue/651]: https://github.com/rustwasm/wasm-pack/issues/651

  - **Remove broken link from the README - [drager], [pull/635]**

    [drager]: https://github.com/drager
    [pull/635]: https://github.com/rustwasm/wasm-pack/pull/635 

  - **Make `sideEffects` in generated `package.json` a boolean instead of a string - [rhysd], [pull/649]**

    [rhysd]: https://github.com/rhysd
    [pull/649]: https://github.com/rustwasm/wasm-pack/pull/649

  - **Don't warn if license-file is present - [ashleygwilliams], [issue/692] [pull/693]**

    Previously, `wasm-pack` would warn that the `license` field was missing if the `license-file` field was used instead. This warning is now only surfaced if both `license` and `license-field` are absent from a `Cargo.toml`.

    [ashleygwilliams]: https://github.com/ashleygwilliams
    [pull/693]: https://github.com/rustwasm/wasm-pack/pull/693
    [issue/692]: https://github.com/rustwasm/wasm-pack/issues/692

  - **Select correct webdriver version - [MartinKavik], [issue/611] [pull/706]**

    `wasm-pack` used to install a pinned version of the Chrome, Gecko, and Safari drivers. Now when a driver needs to be installed, `wasm-pack` will pull the latest version from the API and install that instead.

    [MartinKavik]: https://github.com/MartinKavik
    [pull/706]: https://github.com/rustwasm/wasm-pack/pull/706
    [issue/611]: https://github.com/rustwasm/wasm-pack/issues/611

  - **Only run node tests on `wasm-pack test --node` - [alexcrichton], [pull/630]**

    [alexcrichton]: https://github.com/alexcrichton
    [pull/630]: https://github.com/rustwasm/wasm-pack/pull/630

  - **Fix npm installs for Windows Users - [EverlastingBugstopper], [issue/757] [pull/759]**

    We recently published `wasm-pack` on the npm registry but forgot to test on Windows! `npm install -g wasm-pack` now works on Windows machines.

    [EverlastingBugstopper]: https://github.com/EverlastingBugstopper
    [pull/759]: https://github.com/rustwasm/wasm-pack/pull/759
    [issue/757]: https://github.com/rustwasm/wasm-pack/issues/757

  - **Clean up `cargo test` warnings - [ashleygwilliams], [issue/752] [pull/753]**

    Tests now use `std::sync::Once::new()` instead of the deprecated `std::sync::ONCE_INIT`

    [ashleygwilliams]: https://github.com/ashleygwilliams
    [pull/753]: https://github.com/rustwasm/wasm-pack/pull/753
    [issue/752]: https://github.com/rustwasm/wasm-pack/issues/752

- ### 📖 Documentation

  - **Document npm installer - [drager], [issue/751] [pull/767]**

    [drager]: https://github.com/drager
    [issue/751]: https://github.com/rustwasm/wasm-pack/issues/751
    [pull/767]: https://github.com/rustwasm/wasm-pack/pull/767

  - **Update help message for `build` and `publish` subcommands - [ibaryshnikov], [issue/636] [pull/640]**

    `wasm-bindgen` recently changed the default target from `browser` to `bundler` and deprecated `browser`. This change is now reflected in the help message for `wasm-pack build`.

    [ibaryshnikov]: https://github.com/ibaryshnikov
    [pull/640]: https://github.com/rustwasm/wasm-pack/pull/640
    [issue/636]: https://github.com/rustwasm/wasm-pack/issues/636

  - **Add Release Checklist - [ashleygwilliams], [issue/370] [pull/626]**

    While we try to automate releases of `wasm-pack` as much as possible, there are still some manual steps that need to be completed when releasing a new version (like writing a changelog 😉). These steps now live in [`RELEASE_CHECKLIST.md`](https://github.com/rustwasm/wasm-pack/blob/master/RELEASE_CHECKLIST.md).

    [ashleygwilliams]: https://github.com/ashleygwilliams
    [pull/626]: https://github.com/rustwasm/wasm-pack/pull/626
    [issue/370]: https://github.com/rustwasm/wasm-pack/issues/370  

- ### 🛠️ Maintenance

  - **Ensure that `wasm-bindgen` generates move assertions - [fitzgen], [issue/677] [pull/683]**

    `wasm-pack` now creates `wasm-bindgen` test fixtures that must generate move assertions for both free functions and methods.

    [fitzgen]: https://github.com/fitzgen
    [pull/683]: https://github.com/rustwasm/wasm-pack/pull/683
    [issue/677]: https://github.com/rustwasm/wasm-pack/issues/677

  - **Update `cargo_metadata` to v0.8.0 - [ThomasdenH], [pull/670]**

    [ThomasdenH]: https://github.com/ThomasdenH
    [pull/670]: https://github.com/rustwasm/wasm-pack/pull/670

  - **Update `rustfmt` install snippet in PR template` - [data-pup], [issue/639] [pull/664]**

    `rustfmt` is now available on Rust's stable channel so now the `wasm-pack` PR template recommends installing the stable version instead of the nightly version.

    [data-pup]: https://github.com/data-pup
    [pull/664]: https://github.com/rustwasm/wasm-pack/pull/664
    [issue/639]: https://github.com/rustwasm/wasm-pack/issues/639  

## 🛠️ 0.8.1

- ### 🤕 Fixes

  - **Check for "rustup" rather than ".rustup" when checking for wasm32 - [drager], [issue/613][pull/616]**

      When we introduced support for non-rustup setups we did a check if the user was
      using rustup or not. However, this check was too constrained and only covered
      the most common cases, but it did not work for Docker setups.

      This PR addresses that and it now covers Docker setups as well!
      When doing this fix we also found two other small issues which this PR also addresses.
      The first is that we did not print the helpful error message when the wasm32 target
      was not found and the other one was that it linked to the wrong section of the documentation.

      [issue/613]: https://github.com/rustwasm/wasm-pack/issues/613
      [pull/616]: https://github.com/rustwasm/wasm-pack/pull/616

## 🌤️ 0.8.0

- ### ✨ Features

    - **Give user's ability to customize generated filenames with `--out-name` flag - [ibaryshnikov], [issue/596] [pull/599]**

        When running `wasm-pack build`, several files are generated. These files
        are named based on the name of the crate, as per your `Cargo.toml` file.
        Sometimes- that's not the name you'd like your files to have!

        You can now specify a custom name for the generated files using a new
        flag, `--out-name`. Given a project called `dom`, here's a comparison of
        the default and custom generated filenames:

        ```
        wasm-pack build
        # will produce files
        # dom.d.ts  dom.js  dom_bg.d.ts  dom_bg.wasm  package.json  README.md

         wasm-pack build --out-name index
        # will produce files
        # index.d.ts  index.js  index_bg.d.ts  index_bg.wasm  package.json  README.md
        ``` 

        [ibaryshnikov]: https://github.com/ibaryshnikov
        [issue/596]: https://github.com/rustwasm/wasm-pack/issues/596
        [pull/599]: https://github.com/rustwasm/wasm-pack/pull/599

- ### 🤕 Fixes

    - **Fix panics in `build mode --no-install` - [alexcrichton], [pull/598]**

        This commit fixes the `wasm-pack build --mode no-install` command from
        unconditionally panicking as well as `--mode force`. These steps were
        calling an `unwrap()` on an internal `Option<T>` which was supposed to
        be set during `step_install_wasm_bindgen`, but that step wasn't run in
        these modes. The mode configuration of steps has been refactored
        slightly to ensure that more steps are shared between these modes to
        reduce duplication.

        [pull/598]: https://github.com/rustwasm/wasm-pack/pull/598

    - **Print unexpected panics to standard error - [drager], [issue/562] [pull/601]**

        Unexpected panics are unfortunate but they're currently covered up and written
        out to an auxiliary file. This makes panics in CI difficult to debug,
        especially at a glance, as CI builders are likely not uploading those files.

        This PR will print to standard error for unexpected panics and then let
        `human_panic` handle panics, just like before.

        [issue/562]: https://github.com/rustwasm/wasm-pack/issues/562
        [pull/601]: https://github.com/rustwasm/wasm-pack/pull/601

    - **Improve error message when `wasm32-unknown-unknown` is missing - [drager], [issue/579] [pull/602]**

        For folks with non-rustup environments (which we only started supporting in
        0.7.0!), we were giving a missing target error that was not helpful!

        We've updated the error message to include more information, and we've added
        some documentation to help explain how you can remedy the error by manually
        installing the target on your specific rust setup- including the fact that
        it may *not* be possible to add the target to some setups.

        Check out the docs [here](https://rustwasm.github.io/wasm-pack/book/prerequisites/non-rustup-setups.html).

        [issue/579]: https://github.com/rustwasm/wasm-pack/issues/579
        [pull/602]: https://github.com/rustwasm/wasm-pack/pull/602

- ### 📖 Documentation

    - **Document `--out-dir` flag - [ashleygwilliams], [issue/592] [pull/593]**

        Recently, someone asked on Discord about customizing the name of the directory
        that contains the assets built by `wasm-pack`. We've had the `out-dir` flag for
        a while, but it wasn't documented! Now it is.

        [issue/592]: https://github.com/rustwasm/wasm-pack/issues/592
        [pull/593]: https://github.com/rustwasm/wasm-pack/pull/593

    - **Fix broken links in docs and update for template changes - [drager], [ashleygwilliams], [issue/609] [pull/612] [pull/614]**

        Recently, some improvements were made to the [`wasmpack-template`]. Additionally,
        there were some broken links in the documentation. We've updated the docs for the
        new template and fixed the broken links!

        [issue/609]: https://github.com/rustwasm/wasm-pack/issues/609
        [pull/612]: https://github.com/rustwasm/wasm-pack/pull/612
        [pull/614]: https://github.com/rustwasm/wasm-pack/pull/614

- ### 🛠️ Maintenance

    - **Move `binary-install` to its own repo - [drager], [issue/500] [pull/600]**

        `binary-install` is a crate that holds the abstractions for how `wasm-pack` downloads
        and caches pre-built binaries for the tools it wraps. It was originally part of the
        `wasm-pack` code, then moved into a workspace as an independent crate. Now that we
        believe it's stable, we've moved it into its own [repo](https://github.com/rustwasm/binary-install)!

        [issue/500]: https://github.com/rustwasm/wasm-pack/issues/500
        [pull/600]: https://github.com/rustwasm/wasm-pack/pull/600

## 🌤️ 0.7.0

- ### ✨ Features

  - **Non `rustup` environment support - [drager], [pull/552]**

    Before now, `wasm-pack` had a hard requirement that `rustup` had to be in the PATH. While most Rust users use
    `rustup` there are variety reasons to have an environment that doesn't use `rustup`. With this PR, we'll now
    support folks who are using a non-`rustup` environment!

    [pull/552]: https://github.com/rustwasm/wasm-pack/pull/552

  - **Improved CLI Output - [alexcrichton], [pull/547]**

    It's hard to decide if this is a fix or a feature, but let's keep it positive! This PR moves `wasm-pack`'s CLI
    output strategy closer to the desired standard we have for 1.0. This is important as it fixes many small bugs
    that are distributed across a diveristy of terminals and difficult to test for locally.

    This strategy was first introduced as a mini RFC in [issue/298], and then was discussed in a session at the Rust
    All Hands ([notes](https://gist.github.com/fitzgen/23a62ebbd67574b9f6f72e5ac8eaeb67#file-road-to-wasm-pack-1-0-md)).

    You'll notice that the spinner is gone- we eventually want to have one, but we'd like one that doesn't cause bugs!
    If you have feedback about terminal support or an output bug, please [file an issue]! We want to hear from you!

    Check out the new output in the `README` demo- or update your `wasm-pack` and take it for a spin!

    [file an issue]: https://github.com/rustwasm/wasm-pack/issues/new/choose
    [pull/547]: https://github.com/rustwasm/wasm-pack/pull/547
    [issue/298]: https://github.com/rustwasm/wasm-pack/issues/298

  - **Add support for `--target web` - [alexcrichton], [pull/567]**

    Recently, `wasm-bindgen` add a new target- `web`. This new target is similar to the `no-modules` target, in that
    it is designed to generate code that should be loaded directly in a browser, without the need of a bundler. As 
    opposed to the `no-modules` target, which produces an IIFE (Immediately Invoked Function Expression), this target
    produces code that is an ES6 module.

    You can use this target by running:

    ```
    wasm-pack build --target web
    ```

    Learn more about how to use this target by [checking out the docs!](https://rustwasm.github.io/wasm-pack/book/commands/build.html#target)

    [pull/567]: https://github.com/rustwasm/wasm-pack/pull/567

  - **Support passing arbitrary arguments to `cargo test` via `wasm-pack test` - [chinedufn], [issue/525] [pull/530]**

    `wasm-pack test` is an awesome command that wraps `cargo test` in a way that helps provide you some nice out of the
    box configuration and setup. However, you may find yourself wanting to leverage the full funcationality of `cargo test`
    by passing arguments that haven't been re-exported by the `wasm-pack test` interface.

    For example, if you have a large test suite, it can be nice to simply run one test, or a subset of your tests.
    `cargo test` supports this, however up until now, the `wasm-pack test` interface did not!

    `wasm-pack test` now accepts passing and arbitrary set of arguments that it will forward along to its `cargo test` call
    by allowing users to use `--` after any `wasm-pack test` arguments, followed by the set of arguments you'd like to pass
    to `cargo test`.

    For example:

    ```
    # Anything after `--` gets passed to the `cargo test`
    wasm-pack test --firefox --headless -- --package my-workspace-crate my_test_name --color=always
    ```

    This will just run the `my_test_name` test and will output using color!

    [See the `test` docs here!](https://rustwasm.github.io/docs/wasm-pack/commands/test.html)

    [chinedufn]: https://github.com/chinedufn
    [issue/525]: https://github.com/rustwasm/wasm-pack/issues/525
    [pull/530]: https://github.com/rustwasm/wasm-pack/pull/530

  - **Support `homepage` field of `Cargo.toml` and `package.json` - [rhysd], [pull/531]**

    Both `Cargo.toml` and `package.json` support a `homepage` field that allow you to specify a website for
    your project. We didn't support it previously (purely an accidental omission) - but now we do!

    [pull/531]: https://github.com/rustwasm/wasm-pack/pull/531

  - **Support `license-file` field in `Cargo.toml` - [rhysd], [pull/527]**

    Sometimes, you want to provide a custom license, or specific license file that doesn't map to SPDX standard
    licenses. In Rust/Cargo, you accomplish this by omitting the `license` field and including a `license-file`
    field instead. You can read more about this in the [`cargo` manifest documentation].

    In an npm package, this translates to `"license": "SEE LICENSE IN <filename>"` in your `package.json`. You can
    read more about this in the [npm `package.json` documentation].

    We previously only supported using SPDX standard licenses, by only supporting the `"license"` key in your
    `Cargo.toml`- but now we'll allow you to leverage the `license-file` key as well, and will translate it
    correctly into your `package.json`!

    [`cargo` manifest documentation]: https://doc.rust-lang.org/cargo/reference/manifest.html
    [npm `package.json` documentation]: https://docs.npmjs.com/files/package.json#license
    [rhysd]: https://github.com/rhysd
    [pull/527]: https://github.com/rustwasm/wasm-pack/pull/527

- ### 🤕 Fixes

  - **`wasm-pack-init (1).exe` should work - [ashleygwilliams], [issue/518] [pull/550]**

    Several users noted that when downloading a new version of `wasm-pack` their browser named the executable
    file `wasm-pack-init (1).exe`. When named this way, the file didn't show the init instructions on execution.
    This happened because the installation logic was requiring an exact match on filename. We've loosened that
    restriction so that the filename must *start* with `wasm-pack-init` and will still execute files with these
    additional, extraneous charaters in the filename. Thanks so much to [Mblkolo] and [danwilhelm] for filing the
    issue and the excellent discussion!

    [issue/518]: https://github.com/rustwasm/wasm-pack/issues/518
    [pull/550]: https://github.com/rustwasm/wasm-pack/pull/550
    [Mblkolo]: https://github.com/Mblkolo

  - **Fix chromedriver error and message on Windows for `wasm-pack test` - [jscheffner], [issue/535] [pull/537]**

    When running `wasm-pack test` on a 64-bit Windows machine, users would receive an error:
    `geckodriver binaries are unavailable for this target`. This error message had two issues- firstly, it accidentally
    said "geckodriver" instead of "chromedriver", secondly, it threw an error instead of using the available 32-bit
    chromedriver distribution. Chromedriver does not do a specific disribution for Windows 64-bit!

    We've fixed the error message and have also ensured that 64-bit Windows users won't encounter an error, and will
    appropriately fallback to the 32-bit Windows chromedriver.

    [jscheffner]: https://github.com/jscheffner
    [issue/535]: https://github.com/rustwasm/wasm-pack/issues/535
    [pull/537]: https://github.com/rustwasm/wasm-pack/pull/537

  - **Correct look up location for `wasm-bindgen` when it's installed via `cargo install` - [fitzgen], [pull/504]**

    Sometimes, when a `wasm-bindgen` binary is not available, or if `wasm-pack` is being run on an architecture that
    `wasm-bindgen` doesn't produce binaries for, instead of downloading a pre-built binary, `wasm-pack` will install 
    `wasm-bindgen` using `cargo install`. This is a great and flexible back up!

    However, due to the last release's recent refactor to use a global cache, we overlooked the `cargo install` case
    and did not look for `wasm-bindgen` in the appropriate location. As a result, this led to a bug where `wasm-pack`
    would panic.

    We've fixed the lookup for the `cargo install`'d `wasm-bindgen` by moving the `cargo-install`'d version to global
    cache location for `wasm-pack` once it's successfully built. We also eliminated the panic in favor of 
    propagating an error. Thanks for your bug reports and sorry about the mistake!

    [pull/504]: https://github.com/rustwasm/wasm-pack/pull/504

  - **Only print `cargo test` output the once - [fitzgen], [issue/511] [pull/521]**

    Due to some technical debt and churn in the part of the codebase that handles output, we were accidentally
    printing the output of `cargo test` twice. Now we ensure that we print it only one time!

    [issue/511]: https://github.com/rustwasm/wasm-pack/issues/511
    [pull/521]: https://github.com/rustwasm/wasm-pack/pull/521

- ### 🛠️ Maintenance

  - **Fix `clippy` warnings - [mstallmo], [issue/477] [pull/478]**

    [`clippy`] is an awesome utilty that helps lint your Rust code for common optimizations and idioms. at the
    beginning of `wasm-pack` development, `clippy` had not yet stablized, but it has since 1.0'd and it was
    high time we leveraged it in `wasm-pack`. We still aren't *completely* fixed, but we're working on it, and
    we've already dervived a ton of value from the tool!

    [`clippy`]: https://github.com/rust-lang/rust-clippy
    [issue/477]: https://github.com/rustwasm/wasm-pack/issues/477
    [pull/478]: https://github.com/rustwasm/wasm-pack/pull/478

  - **Run `clippy` check on Travis - [drager], [pull/502]**

    Now that `wasm-pack` has been clippified- we want to keep it that way! Now in addition to `cargo fmt` and
    `cargo test`, we'll also run `cargo clippy` on all incoming PRs!

    [pull/502]: https://github.com/rustwasm/wasm-pack/pull/502

  - **Port tests to use `assert-cmd` - [fitzgen], [pull/522]**

    [`assert_cmd`] is a great utility for testing CLI applications that is supported by the [CLI WG]. `wasm-pack`
    development began before this library existed- so we were using a much less pleasant and efficient strategy
    to test the CLI functionality of `wasm-pack`. Now we've ported over to using this great library!
    
    [CLI WG]: https://www.rust-lang.org/what/cli
    [`assert_cmd`]: https://crates.io/crates/assert_cmd
    [pull/522]: https://github.com/rustwasm/wasm-pack/pull/522

  - **Add initial tests for `binary-install` crate - [drager], [pull/517]**

    In the last release, we separated some of our binary install logic into a new crate, `binary-install`.
    However, that's about all we did... move the logic! In an effort to move the crate into true open source
    status, [drager] has done some excellent work adding tests to the crate. This was trickier than it looked
    and involved creating a test server! Thanks for all the efforts [drager], and the great review work [fitzgen]
    and [lfairy]!

    [pull/517]: https://github.com/rustwasm/wasm-pack/pull/517
    [lfairy]: https://github.com/lfairy

  - **Update tests `wasm-bindgen` version - [huangjj27], [issue/519] [issue/417] [pull/526]**

    Our tests use fixtures that reference `wasm-bindgen` often, but the versions were not consistent or up to
    date. As a result, the test suite leverage many version of `wasm-bindgen` which meant that they took a while
    to run as they couldn't use the cached version of `wasm-bindgen` because the cached versions we slightly
    different! Now they are up to date and consistent so the tests can perform better!

    [pull/526]: https://github.com/rustwasm/wasm-pack/pull/526
    [issue/519]: https://github.com/rustwasm/wasm-pack/issues/519
    [issue/417]: https://github.com/rustwasm/wasm-pack/issues/417

- ### 📖 Documentation

  - **Flag gh-pages docs as unpublished - [alexcrichton] [pull/565]**

    Recently, [DebugSteven] made a PR to merge all the documentation for the rustwasm toolchain into a 
    [single location]. This is going to make discovering and using tools from the entire organization easier
    for new and seasoned folks alike. This also has the feature of displaying documentation that is related
    to the current published version of each tool- unlike before, where the only accessible documentation was
    for the tools at current master (which may or may not be currently published!)

    If you like reading the current master's documentation- fear not, each tool will still publish the
    documentation generated from the master branch on their individual `gh-pages` 
    ([See `wasm-pack's` master docs here]). To avoid confusion, we've added a flash message that let's you know
    which documentation you are reading- and provides a link to documentation of the published version- just
    in case that's what you're looking for!

    [DebugSteve]: https://github.com/DebugSteven
    [single location]: https://rustwasm.github.io/docs.html
    [See `wasm-pack's` master docs here]: https://rustwasm.github.io/wasm-pack/book/
    [pull/565]: https://github.com/rustwasm/wasm-pack/pull/565

  - **Add new QuickStart guide for "Hybrid Applications with Webpack" - [DebugSteven] [pull/536]**

    Since `wasm-pack` was first published, we've focused on a workflow where a user writes a library and then
    publishes it to npm, where anyone can use it like any npm package in their JavaScript or Node.js application.

    Shortly after `wasm-pack` appeared, some RustWASM teammates created a template for a similar workflow- building
    a RustWASM package *alongside* an application. They did this by leveraging Webpack plugins, and it's a really
    lovely user experience!

    [This template] hasn't gotten as much attention because we've lacked a quickstart guide for folks to discover
    and follow- now we've got one!

    Check out the guide [here](https://rustwasm.github.io/wasm-pack/book/tutorials/hybrid-applications-with-webpack/index.html)!

    [This temaplte]: https://github.com/rustwasm/rust-webpack-template
    [DebugSteven]: https://github.com/DebugSteven
    [pull/536]: https://github.com/rustwasm/wasm-pack/pull/536

  - **Add `wee_alloc` deepdive - [surma], [pull/542]**

    `wee_alloc` is a useful utility that deserved more attention and explanation than our previous docs addressed.
    This was partially because the `wasm-pack` template has an explanatory comment that helps explain its use.
    However, for folks who don't use the template, `wee_alloc` is something important to know about- so now we have
    given it its own section!

    Check out the deepdive [here](https://rustwasm.github.io/wasm-pack/book/tutorials/npm-browser-packages/template-deep-dive/wee_alloc.html)!

    [surma]: https://github.com/surma
    [pull/542]: https://github.com/rustwasm/wasm-pack/pull/542

  - **Update prerequisite documentation - [alexcrichton], [pull/569]**

    Many folks are using `wasm-pack` without publishing to npm- as a result, we've updated the documentation to
    clearly indicate that npm is an optional requirement, only required for specific targets and workflows.
    Additionally, since the 2018 Edition landed, `nightly` Rust is no longer a requirement. We've removed those
    instructions and have consolidated the documentation so it is shorter and more efficient at getting you
    started!

    [pull/569]: https://github.com/rustwasm/wasm-pack/pull/569

  - **Clarify what kind of account `login` adds - [killercup], [pull/539]**

    Previously, when view `--help`, the command description for `login` showed:
    `👤  Add a registry user account!` This could be confusing for folks, so now it's been updated to read:
    `👤  Add an npm registry user account!`, which is much clearer!

    [killercup]: https://github.com/killercup
    [pull/539]: https://github.com/rustwasm/wasm-pack/pull/539

  - **Wasm is a contraction, not an acronym - [fitzgen], [pull/555]**

    Ever wonder how you're *actually* supposed to refer to WebAssembly in short-form? WASM? wasm? For the pedants
    out there, the correct usage is "Wasm" because Wasm is a *contraction* of the words Web and Assembly. We've
    updated our doucmentation to consistently refer to WebAssembly as Wasm in the shortform.

    *The more you know!*

    [pull/555]: https://github.com/rustwasm/wasm-pack/pull/555

  - **Fix links and Rust highlightning - [drager], [issue/513] [pull/514] [pull/516]**

    We had some broken links and missing Rust syntax highlighting in a few sections of the docs. This fixes that!

    [issue/513]: https://github.com/rustwasm/wasm-pack/issues/513
    [pull/514]: https://github.com/rustwasm/wasm-pack/pull/514
    [pull/516]: https://github.com/rustwasm/wasm-pack/pull/516  
    

## 🌅 0.6.0

- ### ✨ Features

  - **Add three build profiles and infrastructure for their toml config - [fitzgen], [issue/153] [issue/160] [pull/440]**

    When originally conceived, `wasm-pack` was exclusively a packaging and publishing tool, which naively assumed
    that the crate author would simply run `wasm-pack` when they were ready to publish a wasm package. As a result,
    `wasm-pack` always ran `cargo build` in `--release` mode. Since then, `wasm-pack` has grown into an integrated build
    tool used at all stages of development, from idea conception to publishing, and as such has developed new needs.

    In previous releases, we've supported a flag called `--debug` which will run `cargo build` in `dev` mode, which
    trades faster compilation speed for a lack of optimizations. We've renamed this flag to `--dev` to match `cargo`
    and added an additional flag, representing a third, intermediary, build profile, called `--profiling` which
    is useful for investigating performance issues. You can see all three flags and their uses in the table below:

    | Profile       | Debug Assertions | Debug Info | Optimizations | Notes                                 |
    |---------------|------------------|------------|---------------|---------------------------------------|
    | `--dev`       | Yes              | Yes        | No            | Useful for development and debugging. |
    | `--profiling` | No               | Yes        | Yes           | Useful when profiling and investigating performance issues. |
    | `--release`   | No               | No         | Yes           | Useful for shipping to production.    |

    The meaning of these flags will evolve as the platform grows, and always be tied to the behavior of these flags
    in `cargo`. You can learn more about these in the [`cargo profile` documentation].

    This PR also introduces a way to configure `wasm-pack` in your `Cargo.toml` file that we intend to use much more
    in the future. As a largely convention-based tool, `wasm-pack` will never require that you configure it manually,
    however, as our community and their projects mature alongside the tool, it became clear that allowing folks the
    ability to drop down and configure things was something we needed to do to meet their needs.

    Currently, you can only configure things related to the above-mentioned build profiles. To learn more, 
    [check out the documentation][profile-config-docs]. It leverages the `package.metadata.wasm-pack` key in your
    `Cargo.toml`, and looks like this:

    ```toml
    # Cargo.toml

    [package.metadata.wasm-pack.profile.dev.wasm-bindgen]
    # Should we enable wasm-bindgen's debug assertions in its generated JS glue?
    debug-js-glue = true
    # Should wasm-bindgen demangle the symbols in the "name" custom section?
    demangle-name-section = true
    # Should we emit the DWARF debug info custom sections?
    dwarf-debug-info = false
    ```

    As always- there are defaults for you to use, but if you love to configure (or have a project that requires it),
    get excited, as your options have grown now and will continue to!

    [profile-config-docs]: https://rustwasm.github.io/wasm-pack/book/cargo-toml-configuration.html
    [`cargo profile` documentation]: https://doc.rust-lang.org/cargo/reference/manifest.html#the-profile-sections
    [issue/153]: https://github.com/rustwasm/wasm-pack/issues/153
    [issue/160]: https://github.com/rustwasm/wasm-pack/issues/160
    [pull/440]: https://github.com/rustwasm/wasm-pack/pull/440

  - **DEPRECATION: Rename `--debug` to `--dev` to match `cargo` - [fitzgen], [pull/439]**

    See the discussion of the build profiles feature above. This is a strict renaming of the previous `--debug` flag,
    which will now warn as deprecated.

    [pull/439]: https://github.com/rustwasm/wasm-pack/pull/439

  - **Add an option to pass an arbitrary set of arguments to `cargo build` - [torkve], [issue/455] [pull/461]**

    As an integrated build tool, `wasm-pack` orchestrates many secondary command line tools to build your package
    in a single command. Notably, one of these tools is `cargo`. `cargo` has a wide array of features and flags, and
    we couldn't reasonably expect to implement them all as first class features of `wasm-pack`. As a result, we've
    created the option to allow users to pass an arbitrary number of additional flags to `wasm-pack` by appending them
    to the `wasm-pack build` command, after passing `--`. For example:

    ```
    wasm-pack build examples/js-hello-world --mode no-install -- -Z offline
    ```

    In the above example, the flag `-Z offline` will be passed to `cargo build`. This feature is documented 
    [here][cargo opts docs].

    [cargo opts docs]: https://rustwasm.github.io/wasm-pack/book/commands/build.html#extra-options
    [torkve]: https://github.com/torkve
    [issue/455]: https://github.com/rustwasm/wasm-pack/issues/455
    [pull/461]: https://github.com/rustwasm/wasm-pack/pull/461


  - **Pre-build before wasm-pack publish - [csmoe], [issue/438] [pull/444]**

    Previously, if you ran `wasm-pack publish` before you had successfully run `wasm-pack build`,
    you'd receive an error that a package could not be found- because there would be no `pkg` or
    out-directory containing a `package.json`.

    In this situation, you would hope that `wasm-pack` would build your package for you when you
    ran `wasm-pack publish`. This is slightly complicated by the fact that not everyone wants to 
    build their package to the default target or to a directory named `pkg`.

    To solve this, running `wasm-pack publish` before a successful build  will give you an interactive
    prompt to build your package- allowing you to specify your out directory as well as the target you'd
    like to build to. Check it out in the gif below:

    ![pre-build publish workflow](https://user-images.githubusercontent.com/35686186/50500909-5984fe80-0a8f-11e9-9de6-43d1423b2969.gif)

    [issue/438]: https://github.com/rustwasm/wasm-pack/issues/438
    [pull/444]: https://github.com/rustwasm/wasm-pack/pull/444

  - **Generate self-.gitignore as part of pkg folder - [RReverser], [pull/453]**

    Since `wasm-pack` was first published, the `pkg` directory was intended to be treated as a
    build artifact, and as such should never be published to version control. This was
    never enforced by any assets generated by `wasm-pack`, however.

    Now, when building your package, `wasm-pack` will also generate a `.gitignore` file so that the
    `pkg`, or out-directory, will be ignored.

    If you use another version control tool, you'll need to still create or edit your own ignore file-
    pull requests to support other version control tools are welcome!

    If you require editing of the generated `package.json` or add additonal assets to your package
    before publishing, you'll want to remove the `.gitignore` file and commit to version control. We
    intend to have a solution that makes this workflow significantly easier in upcoming releases!

    [RReverser]: https://github.com/RReverser
    [pull/453]: https://github.com/rustwasm/wasm-pack/pull/453

  - **Support cargo workspaces - [fitzgen], [issue/252] [issue/305] [pull/430]**

    Workspaces are a well-liked and used feature of cargo that allow you to build multiple crates
    in a single cargo project. Because of how `wasm-pack` handled paths for `target` and out-directories,
    we did not support cargo workspaces out of the box. Now they should work well and the feature is
    well guarded by tests!
    
    [issue/252]: https://github.com/rustwasm/wasm-pack/issues/252
    [issue/305]: https://github.com/rustwasm/wasm-pack/issues/305
    [pull/430]: https://github.com/rustwasm/wasm-pack/pull/430

  - **Use a global cache for all downloaded binaries - [alexcrichton], [pull/426]**

    `wasm-pack` is an integrated build tool that orchestrates several other command line tools to build
    your wasm project for you. How `wasm-pack` does this has evolved significantly since it's early versions.
    In the last version, a `bin` directory was created to house the tool binaries that `wasm-pack` needed to
    build our project, but this had several limitations. Firstly, it created a `bin` directory in your project's
    root, which could be confusing. Secondly, it meant that sharing these tools across multiple projects was
    not possible. We did this because it gaves us the fine-grained control over the version of these tools that
    you used.

    Now, `wasm-pack` will not generate a `bin` directory, but rather will use a global cache. We retain the
    fine-grained control over the versions of these tools that are used, but allow multiple projects that use
    the same tools at the same versions to share the already installed asset. Your global cache will generally
    be in your user's home directory- we use the [`dirs` crate] to determine where to place this global cache.
    This is not currently customizable but is something we intend to look into doing!

    This feature ensures that `wasm-pack` users are downloading a minimal number of binaries from the network,
    which, for `wasm-pack` users with multiple projects, should speed up build times.

    [`dirs` crate]: https://docs.rs/dirs/1.0.4/dirs/fn.cache_dir.html
    [pull/426]: https://github.com/rustwasm/wasm-pack/pull/426

- ### 🤕 Fixes

  - **Fix `pack`, `login`, and `publish` for Windows users - [danwilhelm], [issue/277] [pull/489]**

    Rust's behavior for spawning processes on some Windows targets introduced an interesting case where
    Rust would fail unless the command was explicitly spawned with a prepended `cmd /c`. This failure
    of `wasm-pack` was well noticed by our community - and thanks to the efforts of `danwilhelm` is now
    fixed! You can read more on the background of this issue in [rust-lang/rust issue/44542].

    [rust-lang/rust issue/44542]: https://github.com/rust-lang/rust/pull/44542
    [issue/277]: https://github.com/rustwasm/wasm-pack/issues/277
    [pull/489]: https://github.com/rustwasm/wasm-pack/pull/489

  - **Validate `--target` argument - [csmoe], [issue/483] [pull/484]**

    For a few releases now, `wasm-pack` has supported allowing users to specifying the target module system
    they'd like their package built for- `browser`, `nodejs`, and `no-modules`. We did not however, validate
    this input, and so if a user made even a slight mistake, e.g. `node`, `wasm-pack` would not catch the
    error and would build your project using the default, `browser`. This is of course, surprising, and 
    unpleasant behavior and so now we'll error out with a message containing the supported target names.

    [issue/483]: https://github.com/rustwasm/wasm-pack/issues/483
    [pull/484]: https://github.com/rustwasm/wasm-pack/pull/484

  - **Fix login - [danwilhelm], [issue/486] [pull/487]**

    [danwilhelm]: https://github.com/danwilhelm
    [issue/486]: https://github.com/rustwasm/wasm-pack/issues/486
    [pull/487]: https://github.com/rustwasm/wasm-pack/pull/487

  - **Eliminate unecessary escaping in build success terminal output - [huangjj27], [issue/390] [pull/396]**

    Previously, on some systems, a successful `wasm-pack build` would print a unfortunate looking string:

    ```
    | :-) Your wasm pkg is ready to publish at "\\\\?\\C:\\Users\\Ferris\\tmp\\wasm-bug\\pkg".
    ```

    We've updated this to make sure the path to your project is well-formed, and most importantly, 
    human-readable.

    [issue/390]: https://github.com/rustwasm/wasm-pack/issues/390
    [pull/396]: https://github.com/rustwasm/wasm-pack/pull/396

  - **Copy license file(s) to out directory - [mstallmo], [issue/407] [pull/411]**

    Since `wasm-pack` was first published, we've copied over your `Cargo.toml` license definition over to
    your `package.json`. However, we overlooked copying the actual `LICENSE` files over! Now we do!

    [issue/407]: https://github.com/rustwasm/wasm-pack/issues/407
    [pull/411]: https://github.com/rustwasm/wasm-pack/pull/411

  - **Don't require cdylib crate-type for testing - [alexcrichton], [pull/442]**

    `wasm-pack` was unecssarily checking `Cargo.toml` for the `cdylib` crate type during calls to `wasm-pack test`.
    The `cdylib` output isn't necessary for the `wasm-pack test` stage because `wasm-bindgen` isn't being run over
    a wasm file during testing. This check is now removed!

    [pull/442]: https://github.com/rustwasm/wasm-pack/pull/442

  - **Fix wasm-bindgen if lib is renamed via `lib.name` - [alexcrichton], [issue/339] [pull/435]**

    In some circumstances, a library author may wish to specify a `name` in the `[package]` portion of their 
    `Cargo.toml`, as well as a different `name` in the `[lib]` portion, e.g.:

    ```toml
    [package]
    name = "hello-wasm"
  
    [lib]
    name = "wasm-lib"
    ```

    This would cause the `wasm-bindgen` build stage of `wasm-pack` to error out because `wasm-pack` would attempt
    to run `wasm-bindgen-cli` on a path using the `[package]` name, which wouldn't exist (because it would be using
    the `[lib]` name). Now it works- thanks to more usage of [`cargo_metadata`] in `wasm-pack` internals!

    [`cargo_metadata`]: https://crates.io/crates/cargo_metadata
    [issue/339]: https://github.com/rustwasm/wasm-pack/issues/339
    [pull/435]: https://github.com/rustwasm/wasm-pack/pull/435

  - **Print standard error only once for failing commands - [fitzgen], [issue/422] [pull/424]**

    Previously, `wasm-pack` may have printed `stderr` twice in some circumstances. This was both confusing and not
    a pleasant experience, so now we've ensued that `wasm-pack` prints `stderr` exactly once! (It's hard enough to have
    errors, you don't want `wasm-pack` rubbing it in, right?)

    [issue/422]: https://github.com/rustwasm/wasm-pack/issues/422
    [pull/424]: https://github.com/rustwasm/wasm-pack/pull/424

  - **Add no-modules to --target flag's help text - [fitzgen], [issue/416] [pull/417]**

    This is an interesting one! `fitzgen` very reasonably filed an issue asking to add `wasm-bindgen`'s 
    `--target no-modules` feature to `wasm-pack`. This was confusing as this feature was indeed already implemented,
    and documented- BUT, notably missing from the `wasm-pack --help` text. We've fixed that now- and it was an omission
    so glaring we definitely considered it a bug!

    [issue/416]: https://github.com/rustwasm/wasm-pack/issues/416
    [pull/417]: https://github.com/rustwasm/wasm-pack/pull/417

- ### 🛠️ Maintenance

  - **Replace `slog` with `log` - [alexcrichton], [issue/425] [pull/434]**

    For internal maintenance reasons, as well as several end-user ones, we've migrated away from the `slog` family
    of crates, and are now using the `log` crate plus `env_logger`. Now, `wasm-pack` won't create a `wasm-pack.log`.
    Additionally, enabling logging will now be done through `RUST_LOG=wasm_pack` instead of  `-v` flags. 

    [issue/425]: https://github.com/rustwasm/wasm-pack/issues/425
    [pull/434]: https://github.com/rustwasm/wasm-pack/pull/434

  - **Move binary installation to its own crate - [drager], [issue/384] [pull/415]**

    In `wasm-pack 0.5.0`, we move away from `cargo install`ing many of the tools that `wasm-pack` orchestrates. Because
    we used `cargo install`, this required an end user to sit through the compilation of each tool, which was a 
    prohibitively long time. We moved, instead, to building, and then installing, binaries of the tools. This sped up
    build times dramatically!

    This pattern has been very beneficial to `wasm-pack` and is potentially something that could be beneficial to other
    projects! As a result, we've refactored it out into a crate and have published it as it's own crate, [`binary-install`].

    [`binary-install`]: https://crates.io/crates/binary-install
    [drager]: https://github.com/drager
    [issue/384]: https://github.com/rustwasm/wasm-pack/issues/384
    [pull/415]: https://github.com/rustwasm/wasm-pack/pull/415

  - **Replace internal `Error` with `failure::Error` - [alexcrichton], [pull/436]**

    The story of error message handling in `wasm-pack` has not been the prettiest. We originally were manually implementing
    errors, adding the [`failure` crate] at one point, but not fully updating the entire codebase. With this PR, we are
    nearly completely handling errors with `failure`, bringing the code into a much more maintainable and 
    pleasant-to-work-on place.

    [`failure` crate]: https://crates.io/crates/failure
    [pull/436]: https://github.com/rustwasm/wasm-pack/pull/436

  - **Update `mdbook` version used by Travis - [fitzgen], [pull/433]**

    [pull/433]: https://github.com/rustwasm/wasm-pack/pull/433

  - **Read the `Cargo.toml` file only once - [fitzgen], [issue/25] [pull/431]**

    This is a very fun one since it fixes one of the original issues filed by `ag_dubs` at the very beginning of `wasm-pack`
    development. In a rush to implement a POC tool, `ag_dubs` noted for posterity that the `Cargo.toml` was being read 
    multiple times (twice), when it did not need to be. Thanks to `fitzgen` now it's read only once! A minor performance
    improvement in the scheme of things, but a nice one :)

    [issue/25]: https://github.com/rustwasm/wasm-pack/issues/25
    [pull/431]: https://github.com/rustwasm/wasm-pack/pull/431

  - **Use `name` field for Travis CI jobs - [fitzgen], [pull/432]**

    [pull/432]: https://github.com/rustwasm/wasm-pack/pull/432

  - **Add a test for build command - [huangjj27], [pull/408]**

    [huangjj27]: https://github.com/huangjj27
    [pull/408]: https://github.com/rustwasm/wasm-pack/pull/408

  - **Test paths on Windows - [xmclark], [issue/380] [pull/389]**

    [xmclark]: https://github.com/xmclark
    [issue/380]: https://github.com/rustwasm/wasm-pack/issues/380
    [pull/389]: https://github.com/rustwasm/wasm-pack/pull/389

  - **Fix typo in test function name for copying the README - [mstallmo], [pull/412]**

    [pull/412]: https://github.com/rustwasm/wasm-pack/pull/412

- ### 📖 Documentation

  - **Complete template deep dive docs - [danwilhelm], [issue/345] [issue/346] [pull/490]**

    In a rush to publish a release, `ag_dubs` left some "Coming soon!" comments on most pages
    of the "Template Deep Dive" docs. These docs help walk new users through the boilerplate
    that using the `wasm-pack` template generates for you. Thanks so much to `danwilhem` for
    picking this up and doing an excellent job!

    [issue/345]: https://github.com/rustwasm/wasm-pack/issues/345
    [issue/346]: https://github.com/rustwasm/wasm-pack/issues/346
    [pull/490]: https://github.com/rustwasm/wasm-pack/pull/490

  - **Minor docs updates - [fitzgen], [issue/473] [pull/485]**

    [issue/473]: https://github.com/rustwasm/wasm-pack/issues/473
    [pull/485]: https://github.com/rustwasm/wasm-pack/pull/485

## 🌄 0.5.1

- ### 🤕 Fixes

  - **Child Process and output management - [fitzgen], [issue/287] [pull/392]**

    Not exactly a "fix", but definitely a huge improvment in how child processes and their
    output are handled by `wasm-pack`. Ever sat at a long prompt from `wasm-pack` and
    wondered what was happening? No longer! Did `wasm-pack` eat your test output- no more!

    [issue/287]: https://github.com/rustwasm/wasm-pack/issues/287
    [pull/392]: https://github.com/rustwasm/wasm-pack/pull/392

  - **Less scary missing field  messages - [mstallmo], [issue/393] [pull/394]**

    After watching a livestream of someone using `wasm-pack`, [fitzgen] noted that folks
    seemed pretty alarmed by the loud warning about missing optional manifest fields.
    As a result, we are now downgrading those messages from WARN to INFO, and consolidating
    them on a single line.

    [issue/393]: https://github.com/rustwasm/wasm-pack/issues/393
    [pull/394]: https://github.com/rustwasm/wasm-pack/pull/394
  
  - **Add `exit_status` to CLI errors - [konstin], [issue/291] [pull/387]**

    We'd been hiding these- but we shouldn't have been!

    [konstin]: https://github.com/konstin
    [issue/291]: https://github.com/rustwasm/wasm-pack/issues/291
    [pull/387]: https://github.com/rustwasm/wasm-pack/pull/387

  - **Remove lingering forced nightly usage - [alexcrichton], [pull/383]**

    In 0.5.0 we removed all forced nightly usage as we depend on `~1.30` which is now
    available on both nightly and beta channels! We had a bit of a race condition with 
    that PR and the `wasm-pack test` PR, and missed a few as a result! This removes all
    lingering forced nightly, which only affected the `wasm-pack test` command.

    [pull/383]: https://github.com/rustwasm/wasm-pack/pull/383

  - **Fix `wasm-bindgen-test` dependency error message - [fitzgen], [issue/377] [pull/378]**

    The error message about missing the `wasm-bindgen-test` dependency errantly stated
    that the user was missing a `wasm-bindgen` dependency! We've fixed it to correctly
    state the missing dependency now.

    [issue/377]: https://github.com/rustwasm/wasm-pack/issues/377
    [pull/378]: https://github.com/rustwasm/wasm-pack/pull/378

  - **Fix prerequisites links in docs - [fitzgen], [pull/376]**

    [pull/376]: https://github.com/rustwasm/wasm-pack/pull/376

- ### 🛠️ Maintenance

  - **Leverage `failure::Error` consistently - [drager], [issue/280] [pull/401]**

    This PR finally makes it so that `wasm-pack` is handling errors in a consistent
    way across the codebase. 

    [drager]: https://github.com/drager
    [issue/280]: https://github.com/rustwasm/wasm-pack/issues/280
    [pull/401]: https://github.com/rustwasm/wasm-pack/pull/401

  

## ☀️ 0.5.0

- ### ✨ Features

  - #### **Website!** - [ashleygwilliams], [pull/246]

    We have a website now. It has the installer and links to documentation. In the future,
    we hope to have calls to action for folks first coming to the site who are looking to
    do specific things- these will help them find the docs and tutorials they need to.

    This PR also has a complete rework of our documentation.

    Check it out [here](https://rustwasm.github.io/wasm-pack/)!

  - #### 🍱 Module Support

    - **BREAKING: use correct `package.json` keys for generated JavaScript - [ashleygwilliams], [issue/309] [pull/312]**

      This is marked as potentially breaking because it changes the `package.json` keys that
      are generated by the project.

      Previously, we generated a JavaScript file and placed it in the `main` key, regardless
      of what you were targeting, ES6 and Node.js alike. 

      We have received a lot of requests for `wasm-pack` to generate "isomorphic" packages,
      that contain assets that could work on both Node.js and ES6, and this led to us 
      looking more closely at how we are using `package.json`.

      With this release, we will do the following:

      - `--target browser`: By default, we generate JS that is an ES6 module. We used to put
        this in the `main` field. Now we put it in the `module` field. We also add 
        `sideEffects: false` so that bundlers that want to tree shake can.

      - `--target nodejs`: This target doesn't change. We put generated JS that is a
        CommonJS module in the `main` key.

      - `--target no-modules`: This is a new target. For this target we generate bare JavaScript.
        This code is put in a `browser` field.

      You can see the structs that represent each target's expected `package.json` [here](https://github.com/rustwasm/wasm-pack/tree/master/src/manifest/npm).

      Thanks so much to [bterlson] for his help in sorting this out for us!

      [bterlson]: https://github.com/bterlson
      [issue/309]: https://github.com/rustwasm/wasm-pack/issues/309
      [pull/312]: https://github.com/rustwasm/wasm-pack/pull/312

  - #### 🛠️ New Commands

    - **`wasm-pack init` is now `wasm-pack build` - [csmoe], [issue/188] [pull/216]**

      When this project was first conceived, we imagined it would be simply a way to package
      up generate wasm and js and publish it to npm. Here we are at version `0.5.0` and we
      have become much more- an integrated build tool!

      As a result, the original command `init` does a lot more than that these days. We've
      renamed the command to better reflect the work it's actually doing. `init` will still
      work, but is deprecated now, and we will eventually remove it.

      [csmoe]: https://github.com/csmoe
      [issue/188]: https://github.com/rustwasm/wasm-pack/issues/188
      [pull/216]: https://github.com/rustwasm/wasm-pack/pull/216

    - **add new command: `wasm-pack test` - [fitzgen], [pull/271]**

      This is an experimental new command that will run your tests in Node.js or a headless
      browser using `wasm-pack test`. Check out this [tutorial](https://rustwasm.github.io/wasm-bindgen/wasm-bindgen-test/index.html)
      to learn more!

      [pull/271]: https://github.com/rustwasm/wasm-pack/pull/271

    - **add 2FA support to `wasm-pack publish` - [mstallmo], [issue/257] [pull/282]**

      We've been wrapping the `npm login` and `npm publish` commands as `wasm-pack login`
      and `wasm-pack publish` for a while now- but we didn't fully support two factor
      authentication. Now we do! (Be safe out there! 2FA is good for everyone!)

      [issue/257]: https://github.com/rustwasm/wasm-pack/issues/257
      [pull/282]: https://github.com/rustwasm/wasm-pack/pull/282

  - #### 🎏 New Flags

    - **New target, bare JavaScript: `--target no-modules`  - [ashleygwilliams], [issue/317] [pull/327]**

      `wasm-bindgen` offers a `no-modules` flag that until now, we didn't support. This flag
      produces bare, no modules JavaScript. So if that's your thing, this target is for you!

      [issue/317]: https://github.com/rustwasm/wasm-pack/issues/317
      [pull/327]: https://github.com/rustwasm/wasm-pack/pull/327

    - **`--access` flag for `wasm-pack` publish - [ashleygwilliams], [issue/297] [pull/299]**

      Many of our tutorials use scopes to help prevent folks from attempting to publish 
      packages that will lead to npm Registry errors because the package name already exists.

      However, by default, scoped packages are assumed by the npm registry to be private, and
      the ability to publish private packages to the npm registry is a paid feature. Worry not!
      Now you can pass `--access public` to `wasm-pack publish` and publish scoped packages
      publicly.

      [issue/297]: https://github.com/rustwasm/wasm-pack/issues/297
      [pull/299]: https://github.com/rustwasm/wasm-pack/pull/299

  - #### ✅ New Checks
    
    - **rustc version check - [ashleygwilliams], [issue/351] [pull/353]**

      Now that we have a new fangled installer, there's a chance that folks might install `wasm-pack`
      and not have Rust installed. Additionally, now that the features we required from the `nightly`
      channel of Rust have moved to `beta`- we don't need to enforce `nightly`.

      As of this release, we will check that your Rust version is above `1.30.0`. You can be on
      either the `nightly` or `beta` channel and all of `wasm-pack`s calls to `cargo` will
      respect that.

      Really hate this? You can pass `--mode force` to `wasm-pack` to skip this check. I hope you know
      what you're doing!

    - **coordinating wasm-bindgen versions and installing from binaries for improved speed - [datapup], [issue/146] [pull/244] [pull/324]**

      This is the true gem of this release. Have you been frustrated by how long `wasm-pack` takes to
      run? Overusing `--mode no-install`? This is the release you're looking for.

      Many releases back we realized that folks were struggling to keep the `wasm-bindgen` library
      that their project used in sync with the `wasm-bindgen` CLI application which `wasm-pack`
      runs for you. This became such an issue that we opted to force install `wasm-bindgen` to ensure
      that every `wasm-pack` user had the latest version.

      Like many technical solutions, this solved our original problem, but caused a new one. Now, we
      we are forcing a `cargo install` of `wasm-bindgen` on every run, and that means downloading
      and compiling `wasm-bindgen` everytime you want to run `wasm-pack`. That's unacceptable!

      We're happy to announce that we have a pretty great solution, and several more planned for
      future releases. As of this release, we will read your `Cargo.lock` to find the version of
      `wasm-bindgen` you are using in your local project. We will attempt to fetch a binary version
      of `wasm-bindgen` that matches your local version. We place that binary local to your project,
      and use it when you run `wasm-pack build`. The next time you run `wasm-pack build` we'll use
      that binary, instead of fetching a new one. We still fall back to `cargo install` for
      less common architectures but this is a huge speed improvement. Check out these benchmarks!

      ##### `wasm-pack` v0.4.2

      ```
      $ time wasm-pack init                   # fresh build
      real    1m58.802s
      user    14m49.679s
      sys     0m24.957s

      $ time wasm-pack init                   # re-build
      real    0m56.953s
      user    11m12.075s
      sys     0m18.835s

      $ time wasm-pack init -m no-install     # re-build with no-install
      real    0m0.091s
      user    0m0.052s
      sys     0m0.042s
      ```

      ##### `wasm-pack` v0.5.0

      ```
      $ time wasm-pack build                  # fresh build
      real    1m3.350s
      user    3m46.912s
      sys     0m6.057s

      $ time wasm-pack build                  # re-build
      real    0m0.230s
      user    0m0.185s
      sys     0m0.047s

      $ time wasm-pack build -m no-install    # re-build with no-install
      real    0m0.104s
      user    0m0.066s
      sys     0m0.041s
      ```

      [datapup]: https://github.com/datapup
      [issue/146]: https://github.com/rustwasm/wasm-pack/issues/146
      [pull/244]: https://github.com/rustwasm/wasm-pack/pull/244
      [pull/324]: https://github.com/rustwasm/wasm-pack/pull/324

    - **enforce `cargo build` with `--lib` - [ashleygwilliams], [issue/303] [pull/330]**

      Right now, `wasm-pack` only works on Rust library projects. But sometimes, if you're
      new to Rust, you might end up having a `main.rs` in your project, just by mistake.
      Some folks ran into this and realized that it can cause issues!

      As a result, we are enforcing that `cargo build` only build the library at this time.

      Want to use `wasm-pack` on a binary application? We're interested in hearing from you!
      Checkout [issue/326] and please comment! We want to support binary applicaitons in
      the future and are always happy and curious to hear about how folks use `wasm-pack`!

      [issue/326]: https://github.com/rustwasm/wasm-pack/issues/326
      [issue/303]: https://github.com/rustwasm/wasm-pack/issues/303
      [pull/330]: https://github.com/rustwasm/wasm-pack/pull/330

  - #### Installers and Releases

    - **Appveyor Windows Pre-Built binaries - [alexcrichton], [issue/147] [pull/301]**

      We finally got Appveyor to publish pre-built binaries to GitHub releases.
      Aside: I really wish there were an easier way to test and debug this stuff.

      [alexcrichton]: https://github.com/alexcrichton
      [issue/147]: https://github.com/rustwasm/wasm-pack/issues/147
      [pull/301]: https://github.com/rustwasm/wasm-pack/pull/301

    - **new experimental installer - [alexcrichton], [pull/307]**

      Whew, this one is exciting. Up until now, `wasm-pack` has been distributed using
      `cargo install`. This is not ideal for several reasons. Updating is confusing,
      and every time it's installed the user has to wait for it to compile- right at the
      moment they just want to hurry up and use it already.

      Say hello to the new `wasm-pack` installer- we have an executable for Windows
      and a `curl` script for *nix users. Not pleased with that? File an issue for your
      preferred distribution method and we'll do our best to get it working!

      This is experimental- so please try it out and file issues as you run into things!
      You'll always be able to use `cargo install` as a backup.

      Checkout the new installer [here](https://rustwasm.github.io/wasm-pack/installer/)!

      [pull/307]: https://github.com/rustwasm/wasm-pack/pull/307

- ### 🛠️ Maintenance

    - **testing fixture strategy improvements - [fitzgen], [pull/211] [pull/323]**

      [pull/211]: https://github.com/rustwasm/wasm-pack/pull/211
      [pull/323]: https://github.com/rustwasm/wasm-pack/pull/323

    - **split testing utils into separate files - [csmoe], [issue/231] [pull/216]**

      [issue/231]: https://github.com/rustwasm/wasm-pack/issues/231
      [pull/216]: https://github.com/rustwasm/wasm-pack/pull/216

    - **update dependencies - [ashleygwilliams], [issue/319] [pull/320]**

      [issue/319]: https://github.com/rustwasm/wasm-pack/issues/319
      [pull/320]: https://github.com/rustwasm/wasm-pack/pull/320

- ### 📖 Documentation

    - **improve readability of warnings about missing optional fields - [twilco], [pull/296]**

      A little punctuation goes a long way. Error message improvement PRs are the best.

      [twilco]: https://github.com/twilco
      [pull/296]: https://github.com/rustwasm/wasm-pack/pull/296

    - **update links in README - [alexcrichton], [pull/300]**

      We had a real dicey documentation situation for a while. Sorry about that, and thank
      you SO MUCH to all the folks who filed PRs to fix it.

      [pull/300]: https://github.com/rustwasm/wasm-pack/pull/300

    - **fix broken links in book by using relative paths - [mstallmo], [issue/325] [pull/328]**

      [mstallmo]: https://github.com/mstallmo
      [issue/325]: https://github.com/rustwasm/wasm-pack/issues/325
      [pull/328]: https://github.com/rustwasm/wasm-pack/pull/328

## ✨ 0.4.2

- #### 🤕 Fixes

  - **recognize `[dependencies.wasm-bindgen]` during dep check in `init` - [ashleygwilliams], [issue/221] [pull/224]**

    When we originally implemented the dependency check in `wasm-pack init` we naively only checked for the
    "simple" dependency declaration, `[dependencies] wasm-bindgen="0.2"`. However! This is not the only way
    to declare this dependency, and it's not the ideal way to do it if you want to specify features from the
    crate. Now that a bunch of folks want to use `features = ["serde-serialize"]` we ran into a bunch of folks
    having issues with our naive dependency checker! Thanks so much to [turboladen] for filing the very detailed
    issue that helped us solve this quickly!

    PSSSST! Curious what `features = ["serde-serialize"]` with `wasm-bindgen` actually does? It's awesome:

    > It's possible to pass data from Rust to JS not explicitly supported in the [Feature Reference](./feature-reference.md) by serializing via [Serde](https://github.com/serde-rs/serde).

    Read the [Passing arbitrary data to JS docs] to learn more!

    [Passing arbitrary data to JS docs]: https://github.com/rustwasm/wasm-bindgen/blob/master/guide/src/reference/arbitrary-data-with-serde.md
    [turboladen]: https://github.com/turboladen
    [issue/221]: https://github.com/rustwasm/wasm-pack/issues/221
    [pull/224]: https://github.com/rustwasm/wasm-pack/pull/224

  - **improve UX of publish and pack commands - [Mackiovello], [pull/198]**

    Previous to this fix, you would need to be in the parent directory of the `/pkg` dir to successfully run
    `pack` or `publish`. This was pretty crummy! Thankfully, [Mackiovello] swooped in with a fix, that you can
    find documented in the [pack and publish docs]!

    [Mackiovello]: https://github.com/Mackiovello
    [pull/198]: https://github.com/rustwasm/wasm-pack/pull/198
    [pack and publish docs]: https://github.com/rustwasm/wasm-pack/blob/05e4743c22b57f4c4a1bfff1df1d2cc1a595f523/docs/pack-and-publish.md

  - **use `PathBuf` instead of `String` for paths - [Mackiovello], [pull/220]**

    This is mostly a maintenance PR  but does fix one very small bug- depending on if you add a trailing slash to
    a path that you pass to `init`, you might have seen an extra `/`! Now that we're using a proper Type to
    handle this, that's much better, and in general, all the operations using paths are more robust now.

    [pull/220]: https://github.com/rustwasm/wasm-pack/pull/220

- #### 📖 Documentation

  - **update docs and tests to eliminate no longer necessary feature flags - [ashleygwilliams], [pull/226]**

    The Rust 2018 edition marches on and we are seeing feature flags drop like flies :) Instead of a whole slew
    of feature flags, we now only need one, `#![feature(use_extern_macros)]`, and that one is also not long for
    this world :)
  
    [pull/226]: https://github.com/rustwasm/wasm-pack/pull/226


## ⭐ 0.4.1

- #### 🤕 Fixes

  - **fix `files` key value for projects build for `nodejs` target - [ashleygwilliams], [issue/199] [pull/205]**

    We became aware that the `files` key in `package.json` did not include the additional `_bg.js` file that 
    `wasm-bindgen` generates for projects being built for the `nodejs` target. This resulted in the file not
    being included in the published package and resulted in a `Module Not Found` error for folks.

    This was a group effort from [mciantyre] with [pull/200] and [Brooooooklyn] with [pull/197]. Thank you so
    much for your diligence and patience while we sorted through it.

    [mciantyre]: https://github.com/mciantyre
    [Brooooooklyn]: https://github.com/Brooooooklyn
    [issue/199]: https://github.com/rustwasm/wasm-pack/issues/199
    [pull/205]: https://github.com/rustwasm/wasm-pack/pull/205
    [pull/197]: https://github.com/rustwasm/wasm-pack/pull/197
    [pull/200]: https://github.com/rustwasm/wasm-pack/pull/200

- #### 🛠️ Maintenance

  - **clean up `quicli` remnants - [SoryRawyer], [pull/193]**

    In [v0.3.0] we removed the `quicli` dependency, however there were a few remnants
    left behind. They are now removed!

    [SoryRawyer]: https://github.com/SoryRawyer
    [pull/193]: https://github.com/rustwasm/wasm-pack/pull/193
    [v0.3.0]: https://github.com/rustwasm/wasm-pack/blob/master/CHANGELOG.md#-030

- #### 📖 Documentation

  - **DOCUMENT EVERYTHING!! and deny missing docs for all future development - [fitzgen], [pull/208]**

    The `wasm-pack` team has worked hard on tutorial documentation and keeping the codebase as self-explanatory
    as possible, but we have been slowly accruing a documentation debt. This amazing PR, landed just moments
    before this point release and was just too good not to include. Thank you so much, [fitzgen]!

    [fitzgen]: https://github.com/fitzgen
    [pull/208]: https://github.com/rustwasm/wasm-pack/pull/208

  - **fix README code example - [steveklabnik], [pull/195]**

    The code example in our `README.md` was missing a critical `pub`. It's there now!

    [pull/195]: https://github.com/rustwasm/wasm-pack/pull/195/files

  - **fix README markup - [Hywan], [pull/202]**

    There was an errant `` ` `` - it's gone now!

    [Hywan]: https://github.com/Hywan
    [pull/202]: https://github.com/rustwasm/wasm-pack/pull/202

## 🌟 0.4.0

This release has a ton of awesome things in it, but the best thing is that
almost all of this awesome work is brought to you by a **new** contributor
to `wasm-pack`. Welcome ya'll! We're so glad to have you!

### ✨ Features

- #### 🎏 New Flags

  - **`--mode` flag for skipping steps when calling `init` - [ashleygwilliams], [pull/186]** 

      After teaching and working with `wasm-pack` for some time, it's clear that people would
      like the flexibility to run some of the steps included in the `init` command and not others.
      This release introduces a `--mode` flag that you can pass to `init`. The two modes currently
      available are `skip-build` and `no-installs` and they are explained below. In the future, 
      we are looking to change the `init` interface, and potentially to split it into two commands.
      If you have thoughts or opinions on this, please weigh in on [issue/188]!

      [issue/188]: https://github.com/ashleygwilliams/wasm-pack/issues/188
      [pull/186]: https://github.com/ashleygwilliams/wasm-pack/pull/186

    - **`skip-build` mode - [kohensu], [pull/151]**

      ```
      wasm-pack init --mode skip-build
      ```

      Sometimes you want to run some of the shorter meta-data steps that
      `wasm-pack init` does for you without all the longer build steps. Now
      you can! Additionally, this PR was a fantastic refactor that allows even
      more custom build configurations will be simple to implement!

      [kohensu]: https://github.com/kohensu
      [pull/151]: https://github.com/ashleygwilliams/wasm-pack/pull/151

    - **`no-installs` mode - [ashleygwilliams], [pull/186]**

      ```
      wasm-pack init --mode no-installs
      ```

      Sometimes you want to run `wasm-pack` and not have it modify your global
      env by installing stuff! Or maybe you are just in a hurry and trust your
      env is set up correctly- now the `--mode no-install` option allows you to
      do this.

  - **`--debug`  - [clanehin], [pull/127]**

    ```
    wasm-pack init --debug
    ```

    Find yourself needing to compile your Rust in `development` mode? You can now
    pass the `--debug` flag to do so! Thanks so much to [clanehin] for filing 
    [issue/126] for this feature... and then implementing it!

    [pull/127]: https://github.com/ashleygwilliams/wasm-pack/pull/127
    [issue/126]: https://github.com/ashleygwilliams/wasm-pack/issues/126
    [clanehin]: https://github.com/clanehin

- #### ✅ New Checks

  - **ensure you have `cdylib` crate type - [kendromelon], [pull/150]**

    One of the biggest mistakes we've seen beginners make is forgetting to declare
    the `cdylib` crate type in their `Cargo.toml` before running `wasm-pack init`.
    This PR fixes that, and comes from someone who ran into this exact issue learning
    about `wasm-pack` at [JSConfEU]! Love when it works out like this.

    [JSConfEU]: https://2018.jsconf.eu/
    [kendromelon]: https://github.com/kedromelon
    [pull/150]: https://github.com/ashleygwilliams/wasm-pack/pull/150

  - **ensure you have declared wasm-bindgen as a dep - [robertohuertasm], [pull/162]**

    Another easy mistake to make is to forget to declare `wasm-bindgen` as a
    dependency in your `Cargo.toml`. Now `wasm-pack` will check and make sure you
    have it set before doing a bunch of long build steps :)

    [robertohuertasm]: https://github.com/robertohuertasm
    [pull/162]: https://github.com/ashleygwilliams/wasm-pack/pull/162

  - **ensure you are running `nightly` - [FreeMasen], [pull/172]**

    `wasm-pack` currently requires that you run it with `nightly` Rust. Now, `wasm-pack`
    will make sure you have `nightly` installed and will ensure that `cargo build` is run
    with `nightly`. Thanks so much to [FreeMasen] for filing [issue/171] and fixing it!

    [FreeMasen]: https://github.com/FreeMasen
    [issue/171]: https://github.com/ashleygwilliams/wasm-pack/issues/171
    [pull/172]: https://github.com/ashleygwilliams/wasm-pack/pull/172

### 🤕 Fixes

- **fixed broken progress bar spinner - [migerh], [pull/164]**

  Oh no! We broke the progress bar spinner in version 0.3.0. Thankfully, it's
  fixed now- with a thoughtful refactor that also makes the underlying code
  sounder overall.

[migerh]: https://github.com/migerh
[pull/164]: https://github.com/ashleygwilliams/wasm-pack/pull/164

### 🛠️ Maintenance

- **WIP bot - [ashleygwilliams] & [mgattozzi], [issue/170]**

  We've got a lot of work happening on `wasm-pack` so it's good to have a bit
  of protection from accidentally merging a Work In Progress. As a result, we
  now have the [WIP Github App] set up on `wasm-pack`. Great suggestion [mgattozzi]!

  [WIP Github App]: https://github.com/wip/app
  [issue/170]: https://github.com/ashleygwilliams/wasm-pack/issues/170

- **modularize `command.rs` - [ashleygwilliams], [pull/182]**

  Thanks to the growth of `wasm-pack`, `command.rs` was getting pretty long.
  We've broken it out into per command modules now, to help make it easier to
  read and maintain!

  [pull/182]: https://github.com/ashleygwilliams/wasm-pack/pull/182

- **improve PoisonError conversion - [migerh], [pull/187]**

  As part of the awesome progress bar spinner fix in [pull/164], [migerh] introduced
  a small concern with an `unwrap` due to an outstanding need to convert `PoisonError`
  into `wasm-pack`'s custom `Error`. Though not a critical concern, [migerh] mitigated
  this right away by replacing `std::sync::RwLock` with the [`parking_lot` crate]!
  This cleaned up the code even more than the previous patch!

  [`parking_lot` crate]: https://github.com/Amanieu/parking_lot
  [pull/187]: https://github.com/ashleygwilliams/wasm-pack/pull/187

- **wasm category for crates.io discovery- [TomasHubelbauer], [pull/149]**

  [crates.io] has [categories] to help folks discover crates, be we weren't
  leveraging it! Now- if you explore the [`wasm` category] on [crates.io]
  you'll see `wasm-pack`!

[crates.io]: https://crates.io/
[categories]: https://crates.io/categories
[`wasm` category]: https://crates.io/categories/wasm
[TomasHubelbauer]: https://github.com/TomasHubelbauer
[pull/149]: https://github.com/ashleygwilliams/wasm-pack/pull/149

- **human panic is now 1.0.0 - [spacekookie], [pull/156]**

  Congrats friends! We like what you do.

[pull/156]: https://github.com/ashleygwilliams/wasm-pack/pull/156
[spacekookie]: https://github.com/spacekookie

### 📖 Documentation

- **cleaned up the README - [ashleygwilliams], [pull/155]**

  Our `README` was struggling with a common problem- doing too much at once.
  More specifically, it wasn't clear who the audience was, contributers or 
  end users? We've cleaned up our README and created a document specifically
  to help contributors get up and running.

[pull/155]: https://github.com/ashleygwilliams/wasm-pack/pull/155

## 🌠 0.3.1

Babby's first point release! Are we a real project now?

### 🤕 Fixes 

- **fixed `init` `Is a Directory` error - [ashleygwilliams], [pull/139]**

  Our new logging feature accidentally introduced a regression into 0.3.0. When
  calling `wasm-pack init`, if a directory was not passed, a user would receive
  a "Is a Directory" Error. Sorry about that! Thanks to [jbolila] for filing 
  [issue/136]!

[pull/139]: https://github.com/ashleygwilliams/wasm-pack/pull/139
[issue/136]: https://github.com/ashleygwilliams/wasm-pack/issues/136
[jbolila]: https://github.com/jbolila

- **typescript files were not included in published package - [danreeves], [pull/138]**

  Generating Typescript type files by default was a pretty rad feature in
  0.3.0 but we accidentally forgot to ensure they were included in the 
  published package. Thanks so much to [danreeves] for catching this issue 
  and fixing it for us!

[danreeves]: https://github.com/danreeves
[pull/138]: https://github.com/ashleygwilliams/wasm-pack/pull/138

## 💫 0.3.0

### ✨ Features

- **Logging - [mgattozzi], [pull/134]**

  Up until now, we've forced folks to rely on emoji-jammed console output to debug
  errors. While emojis are fun, this is often not the most pleasant experience. Now
  we'll generate a `wasm-pack.log` file if `wasm-pack` errors on you, and you can
  customize the log verbosity using the (previously unimplemented) verbosity flag.

[pull/134]: https://github.com/ashleygwilliams/wasm-pack/pull/134

- **`--target` flag - [djfarly], [pull/132]**

  `wasm-bindgen-cli` is able to generate a JS module wrapper for generated wasm files
  for both ES6 modules and CommonJS. Up until now, we only used wasm-bindgen's default
  behavior, ES6 modules. You can now pass a `--target` flag with either `nodejs` or 
  `browser` to generate the type of module you want to use. Defaults to `browser` if not
  passed.

[djfarly]: https://github.com/djfarly
[pull/132]: https://github.com/ashleygwilliams/wasm-pack/pull/132

- **human readable panics - [yoshuawuyts], [pull/118]**

  Panics aren't always the most friendly situation ever. While we never want to panic on ya,
  if we do- we'll do it in a way that's a little more readable now.

[pull/118]: https://github.com/ashleygwilliams/wasm-pack/pull/118

- **typescript support by default - [kwonoj], [pull/109]**

  `wasm-bindgen` now generates typescript type files by default. To suppress generating
  the type file you can pass the `--no-typescript` flag. The type file is useful for more
  than just typescript folks- many IDEs use it for completion!

[kwonoj]: https://github.com/kwonoj
[pull/109]: https://github.com/ashleygwilliams/wasm-pack/pull/109

- **wrap `npm login` command - [djfarly], [pull/100]**

  In order to publish a package to npm, you need to be logged in. You can now use
  `wasm-pack login` to login to the npm (or any other) registry.

[pull/100]: https://github.com/ashleygwilliams/wasm-pack/pull/100

- **exit early on failure - [mgattozzi], [pull/90]**

  Until now, `wasm-pack` would continue to run tasks, even if a task failed. Now- if something
  fails, we'll exit so you don't have to wait to fix the error.

[pull/90]: https://github.com/ashleygwilliams/wasm-pack/pull/90

### 🤕 Fixes

- **force install wasm-bindgen - [ashleygwilliams], [pull/133]**

  Using an out of date version of `wasm-bindgen` can run you into a bunch of trouble. This
  very small change should fix the large number of bug reports we received from users using
  an out of date `wasm-bindgen-cli` by force installing `wasm-bindgen-cli` to ensure the user
  always has the latest version. We don't expect this to be a forever solution (it's a bit
  slow!) but it should help those who are getting started have a less rough time.

[pull/133]: https://github.com/ashleygwilliams/wasm-pack/pull/133

- **fix CI release builds - [ashleygwilliams], [pull/135]**

  This was not working! But now it is! You can always use `cargo install` to install
  wasm-pack, but now you can find pre-built Linux and Mac binaries in the [Releases]
  tab of our GitHub repo.

[Releases]: https://github.com/ashleygwilliams/wasm-pack/releases
[pull/135]: https://github.com/ashleygwilliams/wasm-pack/pull/135   

### 🛠️ Maintenance 

- **remove `quicli` dependency - [mgattozzi], [pull/131]**

  While `quicli` is a great way to get started writing a CLI app in Rust- it's not meant for 
  large, mature applications. Now that `wasm-pack` is bigger and has many active users, we've
  removed this dependency to unblock further development on the tool.

[pull/131]: https://github.com/ashleygwilliams/wasm-pack/pull/131

- **update rustfmt CI test - [djfarly], [pull/128]**

  Since 0.2.0 how one should call `rustfmt` changed! We've kept it up to date so we can continue
  to maintain conventional style in the codebase.

[pull/128]: https://github.com/ashleygwilliams/wasm-pack/pull/128

- **custom module for errors - [mgattozzi], [pull/120]**

  Thanks to the `failure` crate, we've been playing fast and loose with errors for a bit. We're
  finally getting serious about error handling - by organizing all of our specific errors in a
  specific module. This will make it easier to communicate these errors out and handle new error
  cases from future features.

[pull/120]: https://github.com/ashleygwilliams/wasm-pack/pull/120

### 📖 Documentation

Special thanks to [data-pup] who continues to be our documentation champion! In case you missed it,
check out the guides in the [docs directory!](docs)!

## 🌌 0.2.0

This release focuses on filling out all commands and improving stderr/out
handling for improved user experience!

### ✨ Features

- **`pack` and `publish` - [jamiebuilds], [pull/67]**
  You can now run `wasm-pack pack` to generate a tarball of your generated package,
  as well as run `wasm-pack publish` to publish your package to the npm registry.
  Both commands require that you have npm installed, and the `publish` command requires
  that you be logged in to the npm client. We're working on wrapping the `npm login`
  command so that you can also login directly from `wasm-pack`, see [pull/100] for more
  details.

[jamiebuilds]: https://github.com/jamiebuilds
[pull/67]: https://github.com/ashleygwilliams/wasm-pack/pull/67
[pull/100]: https://github.com/ashleygwilliams/wasm-pack/pull/100

- **`package.json` is pretty printed now - [yoshuawuyts], [pull/70]**

  Previously, `package.json` was not very human readable. Now it is pretty printed!

- **`collaborators` - [yoshuawuyts], [pull/70]**

  `wasm-pack` now will fill out the `collaborators` field in your `package.json` for
  you based on your `Cargo.toml` `authors` data. For more discussion on how we decided
  on this v.s. other types of `author` fields in `package.json`, see [issues/2].

[yoshuawuyts]: https://github.com/yoshuawuyts
[pull/70]: https://github.com/ashleygwilliams/wasm-pack/pull/70
[issues/2]: https://github.com/ashleygwilliams/wasm-pack/issues/2

- **Release binaries built with CI - [ashleygwilliams], [pull/103]**

[ashleygwilliams]: https://github.com/ashleygwilliams
[pull/103]: https://github.com/ashleygwilliams/wasm-pack/pull/103

### 🤕 Fixes

- **Optional `package.json` fields warn instead of failing - [mgattozzi], [pull/65]**

[pull/65]: https://github.com/ashleygwilliams/wasm-pack/pull/65

- **Program doesn't swallow stout and sterr - [mgattozzi], [pull/90]**

[mgattozzi]: https://github.com/mgattozzi
[pull/90]: https://github.com/ashleygwilliams/wasm-pack/pull/90

### 🛠️ Maintenance and 📖 Documentation

Thanks so much to [mgattozzi], [data-pup], [sendilkumarn], [Andy-Bell], 
[steveklabnik], [jasondavies], and [edsrzf] for all the awesome refactoring,
documentation, typo-fixing, and testing work. We appreciate it so much!

[data-pup]: https://github.com/data-pup
[sendilkumarn]: https://github.com/sendilkumarn
[Andy-Bell]: https://github.com/Andy-Bell
[steveklabnik]: https://github.com/steveklabnik
[jasondavies]: https://github.com/jasondavies
[edsrzf]: https://github.com/edsrzf

## 💥  0.1.0

- First release! 
