Glossary
Each term has a short definition and a link to the page that covers it. Key Ideas explains the main ones in more words, for readers about to start the guides.
Content structure
Layout
The outer shell a page renders in: header, footer, navigation. A layout is a record in the database, and its Vue file is in app/app/cwa/layouts/. See Layouts & Pages.
Page
A page saved in the database. It says which layout and page template to use, and holds the page's component groups. A page usually has a route. See Layouts & Pages.
Page template
The Vue file that arranges a page's component groups on screen, in app/app/cwa/pages/. In the admin it's the Page UI. Not the same as a template page.
Template page
A page that is the shared design for one type of page data, such as every blog article. It has isTemplate: true and no route of its own: each page data item of that type is shown through it. In the admin it's a Dynamic page. Not the same as a page template. See Layouts & Pages › Template Pages.
Page data
One item of repeating content, such as one blog article, with its own fields and its own route. Its PHP class extends AbstractPageData, and it is shown through a template page. See Dynamic Pages.
Route
The link from a URL path, such as /about-us, to the page or page data item shown there. A route can also redirect to another route, and can have a go-live date. See Routes.
Component
One piece of content, such as a title, a quote or an image. A component type is a PHP entity that extends AbstractComponent, plus a Vue file that displays it and admin tabs that edit it. See Components.
Component group
A named, ordered list of components, such as main or banner, that belongs to a layout, page or component. Each component in it sits in a component position. A Vue file declares the group with <CwaComponentGroup reference="main">, and editors add components to it in edit mode. Also called a group. See <CwaComponentGroup />.
Component position
The entry that puts one component into a component group and sets where it comes in the group's order. Also called a position. A dynamic position holds a binding to a page data property instead of a component. The admin creates positions when an editor adds a component. See The Data Model.
Dynamic position
A component position with no component of its own: it shows a component from the current page data item instead, such as each article's body. It sits in a component group on a template page, so every item shown through that template page shows its own component there. See Dynamic Pages.
uiComponent
The name of the Vue file that displays a layout, page or component, saved with it in the database. For the layout file landing.vue, it's CwaLayoutLanding. See How uiComponent names resolve.
Stranded component group
A component group still attached to a record after its reference was renamed in code, so visitors no longer see it. The admin bar offers to merge or delete it. See Maintenance.
Orphan
A record that nothing uses: a component nothing displays, a component position with neither a component nor a page data property, or a component group nothing owns. An orphaned file is a stored upload that no row references. The admin and console commands find and delete them. See Orphaned Data.
Identifying and loading
IRI
The path that identifies a record in the API, such as /_/pages/018e… or /component/titles/018e…. The module passes a record's IRI to its Vue file as the iri prop, and the API uses IRIs as cache tags. See Key Ideas › How records are identified.
Manifest
The list of everything a page displays, which the module fetches with the route so it can load the whole page at once. It comes from GET /_/resource_manifest/{path}, grouped by how deeply each item is nested. See Routes › The Resource Manifest.
Draft and published
A publishable component has two versions. Editors change the draft; visitors see the published version until an editor publishes it. See Draft & Publish Workflow.
Edit mode
What an editor turns on with Edit in the admin bar. Empty component groups show a +, and clicking a component selects it and opens the manager panel. See The Admin Panel.
Layer
@cwa/nuxt is installed as a Nuxt layer (extends: ['@cwa/nuxt/layer']). The layer adds the module, the sign-in pages and the /_cwa admin pages. See The CWA Layer.
Scaffold
A PHP class that creates layouts, pages, routes and components in code, to fill the database with starting content. It extends AbstractCwaScaffold. See Data Fixtures.
Caching and deployment
Souin
The HTTP cache inside Caddy, in the template's php container. It stores page HTML and /_api responses, and drops them when the API purges their tags. See Caching.
Cache tag
A label on a cached response that lets it be purged. CWA tags each response with the IRIs of the resources in it, in the Surrogate-Key header. See HTTP Caching › Cache Tags and Purging.
cwa-html
The cache tag on every page that Nuxt renders. Purging it drops every cached page but keeps cached API responses. Saving site config and every deploy purge it. See Purging Every Rendered Page.
Purge
Removing cached responses by tag, so the next request gets a fresh copy. A full flush empties the whole cache. See Caching › Purges.
Mercure
The real-time hub, inside Caddy in the template. The API publishes every change to it. Each open browser is told about the change and shows an Update notice that applies it without a reload. See Real-Time Updates.
Track
A deploy target in the template's pipeline: stable (production), staging, canary or review. See CI/CD.
Next: Build Your First Layout
The guides put these ideas to work. Start with Your First Layout.
Caching
Every cache between a visitor and the API in a CWA site, from the service worker to Cloudflare, Souin and the API's cache tags. What each one stores, how long, and what clears it.
Overview
Step-by-step guides that build a small CWA site, from a layout to a dynamic page. Who they're for and the order to follow.