CMS with plugins, possibly open source

Hi folks!

I was on a travel and got into discussions with other guests and a couple complained about their business website and the current contractor were… Suboptimal, at best…

So I agreed to check for some possibilities and maybe create an offer.

So for now I am searching for a CMS implemented in elixir. I would be fine with headless but appreciate “head full” if customisation is easy.

It also needs a way to be customisable at the backend, preferably by plugins, though direct code hacking would be fine as well if there is no other way.

This is a strict requirement, as I will have to integrate with another software for booking management (compare hotels and booking a room).

As I will very likely have only very limited server resources, I would prefer “dead view” implementations.

Does someone have an idea of what I can use?

Thanks in advance,
NobbZ

You can take a look at this post: Welcome to our blog: how it was made! - Dashbit Blog It might not be enough for you, however I think it’s a good starting point.

A word of warning on this topic though, if you want to have a CMS that can render templates with code and give untrusted users access to modify it, elixir might not be the best choice, as you cannot really fully sandbox the execution environment. You can read more about this in dune: GitHub - functional-rewire/dune: A sandbox for Elixir to safely evaluate untrusted code from user input

BeaconCMS is in active development and might be what you’re looking for. Version 0.1 was recently released and a plugin system is on the roadmap.

3 Likes

I have had fairly good success with maintaining a Phoenix website over the last 5 years with a block-based approach. The users create pages, which have a name / slug / page type (mapping to a template), but there are not a lot of templates.

There is real variety on the frontend though, because from 12 blocks at the beginning, there is now a library of around 30 blocks. We created new ones when the client had new needs.

Some blocks were linked to new behavior but most were purely presentational. From three page types / templates we now are at 6, by that I mean that the block editor was useful enough to avoid template profileration despite content being edited daily.

A few things that made it easy to extend over the years :

  • Even if the front-end did not need that, we implemented the editor part as a tree editor from the start, without limits on depth/etc. That proved very useful later.
  • Blocks are edited JS-side (liveview was either a bit too new or did not exist at the time, I don’t remember).
  • Blocks are validated, sanitized and possibly transformed elixir-side.
  • Each block has its own template and possibly an helper/transforms module.
  • The content tree is recursively processed before display, to allow some (limited) block types to influence the behavior of (some clearly defined and limited) children.

It’s very basic but has been maintainable and I routinely add new blocks despite not touching the codebase for months at a time. Seeing the CMS part as a tree editor first (think of something where you can easily add, move, delete, clone, copy/paste nodes across the tree) and individual nodes as content editors was helpful.

Edit : I have to add that the project was initially Phoenix for great primitives for some (soft) real-time communication between visitors in a yield-managed part of the front-end.

Edit 2 : sorry, that does not answer your question of finding an existing CMS in Elixir :confused:

1 Like

I took a look at nimble publisher in the past, though as I understand it, it is mostly for static sites. Though the site has “dynamic” components to display availability of rooms and appartments in a certain timeslot. Currently the availability is updated and synced with actual availability about once a week, if there is some time during daily business. And there is rarely, as the accomodation service is only secondary business.

I am aware, and I definitely do not want that. I want the users to manage content via markdown (or better a WYSIWYG editor).

By plugin system I was more thinking about a defined interface that allows for easy extension of the base, rather than doing it like in wordpress and mediawiki 20ish years ago… Editing and patching sourcefiles to call into the “plugin” where necessary…

1 Like

Thanks, I will take a look.

I think I have looked at it earlier, for something personal, but at the end fell back to something else then. I do not remember any reasoning though :frowning: But the name rings a bell…


edit

Oh right, it is LiveView, which might be problematic under the hosting constraints I expect to have. I will still give it a chance and take a closer look.

Thank you anyway, I will read your post later on with more time, hoping I can still take some insights and strategies from it.

I think that on the CMS can of worms, the intersection of Elixir developers and content website editors is tiny, because the community does not seem to standardize a CMS that is aligned with what editors expect today. (Well the Beacon initiative proves that I’ll soon be wrong :smiley: !)

For example, Kirby is a great CMS both for editors and developers.

For developers :
It works without a database (you can put content in Git if you want to), is reasonably fast, offers a declarative DSL for structuring content types and compose them into page types, and is however you want it on the headless ↔ visible spectrum, both with an API or correct-ish programmatic access to data types. You can add new block types of course.

For editors :
The UI is uncluttered and tailor-made (with yaml) to editors needs. There’s nothing not useful in the dashboard and there’s no way to fiddle with settings that are not explicitely provided by the developers. The editing experience is modern (lists of blocks, possibly nested + structured content types)

So what’s the catch ? You probably guessed, it’s PHP.

Despite that, if I ever build a truly contentful website in Elixir again, I would use it for the content part. The pricing is great (99$ or 349$ one-time-fee). I would spend my developing time building business logic in Elixir and instantly have a month of headstart on the CMS part just by installing it.

You can even define all of the content types Elixir-side if you really want to, since the editor UI can be API-driven.

I know this is a bit of a hot take, but I have built a lot of CMSs from scratch for Elixir backends over the years. Their users like them because they were built for their specific needs and evolved with them.

But today there’s this strange “flat file” CMS that is made to be driven by other backends and can work headless… so I would offer me and my client a huge reduction in time by using it for the content part. You can even define blocks that talk to your Elixir API, that’s not a problem.

And this is the one I’m aware of. I’m sure there are ton of other modern and drivable/consumable CMSs out there that a competent team already maintain and update for me while I integrate them into a bigger system :slight_smile: .

It seems that Beacon is going to fill that currently empty spot, and that would be a very great thing for the community. I would also evaluate it if I got that kind of project needing both Elixir and a public facing site again.

1 Like