// low-code platform · bpmn + dmn engine
Draw how your business works.
Cool!MS runs it.
A low-code platform with a real BPMN + DMN engine, four visual designers and omnichannel capture — and, yes, a CMS. Model your processes, decisions, data and pages, then let the engine execute them.
// the repositioning
It shipped in the 2000s as CoolMS.CMS. The suffix stopped being true.
Cool!MS still manages your website. It also runs your processes, decides your edge cases, captures your leads and orchestrates your back office. The CMS is the part you'll notice least.
- BPMN engine
- DMN + DRD
- 4 visual designers
- Process cockpit
- Omnichannel leads
- CDP + segments
- Multisite
- Backup & edge sync
- MCP server
// four ways in
One platform, read four ways.
The same engine, exposed at the level each team wants it — code for developers, canvases for analysts, outcomes for the business, margin for the partners who deliver it.
- A monolith built to come apart — PHP 8.5 / Symfony 8, layered with a machine-checked boundary rule, cross-module references by UUID instead of foreign keys, and a transactional outbox already carrying events. Lift a module out into its own service without a rewrite.
- Render it three ways — Server-rendered themed sites, an Angular SPA, or headless over the API. Same content, same permissions, no separate stack to keep in sync. An MCP server exposes it to agents too.
- Storage-agnostic on purpose — A static-analysis rule fences the ORM out of everything but the adapter layer, so no business logic can reach for a driver. Upserts dispatch across five SQL platforms.
- A real virtual filesystem — Every page and asset is a file with genuine unix owners, groups and modes — the panel below is this site's own content directory.
- DTMPL and RQL — Templating and querying, plus tagged-registry and contributor seams to extend without forking.
Mode Type Name drwxrwsr-x directory shared/ drwxrwsr-x package about/ drwxrwsr-x package history/ drwxrwsr-x package index/ drwxrwsr-x package team/
- Four designers — Processes in BPMN, decisions in DRD, lifecycles as state machines, intake as forms.
- Draft, version, deploy — Every definition is a versioned artefact — the panel below is this install's own deployed decisions, and one of them is on its fourth version.
- Watch it run — Steer live instances in the cockpit; pick up human tasks in the inbox.
- Timers, boundaries, compensation — The hard BPMN parts, actually implemented.
definition_key deployed versions audit.drd_check v1 1 demo.discount_tier v4 4 drd-smoke-test v1 1
- One lead queue — Chat, email, phone and web land triaged in the same place.
- The operational plumbing — Calendars, SLAs, documents and reminders, built in.
- Know your customers — Profiles, segments and on-site personalization from the CDP.
- Own it — One platform on your infrastructure instead of six subscriptions.
- Many client sites, one install — Each gets its own sections, navigation trees, theme and routing, with a vhost generator that writes the nginx config for you. Editors are separated by real filesystem ownership, not by a role checkbox.
- Ship a vertical, don't fork the core — Contributor seams and tagged registries add modules, field types, service tasks and designers from the outside.
- Configuration is data, not a deployment — Processes, decisions, forms and grids are authored in the browser and versioned. Onboarding a client is a workspace, not a release branch.
- Their infrastructure or yours — Self-hosted by default, so there's no per-seat toll between you and your customer.
$ bin/console coolms:sites:apply section host theme prefix coolms-site coolms2.local coolms-site / coolms-docs coolms2.local coolms-site /docs default — coolms-default / docs — coolms-default /locale-test → vhosts written from SiteSection rows · reload nginx separately
// what's inside
Two products, one substrate.
A web platform and a business-application platform on one data model, one permission system and one deploy. The shared floor is why the breadth reads as leverage rather than sprawl — and why joining the two halves is not an integration project.
Web platform
// the part that used to be the whole productServer-rendered sites
Public pages rendered from the VFS through themes — no separate frontend to deploy.
Multisite
Per-section navigation, themes and routing under a single install.
Customer profiles
Subjects, segments and cache-safe personalization over server-rendered pages.
Form builder
Data-bound forms with declared actions, stored file-first or in the database.
Business applications
// what the suffix stopped coveringProcess engine
BPMN-lite execution with timers, boundary errors, compensation and external workers.
Decisions
DMN with decision requirement diagrams — topological evaluation and hit policies.
Four designers
BPMN, state machine, DRD and forms — draft to deploy, entirely in the browser.
Process cockpit
Watch, steer, retry, suspend and migrate running instances live.
Task inbox
Claim, delegate and complete human tasks — realtime, with mentions.
Omnichannel capture
Chat, email, phone and web collapse into a single triaged lead queue.
Documents
Templated generation to PDF and Word straight from live process data.
The shared substrate
// one of each, underneath bothPermissioned VFS
Every page and asset is a file with real unix owners, groups and modes.
Storage-agnostic
The ORM is fenced behind adapters by a build-breaking rule; upserts span five SQL platforms.
Extraction-ready
Enforced module boundaries, UUID soft-references and outbox rails — split a module out when you need to.
Backup & edge sync
Snapshot, restore, and a one-way controller→edge change feed.
$ php tools/check-module-boundaries.php module-boundaries: 64 modules, 2482 cross-module references; violations: 44 cross-layer, 1 upward, 0 cycles pinned: 45 (44 cross-layer, 1 upward, 0 cycles) self-contained: Identity, Settings — 0 reference(s) out of it, 0 pinned
The boundary is a test, not a guideline — every commit runs it, and a new violation refuses the commit.
// proof
This page runs on Cool!MS.
It's server-rendered through the platform's own virtual filesystem, composed from content package nodes and localized with its own catalogues. The form beside it is not a mock either — it posts to the platform's lead endpoint and lands in the same queue the omnichannel lane above describes, as the web channel.
// get started
Draw how your business works.
Cool!MS runs it.
The demo is the product. So is this page.