Releases: elringus/bootsharp
v0.8.0
This release ships many new features and enhancements I've wanted to add over the last 3 years while using Bootsharp extensively in production, notably:
- The NativeAOT-LLVM compiler is now shipped with the package and used by default for release builds. Compared to .NET's stock AOT compiler, it produces faster and smaller builds.
- Replaced .NET's JSON serializer with our own binary serializer, fine-tuned for maximum performance in WASM. Combined with the LLVM compiler, this improved marshalling performance by 2.5x (outperforming Rust's wasm-bindgen!) and, most importantly, reduced the WASM binary size by ~30%.
- Radically expanded supported interop surfaces: properties, events, delegates, generic and overloaded methods, nested instances — Bootsharp now supports most common API shapes and value types out of the box.
- It's now possible to customize how Bootsharp treats specific types via specialization. This allows, for example, supporting
CancellationTokenas both exported and imported values while preserving the underlying CTS identity. - The interop shape is now projected into ES modules instead of a monolithic JS file, improving the UX when consuming the APIs on the JS side and making the generated package friendlier for modern bundlers.
The release also has many breaking changes; check the commits annotated with ! for details. I've intentionally accumulated all the major changes into a single release, so that we can update the downstream projects in a batch. From this point on, I expect no major breaking changes. Once #196 is resolved and Microsoft stabilizes their new WASM R2R compiler (replaces Mono for debug builds, we'll still use LLVM for release), I'll consider tagging 1.0.
Special thanks to @OptimusPi for financially supporting the project — it pushed me to improve Bootsharp beyond the needs of my own projects, making it more useful to the community. If you find Bootsharp helpful, please consider sponsoring me on GitHub.
What's Changed
- feat!: binary serialization by @elringus in #189
- feat!: use llvm by default by @elringus in #190
- fix: unable to use imports under non-entry assemblies by @elringus in #191
- fix: npx interactivity loss by @elringus in #192
- feat: support visual studio build host by @elringus in #193
- feat!: use .net 10 runtime config by @elringus in #194
- feat: improve debug experience by @elringus in #195
- feat: support globalization by @elringus in #197
- feat: support properties by @elringus in #198
- feat: emit documentation by @elringus in #199
- feat!: support events by @elringus in #200
- feat!: boundless interop by @elringus in #201
- feat: static properties by @elringus in #202
- feat!: remove embed and mt modes by @elringus in #203
- fix!: remove computed props on serialized types by @elringus in #204
- feat!: emit esm package by @elringus in #206
- feat: support overloaded methods by @elringus in #207
- feat: support delegates by @elringus in #208
- feat!: restore embedded mode by @elringus in #209
- feat!: named wasm by @elringus in #210
- feat: type specialization by @elringus in #211
- feat: generic methods by @elringus in #213
Full Changelog: v0.7.0...v0.8.0