Joomla Workflows

This content was generated with the assistance of AI and should be verified against the official Joomla documentation before being relied on in production.

This sub-section’s Joomla bibliography lists the reference material consulted while preparing these pages.

This page describes the Workflows feature of Joomla. It was written against Joomla 6.2.x (PHP 8.3 or later) and its facts were checked on 2026-10-30 against the Joomla! User Guide (https://guide.joomla.org/), the Joomla 6.1 release announcement and the 6.2 source tree on GitHub, because the Developer Manual has no Workflows content. Workflows were introduced in Joomla 4.0 and work the same way in the 5.4 line, which only receives security fixes. The one significant change since 4.0 is the visual workflow editor of Joomla 6.1.

A workflow is a small state machine attached to content. Instead of letting anyone with edit rights flip an article between Unpublished, Published, Archived and Trashed, the site builder defines named stages (for example Draft and Review) and transitions between them. A person can only move an item along the transitions that the access control list lets them run, and a transition can also change the published or featured state and notify other people. Workflows are used by four kinds of people: the site builder or administrator who designs them, the author and editor who move articles through them, and the developer who makes another component workflow-aware.

The running example is the Tallpine Hiking Club, a fictitious mountain club. Its volunteers write trail reports and a small group of Trail Wardens checks them before they go live. Articles are described in Articles, categories in Categories and Tags, and groups and permissions in Users, Groups, Access Levels and ACL. The way categories, custom fields and workflows meet is in Categories, Custom Fields and Workflow Integration.

Concepts

  • Workflow: a named set of stages and transitions, stored in #__workflows. One workflow is the default one. Joomla ships a single workflow called Basic Workflow.

  • Stage: a state of an item inside a workflow (table #__workflow_stages). A stage has a title, a description and a status (published or unpublished, trashed). A stage is only a label: it does not by itself publish or unpublish anything.

  • Transition: a directed arrow from a current stage to a target stage (table #__workflow_transitions). The transition is where the consequences live: it can set the publishing state, set the featured state, send a notification and is protected by its own permission.

  • Association: the row in #__workflow_associations that records, for each item, which stage it is in. Items therefore carry a stage, not a workflow: the workflow is found through the stage.

Basic Workflow contains one stage, Basic Stage, and a set of self-transitions (from Basic Stage back to Basic Stage) named Unpublish, Publish, Trash, Archive, Feature, Unfeature and Publish and Feature. With them a site that enables workflows keeps the familiar behaviour: the toolbar buttons of the article list simply run those transitions. That default is why enabling workflows on a site that does not design its own stages changes very little for editors.

Enabling workflows

Workflows are off after installation. They are switched on for articles in the options of the component:

  1. Open Content → Articles, then Options.

  2. Open the Integration tab.

  3. Set Enable Workflow to Yes and save.

Once enabled, Content → Workflows appears in the menu and every article gets a stage. Articles that existed before are placed in the default workflow’s stage, and new articles start in the first stage of the workflow that applies to them. Which workflow applies is decided by the category: the category edit form has a Workflows tab where the category either uses the default workflow, inherits the one of its parent, or selects a specific workflow. Items created in a category without an explicit choice use the workflow marked as Default in the Workflows list.

Workflows are a per-component feature. Joomla ships the integration for articles; any other component can take part by implementing the workflow service interface, and the Workflow Publishing plugin has two options, Allowed and Forbidden lists of component sections, that restrict which sections the plugin acts on. A section in the forbidden list keeps its normal publish buttons even when workflows are enabled for the component as a whole.

The setting is global for the component, and disabling it again is safe for content but not for data: the stage rows stay in the database and the workflow screens simply disappear. Items keep whatever published state their last transition left. Switching workflows on for a site with thousands of articles is quick because the association rows are created in one operation, but test it on a copy first, since a stage must exist for every item.

The Workflows screens

Content → Workflows lists the workflows. The list has these columns: status (Enabled, Disabled or Trashed), Name, Default, Stages (a button that shows the number of stages and opens the stage list), Transitions (the same for transitions) and ID. A workflow that is not the default is only used by categories that select it.

Opening a Stages list shows each stage and lets you add, edit, publish, unpublish and trash stages. A stage that still holds items cannot be trashed and deleted without first moving them, and the default stage of a workflow cannot be removed. Opening a Transitions list shows, for each transition, its Current Stage and its Target Stage, and the edit form has these tabs:

  • Details: title, description, the current stage and the target stage. The current stage can be set to All, which makes the transition available from every stage of the workflow, and the target stage may be the same as the current one.

  • Transition Actions: the Publishing State (a list of the article states) and the Featuring State (featured or not featured). Both are provided by plugins, see below.

  • Transition Notifications: Send Notification, an optional Additional Message Text (which may be a language string), the Usergroups and the Users that are told. The fields appear after Send Notification is set to Yes.

  • Permissions: which groups may run the transition. It normally inherits from the permissions of the component options.

Two details matter in practice. First, a transition that does not change the published state leaves the article exactly as published as it was: a "Return to draft" transition that only changes the stage on an already published article does not unpublish it, so every transition that should hide content must say so in Publishing State. Second, when workflows are enabled the article list and the article edit form no longer show their normal status controls (see the plugins).

Running a transition

In the article list, the toolbar has a Actions menu with Run Transition (available for the selected articles). In the article edit form, the Publishing tab contains a Run Transition list: the author picks the transition and saves, and the item changes stage in the same request. The list offers only the transitions whose current stage matches the item’s stage and that the user is authorised to run. The Batch dialog has Change Stage for moving items regardless of the current stage, which is a back door normally reserved for people with the right to manage the component, and it is the tool to use when an item ends up in the wrong workflow after a category change.

The workflow plugins

Three plugins of type workflow ship with Joomla, in plugins/workflow. They are enabled by default and appear in System → Plugins when the type filter is set to workflow. Each of them contributes a part of the transition form and reacts to the events that the workflow system dispatches around a transition (onWorkflowBeforeTransition and onWorkflowAfterTransition). Plugin development in general is in Plugin Development and Events.

Plugin What it does

Workflow - Publishing (plg_workflow_publishing)

Adds the Publishing State to the transition form. It replaces the published field of the item form by a read-only label and hides the publish, unpublish, archive and trash buttons of the list. It rejects any attempt to change the state outside a transition: onContentBeforeChangeState throws an exception when the item was not whitelisted by a transition, and a save whose data contains the published field is refused. It excludes the published column from content versions, so restoring a version does not publish an article. Its two options, Allowed and Forbidden, are lists of component sections.

Workflow - Featuring (plg_workflow_featuring)

The same pattern for the featured flag: a Featuring State on the transition form, a read-only featured label in the item form, hidden featured buttons in the list, and a refusal of direct changes through onContentBeforeChangeFeatured. The featured column is excluded from versions.

Workflow - Notification (plg_workflow_notification)

Adds the notification tab. After a transition it sends a private message, not an email template, through the Messaging component to the chosen users and to the enabled users of the chosen groups. The user who ran the transition is never notified, users who locked their message inbox are skipped, and a recipient needs the permission to manage messages. If nobody is left, an error message is shown.

Because the Publishing and Featuring plugins are what makes a transition publish or feature something, disabling the Workflow - Publishing plugin turns the workflow into labels only: the Publishing State field disappears, and the normal published field comes back. That is a legitimate setup for a site that only wants stages as an editorial checklist, but it makes the permission model weaker, because anyone who may edit state can then publish.

Notifications are delivered as private messages. Whether a recipient also receives an email depends on the message preferences of that user and on the mail settings of the site (see Mail Templates and Email Settings). Test it with a real account before relying on it, since a recipient with no permission to read messages is silently skipped.

Permissions

Workflows add permissions on top of the ones of articles. The relevant ones are:

  • Run transition (core.execute.transition), set for each transition on its Permissions tab and defaulting to the setting inherited from the component options. A user who cannot run a transition does not see it in the list.

  • The usual create, edit, edit own and edit state permissions of the article component. With workflows on, the edit state permission no longer lets a user pick a status; the transitions have taken that role.

  • Manage and administer rights on the workflow component, which decide who may open Content → Workflows and design stages and transitions.

A practical rule: give authors the right to run the transitions that leave Draft and no transitions that publish, and give the publishing transitions to a group that only editors belong to. Remember that the Super User group is always allowed to do everything, including Change Stage in a batch, so a Super User can override any workflow. Permission design in general is described in Users, Groups, Access Levels and ACL.

If a transition publishes but the user running it lacks permission to change the state, the action fails while the transition itself still succeeds, which leaves the item in the target stage and unpublished. This is the commonest error in a new workflow: a stage called "Published" containing unpublished items. Always test each transition with an account that has only the intended permissions.

The visual workflow editor (Joomla 6.1)

Joomla 6.1 added an interactive diagram of a workflow, announced in the release news as the Visual Workflow Editor. It is a Vue.js-based graph that shows the stages as boxes and the transitions as arrows, so the whole publication process can be seen at once instead of through two lists.

  • In the administrator, with workflows enabled, the Workflows list has a Graph button.

  • On the site, the article edit form of the frontend shows a Graph button next to Run Transition on the Publishing tab. It opens a view-only graph that lists only the stages and transitions the current user is allowed to see.

  • With the right permissions the graph is also an editor. Stages and transitions are created, edited and deleted on the same page, a transition is created by hovering over a stage and dragging from its dots to another stage, and stages are dragged to arrange them, with the layout saved automatically. There are zoom in, zoom out and fit-to-view buttons at the bottom right and a keyboard shortcut reference at the top right.

The editor changes nothing about the model. It writes the same rows to #__workflow_stages and #__workflow_transitions, so the transition screens described above still work, and the Permissions of a transition still have to be set there. Older books such as Joomla! 4 Masterclass (2023) describe workflows only through the list and form screens, because the graph did not exist in 4.x.

A review workflow for the Tallpine authors

The Tallpine volunteers write trail reports, and the club wants a Trail Warden to check them before publication. The design uses four stages and the permissions below.

Stage Meaning Who may leave it

Draft

The author writes the report. Not published.

Author

In Review

The author finished. A Trail Warden checks distance, elevation and closures.

Trail Warden

Approved

Checked and ready, waiting for the editor to schedule it.

Editor

Published

Visible to the public.

Editor (to unpublish or archive)

stateDiagram-v2 [*] --> Draft Draft --> InReview : Submit for review InReview --> Draft : Request changes InReview --> Approved : Approve Approved --> InReview : Reopen Approved --> Published : Publish Published --> Draft : Unpublish for rework Published --> Archived : Archive Archived --> [*]

The transitions are created in Content → Workflows → Tallpine Review → Transitions:

Transition From To Actions Run by

Submit for review

Draft

In Review

Publishing: unchanged. Notification to the Trail Warden group.

Author, Editor

Request changes

In Review

Draft

Notification to the author, chosen in the Users field.

Trail Warden

Approve

In Review

Approved

None.

Trail Warden

Publish

Approved

Published

Publishing: Published. Featuring: unchanged.

Editor

Publish and feature

Approved

Published

Publishing: Published. Featuring: Featured.

Editor

Unpublish for rework

Published

Draft

Publishing: Unpublished.

Editor

Archive

Published

Archived

Publishing: Archived.

Editor

The remaining setup is mostly clicking, but the order matters:

  1. Create the workflow Tallpine Review and its stages. The first stage in the list, Draft, is where new articles start.

  2. Create the transitions and set each one’s Permissions tab: deny Run transition to Registered and Author for Approve and Publish, and allow it to the Trail Warden group created in the users page and to Editors.

  3. Open the category Trails and, on its Workflows tab, select Tallpine Review. Because child categories inherit by default, Trails › Alpine and Trails › Valley use it too, while News keeps the default workflow, so board announcements are not slowed down.

  4. Give the Trail Warden group the right to edit articles in the Trails categories, otherwise they can open neither the list nor the transition.

  5. As an Author, create a trail report, choose Submit for review in the Run Transition list of the Publishing tab and save. The Trail Wardens receive a private message.

A category change moves an article to the first stage of the new category’s workflow only when the article is saved with that new category and the workflow differs; if items end up in the wrong place, use Change Stage in the batch dialog. Custom fields on Tallpine trail reports (distance, elevation gain, difficulty) are not affected by workflows, but a field group assigned to a category is evaluated with the category, see Custom Fields.

Workflows and the API

The Web Services API of an article exposes the stage as part of the item, and the published state of an item that is under a workflow cannot be set directly through the API for the same reasons as in the administrator: the Publishing plugin refuses state changes outside a transition. A headless client that wants to publish an article therefore has to follow the transitions available to its token user. The API is described in Web Services API.

Versions and compatibility

  • Workflows appeared in Joomla 4.0 and are still part of 5.4 and 6.2 with the same tables and plugins.

  • Joomla 6.1 added the visual workflow editor, the Graph button, and the editing of stages and transitions on the graph.

  • Third-party components that want workflow support implement the workflow service interface and declare the sections for which the core plugins act; extensions written for 3.x have no workflow support at all and are unaffected.

  • Workflow state is excluded from item versions, so the Versions button of an article never restores a published or featured value.

When not to enable workflows

Workflows add steps, screens and permissions, and every step is a place where an item can get stuck. They are the wrong tool when:

  • one person, or a small group that trusts each other, writes and publishes everything. The built-in Unpublished, Published and Archived states plus the Start Publishing and Finish Publishing dates (see Articles) are enough;

  • the only need is to hide a draft from visitors until it is finished: use the status and an access level;

  • the site has many hundreds of editors working through a bulk import or the API, where each transition would be run by hand or scripted;

  • the ability to override anything matters more than process, since a Super User bypasses every workflow anyway.

They pay off when different people write, check and publish; when a publish step must be restricted to a group; or when the club must be able to show who approved what. For the Tallpine club the news section does not need them, and the trail reports, where wrong distances or closures cause real problems, do.

Common mistakes to avoid are enabling workflows with no plan for existing articles, forgetting that a transition must set the publishing state explicitly, giving authors a publishing transition, assuming that notifications are emails, and leaving the Workflow - Publishing plugin disabled and then wondering why the status field is back.