Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

408 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

BarakoCMS logo — a coffee bean

BarakoCMS

A headless CMS suite for .NET 8: an event-sourced engine, opt-in modules, an admin UI, and a PWA kit.

NuGet Documentation License Live demo

BarakoCMS is a headless, API-first CMS built on FastEndpoints and Marten (event sourcing over PostgreSQL). The core stays small and generic; everything else — accounting, analytics, email, file storage, auth providers — ships as opt-in modules you compose per project. It comes with a Next.js admin UI that surfaces your content and every installed module, and it's multi-tenant out of the box.

The name Barako comes from kapeng barako, a bold Philippine coffee varietal — hence the coffee-bean mark. The full-module image is "Barako"; the lean core is "Decaf".

BarakoCMS admin — Overview

Note

BarakoCMS is a passion project built for learning and portfolio purposes. It's usable and maintained, but breaking changes can happen between versions. See CHANGELOG.md.


Contents


Quick start

The fastest path is the quickstart bundle — the full suite (core + every module), the admin UI, and PostgreSQL, from prebuilt images, driven by one documented .env. No build, no clone.

curl -O https://raw.githubusercontent.com/BaryoDev/barakoCMS/master/quickstart/docker-compose.yml
curl -O https://raw.githubusercontent.com/BaryoDev/barakoCMS/master/quickstart/.env.example
cp .env.example .env      # then set DB_PASSWORD, JWT_KEY (32+ chars), ADMIN_PASSWORD
docker compose up -d
  • Admin UIhttp://localhost:3000 · APIhttp://localhost:5005 · health at /health
  • Every module ships in the image and stays off/mock until you add its keys, so you grow into Umami analytics, Resend email, social sign-in, and the rest without touching the compose.

See quickstart/README.md for every variable, enabling modules, and going behind a domain with TLS. To build from source instead, see the getting-started guide.


Live demo

https://playground.baryo.dev/barakocms — sign in as demo_admin / BarakoDemo2026!. The API is at https://playground.baryo.dev/barakocms-api (health).


The admin

A Next.js admin for modeling content, managing access, and running the system. Installed modules appear automatically as their own sections — the admin is a window into your whole deployment.

  • Content — define content types with typed fields (including per-field sensitivity/masking), write and version entries, and automate with workflows.
  • Access — users, roles, and groups with fine-grained RBAC.
  • Multi-tenancy — auto-scopes to your tenant on sign-in, with a switcher to move between the tenants you belong to; all data reloads under the one you pick.
  • Module sections — Accounting, Analytics, Email events, Feature flags, PWA installs, and more, each shown only when its module is installed.
Analytics Content types
PWA installs Health

Modules

Core stays lean and generic. Capabilities ship as optional NuGet modules you opt into per project — the same IBarakoModule contract you can implement yourself.

Module Package What it adds
Accounting BarakoCMS.Accounting A double-entry ledger — chart of accounts, balanced journal entries, balances, and per-account ledgers.
Import BarakoCMS.Import Bulk import .xlsx/CSV into content via Talaan, through the CMS's own validation, permissions, and event sourcing.
Files BarakoCMS.Files File upload/download stored in Postgres via Marten — receipts, photos, documents.
Email.Resend BarakoCMS.Email.Resend An IEmailService over the Resend API, plus a delivery webhook and an email-events feed (bounces/complaints).
DeviceTrust BarakoCMS.DeviceTrust Remembers trusted devices; step-up OTP when a new one signs in.
ExternalAuth BarakoCMS.ExternalAuth "Continue with Google / GitHub / Facebook / LinkedIn" via OAuth, behind one master switch.
FeatureFlags BarakoCMS.FeatureFlags Create, toggle, and target flags by tenant, user, or percentage — viewable/toggleable in the admin.
Portability BarakoCMS.Portability Export/import content-type definitions and data as a JSON bundle, for backup, migration, and seeding.
Diagnostics BarakoCMS.Diagnostics Captures client-side (browser) errors and shows a deduped, resolvable error log in the admin.
Analytics.Umami BarakoCMS.Analytics.Umami A server-side proxy over self-hosted Umami: visitors, pages, referrers, countries, devices — plus registering sites and verifying install.
Pwa BarakoCMS.Pwa Tracks PWA installs / installed-app launches (anonymous or tied to the signed-in user) so the admin shows who installed the app.
AI BarakoCMS.AI Semantic search over published content using a self-hosted embedding model (Ollama by default) — no third-party API key. Indexes only public fields; results are re-checked as published + public at query time.

