Draft or published? How each CMS decides, and why it matters when an AI writes
The first question anybody asks before letting an assistant write on their website is whether it will put things live. The answer depends on a word, and the word is different on every platform: WordPress says draft and pending and private and future, Joomla says unpublished and archived and trashed, Ghost has one called sent that cannot be taken back. An assistant that assumed one platform's vocabulary would be unpublishing pages on another. The table below is each platform's own list, in each platform's own order, read from the software that talks to it.
·
This looks like a detail and it is the single most common source of real bugs in software that works across platforms. The one in our own history is instructive: our content screen defaulted to WordPress's word for "any status", and six of the ten platforms we supported at the time refused that word outright — so an ordinary page load failed on more than half the catalogue, and it had nothing to do with permissions.
11 platforms, 11 vocabularies
Each row is what that platform calls the states a piece of content can be in, in the order it puts them. The green word is the one that means a visitor can see it. Nothing here is translated into a shared vocabulary on purpose: a platform's own word is the one its screens show you, and inventing a common language for all of them is how the meaning gets lost.
| Platform | Its own words, the one a visitor can see first |
|---|---|
| WordPress | Published Draft Waiting for review Private Scheduled |
| Joomla | Published Not published Archived In the bin |
| Drupal | Published Not published |
| Craft CMS | Published Scheduled Expired Not published |
| Concrete CMS | Published Draft |
| Ghost | Published Draft Scheduled Sent |
| Webflow | Published Draft |
| Wix | Published Scheduled Draft Waiting for review |
| Contentful | Published Scheduled Draft Archived |
| Strapi | Published Draft |
| Sanity | Published Draft |
Read from each adapter's own status list — the same list your content screen filters on. The green word is the one that means a visitor can see it.
The one thing this table is built on: the first word in each row is the state that means published. That is not a presentation choice, it is a fact the software relies on — the content screen marks a row as live by comparing its status to that first word, and the permission gate uses the same comparison to decide whether editing something counts as changing what visitors see. One fact, read in three places, so they cannot disagree.
Four places the difference bites
None of these is hypothetical. Each one is a bug we have had, or one we designed around after reading a platform's source.
- "Unpublish" is not available everywhere. On platforms with only published and draft, taking something off the site means putting it back to draft — which is fine. On Ghost, a post that has been emailed to the publication's members is `sent`, and there is no way back from it: you cannot unsend an email. So we leave a sent post alone entirely and refuse to treat sent as somewhere to move a post *to*.
- A draft is sometimes a different document, not a state. On Sanity, drafts are separate documents from published ones, so editing a published article saves to the draft and leaves what visitors read untouched. Our tool description used to promise that a published page stays published with the new wording, which was true on most platforms and false on that one.
- "Scheduled" is a state on some platforms and a feature on others. 6 of 11 can set a future publication date — WordPress, Joomla, Craft CMS, Ghost, Wix and Contentful. Some of the others can schedule a whole release of content, which is a genuinely different thing and not a substitute for it, so we claim nothing rather than approximating.
- Publishing on create is sometimes the default. On Strapi, both current versions publish on create unless told otherwise, and they are told otherwise in two different ways — so sending the newer version's instruction to an older one publishes an unfinished draft on a live site. Our adapter works out which version it is talking to before any write, and refuses to write when it cannot tell.
Why we start with drafts, everywhere
Across all 11 platforms, anything an assistant creates arrives as something nobody can see. That is not a safety setting you switch on, it is how the writing tool is built: the tool that creates content creates a draft, and moving something to a state a visitor can see is a different tool that asks for a different permission.
The permission to change what visitors see starts unticked, and — this is the part worth knowing — a connected assistant cannot ask for it. Whatever ChatGPT or Claude requests when it connects, the request for publishing is dropped before you are shown the approval screen, so the box you see unticked is a box nothing but your own click can tick. We did that because the alternative undermines the promise: a permission the client requested appears in the list of things it will be able to do, where there is no box to untick.
What you see on your own screen
Each platform's own words, in each platform's own order, with the live one marked — the same list this post's table is printed from. The filter on your content screen uses it too, which is why asking for "drafts only" means the right thing on a platform that calls them unpublished. It is a small piece of work and it removes an entire class of question from a support inbox: nobody has to learn our vocabulary for their website.
Honest limit: the table is each adapter's own status list, which is what the software sends and filters on. How a given platform behaves when asked to filter by one of those words has been exercised on some and written from documentation on others — Contentful, Webflow and Wix were ignoring the status filter entirely until recently, and their fixes were written from the documentation rather than proved. Their own pages say which state each capability is in.
Questions we get asked about this
- Will an assistant publish something by mistake?
- It cannot, unless you tick the publishing permission yourself. Creating content creates a draft on every platform here, and the permission that changes what visitors see is separate, starts unticked, and cannot be requested by the assistant.
- What if my platform has no draft state?
- All 11 have something that means "not visible yet", which is why this works at all. What differs is the word and the mechanism — on one it is a separate document, on another an unapproved version of the page.
- Can it schedule a post for next Tuesday?
- On 6 of the 11 platforms, yes: WordPress, Joomla, Craft CMS, Ghost, Wix and Contentful. On the rest, the honest answer is no, and you will be told so rather than having it quietly published now.