Own the software. Choose how much of the running you do.

Four open-source products on one path. Model content in barakoCMS, edit it in barakoBrew, render it with barakoPress, ship it with BaryoVM. Nothing is metered per seat, record or site.

npm create barako-app@latest

The path

Four steps. One product each.

Try it

Change it on the left. Publish. It is live on the right.

Before
kape-ana.example
Kapé AnaMenuFind us
Slow coffee, early mornings.
See the menuOpening hours
After changing the name and colour in barakoBrew and publishing
kape-ana.example
Kapé AnaMenuFind us
Pour-over, all morning.
See the menuOpening hours

Rendered by barakoPress. Identity is read at request time.

An illustration. Nothing you type here is saved.

The ladder

Most sites never step down to code.

For exampleA café site with a menu, opening hours and a contact form. No code at all.

Workflows & connectors · Rung 2

Every run is on screen. Every retry is accounted for.

Workflows are data you edit in barakoBrew, not code. Each run records its attempts, backoff and idempotency key, so a retried Slack message never posts twice. This is the Workflow runs screen in barakoBrew. Fire a run, or take Slack down and watch it retry, then stop safely.

barakoBrew/ Workflow runs · Publish and announce
Definition
WhenArticle moves Draft to In review
Require approvalsAction · 2 of Editors
Notify SlackConnector · chat.postMessage
PublishTransition · In review to Published
Purge barakoPressWebhook · tenant:kape-ana
Runs
Runrun_5K1APartly failed
  1. ✓Require approvals · Doneattempt 1 · approved by Mara, Jun · 0 ms
  2. ?Notify Slack · Unknownattempt 1 · timed out after 30 s · 30000 ms
  3. -Publish · Skipped
  4. -Purge barakoPress · Skipped
Idempotency key run_5K1A:slackRuns on built-in runnerSlack timed out, so the message may already have posted. A retry sends the same idempotency key; deciding to accept that is left to a person.

Illustration: sample data, not a live run.

The ledger

We write down what is expensive to undo.

Every choice that cannot easily be reversed is recorded with what it rules out, and what would have to change for it to be wrong. Most are settled by one question:

Which door stays open?

Rules out

Per-site forks of barakoPress. press.config.ts literals for identity. Site specific code in a client repository. A module for something a workflow can do.

Wrong if

A site that cannot be expressed as blocks and settings without bending the block model out of shape. rckoronadal.org, baryo.dev and barakocms.com are the three tests (#722); if one of them needs site code, the ladder needs another rung, not an exception.

Modules · 28 · each one runs here

Add one when the server needs a rule.

Modules, pick one to see its barakoBrew screen
barakoBrew/ Modules / PagesDetectedBarakoCMS.Pages 4.5.0

Pages

Content

A page tree with nested navigation, paths and breadcrumbs, for barakoPress to render.

Pages
14
Blocks used
62
Drafts
2
Pages
PagePathBlocksStatus
Home/7Published
Menu/menu4Published
Events/events3Published
New menu/drafts/new-menu5Draft
Try it
Open
Pick a case and press Render.
Needs
Core only
Package
BarakoCMS.Pages
$ dotnet add package BarakoCMS.Pages

Illustration: sample data, not a live module.

barakoBrew/ Modules / FormsDetectedBarakoCMS.Forms 4.7.0

Forms

Content

Public form submissions, validated and stored as Sensitive entries, with a honeypot and a rate limit.

Forms
3
Submissions · 30 d
128
Blocked as spam
41
Forms
FormSubmissionsLastSpam check
Contact8612 min agoHoneypot + timing
Newsletter391 h agoHoneypot
Catering request3YesterdayHoneypot + timing
Try it
Sender
Pick a case and press Submit.
Needs
Core only
Package
BarakoCMS.Forms
$ dotnet add package BarakoCMS.Forms

Illustration: sample data, not a live module.

barakoBrew/ Modules / FilesDetectedBarakoCMS.Files 5.1.0

Files

Storage

Uploads and serves files, stored in Postgres. Files · S3 moves them to a bucket.

Files
312
Storage
1.8 GB
Variants
3 per image
Library
FileTypeSizeUsed in
latte.jpgimage/jpeg2.4 MBMenu
menu-2026.pdfapplication/pdf640 KBFind us
roaster.mp4video/mp448 MBMeet our roaster
Try it
Upload
Pick a case and press Upload.
Needs
Core only
Package
BarakoCMS.Files
$ dotnet add package BarakoCMS.Files

Illustration: sample data, not a live module.

barakoBrew/ Modules / Files · S3DetectedBarakoCMS.Files.S3 5.1.0

Files · S3

Storage

Keeps Files in AWS S3, Cloudflare R2 or any S3-compatible store.

Bucket
kape-ana
Objects
1,204
Signed URLs
15 min
Bucket
PrefixObjectsSizeClass
images/9801.6 GBStandard
docs/204210 MBStandard
video/202.1 GBStandard
Try it
Bucket
Pick a case and press Store.
Needs
Files
Package
BarakoCMS.Files.S3
$ dotnet add package BarakoCMS.Files.S3

Illustration: sample data, not a live module.

barakoBrew/ Modules / ImportDetectedBarakoCMS.Import 4.7.0

Import

Content

Bulk-creates entries from .xlsx or CSV uploads, mapped to a content type.

Imports
9
Rows brought in
1,482
Rows rejected
6
Imports
FileIntoRowsResult
menu.csvmenu-item24 of 24Succeeded
events.xlsxevent11 of 12Partly failed
beans.jsonarticle8 of 8Succeeded
Try it
File
Pick a case and press Import.
Needs
Core only
Package
BarakoCMS.Import
$ dotnet add package BarakoCMS.Import

Illustration: sample data, not a live module.

barakoBrew/ Modules / PortabilityDetectedBarakoCMS.Portability 4.7.0

Portability

Ops

Exports content types and their entries as a JSON bundle, and imports it into another instance.

Exports
4
Last export
41 MB
Restores
1
Archives
ArchiveTenantSizeWhen
tenant-kape-ana.zipkape-ana41 MBToday 06:00
tenant-kape-ana.zipkape-ana-staging40 MBLast week
Try it
Action
Pick a case and press Run.
Needs
Core only
Package
BarakoCMS.Portability
$ dotnet add package BarakoCMS.Portability

Illustration: sample data, not a live module.

barakoBrew/ Modules / Email · ResendDetectedBarakoCMS.Email.Resend 4.7.0

Email · Resend

Email

Sends mail through Resend and records bounces and complaints.

Sent · 30 d
2,140
Delivered
99.1%
Suppressed
7
Deliveries
ToSubjectStatusWhen
ana@cafe.exampleNew contact messageDelivered12 min ago
old@gone.exampleWelcome to Kapé AnaBounced1 h ago
lea@cafe.exampleEntry needs reviewDelivered2 h ago
Try it
Recipient
Pick a case and press Send.
Needs
Core only
Package
BarakoCMS.Email.Resend
$ dotnet add package BarakoCMS.Email.Resend

Illustration: sample data, not a live module.

barakoBrew/ Modules / Email · SmtpDetectedBarakoCMS.Email.Smtp 4.5.0

Email · Smtp

Email

Sends mail through any SMTP relay.

Relay
Postfix
Queued
0
Failed · 30 d
2
Deliveries
ToSubjectStatusWhen
ops@cafe.exampleNightly reportSent06:00
ana@cafe.examplePassword resetSentYesterday
Try it
Relay
Pick a case and press Send.
Needs
Core only
Package
BarakoCMS.Email.Smtp
$ dotnet add package BarakoCMS.Email.Smtp

Illustration: sample data, not a live module.

barakoBrew/ Modules / External sign-inDetectedBarakoCMS.ExternalAuth 4.8.0

External sign-in

Auth

Continue with Google, GitHub, LinkedIn or Facebook, matched by verified email.

Providers on
3
Linked accounts
6
Refused · 30 d
2
Providers
ProviderStatusAccountsRule
GoogleOn4email_verified required
GitHubOn2verified primary only
LinkedInOn0email_verified required
FacebookOff0needs operator opt-in
Try it
Provider
Pick a case and press Sign in.
Needs
Core only
Package
BarakoCMS.ExternalAuth
$ dotnet add package BarakoCMS.ExternalAuth

Illustration: sample data, not a live module.

barakoBrew/ Modules / Device trustDetectedBarakoCMS.DeviceTrust 4.5.0

Device trust

Auth

Binds sessions to devices and can require OTP approval for a new one.

Trusted devices
11
Codes sent · 30 d
23
Trust lasts
30 days
Trusted devices
UserDeviceTrusted untilLast seen
AnaMacBook · Safari12 NovNow
MarcoPixel 8 · Chrome3 NovYesterday
LeaiPad · Safari29 Oct3 days ago
Try it
Device
Pick a case and press Sign in.
Needs
Core only
Package
BarakoCMS.DeviceTrust
$ dotnet add package BarakoCMS.DeviceTrust

Illustration: sample data, not a live module.

barakoBrew/ Modules / Feature flagsDetectedBarakoCMS.FeatureFlags 4.5.0

Feature flags

Ops

Turns a feature on by tenant, by user or by percentage rollout.

Flags
4
On
3
Rolling out
1
Flags
FlagRuleRolloutState
new-editorrole Editor20%On
semantic-searcheveryone100%On
holiday-bannertenant kape-ana100%On
beta-blocksrole Owner0%Off
Try it
User
Pick a case and press Evaluate.
Needs
Core only
Package
BarakoCMS.FeatureFlags
$ dotnet add package BarakoCMS.FeatureFlags

Illustration: sample data, not a live module.

barakoBrew/ Modules / DiagnosticsDetectedBarakoCMS.Diagnostics 4.5.0

Diagnostics

Ops

Collects browser errors from your apps, grouped by fingerprint with a count.

Checks
4
Warnings
1
Checks
CheckResultDetailTook
DatabasePassPostgres 164 ms
MigrationsPasscurrent12 ms
Erasure:ModePassDelete1 ms
Mail transportWarnnone configured0 ms
Try it
Report
Pick a case and press Send.
Needs
Core only
Package
BarakoCMS.Diagnostics
$ dotnet add package BarakoCMS.Diagnostics

Illustration: sample data, not a live module.

barakoBrew/ Modules / PWADetectedBarakoCMS.Pwa 4.5.0

PWA

Analytics

Records installs to the home screen, anonymous or per signed-in user.

Installs · 30 d
58
Offline opens
140
Shell files
6
Installs
PlatformInstallsShareTrend
Android3459%Rising
iOS1933%Steady
Desktop58%Rising
Try it
Visitor
Pick a case and press Install.
Needs
Core only
Package
BarakoCMS.Pwa
$ dotnet add package BarakoCMS.Pwa

Illustration: sample data, not a live module.

barakoBrew/ Modules / Analytics · UmamiDetectedBarakoCMS.Analytics.Umami 4.5.0

Analytics · Umami

Analytics

Shows Umami traffic in barakoBrew through a server-side proxy.

Visits · 7 d
1,284
Top page
/menu
From Maps
41%
Top pages · 7 days
PageViewsVisitorsShare
/menu2,21098038%
/find-us1,14061220%
/events72039012%
Try it
Range
Pick a case and press Load.
Needs
An Umami instance
Package
BarakoCMS.Analytics.Umami
$ dotnet add package BarakoCMS.Analytics.Umami

Illustration: sample data, not a live module.

barakoBrew/ Modules / AIDetectedBarakoCMS.AI 4.6.0

AI

Content

Semantic search over published, Public entries with a self-hosted model. No third-party key.

Embedded entries
214
Searches · 7 d
390
Model
nomic-embed
Recent searches
QueryResultsTop matchScore
when are you open2holiday-hours0.81
vegan options3menu0.74
staff phone numbers0none·
Try it
Search
Pick a case and press Ask.
Needs
An Ollama instance
Package
BarakoCMS.AI
$ dotnet add package BarakoCMS.AI

Illustration: sample data, not a live module.

barakoBrew/ Modules / AccountingDetectedBarakoCMS.Accounting 4.5.0

Accounting

Domain

Double-entry accounts, balanced journal entries and reports.

Invoices · Oct
42
Next number
INV-0043
Open balance
₱18,400
Invoices
NumberCustomerAmountStatus
INV-0042Roasters Co.₱6,200Open
INV-0041Baryo Events₱12,200Open
INV-0040Lea Santos₱850Paid
Try it
Case
Pick a case and press Post.
Needs
Core only
Package
BarakoCMS.Accounting
$ dotnet add package BarakoCMS.Accounting

Illustration: sample data, not a live module.

barakoBrew/ Modules / Secrets · AWSDetectedBarakoCMS.Secrets.Aws 5.0.0

Secrets · AWS

Ops

Loads barakoCMS configuration values, such as JWT:Key, Secrets:Key and module credentials, from AWS Secrets Manager at startup, authenticating as the instance's own role. A mapped secret that cannot be read stops startup with a message naming the secret, never its value.

Try it
Package
BarakoCMS.Secrets.Aws
$ dotnet add package BarakoCMS.Secrets.Aws
barakoBrew/ Modules / Secrets · GCPDetectedBarakoCMS.Secrets.Gcp 5.0.1

Secrets · GCP

Ops

Loads barakoCMS configuration values, such as JWT:Key, Secrets:Key and module credentials, from Google Secret Manager at startup, authenticating as the instance's own service account. A mapped secret that cannot be read stops startup with a message naming the secret, never its value.

Try it
Package
BarakoCMS.Secrets.Gcp
$ dotnet add package BarakoCMS.Secrets.Gcp
barakoBrew/ Modules / NotificationsDetectedBarakoCMS.Notifications 5.2.0

Notifications

Notifications for barakoCMS: any module raises a notification for a user, it lands in that user's in-app inbox (list, unread count, mark read) and is also handed to any delivery sink registered beside it, such as the built-in email sink. Tenant-scoped, and a user sees only their own.

Try it
Package
BarakoCMS.Notifications
$ dotnet add package BarakoCMS.Notifications
barakoBrew/ Modules / ReportsDetectedBarakoCMS.Reports 5.2.0

Reports

Reports for barakoCMS: save a report over a client's own content (a content type, filters, one group-by field and count, sum, avg, min or max measures), run it with a date range, and export it as CSV. Totals are computed in the database, bounded by a group limit, and follow the reader: row conditions apply and a field the role cannot read cannot be grouped or measured.

Try it
Package
BarakoCMS.Reports
$ dotnet add package BarakoCMS.Reports
barakoBrew/ Modules / QrDetectedBarakoCMS.Qr 5.2.0

Qr

QR codes for barakoCMS delivery: renders one field of a public entry as a PNG or SVG QR code, only for the fields a deployment lists per content type, so a claim token or a link can be scanned from a page, an email or a printed document.

Try it
Package
BarakoCMS.Qr
$ dotnet add package BarakoCMS.Qr
barakoBrew/ Modules / SchedulingDetectedBarakoCMS.Scheduling 5.2.0

Scheduling

Scheduling module for barakoCMS: schedule a named action for a due time, and exactly one API instance hands it to the registered handler when the time comes. Never fires the same entry twice.

Try it
Package
BarakoCMS.Scheduling
$ dotnet add package BarakoCMS.Scheduling
barakoBrew/ Modules / DocumentsDetectedBarakoCMS.Documents 5.2.0

Documents

Document generation for barakoCMS: render an entry to a PDF from a narrow template language, drawn natively with SkiaSharp, and store it through the Files module. No browser, and a template cannot fetch anything.

Try it
Package
BarakoCMS.Documents
$ dotnet add package BarakoCMS.Documents
barakoBrew/ Modules / ContactsDetectedBarakoCMS.Contacts 5.2.0

Contacts

Contacts for barakoCMS: one record for a person or an organization, with typed custom fields, person to organization links, email deduplication with a merge endpoint, tenant scoping and capability-gated access. Email, phone and address are Sensitive and never leave over anonymous delivery.

Try it
Package
BarakoCMS.Contacts
$ dotnet add package BarakoCMS.Contacts
barakoBrew/ Modules / PaymentsDetectedBarakoCMS.Payments 0.1.0

Payments

Payments for barakoCMS: a content type declares what is payable, a public checkout returns the provider's hosted URL for the amount stored on the entry, and a signed, idempotent webhook runs the paid transition.

Try it
Package
BarakoCMS.Payments
$ dotnet add package BarakoCMS.Payments
barakoBrew/ Modules / CommentsDetectedBarakoCMS.Comments 5.2.0

Comments

Comments and notes for barakoCMS: a threaded comment on any record. A comment names its target by type and id, and it is only readable and postable by a caller who can read that record. Content entries work out of the box; any other module registers its own record type.

Try it
Package
BarakoCMS.Comments
$ dotnet add package BarakoCMS.Comments
barakoBrew/ Modules / CdnPurgeDetectedBarakoCMS.CdnPurge 5.2.0

CdnPurge

CDN purge module for barakoCMS: a CdnPurge workflow action that purges the cache tags of a published entry from Cloudflare, using the same tags the delivery API sends.

Try it
Package
BarakoCMS.CdnPurge
$ dotnet add package BarakoCMS.CdnPurge
barakoBrew/ Modules / BookingDetectedBarakoCMS.Booking 5.2.0

Booking

Booking for barakoCMS: resources with a time zone, weekly opening hours and exceptions, bookings as content entries that a lifecycle hook refuses when they overlap another active booking of the same resource, and a public availability route that returns free slots only.

Try it
Package
BarakoCMS.Booking
$ dotnet add package BarakoCMS.Booking

Known gaps

What it does not do yet.

Read from open issues labelled known-gap. Closing the issue removes the line.

Start

Pick where you begin.

docker compose -f compose.api.yml up -d

compose.api.yml is in the barakoCMS Quickstart. It starts the API and Postgres on localhost:5000.