Enable the ones you want when you register the CMS:

builder.Services.AddBarakoCMS(builder.Configuration, modules =>
{
    modules.Add(new BarakoCMS.Accounting.AccountingModule());
    modules.Add(new BarakoCMS.Email.Resend.ResendEmailModule());
    modules.Add(new BarakoCMS.Analytics.Umami.UmamiAnalyticsModule());
    modules.Add(new BarakoCMS.Pwa.PwaModule());
    modules.Add(new BarakoCMS.AI.AiModule()); // semantic search (Ollama)
    // …add only what you need
});

await app.RunBarakoModuleSeedersAsync(); // module baseline data (roles, reference data)

A module contributes DI services, its own Marten documents, FastEndpoints endpoints, and seed data, implementing only the hooks it needs. See each module's page in the docs. Want every module in one image? Use ghcr.io/baryodev/barako-cms (Barako, full suite); for the lean core, ghcr.io/baryodev/barako-cms-decaf (Decaf) and add your own.


Frontend kit

BarakoCMS is headless — you build the frontend. These BaryoDev packages help:

  • @baryodev/pwa-kit — service-worker registration + versioned caching, install hints, standalone viewport handling, and a PWA-install reporter that pairs with the Pwa module (reportPwaStatus).
  • @baryodev/read-aloud — "listen to this" using Microsoft Edge's free neural voices: a Node TTS endpoint plus a framework-free browser reader with word highlighting. Drop it into any frontend for accessible, read-aloud content.
  • Talaan — a zero-dependency .xlsx/CSV reader used by the Import module.

Architecture

  • Event-sourced — content changes are events in Marten; you get full version history, rollback, and async projections for free.
  • Modular — core knows nothing about any module; the IBarakoModule contract wires services, documents, endpoints, and seeders. Build your own the same way.
  • Multi-tenant — conjoined tenancy: one deployment, many tenants; data scoped by tenant, with global users/roles and per-tenant memberships.
  • RBAC — roles, groups, and per-content-type permissions, with field-level sensitivity/masking.
  • MFA — optional TOTP second factor (authenticator app) with one-time recovery codes; enforced on every sign-in path (password, email code, social), with encrypted secrets and replay protection.
  • Public delivery — anonymous, cacheable, published-only reads for any content type, with keyword search (/api/public/{type}/search), an RSS feed (/api/public/{type}/feed.xml), and, via the AI module, semantic search (/api/public/{type}/semantic). It emits only allowlisted public fields — fail-closed by design.
  • Scheduled publishing — arm any item with a publish and/or unpublish time; a background sweep promotes and retires content on schedule, per tenant, emitting real events so workflows fire.
  • FastEndpoints + Kestrel — minimal-overhead HTTP; health checks and Prometheus metrics built in.

Deep dives live in the docs: event sourcing, concurrency, content modeling, extending BarakoCMS, and deployment.


Sample app

BaryoClub composes the suite into a club membership and treasury manager — members, a double-entry ledger, statements, OTP sign-in, and a full PWA. It's the reference for building a real product on BarakoCMS.


Documentation

Full docs: https://baryo.dev/docs — getting started, guides, module references, API reference, and architecture. Changelog: CHANGELOG.md.

How this project is built and shipped: AI Development Lifecycle — the breakable-staging discipline, version-gated releases, and how tests gate every promotion.


Support

BarakoCMS is free and open-source under MPL-2.0. If it's useful to you:


License

MPL-2.0 — the core and every module, so there is one licence across the suite.

MPL is file-level copyleft: use it in commercial and closed-source products freely, and if you modify a barakoCMS source file, share that file's changes. Your own code stays yours.

Packages up to BarakoCMS 3.1.1 were released under Apache-2.0 and remain so; 3.2.0 onward is MPL-2.0.

Author: Arnel Robles · @arnelirobles · arnelirobles@gmail.com

About

Open-source headless CMS for .NET 8 — event-sourced on Marten + PostgreSQL, multi-tenant, with opt-in modules and a Next.js admin UI. Self-hostable, MPL-2.0.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages