Fanray v1.1.0-preview3 - Extensible Architecture

Today I'm releasing Fanray v1.1.0-preview3 and I want to dedicate this release to the innocent students and citizens who died in Beijing on June 4th, 1989!

Remembering Beijing on June 4th, 1989
Remembering Beijing on June 4th, 1989

Architecture

Preview 3 brings an architecture that allows you to extend Fanray by creating Plugins, Widgets and Themes in a clean and maintainable way. This new extensibility will keep the system core from being bloated and let others build their own features and applications easily. I have revamped the project docs on GitHub wiki where I explained the differences between plugin, widget and application as well as how to develop widget, plugin and theme.

Extensible Architecture
Extensible Architecture

Extensible design in software engineering is to accept that not everything can be designed in advance. A light software framework which allows for changes is provided instead. - Wikipedia

Upgrade

For this release there is no db schema change, but if you are running a previous version then go to Admin > Plugins to activate the Shortcodes plugin, if you have source code in your post currently this still is the way to render them.

Admin - Plugins
Admin - Plugins

Fanray Solution

There is a major revamp on the Fanray solution. The Fan base class library provides the essential infrastructure services, Fan.Blog is the blog application, Fan.Web becomes the web infrastructure project, and the new Fan.WebApp is now the web app that hosts everything. Notice, each plugin, theme or widget has their own project. The widgets pertaining to the blog have "Blog" in their project name like "BlogTags" etc, while generic widget SocialIcons does not.

Fanray Solution
Fanray Solution

Limitation

One limitation is that currently, Fan.WebApp still requires project dependencies on those extension projects to get their DLLs. Ideally extensions should be deployed to the main web app by a matter of just dropping in their DLLs at run time, but this requires hot loading and unloading of DLLs. This capability is coming in .NET Core 3.0, so how it would work out remains to be seen. The current capability is enough for a starter kit IMO, but the ability to develop all plugins, widgets and themes independently will be a game changer and make Fanray magical :)

Roadmap

So far I've put in major effort on architectural aspect of the project, while it still needs more work I'm going to get back to improving the basic functionality of the blog.  Some of the features I will be working on are

  • Pages
  • Navigation
  • A second theme
  • REST API
  • Full Text Search

I do want to release the v1.1 final before .NET Core 3 comes out this fall, depending on my progress I may or may not finish all the features listed. Please let me know if you'd like to help, also report to me any bugs you've encountered. Thanks and happy coding!