The backend your next project already needs

Content, users, roles, permissions, workflow, audit history and multi-tenancy. Every project needs them. BarakoCMS is an open-source .NET 8 base that brings them along on day one, so your time goes to what the customer asked for.

dotnet add package BarakoCMSBrowse 13 modules
Event streamappend only
  1. 1ContentCreated
  2. 2FieldUpdated
  3. 3ContentScheduled
  4. 4ContentStatusChanged
GET /api/delivery/article/spring-roast
{
  "title": "Spring roast notes",
  "status": "Published",
  "publishedAt": "2026-03-04T09:00:00Z",
  "author": { "name": "Rosa" }
}

Four events in, one record out. The stream stays, so you can ask what it looked like before.

Not only for content sites

A blog and a treasury have the same foundations

A blog, an events platform, a membership system and a treasury are different products with the same foundations underneath. Each one needs somewhere to define records, decide who may read which field, keep an audit trail, and serve it over an API.

BarakoCMS is that layer. Your frontend stays yours, in whatever framework you like, and so do your domain rules. What you inherit is the part that comes out the same every time.

The accounting module is the proof. A double-entry ledger with accounts, balanced journal entries, immutable postings and statements is not a content feature by any reading. It turned out to be a content type with rules attached, and it needed no changes to the core.

Three lines to start

A service registration, not a scaffold

No scaffolding step and no generated project to maintain. It is a service registration in an ASP.NET app you already have.

builder.Services.AddBarakoCMS(builder.Configuration);

var app = builder.Build();
app.UseBarakoCMS();
app.Run();

Needs PostgreSQL. Content, authentication, roles, workflow and the delivery API come with it.


What you inherit

Records defined at runtime

Add a field without a rebuild or a migration. Types are data, not classes you deploy.

Sensitivity per field

Hide a phone number without hiding the record. The public API emits an allowlist, so a renamed field cannot leak by accident.

Publishing is a decision

Nothing is served anonymously until a content type opts in. Private is the default, so forgetting to choose is safe.

Real history

Event sourced on Marten and PostgreSQL, so a record has a past rather than one row that keeps being overwritten.

Multi-tenant

One deployment, many customers, one database, scoped per tenant.

Modules, not a monolith

Accounting, semantic search, feature flags, file storage, social sign-in. Take what you need and the core stays small.

If you build for other people

The weeks no client ever asked you to spend

An agency starts most projects the same way. A database, an admin, logins, roles, rules about who may edit what, and an API for the frontend. It is weeks of work that no client ever asked for and none of them can tell apart.

Run one deployment and give each customer a tenant. Model what they asked for as content types, without a rebuild. Point any frontend at the delivery API, and hand the whole thing over as an export when the engagement ends.

Blueprints, form submissions, SEO fields and redirects are the pieces still missing from that story. They are tracked in the open.

What tends to sit behind a licence

The comparison, made fairly

Umbraco is the closest reference point in .NET and a good one. The CMS itself is MIT and free. What an agency runs into is that several pieces a client project needs are separate commercial products.

This compares self-hosted Umbraco, which is the like-for-like case. Umbraco Cloud is a paid platform that bundles Forms and Deploy into its plans, so those two rows do not apply if you host there.

CapabilityUmbracoBarakoCMS
The CMS itselfFree, MITFree, MPL-2.0
Editorial workflowUmbraco Workflow, licensedIn the core
Environment and content transferUmbraco Deploy, licensedPortability module
AnalyticsUmbraco Engage, licensedAnalytics module
FormsUmbraco Forms, licensedPlanned, and it will be free

To be fair about it, those licences are how Umbraco funds a mature product with real support behind it, and their add-ons are further along than ours. BarakoCMS is younger and comes with no support contract. Licensing details come from Umbraco’s own documentation and can change, so check theirs before you decide.

And a way to run it

Deploys to a VM you already own

A base is only useful if you can keep it running. BaryoVM is a companion CLI that deploys a stack to a VM you already own, over SSH, with no agent to install. It takes a backup before it updates, checks the site is healthy afterwards, and puts the previous images back if it is not.

Optional, and separate on purpose. BarakoCMS is an ordinary .NET app and runs anywhere .NET runs.

BaryoVM on GitHub

Built in the open

There is no submission queue

Issues labelled good first issue carry enough context to start without asking, and not all of them are C#. Module icons, documentation and examples all count. A README is the package page on NuGet, so a clearer one is a real improvement.

Building a module is the other way in. Publish it under your own name with the barakocms-module tag and it appears in the marketplace on its own.

People who have made this better

Not only code. A bug report that stops the wrong thing being built counts as much here as a pull request, and so far it has counted for more.