Making a Blazor app run on Web browser, Windows, Linux, Android, iOS and macOS

This page summarizes the projects mentioned and recommended in the original post on /r/dotnet

Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
  • Ididit

    C# .NET 7 Blazor habit tracker application. Works on Web, Windows, Linux, Android, iOS and macOS.

  • I already posted about my open source https://github.com/Jinjinov/Ididit habit tracker app https://ididit.today/

  • Blazor.IndexedDB.Framework

    Discontinued A framework for blazor which acts as an interface to IndexedDB

  • Blazor WASM was the first, original version. I wanted an app that can work offline, so I decided to save user data in IndexedDB. My first choice for an IndexedDB NuGet was https://github.com/Reshiru/Blazor.IndexedDB.Framework because it was recommended by Steve Sanderson in https://blog.stevensanderson.com/2019/08/03/blazor-indexeddb/ - and it was the worst mistake in the whole project. The NuGet loads all the data from IndexedDB into memory every time you open a connection. That made the app unusably slow after one year of use. I made a few improvements in my own version https://github.com/Jinjinov/IndexedDB.Blazor but I never solved the loading problem. I decided to rewrite the whole project from scratch, using the much better IndexedDB NuGet https://github.com/amuste/DnetIndexedDb . The original project is available at https://github.com/Jinjinov/TheLastTime and as a PWA https://old.ididit.today/ as a lesson on what mistakes to avoid.

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • IndexedDB.Blazor

    A Blazor library for accessing IndexedDB

  • Blazor WASM was the first, original version. I wanted an app that can work offline, so I decided to save user data in IndexedDB. My first choice for an IndexedDB NuGet was https://github.com/Reshiru/Blazor.IndexedDB.Framework because it was recommended by Steve Sanderson in https://blog.stevensanderson.com/2019/08/03/blazor-indexeddb/ - and it was the worst mistake in the whole project. The NuGet loads all the data from IndexedDB into memory every time you open a connection. That made the app unusably slow after one year of use. I made a few improvements in my own version https://github.com/Jinjinov/IndexedDB.Blazor but I never solved the loading problem. I decided to rewrite the whole project from scratch, using the much better IndexedDB NuGet https://github.com/amuste/DnetIndexedDb . The original project is available at https://github.com/Jinjinov/TheLastTime and as a PWA https://old.ididit.today/ as a lesson on what mistakes to avoid.

  • DnetIndexedDb

    Blazor Library for IndexedDB DOM API

  • Blazor WASM was the first, original version. I wanted an app that can work offline, so I decided to save user data in IndexedDB. My first choice for an IndexedDB NuGet was https://github.com/Reshiru/Blazor.IndexedDB.Framework because it was recommended by Steve Sanderson in https://blog.stevensanderson.com/2019/08/03/blazor-indexeddb/ - and it was the worst mistake in the whole project. The NuGet loads all the data from IndexedDB into memory every time you open a connection. That made the app unusably slow after one year of use. I made a few improvements in my own version https://github.com/Jinjinov/IndexedDB.Blazor but I never solved the loading problem. I decided to rewrite the whole project from scratch, using the much better IndexedDB NuGet https://github.com/amuste/DnetIndexedDb . The original project is available at https://github.com/Jinjinov/TheLastTime and as a PWA https://old.ididit.today/ as a lesson on what mistakes to avoid.

  • TheLastTime

    C# .NET 5 Blazor WebAssembly Progressive Web Application that tracks when was the last time you did something

  • Blazor WASM was the first, original version. I wanted an app that can work offline, so I decided to save user data in IndexedDB. My first choice for an IndexedDB NuGet was https://github.com/Reshiru/Blazor.IndexedDB.Framework because it was recommended by Steve Sanderson in https://blog.stevensanderson.com/2019/08/03/blazor-indexeddb/ - and it was the worst mistake in the whole project. The NuGet loads all the data from IndexedDB into memory every time you open a connection. That made the app unusably slow after one year of use. I made a few improvements in my own version https://github.com/Jinjinov/IndexedDB.Blazor but I never solved the loading problem. I decided to rewrite the whole project from scratch, using the much better IndexedDB NuGet https://github.com/amuste/DnetIndexedDb . The original project is available at https://github.com/Jinjinov/TheLastTime and as a PWA https://old.ididit.today/ as a lesson on what mistakes to avoid.

  • blazor-wasm-maui-winforms-wpf-template

    Minimal Blazor template with WASM, MAUI, WinForms and WPF projects that share the same razor, cs and css files in a RCL

  • Next I decided to make a Windows desktop version using WebView. I also made a template https://github.com/Jinjinov/blazor-wasm-maui-winforms-wpf-template that is now somewhat obsolete. The biggest problem is loading the data from IndexedDB before the app starts. Blazor WASM allows you to use JsInterop right from the moment you register your services in dependency injection, so you can access IndexedDB immediately, load the user settings and then start the app. WebView doesn't allow you to use JsInterop before Blazor is initialized. This means that if the user chooses a dark UI theme and you save that choice in IndexedDB, the app will load with the default light UI theme, you will read the IndexedDB on the first render and then apply the dark UI theme. The app will flicker for a second.

  • Blazorise

    Blazorise is a component library built on top of Blazor with support for CSS frameworks like Bootstrap, Tailwind, Bulma, AntDesign, and Material.

  • Making Blazor run on Linux was a lot of hard work. Mainly because there is no official support from Microsoft (but even that doesn't always help, as you will see in the next section about macOS). I tried to make it work with 3 different community driven projects: Electron.NET, Chromely and Photino. Electron is very bloated and very slow - it takes for ever to start debugging from Visual Studio. I also hated that it first opens a console window and then the Blazor window. I don't want to see 2 windows open. Chromely also first opens a console window and then the Blazor window. I couldn't make it work in Linux. That leaves Photino. It comes with a Blazor sample that works in Linux without a problem. But my project didn't work in Linux with Photino. I found out that the problem was loading content for https://github.com/Megabit/Blazorise from the \wwwroot\_content folder. I sumbitted a GitHub issue and the problem was fixed in Photino.Blazor v2.5.0

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
  • Introducing .NET Multi-platform App UI (MAUI)

    .NET MAUI is the .NET Multi-platform App UI, a framework for building native device applications spanning mobile, tablet, and desktop.

  • I used MAUI Blazor to make the versions for Windows, Android, iOS and macOS. I had a few minor problems in Windows, mainly with the windows title, size and position that couldn't be set in .NET 6 - these were fixed in .NET 7. I don't remember any problems with Android - if it works in the Android emulator, it should work on Google Play. I had a few minor problems with iOS - if it works in the iOS simulator, then it won't necessary also work on Apple App store. And then there is the Mac Catalyst version for the Apple Mac store. That was (and still is) a NIGHTMARE! I had around 14 issues, listed here: https://github.com/dotnet/maui/issues/12293 and I still can't successfully publish my app on the Apple Mac store because of this issue: https://github.com/dotnet/maui/issues/13094 - I very much doubt that a single person has successfully published a MAUI Blazor app on the Apple Mac store - and I would be so glad if someone proves me wrong and explains how that can be done!

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts