Rebuilds the official ASP.NET Core blazor.web.js for multiple JavaScript language targets and publishes the results as a Razor Class Library NuGet package.
The official ASP.NET Core Blazor browser support targets "evergreen" browsers only.
However, there are cases where supporting older browsers is necessary, especially for enterprise use. Unfortunately, .NET 9 and later target ES2022, and there have been reports of it not working on somewhat older browsers.
This project aims to make Blazor Server available on older browsers by rebuilding the Blazor JavaScript runtime, blazor.web.js, to support multiple versions from ES5 to ES2022.
Warning
This project is focused on Blazor Server only. WebAssembly is not supported.
More details are in the here section.
Our goal is to make this work on the following platforms:
- Chrome 23+ (This is the first Chrome to support ES5)
- Internet Explorer 11 (As much as possible. Testing is insufficient, but it works for now)
- And newer browsers. It should probably work on any Chrome-based browser.
Note
In environments where dynamic imports are not available, third-party libraries probably won't work.
The build, verification, and release processes are automated and scheduled to run regularly. This allows us to:
- Instant access to upstream updates and breaking changes.
- Released versions should pass testing and therefore function correctly.
- Updates continue even if I lose interest. (Sustainability!)
In an online environment, you can connect to the demo site to check if it works.
https://legacy-blazor-js.app.eclairs.cc/
You can build and set up the Test Project to check if it works in an offline environment.
Alternatively, you can use the Docker Image.
docker run -d -p 8080:80 ghcr.io/arika0093/legacyblazorjs-introsite:mainInstall the NuGet package LegacyBlazorJs in your Blazor application.
For example, if you are using .NET 10, the version you should install is 10.*.
dotnet add package LegacyBlazorJsThen, replace the official script in your Blazor Web App's Components/App.razor with the required profile:
<!-- <script src="@Assets["_framework/blazor.web.js"]"></script> -->
<LegacyBlazorJs.Loader Target="es2015" />Or, you can load the file directly.
<script src="@Assets["_content/LegacyBlazorJs/blazor.server.es2015.js"]"></script>Tip
If you do not use WebAssembly features, there is no particular reason to use blazor.web.js.
We recommend using blazor.server.js, which has a smaller file size.
The es2015 part can be changed according to the browser target. Please refer to the Included files section for details.
By omitting the Target specification, the loader checks the runtime syntax and features available in the browser.
If modern features are available it falls back to the official /_framework/blazor.server.js; otherwise it selects the highest LegacyBlazorJs target.
<LegacyBlazorJs.Loader />You can also use the compiled JavaScript files from the JsDelivr CDN.
for example, if you want to use the es5 version, you can load it as follows:
<script src="https://cdn.jsdelivr.net/gh/arika0093/LegacyBlazorJs@release/v10.0.9.61/dist/blazor.server.es5.js"></script>Warning
The CDN is provided for testing purposes only. Please download the files and use them in production environments.
You can also download and use the compiled JavaScript files from GitHub Releases, which are uploaded there.
The procedure is as follows:
- Download the latest
LegacyBlazorJs.(version).zipfile from Release. - Unzip the files and copy the necessary JavaScript files to wwwroot.
- Load those JavaScript files as scripts in App.razor.
The following files are included under _content/LegacyBlazorJs/:
- blazor.web.{version}.js
- blazor.server.{version}.js
The versions listed below are available.
| Version | Browser target | Notes |
|---|---|---|
es5 |
Chrome 23+, IE 11 | blazor.server only works. |
es2015 |
Chrome 49+ | |
es2017 |
Chrome 58+ | |
es2018 |
Chrome 64+ | dynamic import only available in this version and later. |
es2020 |
Chrome 80+ | |
es2022 |
Chrome 94+ | Default for .NET 9 |
The profile definitions are in config/targets.json.
| Target | Browser | Version | Server |
|---|---|---|---|
| es5 | IE | ~9 | ❌️(1) |
| es5 | IE | 10 | ❌️(2) |
| es5 | IE | 11 | 👌(3) |
| es5 | Chrome | 23 | ✅ |
| es2015 | Chrome | 49 | ✅ |
| es2017 | Chrome | 58 | ✅ |
| es2018 | Chrome | 64 | ✅ |
| es2020 | Chrome | 80 | ✅ |
| es2022 | Chrome | 94 | ✅ |
- IE9 and earlier are difficult to run due to a significant lack of APIs.
- The SignalR connection can be established, but subsequent UI updates are broken.
- Confirmed to work. Since regular testing is not performed, it may stop working at some point.
| Result | Run ID | Date | Trigger | Message |
|---|---|---|---|---|
| ✅ | #31 | 2026-07-15 | 🔧 Manual | 10.0.10.64 released, 11.0.0-preview.6.26359.118.64 released, 9.0.18.64 released |
| ✅ | #30 | 2026-07-15 | 📅 Scheduled | 10.0.10.64 released, 11.0.0-preview.6.26359.118.64 released, 9.0.18.64 released |
| ✅ | #29 | 2026-07-08 | 📅 Scheduled | No updates |
| ✅ | #28 | 2026-07-01 | 📅 Scheduled | 10.0.9.61 released, 11.0.0-preview.5.26302.115.61 released, 9.0.17.61 released |
| ✅ | #27 | 2026-06-24 | 🔧 Manual | No updates |
| Result | Run ID | Date | Message | Upstream main hash |
|---|---|---|---|---|
| ✅ | #48 | 2026-07-17 | 512f3138 | |
| ❌ | #47 | 2026-07-16 | Error in smoke-test (es2015) / test-compat | 6a0d7ae4 |
| ✅ | #46 | 2026-07-15 | d89ecc42 | |
| ✅ | #43 | 2026-07-14 | cf0ae5e8 | |
| ✅ | #41 | 2026-07-13 | 56722f81 |
This repository itself is licensed under the MIT License.
The generated js files included in the build artifacts are licensed under the MIT License of dotnet/aspnetcore.