Release 3.6.0
Publishing: SEO, video, undo and WebMCP
24 September 2026
Total CMS 3.5 was about what you can build: Site Builder, extensions, an MCP server, automations. Total CMS 3.6 is about what everyone else sees. Search engines, social networks, and AI assistants now get a complete, correct picture of every page on your site from a single line in your layout. And the people editing that site get a safety net, a faster way to make small changes, and a handful of content types they have been asking for.
Here’s the tour.
SEO, done once
The headline feature. Add one line to a layout:
{{ cms.seo.head(page) }}Every Site Builder page and every collection object now gets a complete head: title, description, canonical URL, robots rules, Open Graph and Twitter cards, and a single structured-data graph that search engines and AI answer engines read. Blog posts are marked up as articles automatically.
You decide what goes into it in three layers, most specific first:
- An SEO card on any page or record, for the times one page needs its own title or share image.
- A per-collection mapping that builds titles and descriptions from fields you already have, with the same
${property}templates used across Total CMS:${title} | Reviews, or${cuisine} in ${city}. - A Site SEO record for the defaults. Most sites only ever fill in this one.
It comes with the things you would otherwise bolt on yourself. Upload one square PNG and every favicon size a browser, phone, or search result asks for is generated, /favicon.ico included. Paste the verification tags Google, Bing, and Pinterest hand you into one Meta Tags box. Give share cards their own titles and descriptions. Add your own JSON-LD and it joins the same graph. cms.render.picture() serves responsive AVIF and WebP images at five widths.
And with IndexNow switched on, every publish, edit, and delete is sent to Bing and the other IndexNow engines as it happens, following the same rules as your sitemap so a crawler is never told two different things about one page.
It works on Stacks sites too: keep a record per page as an SEO carrier and the same head call does the rest.
An undo button for your content
Every save now keeps the version it replaced, and every delete keeps the final state. Nothing to set up, it’s on by default.
tcms backup:list blog my-first-post
tcms backup:restore blog my-first-post --latestA restore is an ordinary save, so the record is re-indexed and your listeners fire, and the state it replaces is kept too, so a restore is never a one-way door. Only the records are versioned, never uploaded files, so the footprint stays small. By default each record keeps its ten newest versions for up to 30 days.
Edit where you already are
Inline editing comes to the collection table. Hover a cell, click the pencil, change the value, press Enter. Text, numbers, dates, choices, lists, and styled text all work, and a site switch plus an access-group permission decide who gets the pencil.
Deck tables got the same care: image and file columns now show a thumbnail per row, take a drop on an empty cell, and offer edit, download, and delete on hover.
Long admin forms can fold their advanced fields into accordions, the image dialog finally has a proper Discard Changes button, and hand-written HTML in a styled text field now survives being opened and saved.
New ways to hold content
- A video field. Paste a YouTube, Vimeo, Bunny, Cloudflare Stream, Loom, Wistia, Livid, Publitio, or Jet-Stream link, or a direct MP4, and
cms.render.video()renders the right player with a click-to-play poster. It works inside cards and decks and round-trips through CSV. Video field → - Podcasting. A bundled extension gives you a show, an episodes collection, and a feed the directories accept, on Site Builder and Stacks alike. Host several shows on one site. Standard edition and above. Podcasting →
- Markdown storage. A collection can keep each record as a Markdown file with frontmatter, for content you’d rather write in a text editor or keep in git. Convert an existing collection with
tcms collection:convert. Storage format → - Public counters. Let visitors increment a number field for likes, "was this helpful", or download counts, with rate limiting built in.
Lighter, faster front ends
A form on a public page used to load the entire admin bundle, around 300 KB compressed for a four-field form. In 3.6 it loads a form runtime under 50 KB, and heavier fields such as uploads or styled text fetch their own code only when a form actually uses them.
Static assets no longer set a session cookie, so a CDN finally caches them the way their headers always asked. And a new set of HTMX helpers and recipes covers live search, faceted filtering, sort toggles, lazy sections, and member-only fragments. HTMX recipes →
There’s even a |typography filter that sets prose the way a typesetter would: curly quotes in your site’s language, real dashes and ellipses, and no lone word stranded on the last line of a paragraph.
AI that connects on the first try
Connecting Claude, ChatGPT, or another MCP client over OAuth now works out of the box: dynamic client registration is on by default. To keep that safe, the consent screen now shows exactly where a client will send you after you approve, and warns when a self-registered client points somewhere unfamiliar.
Every connected AI client also gets better instructions from the moment it connects: look before acting, check the docs instead of guessing, change only the fields it means to change, never invent ids. Three new guided prompts cover modeling a collection, writing content, and auditing SEO.
And for the curious, there’s WebMCP, an experimental extension for Chrome’s new in-browser AI agents. It makes your forms callable by an agent on the page and hands that agent the same read tools your MCP server offers, as the signed-in visitor and always read-only. It’s off by default while the web standard settles. WebMCP →
For developers
composer requireinstalls an extension, straight fromvendor/, andcomposer updatekeeps it current.- Extensions can ship an agent skill, so an AI coding agent learns your extension the same way it learns Total CMS.
composer updaterunstcms deployfor you, so a forgotten cache clear after an update is a thing of the past.
Upgrading
Most sites need to do nothing. A few things to know:
- Site Builder page descriptions and images moved to the SEO card and are migrated automatically. If a template reads
page.descriptionorpage.image, switch it topage.seo.descriptionandpage.seo.image. - Backups and the generator tag are on by default. Both can be tuned or switched off.
- The CLI’s CSV export now matches the admin export, with cards in dot-notation columns.
See the 3.6.0 release notes for the full list.
Get it
Total CMS 3.6 is available now. Zip installs update from the dashboard. Composer installs run composer update totalcms/cms. New project? composer create-project totalcms/totalcms mysite.
Thank you to everyone running 3.5 in production who took the time to report what got in their way. A good part of this release is your list.