Features
Content versioning & revisions
Externa uses a lean content versioning model: one published bag of field values plus optional draft_data. It is not Directus-style named version trees.
Related
Enable
On the collection edit drawer, turn on Versioning. Editors then get Draft / Published workspaces on the item form.
Draft vs published
| Workspace | What you edit | Save |
|---|---|---|
| Draft | draft_data JSON bag | Saves draft only; published values unchanged |
| Published | Live field values | Read-only when versioning is on — switch to Draft to edit |
Badges on the item form (and a Draft chip on the items list) show whether an unpublished draft exists.
Publish (promote)
Publish copies draft_data into published field values, then clears the draft. Confirm before promote. Requires can-edit-collections and item write access.
Discard draft
Discard draft drops draft_data without touching published values. Confirm before discard. Same permission gate as Publish.
Browser localStorage “unsaved draft” (autosave while typing) is separate — use Discard browser draft on that banner.
List filter
On versioned collections, Has draft filters the items list to rows with unpublished draft_data.
Revisions
Every save / draft save / publish / discard / hard restore can record a revision snapshot. Open History on the item toolbar (or the full revisions page). Soft-apply compares fields; Hard restore writes immediately and clears any draft.
Retention (count / days) is configured per collection or as a project default — it prunes old rows; it does not hide the History entry point.
Scheduled publish / unpublish
On a versioned item form, set Publish at / Unpublish at (app timezone), then Save schedule. Badge shows Scheduled when a future publish_at is set. Cancel schedule clears both timestamps.
- Due drafts are promoted by
collections:process-schedules(every minute via Laravel scheduler). - Due
unpublish_atsoft-deletes the item (same as trash). - Requires a running scheduler (
schedule:run/ Composescheduler) — see Operations. - Emit webhook
item.publishedwithscheduled: trueon scheduled promote (Outbound webhooks).
Ops note
Versioning is editorial only. Public CMS API returns published values unless you use Live Preview with version=draft. Scheduled publish needs the scheduler process running.