this post was submitted on 11 Sep 2023
6 points (100.0% liked)

.NET

1489 readers
8 users here now

Getting started

Useful resources

IDEs and code editors

Tools

Rules

Related communities

Wikipedia pages

founded 1 year ago
MODERATORS
 

Firstly, I need to mention I'm coming back to .Net for the first time in more than 10 years. Last time I used .Net was on a very old .Net Framework 4 ASP.NET commercial fast food ordering application in 2013. Since then I've been working with Environmental Scientists, researchers, and academics, using exclusively Python (Django, Flask, FastAPI, etc) for the last 10 years.

This new project I'm tasked with is a custom content publishing platform, so my first thought is obviously a CMS for the content. I feel that Headless CMS products are the go-to these days, and that fits well with our needs because it is the authoring/admin side that the customer is most interested in. The frontend, or "content consumption" side of things is a custom scientific data visualizer we are building in parallel.

My team has been given a MS Azure Cloud subscription to use, and we want to take advantage of as many "cloud-native" approaches as we can. Eg, using Azure Active Directory (AAD) for SSO, using Azure Blob storage for files, Azure SQL for DB, etc. For that reason, we have decided to use .Net to develop this CMS (plus, one of my guys has 5 years experience in .Net, so we don't want that to go to waste).

There are so many free open-source .Net CMS projects floating around that it should be pretty easy to pick one to use as a base to build upon. But it is proving to be a bit harder to choose than I thought. This is the wish list we are looking for:

  • Free and Open-Source, with permissive licence
  • Self-hosted, ie. not a SaaS
  • Cross-platform, with dotNet6 or dotNet7
  • Needs custom entity types, and entity type instances (we are publishing data types, not Posts and Pages).
  • Customizable content authoring pages for the custom entity types
  • Admin UI written in VueJS or ReactJS
  • Access the content via an Open API
  • Integration with AAD SSO (and bonus if we can use any SAML or OAuth or OIDC Auth)
  • Different user roles (Admin, Author, Reviewer)
  • Use other cloud-native integrations where possible
  • Workflow steps (Draft, Submit, Review, Approve, Publish, Revoke, etc)
  • Content versioning, change tracking
  • Activity auditing

I know this is a pipedream to find one tool that could do all of that out of the box. Back in my Uni days I would have immediately reached for Drupal, but that is PHP, we prefer to not use that anymore. I thought I found the perfect tool when I came across Cofoundry, it ticks a surprisingly large number of those wishlist boxes. The main reasons I am hesitant to go with Cofoundry are:

  • It is a project from 2017. It has continued to be updated, but not very often since 2018. It was ported from .Net Core to dotNet6 back in 2021, but nothing since then.
  • It uses Angular 1 for the JS side of the admin pages (not even Angular 2!)
  • They are very tightly tied into using MS SQL Server for the db with a bunch of custom MS TSQL stored procedures, and using other MS SQL Server-specific features.

I've looked at a bunch of others, but they tend to fall into the camp of SaaS offerings that are focused on publishing Posts and Pages, and not much else, or others that are hobby projects with low user base, and haven't been updated in the last 4 years.

Is there anything I'm missing? I'm looking for something a lot like Cofoundry, but more up to date, not so tightly tied to MSSQL Server, and uses ReactJS or VueJS for the Admin/Authoring pages.

all 6 comments
sorted by: hot top controversial new old
[–] [email protected] 2 points 1 year ago* (last edited 1 year ago)

It does not fulfill your requirements, but I would highly recommended having a look at sanity.io It’s a fantastic data platform and would be a little similar to Django for you in creating a rich editor experience based just on your data model scheme.

It is 100% agnostic to how the data is used in any front ends.

[–] atheken 1 points 1 year ago (1 children)

I’m mostly a dotnet person, but another important factor in making this choice (and limiting your options to only dotnet), is how much customization you think you’ll do to the cms.

If you’re deploying it as a container and it’s backed by your preferred data store, you may not ever really do much with the headless CMS code.

I’d be looking at options written in go, or js/typescript.

https://jamstack.org is probably a good resource for surveying the options.

[–] [email protected] 1 points 1 year ago* (last edited 1 year ago) (1 children)

Yeah, there will need to be some major customisation to the CMS itself, unless the chosen CMS is extremely highly configurable, and extendable with plugins.

That's why I'm not looking for an out of the box solution, download and deploy in a container kind of deal. This this is looking like it's turning into a full custom CMS project, but I still want to find a popular, robust, open source .Net CMS to use as a base to build upon, rather than starting completely from scratch.

[–] atheken 2 points 1 year ago (1 children)

Your call, there are plenty of "define arbitrary entity" CMSes out there, and especially if you're mainly using this as a configurable data store (hence headless), the amount of UI customization should be limited. I'd definitely try to flesh out the actual customization you expect to do in the longer term vs. how stuff works out of the box.

Even as a dotnet person, my general experience is that the stuff that's built over NodeJS tends to get a lot more love and maintenance, and if you're eventually going to build web pages, you'll probably end up in Typescript/JavaScript pretty quickly, anyway.

[–] [email protected] 1 points 1 year ago* (last edited 1 year ago)

Thanks for your comment, and I didn't mean to come across dismissive of your suggestions.

You're right about the JS stuff, I've noticed a bunch of the popular customisable CMS solutions seem to all be on NodeJS based, like Strapi, KeystoneJS and Sanity.io.

The custom entity types we need are quite complex, they are not just text, we need dates, geographic locations, region boundaries, attached images. But the most complex part are the links, a link is another entity types and can define a relationship between two other entities (eg, A causes B, or B mitigates C). That's why I said we will need to modify the CMS and not simply use it out of the box. That level of custom entity definition is not normally allowed, and we need custom admin pages to Author these instances, define the links, etc.

Thinking more about it, I might be better off using one of those "low-code backends" like Airtable or Baserow, and building a different custom content authoring interface on top of that, rather than trying to shoehorn it into a CMS.