Why CWA

What CWA does differently, how it compares with other ways to build an editable website, when not to choose it, and the project's alpha status.

CWA is an open-source, self-hosted website platform for Symfony and Nuxt. Your developers build the components. Your clients edit, draft, schedule and publish pages directly on the live site. The template ships the whole production stack.

This page helps you decide whether it fits your project.

What sets it apart

Editing on the page, MIT licensed and self-hosted. Editors switch to edit mode on the live site and change the page they are looking at. There is no separate CMS application and no hosted editor. The API bundle and the Nuxt module are MIT licensed, and you run them on your own servers.

Guard-rails for the brand. You decide which component types each component group accepts, and which preset styles an editor can pick for each component. Editors change content, not your design. See Components and Draft and Publish.

The production stack included. A project made with pnpm create cwa already has:

  • Docker for local development and production;
  • a Helm chart for Kubernetes;
  • GitLab and GitHub pipelines that build, test and deploy;
  • an HTTP page cache that is purged by tag when content changes, with optional Cloudflare edge purges;
  • Mercure, so open browsers hear about a publish straight away;
  • scheduled publishing for components and for whole pages.

See Deployment for the full list.

Compared with other approaches

There are several ways to give clients an editable website. The table compares CWA with the main approaches, not with individual products. Products change quickly, so check each one's current documentation and pricing before you decide.

CWAHosted visual CMSHeadless CMS with its own adminGit-based editingPHP CMS with its own templates
Where editors workOn the live page, in edit modeIn the vendor's editor, with a preview of your siteIn a separate admin appIn an editor that commits filesIn the CMS's admin, sometimes with a page builder
Draft, publish and schedulingPer component, and per page through its routeUsually built inVaries by product and planThrough Git branches and mergesUsually built in
HostingSelf-hostedVendor-hosted (SaaS)Often bothYour Git host and your site hostUsually self-hosted
Licence and costMIT; you pay for hosting and developersSubscription, often per seat or tierOpen source, source-available or commercialOften freeOpen source or commercial
Front endNuxt (Vue)Any, through an SDKAny, through the APIUsually tied to a static site generatorThe CMS's own templates, or headless
Back endSymfony and API Platform (PHP)The vendor'sVaries (often Node.js)NonePHP
Real-time updates to open pagesBuilt in (Mercure)VariesVariesUsually after a rebuildVaries
Production stack includedDocker, Helm, CI, page cache, MercureHosted for youYou build itYou build itVaries
Maturity2.0 alphaOften matureOften matureVariesOften mature

Examples of each approach: hosted visual CMSs such as Storyblok; headless CMSs such as Strapi, Payload and Directus; Git-based editors such as Nuxt Studio; PHP CMSs such as Sulu, Statamic and Craft.

CWA's closest neighbours are Symfony content platforms. If your team already runs Symfony and API Platform and wants a Nuxt front end with page building, CWA is built for that.

When to choose CWA

  • You build bespoke websites for clients, and want them to edit content without breaking the design.
  • Your team knows PHP and Vue, or Symfony and Nuxt.
  • You want to self-host, own your data, and avoid per-seat CMS fees.
  • You want one component library you can reuse across sites.
  • You want the deployment, caching and real-time pieces to come ready-made.

When not to choose CWA

CWA isn't the right choice for every project.

  • You want a single JavaScript stack. CWA's API is PHP (Symfony). If your team only writes JavaScript or TypeScript, a Node.js CMS fits better.
  • You need a stable release now. CWA 2.0 is in alpha. APIs and configuration can still change between releases. See Project status.
  • You have no PHP skills on the team. Every component has a PHP entity as well as a Vue file.
  • Your editors want free design control. CWA deliberately limits editors to the components and styles your developers provide. If editors should design pages freely, a page builder fits better.
  • You don't want to run servers. CWA is self-hosted. In production it expects Kubernetes, or Docker on your own server. A hosted CMS removes that work.
  • Your content lives in Git. If your editors are happy committing Markdown and you don't need draft and publish states, a Git-based editor is simpler.

Project status

CWA 2.0 is in alpha: try it, build with it, and give feedback.

  • The API bundle (components-web-app/api-components-bundle) and the Nuxt module (@cwa/nuxt) are released as 2.0.0-alpha versions, and the template follows them.
  • The core model is in place: layouts, pages, component groups, components, routes, and draft and publish.
  • Configuration, APIs and behaviour can still change between alpha releases. Some changes need manual upgrade steps.
Read the upgrade notes before you update. Each alpha release lists its manual steps on the Releases page.

Release notes are in each repository's changelog: API bundle, Nuxt module and template.

Next steps