Releases: unoplatform/Uno.Wasm.Bootstrap
9.0.3
This new release of the Uno.Wasm.Bootstrap adds support for .NET 9 and removes the need for a custom-built .NET runtime. This package is now taking full advantage of .NET WebAssembly workloads by Microsoft.
Among the SDK features that are now available as part of .NET 9:
- Incremental Builds support, particularly when AOT is involved.
- Satellite assemblies, Timezone and ICU partial downloads, giving the ability for localized to be fetched for relevant browser cultures
- WebCIL, used to reduce the impacts of antiviruses
- Individual assemblies cache breaker, used to ensure resources are not downloaded unnecessarily when unchanged.
- Browser application caching for assemblies, used to initialize apps faster and avoid using the HTTP cache
- CIL Strip after AOT, used to remove code that has been AOT compiled from assemblies
- Jiterpreter updates to improve the Wasm interpreter mode performance
- AOT builds can now be created on macOS, Windows arm64 and Linux arm64
- Python and emscripten are now automatically managed by the .NET SDK, and ninja-build is not needed anymore
- Improved debugging support, as the whole tooling chain provided by .NET, making it natively compatible with VS and VS Code.
To migrate to .NET 9, make sure to take a look at our docs.
See the full changelog below.
What's Changed
- docs: Adjust prefetch documentation by @jeromelaban in #792
- ci: Adjust version by @jeromelaban in #793
- fix: remove double slash in the path of uno-config.js by @TopProgrammer77 in #791
- fix: Disable service worker in debug to work around service workers interfering with browserlink by @jeromelaban in #801
- Update to 8.0.100 RTM (backport #804) by @mergify in #805
- fix: Adjust for spaces in nuget path by @jeromelaban in #807
- ci: Adjust .NET version in GHA by @jeromelaban in #808
- fix: More tuner fix for space in nuget path by @jeromelaban in #810
- fix: Remove readonly attribute for output path deletion by @jeromelaban in #815
- fix: Adjust task version rename by @jeromelaban in #818
- fix: Restore clean target by @jeromelaban in #820
- docs: Clarify initial_memory by @jeromelaban in #824
- fix: Specify root mode for root assembly by @ebariche in #825
- fix: Ensure that Microsoft.NET.ILLink.Tasks is included in 8.0.200 and later by @jeromelaban in #827
- perf: Fully disable prefetching by @ebariche in #829
- fix: Don't define caps when the uno.sdk is present by @jeromelaban in #831
- fix: Adjust support for custom target frameworks by @jeromelaban in #834
- fix: Update runtime to latest by @ebariche in #839
- fix: Set COEP/COOP headers when platform is not AnyCPU by @ebariche in #842
- Adjust for FullAOT removal by @jeromelaban in #844
- fix: Align linker version with ILLinkPack resolution by @ebariche in #845
- chore: Add docs uids by @jeromelaban in #846
- fix(macOS): Don't link icalls to avoid using the cross-compiler by @jeromelaban in #847
- [doc] Correct link and add info about existing
Linkerconfig.xml
on WASM by @TopperDEL in #849 - doc: Correct small typo by @TopperDEL in #850
- docs: Enable markdown linting and spell checking with related fixes by @agneszitte in #851
- docs: Improve memory profiling doc by @jeromelaban in #853
- feat: Support new Fingerprint and Integrity metadata required in .NET 9 SDK Preview 4 by @Youssef1313 in #855
- chore(deps): bump Microsoft.Identity.Client from 4.14.0 to 4.61.3 in /src/Uno.Wasm.SampleNet7 by @dependabot in #858
- fix: Correctly emit PWA manifest path by @ebariche in #861
- fix: Multiple native files compilation by @jeromelaban in #865
- fix: Use assembly full path search first by @jeromelaban in #866
- docs: Update GC docs by @jeromelaban in #870
- chore(deps): bump System.Text.Json from 5.0.0 to 8.0.4 in /src/Uno.Wasm.Bootstrap by @dependabot in #871
- fix: Ensure PWA manifest path is not rewritten by @ebariche in #873
- Improve Readme.md by @mikeirvingweb in #876
- fix: pass same-origin credentials - fixes #875 by @mikeirvingweb in #877
- docs: Fix Broken Links by @morning4coffe-dev in #879
- fix: Adjust deprecated meta tag by @MartinZikmund in #882
- chore: Update DeepLinking in toc.yml by @morning4coffe-dev in #880
- fix: Adjust .NET 9.0 SDK compatibility, warn on net9.0 incompatibility by @jeromelaban in #887
- ci: Update upload-artifact to v4 by @Youssef1313 in #889
- .NET 9 Support by @jeromelaban in #884
- fix: Adjust static assets generation sequence by @jeromelaban in #890
- fix: Delay uno-assets.txt generation by @jeromelaban in #891
- fix: Remove leading / in uno-assets.txt by @jeromelaban in #892
- fix: Don't report long path error on non-windows by @jeromelaban in #893
- fix: Use relative path for project-local css/scripts by @jeromelaban in #894
- fix: Don't generate duplicate Scripts/Css by @jeromelaban in #895
- Misc net9 updates by @jeromelaban in #896
- Misc HR updates by @jeromelaban in #897
- fix: Restore offline PWA support by @jeromelaban in #898
- chore(deps): bump System.Text.Json from 8.0.4 to 8.0.5 in /src/Uno.Wasm.Bootstrap by @dependabot in #901
- chore: Upgrade to net9 rc2 by @jeromelaban in #900
- fix: Restore cache breaking by @jeromelaban in #903
- fix: Don't allow for net8.0 or below to use bootstrapper by @jeromelaban in #904
- fix: Adjust emscripten version (backport #906) by @mergify in #907
- Native references adjustements (backport #909) by @mergify in #910
New Contributors
- @TopProgrammer77 made their first contribution in #791
- @TopperDEL made their first contribution in #849
- @agneszitte made their first contribution in #851
- @Youssef1313 made their first contribution in #855
- @mikeirvingweb made their first contribution in #876
Full Changelog: 8.0.0...9.0.3
8.0.0
This new release of the Uno.Wasm.Bootstrap package aligns with the .NET 8.0 RC2 release. This release is aligned with Uno Platform 5.0, checkout out our announcement for more details!
It includes many bug fixes and enhancements:
- Build performance improvements
- SIMD is now enabled by default
- CSP support
- Satellite assemblies localization support
- Threading improvements
- The new
uno-wasm-version
tool to check the version of assemblies in a published app - Support for
WebAssemblyHttpRequestMessageExtensions
- Extension-less obfuscation for improved support with enhanced firewalls
- Fixed embedded mode support
- Ensured that
INITIAL_MEMORY
is configurable - Compatibility with "VS Build Acceleration"
Complete changelog
- Switch to .NET 8 by @jeromelaban in #589
- cI: Adjust major version by @jeromelaban in #590
- fix(debugger): Adjust pdb loading entry point and location by @jeromelaban in #591
- fix(staticassets): Don't include static assets
StaticWebAsset
in the ShellTask assets property by @jeromelaban in #593 - fix: Report failure properly on linker errors by @jeromelaban in #597
- fix(threads): Don't enable secure mode unless threading is enabled for local server by @jeromelaban in #601
- fix: Add additional compressed extensions by @jeromelaban in #604
- fix: Cleanup more dist files by @jeromelaban in #587
- fix(threads): missing max threads parameter by @jeromelaban in #608
- Always use response compression by @mmarinchenko in #521
- Fixed Typo in Section Title by @Meloncon in #611
- fix: restore metadata updated, include new pdb delta by @jeromelaban in #612
- feat: Use SDK provided linker for performance by @jeromelaban in #614
- docs: Adjust powershell remotesigned docs by @jeromelaban in #615
- New
uno-wasm-version
tool by @carldebilly in #490 - feat: Add support for WebAssemblyHttpRequestMessageExtensions by @jeromelaban in #606
- chore(deps): bump ws from 6.2.1 to 7.5.7 in /src/WasmAot.UITests by @dependabot in #488
- chore: Rename versionchecker project by @jeromelaban in #619
- fix(outputpath): Adjust for output path customization by @jeromelaban in #620
- fix(reg): escaping for intermediate output path by @jeromelaban in #621
- fix: Fixed service worker install error by @trungnt2910 in #625
- ci: Adjust nuget author and copyright by @jeromelaban in #644
- fix: Adjust for IntermediateOutputPath requiring a sub-path of the current project by @jeromelaban in #649
- fix: Adjust devserver for absolute OutputPath override by @jeromelaban in #650
- chore(deps): bump Newtonsoft.Json from 12.0.1 to 13.0.2 in /src/Uno.Wasm.Bootstrap by @dependabot in #628
- fix: Publish dist folder in wwwroot to align with default UseStaticFiles behavior by @jeromelaban in #653
- Adjust service worker installation by @jeromelaban in #660
- fix(reg): Remove invalid offline file inclusion by @jeromelaban in #661
- fix: Ensure build failure on emscripten install failure on Windows by @jeromelaban in #666
- feat(localization): Add support satellite resource assemblies publishing by @jeromelaban in #665
- fix: Don't depend on Microsoft.AspNetCore.App by @jeromelaban in #667
- chore: Backport of dotnet/runtime#77709 by @jeromelaban in #671
- fix: Adjust authors nuget property by @jeromelaban in #673
- chore: Adjust Uno.Wasm.HttpRequestMessageExtensions package description by @jeromelaban in #677
- fix(obj): Remove invalid obj files in nuspec by @jeromelaban in #678
- docs: Sync Readme.md with doc/toc.yml (except for release-procedure.md) by @mmarinchenko in #680
- fix(wsl): Adjust support for missing net7 linker binaries by @jeromelaban in #681
- Enable WSL validation, adjust path conversion by @jeromelaban in #684
- feat: Adjust support for CSP by @jeromelaban in #689
- docs: update text and link to Microsoft Store by @morning4coffe-dev in #690
- fix: Disable local server compression to enable BrowserLink by @jeromelaban in #695
- feat(obfuscation): Adds support for extension-less assembly URIs by @jeromelaban in #694
- Themeable accent color, Persistent splashscreen background by @MartinZikmund in #692
- ci: Static WebApp validation by @jeromelaban in #700
- fix(windows): Adjust tuner invocations to use a response file by @jeromelaban in #701
- docs: Update ubuntu directions by @jeromelaban in #703
- docs: Update debugger-support.md by @mmarinchenko in #705
- docs: Update features-pre-compression.md by @mmarinchenko in #704
- feat!(?): Do not remove loader unless explicitly required by @MartinZikmund in #699
- fix(exception): Fixed support when other files are published by @carldebilly in #711
- fix: Default image should be relative to Uno Platform domain by @nickrandolph in #713
- feat: Allow Uno app to persist the loader by @MartinZikmund in #712
- fix: Adjust splash screen image sizing by @MartinZikmund in #707
- fix(extensionless): Adjust for filename-only renaming by @jeromelaban in #715
- fix(aot): Generate logging on empty assembly generation by @jeromelaban in #720
- fix(tuner): Don't copy the tuner binaries in the runtime tools folder by @jeromelaban in #721
- fix: Avoid Microsoft Edge visual search popup by @MartinZikmund in #719
- fix: Avoid re-removing loader by @MartinZikmund in #723
- chore: Update to latest runtime main by @jeromelaban in #718
- fix: Adjust response file for aot-instances by @jeromelaban in #726
- fix(embedded): Fixed broken embedded mode by @carldebilly in #728
- chore: Update to latest runtime by @jeromelaban in #729
- chore: Restore original module access, ensure exports validation by @jeromelaban in #730
- fix: Adjust aot profile generation by @jeromelaban in #731
- chore: Update to latest runtime by @jeromelaban in #733
- fix: Build aot-intances with th...
7.0.15
What's Changed
- fix(threads): missing max threads parameter (backport #608) in #609
- fix: restore metadata updated, include new pdb delta (backport #612) in #613
- fix(outputpath): Adjust for output path customization (backport #620) in #623
- feat: Use SDK provided linker for performance (backport #614) in #622
- fix: Fixed service worker install error (backport #625) bin #626
- Adjust service worker installation (backport #660) in #663
- chore: Update to SDK 7.0.102 in #664
- fix: Ensure build failure on emscripten install failure on Windows (backport #666) in #668
- feat(localization): Add support satellite resource assemblies publishing (backport #665) in #675
Full Changelog: 7.0.6...7.0.15
7.0.6
WebAssembly Bootstrap 7.0
Along with the .NET 7 support, we’re introducing a stable version of the Uno.Wasm.Bootstrap package, the foundation of Uno.UI’s WebAssembly support. We’ve adjusted the versioning scheme so that the major version number matches the associated .NET runtime version.
This new version of the bootstrapper is backward compatible with your net6.0 apps, and you don’t need to upgrade to .NET 7 to use it.
This release is built using the .NET 7.0.100 sources that the .NET team will use on release day, meaning that you’re already set to use the latest and greatest.
This release introduces a lot of new fixes and features, let’s dive in detail.
-
Obfuscation and custom extensions support has been added to work around firewalls and antiviruses that may block .NET binaries. Uno already uses the “.clr” extension, yet some anti-viruses may still detect the Win32 header through deep inspection, which simple obfuscation can work around.
-
Static assets support, used for ASP.NET Core hosting. See the ASP.NET Core Hosting section in this post for more information. This feature allows for an ASP.NET Core project to take a “project reference” on a WebAssembly app, to include its output in the “wwwroot” folder to deploy in a single package. The introduction of the new
Uno.Wasm.Bootstrap.Server
package supports ASP.NET Core projects host Uno Wasm Bootstrap projects to serve these static assets. -
Threading preview support, a big demand for performance hungry users. Threading makes use of WebAssembly threads and comes close to the desktop threading model. A new SynchronizationContext has been introduced to easily go back and forth the main thread. The support is still in preview as there are still some threading affinity issues with JS-bound APIs that need to be fixed. As we mentioned back in June, give it a try and let us know what you can do with it!
Also note that threading requires a specific security context in browsers, which can cause SSO flows to fail.
Threading can be enabled using
<WasmShellEnableThreads>true</WasmShellEnableThreads>
in your csproj. -
SIMD support, another big demand from performance hungry apps. This feature enables the use of the Fixed-width SIMD WebAssembly specification and is available when building with AOT enabled. The hardware support for SIMD can be checked through the Vector.IsHardwareAccelerated.
-
Native libraries support updated layout, where the inclusion of optional Threading and SIMD makes for a new matrix of possibilities for native libraries. While threading is supported by all browsers (its preview status and security restrictions can make it inapplicable for some apps), and SIMD is not yet supported by Safari, it’s required for native libraries to be providing a matrix of already compiled versions of binaries.
You’ll find examples of this new format in Uno.Sqlite-wasm and SkiaSharp, which looks like this in a package:
-
Native signatures generation support, which enables P/Invoke signatures to be anything that the app’s code will provide. This is particularly useful for interoperability with large native libraries, like SQLite.
Finally, as the main branch of dotnet/runtime is already on .NET 8, so are the Uno.Wasm.Bootstrap development builds, and there are some amazing improvements coming.
2.0.0
This new release of the Uno.Wasm.Bootstrap package provides support for .NET 5 (net5.0
) target framework, using .NET for WebAssembly from dotnet/runtime.
It also provides support for:
__Native
internal import to provide support for statically linked native code (e.g. mono internals or emscripten provided functions)- PG-AOT Profile filtering
- Support for multi-versioned emscripten native dependencies, to allow for smoother package versions transitions
- The ability to control the location of content files (e.g. in the versioned package folder, or directly at the root)
- Performance improvements when resolving large number of application packages
The .NET Runtime for this release is dotnet/runtime@99e4fda, and this package is equivalent to 2.0.0-dev.180.
Upgrade path
When upgrading from the 1.3.x versions, there is nothing specific to do for the project to continue building and running.
If you want to upgrade to net5.0
, you will need to:
- Change the target framework to
net5.0
- Add a reference to
Microsoft.Windows.Compatibility
version5.0.0
- If you are using Uno Platform (Uno.UI.* packages), you will also need to upgrade to version 3.5 or later.
If you are using on AOT (Full or mixed), note that it is still a work in progress in dotnet/runtime, and that you may still find issues that will be addressed during the course of .NET 6 development, and will be included in later builds of the Uno.Wasm.Bootstrap package.
Features
- Add asset list to published package (4adf9ea)
- Add generic type parameters to the AOT profile dump (975516f)
- Add SDK Checksum optional debug logging (29e8968)
- Add support for __Native dll import (68c09f4)
- Add support for AOT profile filtering (06b8ee3)
- Add support for mono runtime tracing options for native browser stack (e9ab258)
- Add support for multi-emsdk versioned LLVM binaries (03abc09)
- Add support for net5 (392847d)
- Enable AOT Profile debugging (f086c6f)
- Install embedded emscripten version for Unix based OSes (7c3c484)
- net5 static linking, net5 validations (967d015)
- deploy: Added ability to control where content files are being deployed (package or root) (abfbbc9)
- deploy: Added WasmShellContentExtensionsToExclude property (f32249a)
- deploy: Removed the DeployModeContent feature. The feature overlaps with Content metadata mode. (03235f6)
- net5: Add support for linker feature switches (a1adb80)
- Update to mono mono/mono@3acd878 (4c993e6)
- deploy: .bc and .a files for static linking are no more copied to "dist" folder and used directly from their original location. (19e88cb)
- deploy:
Deploy=
-->UnoDeploy=
(1dfde39)
Performance Improvements
- Improve net5 packager assembly resolution performance (9a21ca4)
Bug Fixes
- Add IDBFS support for interpreter-only .NET 5 (107d637)
- Add missing cil-strip pdb (8ca397d)
- Add Stack Crawling related methods (dc87d7c)
- Add support for InvariantGlobalization feature flag (d1d5e58)
- Adjust default splashscreen resource (31e8040)
- Adjust ICU support for debugging (335d22b)
- Adjust mono-aot-cross path (7c9bc1b)
- Adjust python encoding (3f2c153)
- Adjust target rewriting for task name (8a218ea)
- Adjust WASMSHELL_WSLEMSDK to use WSL native path (ed306da)
- Bump Microsoft.Windows.Compatibility to 5.0.0 (0e7fdd3)
- cannot find bash.exe on Windows using dotnet.exe (8dc6bef)
- Disable dedup pass by default, align AOT compiler flags with dotnet/runtime (a9666d9)
- Don't generate config file for illink on net5 (c15fdd3)
- emscripten embedded mode is now the default (9a2622c)
- ForceDisableWSL wasn't honored (7bf24d6)
- Import PInvokeTableGenerator, use dotnet for packaget and wasm-tuner (74e8b9f)
- Include unit tests assembly in msbuild filter (9cdac9b)
- Invalid hash replace task (29d5862)
- Make TargetFramework parameter optional to ignore incompatible projects (f4bb304)
- Move emcc flags to allow for default paramters override (useful for overriding max memory with asan) (6eb3050)
- nuget icon path (16523b8)
- Remove unused emscripten patches, adjust install marker (979de6a)
- Restore .NET 5 ICU support for localization (a2463c3)
- Set System.Globalization.Invariant if unset for .NET 5 (33e25b1)
- Split mono/mono and dotnet/runtime versions. (371195a)
- Unquoted executable path for "dotnet" or "mono" (1d02109)
- Use AOT Profile property only in Mixed mode (656b406)
- debugging: Publish debugger files in all modes (a351522)
- gitpod: Remove...
1.3
The Uno.Wasm.Bootstrap 1.3 release of the Uno.Wasm.Bootstrap adds support for some large items:
- PG-AOT, giving the ability to reduce the size of the WebAssembly layout significantly by compiling only the most used parts of the application, based on a recorded execution profile.
- Support for DateTime.Now using the appropriate local timezone
- Stabilized the use of the mono-wasm sdk, where Windows Storage Sense may remove critical files
- Improved CDN support, where all the payload files, except some key files (e.g. index.html, PWA support) are placed in a uniquely identified path.
Features
- Add support for local timezone (ddc772b)
- Add elapsed time for external process execution messages (dc481c4)
- Add support for PG-AOT detection (d149066)
- Add the ability to globally override the EMSDK install location using
WASMSHELL_EMSDK
(75c2699) - Add Uno.Wasm.Static Linking sample (f088f39)
- Add Uno.WasmSample.WithSpace.Aot sample (0cbba3c)
- Enable nullable references checking in bootstrapper tasks (bbf2cf1)
- Enable Profile Guided AOT (e48e8d1)
- Improve build reliability (79c04cd)
- Improve cacheability of the app payload in CDNs (fdc7d1a)
- Provide the ability to disable WSL requirement on Windows-based CI servers (74ccb89)
Bug Fixes
- Adjust Splash Screen customization configuration (161d660)
- Adjust WSL mono install script instructions (4ded360)
- Build full BaseIntermediateOutputPath (e67f92c)
- Cleanup the dist folder properly (5d9d71e)
- Fix invalid use of reference assemblies when actual assembly is present (e7b5857)
- Improve error message when .NET is not installed in WSL (2fa366d)
- Pin EMSDK version (2b655ed)
- Pin emsdk version to the supported emscripten version (c6d354c)
- Possible StackOverflowException when locating debugger assemblies (a3b7ba0)
- Remove defer attribute from default index.html which can cause out of order execution (cfca867)
- Remove invalid TimezoneData package creation (623a881)
- Restore "Uno.Wasm.StaticLinking" and "Uno.WasmSample.WithSpace.Aot" samples (2fac3ba)
- Disable the use of AOT Profile when WasmShellGenerateAOTProfile is set (aa3fa06)
- Remove possible duplicates in resources, adjust css ordering (2bff0b7)
- Restore IDBFS support for interpreter unpackaged builds (27ce6b2)
- Support spaces in path (e81ec32)
- Update to mono 335a5949adbb7bd31c19eb9179d300f2097f515c, use CDN endpoint. (771f158)
- Use local scoped named for assembly references (e6f1f3a)
- debugger: Fix using bitcode file breaks the debugger (0b00012)
- Take linker option into account when using ninja (ce4e8ce)
- Use latest nuget spec for package icon. (009da4c)
1.2
This release provides lots of updates from the 1.0 release:
- The availability of WebAssembly AOT on Windows, through WSL
- The removal of the
DotNetCliToolReference
reference that was causing troubles to the Visual Studio UI, replacing it withUno.Wasm.Bootstrap.DevServer
updateable via the UI - Support for Linux and macOS
- Support for the Visual Studio 16.6 debugger
- Lots of fixes from the mono team, including a memory corruption issue with SkiaSharp
Head to the documentation for more details on these updates.
Features
- Add support for
*.a
files linking (cea619a) - Add support for LLVM's -fsanitize for native memory troubleshooting (2ffb3b1)
- Add support for VS 2019 16.6 debugger (0131188)
- Add
Uno.Wasm.Bootstrap.DevServer package
(e204754), closes #186 - Added support for CommonJS. (7fdc629)
- Enable Wasm profiling configuration (9fbbb8c)
- Enable WSL emsdk folder compression (b270071)
- Update to mono latest to take advantage of mono/mono#19671 (9b8e7a8)
- Update to mono master latest (5df9be6)
BREAKING CHANGES
-
The Uno.Wasm.Bootstrap.Cli is now deprecated and needs to be replaced with the
Uno.Wasm.Bootstrap.DevServer
.
To upgrade from previous versions of the bootstrapper:- If you had a
<DotNetCliToolReference />
line, remove it - Add the
<PackageReference Include="Uno.Wasm.Bootstrap.DevServer" Version="1.2.0" PrivateAssets="all" />
item in the same item group as the other nuget packages.
- If you had a
-
Support for .NET 2.2 and 3.0 has been removed. .NET Core 3.1 is now required.
Bug Fixes
- linux: Force load of colocated bootstrapper tooling assemblies (fb5cd94)
- Adjust default restore tool targetframework (d6e9224)
- AOT SDK may not be downloaded if only
.a
files are present (729b181) - Auto retry SDK Downloads (359e590)
- CLI nuget package generation (9fff6b8)
- Fail the build when a project uses the deprecated CLI package (ba4e8cf)
- Invalid error message when WSL is not detected (e0607d9)
- macOS .NET Core build error and ci validation (d145440)
- Update mono to fix p/invoke issue, enable IDBFS by default (af3763f)
- linux: Adjust dotnet run/build command execution for Linux (fb36dc8)
- macos: dotnet run path aligns directory separator (b42a315)
1.0.8
- Linux and Windows path inter-operability fixes
- Update support for non-root site publication
- Adjust PWA cache update strategy
1.0.5
Fixes:
- Long path issues on windows
- .NET 4.6.2 dependency was implicitly required
1.0
The first stable release of the Uno Bootstrapper for WebAssembly.
This release is the same as the 1.0.0-dev.302 experimental release.