Oqtane Developers Meeting - Dec 2023
By: Shaun Walker
On October 4, 2023 we kicked off our first Monthly Developers Meeting for the Oqtane open source project. The goal of these meetings is to provide some constant communication about project status, release schedule, product roadmap, and any issues/blockers. It is also the opportunity for developers to ask questions and provide direct feedback about anything related to the open source project.
The criteria for participation was established as anyone who had contributed a pull request to the Oqtane Framework in the past 2 years. The meeting schedule was set as the first Wednesday of each month at 12:00 PM EST... which is obviously not optimal for everyone depending on their time zone, however it is important to have a fixed time slot so that effort is not wasted trying to schedule meetings, and so that people are able to plan their lives accordingly.
Initially the thought was that the content of these meetings should be an exclusive benefit for meeting participants (ie. to reward them for their valuable contributions). However, after further discussion it has been decided that although participation in the meeting is an exclusive benefit, the content of the meetings should be available to the entire community. This is much more aligned with the ideals of the open source project and provides valuable insights to developers and users of the project.
On that note I am going to share some of the highlights from our most recent meeting on December 6, 2023.
- 5.0.0 for .NET 8 released November 16
- 5.0.1 planned for release this month (stabilization release)
- HanselMinutes - https://hanselminutes.com/917/sustainable-open-source-with-oqtanes-shaun-walker
- ONETUG User Group Meeting - Trailblazor: Building Dynamic Applications with Blazor - https://www.youtube.com/watch?v=TBpZ3GDFnLc
- On .NET Live - Exploring Oqtane for Blazor and .NET MAUI - https://www.youtube.com/watch?v=A7KnkHe3AXY
- VS Live! Orlando - Aloha .NET MAUI! Extending Apps to Mobile and Desktop with Blazor Hybrid, WebAssembly: The 4th Official Language of the Web
Oqtane 5.0 / .NET 8
- In the last Monthly Development Meeting, a decision was made to release Oqtane 5.0 with support for only Interactive Blazor rendering modes
- This decision was due to the fact that integrating the new Blazor Static Server-Side Rendering (SSR) features has significant challenges/impacts for existing applications
- Not all dependencies have been updated to .NET 8 yet - packages will be updated as they become available for .NET 8
- Some upgrade issues have been reported related to Database Provider packages (resolved in 5.0.1)
External login is a critical aspect of most modern applications and Oqtane 3.1 (April 2022) introduced capabilities which allow you to integrate with OIDC and OAuth 2.0 authentication providers. Security is a complex area and Oqtane aims to simplify the experience for users by providing a rich set of configuration options which can be set per site within an Oqtane installation. The external login capability has received many enhancements since it was first introduced and Oqtane 5.0.1 includes some new features.
Email Claim - previously Oqtane required that an email claim be provided by the IDP. However not all IDPs return email addresses, and not all users consent to having their email address shared by an IDP. So Oqtane has now been modified so that the only claim required is the ID claim and specification of an email claim is optional. If an email address is not provided, the user will be forced to enter an email address in their User Profile.
Review Claims? - one of the challenges with external login configuration is determining the actual claims which are returned to your application. If you enable this new feature, the full list of raw claims will be logged into your Event Log so that you can review them to determine the claim names which should be specified in the claim configuration options. Note that when Review Claims is enabled, external login will be disabled.
Name Claim - most IDPs return the name of the user and this information is useful when creating the corresponding user account in Oqtane.
Verify Existing Users? - if a user already has a local account on your site and they later decide to login using an external login, the system will use their email address to try and map the accounts. If there is a matching email account the default behavior is to send an email to have the user confirm that the mapping is valid. However if you are using a highly trusted IDP it may not be necessary to have your users confirm the mapping and this new option allows you to disable the default behavior.
Site Settings also received some new configurations options to improve the flexibility of the framework:
File Extensions - allowing files to be uploaded represents risk to a system as some types of files can be used for malicious purposes. Traditionally, Oqtane had an internal constant list of files extensions which are considered to be "safe". However there are cases when an administrator may wish to override this list and add additional extensions. This new feature allows them to adjust the configuration on a site by site basis (the administrator takes full responsibility if they decide to make such a change to their environment).
Hosting Model - previously Oqtane included a Runtime option for "Blazor Hybrid" - however Blazor Hybrid is not really a hosting model - so it was removed from the list (which should also prevent users from choosing it and locking themselves out of the web user interface).
Hybrid Enabled? - a new option was added which allows an administrator to specify if they want their site to be hybrid enabled (the default is false). A hybrid enabled site allows the components to be used in a .NET MAUI client application. However it is important to understand that the client assemblies are downloaded to the client application in this configuration, so if you are not using .NET MAUI it is generally a good idea to not allow the client assemblies to be accessible.
Blazor Static Server-Side Rendering (SSR)
The are major differences in the Blazor SSR component processing model in comparison to Oqtane. This will require to research solutions for all of these challenges (see Oqtane SSR).
Blazor State Management
Interactive Blazor is a “stateful” environment. Per-user state is managed automatically in all interactive hosting models.
Blazor SSR is “stateless”. State is NOT retained and does not cross render mode boundaries. Important to understand Render Mode Propagation - https://learn.microsoft.com/en-us/aspnet/core/blazor/components/render-modes?view=aspnetcore-8.0#render-mode-propagation
A Blazor "Hello World" application created from the default Blazor template does not have any state to manage - however this is not a real world application. If you choose to include authentication then you will have some limited state management, as the state of the logged in user must be maintained and available to all components. Microsoft had to introduce a new service in .NET 8 in order to satisfy this requirement (formerly it used cascading parameters). However this approach only works for "root components" (ie. components referenced directly in Routes.razor).
A real world Blazor application such as Oqtane has a lot more state management requirements. Oqtane has 3 distinct state objects which developers leverage in their components: SiteState, PageState, ModuleState. When running on Blazor SSR the state does not automatically cross render mode boundaries ie. when you transition from a static component to an interactive component, the value of the stateful object will be null. So the state will need to be marshalled (ie. serialized and transferred) across the boundary.
- POC to demonstrate Blazor SSR concepts - https://github.com/oqtane/OqtaneSSR
- Fallback routing
- Nested components
- Dynamic component rendering
- Render modes
- Static forms (still some issues)
- Does not cover every possible scenario
Oqtane 5.1 (Q1 2024)
- Goal is to add Blazor SSR support
- Start with infrastructure changes to enable "Global Interactivity" first
- Add new Site property: DefaultRenderMode (the only option will be Interactive)
- HostingModel property will continue to define the Interactive Render Mode - new option will be Auto
- Once this is working 100% - introduce Blazor SSR support
- Add Static option to DefaultRenderMode property
- Add new IModuleControl property for RenderMode (options will be Interactive/Static)
- Scale Out Support remains on roadmap but is lower priority than Blazor SSR integration
- Commercial Marketplace has been active for 2 months - https://www.oqtane.net
- To learn more about the Marketplace and its capabilities, please watch: Inside .NET Presentation - Inside the Oqtane Marketplace - https://www.youtube.com/watch?v=TLlQgr-jEjE
- In Oqtane 5.0.0 the Oqtane.Licensing packages are now distributed with the framework to simplify commercial module development (and avoid DLL conflicts)
- need more commercial themes
- Email campaign kicked off recently to solicit feedback about framework directly from users - https://www.oqtane.org/#contact
- Many users have expressed demand for professional support services
- Commercial Support will be introduced soon
- Will only offer support – NO product feature differentiation
- Will be offered through Oqtane Marketplace