Who this is for. The person making the case for or against headless to a stakeholder who has not seen the platform. The decision is usually taken by someone who never sees this list; after this page you can put it in front of them, line by line.
What goes, line by line
| What the platform does | Server-rendered or hybrid | Headless |
|---|---|---|
| Routing: each record has a URL from its place in the tree; custom URLs, rewrites and redirects entered in the admin are applied before anything renders | Built in | Yours to build. The API resolves a page's path and its custom URL, but your router applies the rewrites and handles every other record type |
| Template resolution: the record's layout names its template, and the site's templates override the platform's by path | Built in | Gone. Layouts and areas remain the content model, but choosing how to render each layout is your code |
| Components that authors compose into pages | Each rendered by its own layout's template | Delivered as data; your code renders each kind |
| Live preview with in-context editing: the record rendered with unsaved changes beside the editing form, its text editable in place | Built in | In-place editing is lost. Preview can be won back: the admin can load a preview route of yours instead (Preview) |
Revision preview: any record's URL with ?revision= and a revision id shows that revision to a signed-in backend user | Built in | Your preview route |
| The page cache, with invalidation that knows which records each page used | Built in | Your cache, invalidated by a job (Knowing when content changed) |
| SEO output: each record's title, description, robots, canonical URL and share image printed by the template | Built in | The data is in the API; printing it is yours |
The sitemap at /sitemap.xml, with language alternates | Generated | Lists the platform's URLs, not yours; build your own |
Error pages: the site's errors/not-found.html and its siblings, with the right status | Built in | Yours |
| Forms: rendering, validation messages, CSRF | Built in | Submissions go through the API; rendering and messages are yours (Submitting a form through the API) |
| Member pages: sign-in, registration, password reset, the account area | Routes and templates | The visitor routes of the API, and your own pages |
| Drafts kept from the public: visitors never see an unpublished record | Automatic | Your responsibility: a backend credential sees drafts by default (Drafts) |
What a headless build keeps
- The content model: layouts, areas, components, custom entities and custom fields, edited in the admin as before.
- Jobs, which react to every change however it was made.
- Commerce: prices, discounts, tax, checkout and payment are worked out by the platform.
- Image resizing and conversion, which are parameters on the image's URL and work from any front end (Image URL parameters).
- Search, through the API.
The losses are the reason the platform's default is server-side rendering. Each one is small on its own; together they are a second application to design, build and maintain, and the next page turns them into a list of work: What a headless build must rebuild.