Skip to main content
Workflow in Joomla
On this page
# Topics

Workflow in Joomla

19 June 2026

Most Joomla sites publish an article the moment an editor clicks "Save & Close". For a one-person blog that is fine. But the second a real team is involved, you want a draft to be reviewed before it goes live, and you want to know who is allowed to press the publish button. That control is exactly what Joomla's Workflow component (com_workflow) gives you.

A workflow turns the plain "published or not" switch into a small editorial process with named steps: a writer drafts, an editor reviews, a manager publishes. This article starts with the basics for owners and editors, moves on to the setup work for administrators, and ends with the database, the PHP API, and the events for developers.

A workflow is a set of named stations your content travels through, with controlled doors between them.

The goal is simple: help you understand Joomla Workflow well enough to design an editorial process that fits your team and to debug it when content gets stuck.

1. The Basics

1.1 What a Workflow Is

By default, an article has a single state field: it is published, unpublished, archived, or trashed, and any editor with the right permission can flip it. A workflow replaces that single switch with a process you design yourself. Instead of one switch, the article moves through stages you name (for example Draft, In Review, Published), and it moves only through transitions you allow.

Workflow is an optional feature. It is turned off by default, and you turn it on per component. Today, core Joomla ships workflow support for articles (com_content); the system is built so other components can adopt it too.

Without workflow, "publish" is a checkbox. With workflow, "publish" is a door that only certain people can open, and opening it can trigger extra actions.

1.2 The Three Building Blocks

Everything in Workflow is made of just three things. Learn these three words and the whole component makes sense:

Building blockWhat it is
Workflow The whole process, bound to one content type (such as articles). A container for stages and transitions.
Stage A station an item can sit in, like Draft or Published. An item is always in exactly one stage.
Transition A door from one stage to another. Pressing it moves the item and can run actions (publish, feature, email).

1.3 A Picture of the Idea

Think of stages as boxes and transitions as the arrows between them. The arrows are one-way and you decide which ones exist:

  [ Draft ] --submit--> [ In Review ] --approve--> [ Published ]
                              │
                              └--reject--> [ Draft ]

An editor working on an article in the Draft stage sees only the doors that lead out of Draft (here, "submit"). They cannot jump straight to Published, because no transition connects those two stages. That is the whole point: the workflow decides what is possible.

1.4 Where to Find It

Workflow lives in the administrator only. Once it is enabled for articles, a Workflows entry appears in the Content section of the admin menu, opening the screen at index.php?option=com_workflow&view=workflows&extension=com_content.article. There you manage workflows, and inside each workflow you manage its stages and transitions.

Back to top

2. Turning Workflow On

Nothing about workflow appears until you switch it on. This is deliberate: most sites do not need it, so Joomla keeps it out of the way.

2.1 Enable It for Articles

Open Content → Options (the Options button in the Articles screen), go to the Integration tab, and find the Workflows setting. Set Enable Workflow to Yes and save.

Content → Options → Integration
   └─ Enable Workflow: Yes

Internally this writes the parameter workflow_enabled = 1 in the com_content configuration. From that moment, articles are governed by a workflow instead of the simple publish switch.

2.2 The Basic Workflow That Ships With Joomla

Joomla installs one ready-made workflow for articles, called the Basic Workflow. It is marked as the default and is bound to the extension context com_content.article. Out of the box it contains a single stage and a handful of transitions that simply reproduce the old publish buttons:

TransitionWhat it does
Publish Sets the article state to published
Unpublish Sets the article state to unpublished
Archive Sets the article state to archived
Trash Sets the article state to trashed
Feature / Unfeature Marks the article as featured or not
Publish and Feature Does both in one click

The Basic Workflow is intentionally plain. It exists so that enabling workflow does not immediately change how editors work; the real value comes when you add your own stages and transitions on top.

2.3 A Workflow Per Category

You are not limited to one workflow for the whole site. Each article category has a Workflow field (under the category's Options) that can either inherit the default workflow or use a specific one. This lets the News category run a strict review process while the Blog category stays simple.

Back to top

3. Stages: The Statuses Your Content Moves Through

A stage is a named status. Designing good stages is the heart of building a workflow, so it pays to think about them clearly.

3.1 One Stage at a Time

Every article that belongs to a workflow sits in exactly one stage. That stage is the article's current position in the process. When you look at the article list with workflow enabled, the Stage column shows where each article stands (Draft, In Review, Published, and so on).

3.2 The Default Stage

Each workflow has exactly one default stage. New articles enter the workflow in that stage. Joomla protects this rule: you cannot delete the default stage, and you cannot unpublish it, because every workflow needs a valid starting point. If you try, Joomla shows an error and refuses.

3.3 Designing Stages

A typical editorial workflow uses three or four stages:

StageMeaning
Draft The writer is still working. Not visible on the site. (Often the default stage.)
In Review Submitted and waiting for an editor to check it.
Published Approved and live on the website.
Archived Old content kept for reference but off the main site.

Keep the number of stages small. Each extra stage means more transitions to define and more decisions for your editors. Start with the fewest stages that describe your real process, and add more only when you feel the lack of one.

Back to top

4. Transitions: The Doors Between Stages

If stages are the rooms, transitions are the doors. A transition is the only way an item moves from one stage to another, and it is where most of the power of Workflow lives.

4.1 What a Transition Defines

Each transition records four things: a name (the button the editor sees), a from stage, a to stage, and a set of actions to run when it fires.

Transition "Approve"
   ├─ From stage: In Review
   ├─ To stage:   Published
   └─ Action:     set article state to Published

4.2 "From Any Stage"

A transition's from stage can be set to a specific stage or to Any. "Any" means the transition is available no matter where the item currently sits. In the database this is stored as a from-stage value of -1. The Basic Workflow uses "Any" for all its transitions, which is why you can publish, trash, or archive an article from wherever it is.

4.3 Transitions Control What Editors Can Do

When an editor opens the article list, the batch actions and the per-row buttons are built from the transitions that lead out of each article's current stage. An article in Draft offers only the doors out of Draft. This is how a workflow quietly enforces your process: editors simply do not see the moves you did not allow.

Back to top

5. Transition Actions: Publishing, Featuring, and Notification

A transition moves an item between stages, but on its own that is just a label change. The real effects come from workflow plugins, which add actions a transition can run. Joomla ships three of them.

5.1 The Publishing Plugin

The plg_workflow_publishing plugin lets a transition set the article's actual state. In the transition's Options you choose one value:

Publishing optionState applied
Published 1
Unpublished 0
Archived 2
Trashed -2
(do not use) State is left unchanged

This is the bridge between your workflow and the article actually appearing on the site. A transition to your "Published" stage normally carries the publishing action "Published"; a transition to "Draft" carries "Unpublished".

5.2 The Featuring Plugin

The plg_workflow_featuring plugin lets a transition mark an article as featured or not, which controls whether it shows in the Featured Articles list. The option is simply Featured (1), Unfeatured (0), or "do not use".

5.3 The Notification Plugin

The plg_workflow_notification plugin sends an email when a transition runs. This is what makes a workflow feel alive: when a writer submits a draft, the editors get a message. In the transition options you set:

  • Send email: on or off for this transition.
  • Notification text: a custom message to include.
  • User groups: which groups to email (for example, all Editors).
  • Recipients: specific individual users to email.

Because these are plugins, the action options you see on a transition depend on which workflow plugins are enabled. Disable the notification plugin and the email options disappear from every transition.

Back to top

6. A Real Editorial Workflow, Step by Step

Theory is easier to grasp with a concrete build. Here is how to turn the plain Basic Workflow into a three-stage review process for a News category.

6.1 Create the Stages

Open the workflow and add three stages. Mark Draft as the default so new articles start there:

Stages
   ├─ Draft        (default)
   ├─ In Review
   └─ Published

6.2 Create the Transitions

Now add the doors between those stages, each with the right actions:

TransitionFrom → ToActions
Submit for review Draft → In Review Notify the Editors group
Approve In Review → Published Publishing: Published
Reject In Review → Draft Notify the author
Unpublish Any → Draft Publishing: Unpublished

6.3 What the Team Experiences

A writer creates an article. It starts in Draft, so it is not live. They press Submit for review; the editors get an email. An editor reads it and presses Approve, which moves it to Published and sets the state to published in one step, so it appears on the site. If it is not ready, the editor presses Reject, the article drops back to Draft, and the author is notified. No one had to remember a separate "set published" step, and a writer can never push their own work live.

Back to top

7. The Visual Workflow Editor

Since Joomla 6.1 you do not have to build stages and transitions through list screens alone. Each workflow has a visual graph editor that shows the whole process as a diagram you can edit by hand. For a multi-stage workflow it is far easier to reason about than two separate lists.

7.1 Opening the Graph

In Content → Workflows, every workflow row has a Graph link, which opens the canvas at index.php?option=com_workflow&view=graph&id=1&extension=com_content.article (with the workflow's own id). On the canvas every stage is a box (a node) and every transition is an arrow (an edge) between two stages, so you see the shape of your process at a glance:

   +---------+   submit    +-----------+   approve   +-------------+
   |  Draft  |----------->|  In Review |----------->|  Published  |
   +---------+            +-----------+             +-------------+
        ^   reject              │
        └----------------------└

7.2 Editing on the Canvas

You build and change the workflow directly on the diagram, with the mouse or the keyboard:

  • Add a stage (Alt+N) drops a new stage node onto the canvas.
  • Add a transition (Alt+M) draws an arrow from one stage to another.
  • Edit a selected node or arrow with E; remove it with Delete.
  • Fit view (F) zooms the whole diagram back into view.
  • Drag stage boxes to arrange them the way your process reads best.

The editor respects your permissions: it only offers the edit, delete, and run controls you are actually allowed, using the same core.edit, core.delete, and core.execute.transition checks described in section 9.

7.3 Where the Layout Is Stored

When you drag stages around, Joomla remembers their positions. The coordinates of each stage node are saved as JSON in the position column of #__workflow_stages, a column added in Joomla 6.1 for exactly this purpose. The canvas loads its data through small JSON endpoints that return the workflow, its stages, and its transitions, so the picture always matches the underlying tables. The graph is only a friendlier face on the same stages and transitions from sections 3 and 4: whatever you draw here writes the same rows you would create by hand.

Back to top

8. Workflow vs the Old Publish Buttons

Enabling workflow changes how the familiar publish controls behave. Understanding this change prevents a lot of confusion.

8.1 The Publish Switch Becomes a Transition

Without workflow, the green check / red cross in the article list directly edits the state column, gated by the core.edit.state permission. With workflow active, that direct edit is taken over: the publishing plugin steps in and blocks changing the state outside a transition. Instead, you change state by running a transition, gated by a different permission, core.execute.transition.

No workflow:   click "publish"  → state column changes directly   (core.edit.state)
With workflow: run a transition → transition sets the state       (core.execute.transition)

8.2 The State Still Exists

Workflow does not throw away the article's state. The article still has a published / unpublished / archived / trashed value, because that is what the front-end and the rest of Joomla read to decide visibility. The difference is how that value gets set: through a transition's publishing action rather than a direct click. The stage tells you where the article is in your process; the state tells the website whether to show it.

8.3 Why an Editor Suddenly Cannot Publish

After enabling workflow, an editor who could publish yesterday may find they cannot today. That is because publishing now needs core.execute.transition on the relevant transition, which is a separate permission from core.edit.state. This is a feature, not a bug: it is precisely how you hand the publish button to managers only.

Back to top

9. Permissions and ACL

Workflow is only useful if the right people can do the right moves, so it is tied closely to Joomla's access control.

9.1 The Two Key Actions

ACL actionLets a user…
core.manage.workflow Create and edit workflows, stages, and transitions (the design work).
core.execute.transition Run a transition to move an item between stages (the daily work).

9.2 Permission Per Transition

The clever part is that core.execute.transition can be set on a single transition, not just on the whole component. Each transition is its own ACL asset. So you can let the Writers group run "Submit for review" while only the Managers group can run "Approve". The workflow plus the permissions together describe who may push content forward.

Transition "Approve"  → Permissions tab
   ├─ Writers:  Execute Transition = Denied
   └─ Managers: Execute Transition = Allowed

9.3 Stages and Workflows Are Assets Too

Workflows, stages, and transitions each become an ACL asset when saved, nested under the component. This is why the workflow tables carry an asset_id column: it lets you set permissions at every level of the hierarchy, exactly like categories and articles.

Back to top

10. Under the Hood: The Database Tables

The whole component rests on four tables. Reading their columns makes the feature concrete.

10.1 The Four Tables

TableHolds
#__workflows One row per workflow.
#__workflow_stages One row per stage, linked to a workflow.
#__workflow_transitions One row per transition, with its actions.
#__workflow_associations Which item is currently in which stage.

10.2 #__workflows and #__workflow_stages

A workflow row carries a title, a description, the extension it belongs to (for articles this is com_content.article), a default flag, and an asset_id. A stage row carries a title, its parent workflow_id, a default flag, a published flag, an ordering, and (since Joomla 6.1) a position for the graph editor.

#__workflows           id | title | extension          | default
                        1 | Basic | com_content.article | 1

#__workflow_stages     id | workflow_id | title     | default
                        7 | 1           | Draft     | 1
                        8 | 1           | In Review | 0
                        9 | 1           | Published | 0

10.3 #__workflow_transitions

The transition row is where the actions live. Besides workflow_id, title, from_stage_id, and to_stage_id, it has an options column. That column is JSON, holding the plugin action settings:

id | title    | from_stage_id | to_stage_id | options
 2 | Approve  | 8             | 9           | {"publishing":"1"}
 5 | Feature  | -1            | 7           | {"featuring":"1"}
 7 | Pub+Feat | -1            | 7           | {"publishing":"1","featuring":"1"}

Notice from_stage_id = -1: that is the "Any stage" value from section 4.2. The options JSON is read by the workflow plugins to know what to do.

10.4 #__workflow_associations: The Item's Current Stage

This is the table that ties an article to a stage. It is deliberately tiny, with just three columns:

ColumnHolds
item_id The id of the item (for an article, the #__content.id).
stage_id The stage the item is currently in (#__workflow_stages.id).
extension The context, such as com_content.article.

The primary key is the pair (item_id, extension), which enforces the rule from section 3.1: an item has exactly one current stage per context. To find where article 42 stands, Joomla reads the one row where item_id = 42 and extension = 'com_content.article'.

Back to top

11. Under the Hood: The PHP API

Developers rarely touch these tables directly. Joomla provides a small set of classes that do the work safely.

11.1 The Workflow Class

The core class Joomla\CMS\Workflow\Workflow drives transitions. You create it for an extension and call executeTransition() to move items. It reads the transition, fires the events, runs the plugin actions, and updates #__workflow_associations for you:

use Joomla\CMS\Workflow\Workflow;

$workflow = new Workflow('com_content.article');

// Move articles 42 and 43 through transition id 2 ("Approve")
$workflow->executeTransition([42, 43], 2);

Behind that single call, the class checks the transition is valid for each item's current stage, dispatches the before/after events (section 12), lets the publishing and notification plugins act, and finally writes the new stage_id into the associations table.

11.2 How a Component Declares Workflow Support

A component opts into Workflow by implementing WorkflowServiceInterface and using WorkflowServiceTrait. The content component does exactly this. The interface answers questions the workflow engine needs to ask:

use Joomla\CMS\Extension\Component;
use Joomla\CMS\Workflow\WorkflowServiceInterface;
use Joomla\CMS\Workflow\WorkflowServiceTrait;

class ContentComponent extends Component implements WorkflowServiceInterface
{
    use WorkflowServiceTrait;

    // Which features can a transition drive for this component?
    //   'core.state'    => true   (publish / unpublish / archive / trash)
    //   'core.featured' => true   (feature / unfeature)
}

Key methods include isWorkflowActive($context) (is workflow_enabled on and does the model support it?), supportFunctionality($functionality, $context) (does this component offer core.state or core.featured?), and filterTransitions() (which transitions are valid for an item right now). This is the seam other components plug into to gain workflow.

Back to top

12. Events and Extending Workflow

Workflow is event-driven, which is what makes it extensible. The three core plugins are nothing special; they just listen to the same events your own plugin can.

12.1 The Transition Events

EventWhen it fires
onWorkflowBeforeTransition Before the move. A plugin can cancel it.
onWorkflowAfterTransition After the move. Plugins run their actions here.
onWorkflowFunctionalityUsed Lets a plugin mark a feature (such as state) as handled.

The before event carries a WorkflowTransitionEvent object. A plugin can call setStopTransition(true) on it to veto the move, for example if a required field is empty. The publishing plugin uses the after event to actually change the article state.

12.2 A Minimal Workflow Plugin

To add your own transition action, write a plugin in the workflow group that subscribes to the transition events:

public static function getSubscribedEvents(): array
{
    return [
        'onWorkflowBeforeTransition' => 'onBefore',
        'onWorkflowAfterTransition'  => 'onAfter',
    ];
}

public function onAfter(WorkflowTransitionEvent $event): void
{
    // $event->getExtension(), $event->getPks(), $event->getTransition()
    // run your custom action here: push to a CDN, post to Slack, etc.
}

To give your transition its own option (like the publishing dropdown), ship a small forms/action.xml in the plugin. Joomla merges those fields into the transition's Options tab automatically.

12.3 The Content-Side Events

When a transition changes an article's state, the publishing plugin still fires the normal content events such as onContentBeforeChangeState. So existing plugins that react to publishing keep working, whether or not a workflow is in front of them.

Back to top

13. Performance and Debugging

Workflow adds a little work when items are saved and a few extra tables to the database, but the cost is small, and those tables make problems easy to trace.

13.1 The Performance Cost Is Small

A workflow lookup is cheap. Finding an item's current stage is a single indexed read on #__workflow_associations by its primary key (item_id, extension). The workflow, stage, and transition tables are tiny next to #__content: a site with one workflow has one workflow row, a handful of stages, and a handful of transitions, no matter how many thousands of articles it holds. The extra work happens when an item is saved or a transition runs, not on every front-end page view, so visitors feel nothing.

13.2 Reading the Tables to Debug

Because the state lives in four small tables, you can see exactly where any item stands with a couple of queries. To find the stage of article 42:

SELECT s.title AS stage
FROM   #__workflow_associations AS a
JOIN   #__workflow_stages AS s ON s.id = a.stage_id
WHERE  a.item_id = 42
AND    a.extension = 'com_content.article';

To list the moves an editor could make from a given stage, read the published transitions whose from_stage_id is that stage or -1 (Any):

SELECT id, title, from_stage_id, to_stage_id
FROM   #__workflow_transitions
WHERE  workflow_id = 1
AND    from_stage_id IN (<current_stage_id>, -1)
AND    published = 1;

13.3 Common Things to Check

When content behaves oddly, the cause is almost always in these tables or in ACL:

  • No row in #__workflow_associations for an item means it never entered the workflow. Re-save the item so it receives its default stage.
  • A transition that moves the stage but does not publish has an empty publishing value in its options column.
  • An item that cannot move on has no published transition out of its stage, or the user lacks core.execute.transition on the transition that would move it.
Back to top

14. Web Services API and Headless

This comes up for decoupled and headless setups, and the honest answer mirrors the way associations work: Workflow is mainly an administrator-side editorial tool.

  • There is no dedicated public com_workflow REST endpoint in core Joomla. The component has no site-side API folder; it runs only in the administrator.
  • You read and write articles through the normal content endpoints. The article's state (published / unpublished) is exposed there, because state is a real field on the article.
curl -H "X-Joomla-Token: <token>" \
  "https://example.test/api/index.php/v1/content/articles/42"

If a headless front-end needs to know an article's workflow stage, the source of truth is the #__workflow_associations table: join an article's id to item_id for the com_content.article extension. Driving transitions from outside the CMS is not a core feature; you run them through the PHP Workflow class (section 11) inside Joomla, for example from a scheduled task or a custom endpoint you build.

Back to top

15. SEO and Metadata

Workflow has no tags of its own in the page head, but it has a real, indirect effect on your SEO because it controls what gets published at all.

15.1 Nothing Half-Finished Goes Live

The most common SEO damage on team sites is half-edited or duplicate drafts slipping onto the live site and getting indexed. A workflow with a review stage stops that: an article reaches the Published state only after someone approves it, so search engines see finished pages, not work in progress.

15.2 Archived Instead of Deleted

An Archived stage (mapped to the archived state) lets you retire old content cleanly. Archived articles leave the main listings but keep their URL, which is far better for SEO than deleting a page and creating a dead link. Pair an "Archive" transition with a redirect strategy for content you truly remove.

15.3 Consistent Publishing Discipline

Because publishing is funneled through transitions, your publish dates and featured flags are set consistently by the workflow rather than ad hoc by each editor. Consistent, deliberate publishing is quietly good for both readers and crawlers.

Back to top

16. Common Mistakes and Pitfalls

16.1 Editors Lost the Publish Button

Symptom: after enabling workflow, editors complain they can no longer publish.

Fix: this is expected. Grant the core.execute.transition permission on the publishing transition to the groups that should publish. The old core.edit.state permission no longer controls publishing once a workflow is active.

16.2 An Article Is Stuck in a Stage

Symptom: an article sits in "In Review" and no one can move it on.

Fix: there is no transition leading out of that stage to where you want to go, or the user lacks permission to run it. Add the missing transition, or grant the right group core.execute.transition on it.

16.3 Transition Does Not Publish

Symptom: running a transition moves the article to a new stage but it never appears on the site.

Fix: the transition has no publishing action, or its publishing option is set to "do not use". Open the transition's Options and set Publishing to Published. Moving stage and setting state are two separate effects.

16.4 No Notification Emails

Symptom: a transition should email editors, but nothing arrives.

Fix: check that the notification workflow plugin is enabled, that the transition has "Send email" on with at least one group or recipient, and that the site can actually send mail (test Joomla's mail settings).

16.5 Cannot Delete a Stage

Symptom: Joomla refuses to delete a stage.

Fix: you are trying to delete the default stage, or a stage that still has items in it. Make another stage the default first, and move any items out of the stage before deleting it.

16.6 Workflow Enabled but Nothing Changed

Symptom: you turned workflow on but editing feels identical.

Fix: you are still on the Basic Workflow, which mirrors the old buttons on purpose. Add your own stages and transitions, or assign a custom workflow to the category, to see a real process.

Back to top

17. Best Practices

If you remember only a few things from this article, remember these:

  • Only enable workflow when you have a team or a process. A solo site rarely benefits and adds clicks for nothing.
  • Keep stages few. Three or four named stages cover most editorial needs. Every extra stage multiplies the transitions you must define.
  • Map publishing carefully. Make sure the transition into your "live" stage carries the Publishing: Published action, or content will move but never show.
  • Use per-transition permissions. This is the real reason to run a workflow: let writers submit but only managers approve, with core.execute.transition.
  • Sketch the flow in the graph editor before wiring up actions. Seeing the stages and arrows makes gaps and dead ends obvious.
  • Assign workflows per category when only part of the site needs review. Leave the rest on the simple default.
  • Test the whole loop on a staging copy before going live: submit, approve, reject, and confirm the emails and the published state all behave.
Back to top

18. Quick Reference

ENABLE        Content -> Options -> Integration -> Enable Workflow: Yes
MANAGE        Content -> Workflows (com_workflow, extension com_content.article)
VISUAL        Content -> Workflows -> Graph (drag stages/transitions; since 6.1)
PER CATEGORY  Category -> Options -> Workflow (inherit or choose one)
PIECES        Workflow  > Stages  > Transitions
STAGE         a status an item sits in; exactly one default per workflow
TRANSITION    a door: from-stage -> to-stage + actions (from = -1 means Any)
ACTIONS       publishing (state), featuring (featured), notification (email)
STATE VALUES  published 1 | unpublished 0 | archived 2 | trashed -2
ACL           core.manage.workflow (design) ; core.execute.transition (run)
TABLES        #__workflows | #__workflow_stages | #__workflow_transitions
              #__workflow_associations (item_id, stage_id, extension)
DEBUG         join #__workflow_associations -> #__workflow_stages on stage_id
PHP RUN       (new Workflow('com_content.article'))->executeTransition($ids, $tId)
EVENTS        onWorkflowBeforeTransition (cancelable) ; onWorkflowAfterTransition
SERVICE       component implements WorkflowServiceInterface + WorkflowServiceTrait
API           no public com_workflow REST endpoint ; read state via content API
Back to top

19. Summary

Joomla Workflow turns the simple "published or not" switch into an editorial process you design. It is off by default and enabled per component, starting with articles:

  • For editors: content moves through named stages, and the only moves you see are the transitions allowed from where the item stands.
  • For administrators: workflows, stages, and transitions, plus per-transition permissions, decide who can submit, who can approve, and who can publish, and the visual graph editor lets you design the whole flow as a diagram.
  • For developers: four small tables, a single Workflow class, the WorkflowServiceInterface, and the before/after transition events expose the whole engine cleanly, and the three core actions are just plugins you can copy.
  • For SEO: a review stage keeps unfinished work out of the index, and an archive stage retires old pages without breaking their URLs.

Once you understand the three building blocks, how a transition's publishing action sets the real state, and where the current stage is stored, you can design a process that matches your team and trace exactly why a piece of content is or is not live.

If your editors keep publishing things by accident, or content keeps getting stuck halfway, a well-shaped workflow usually fixes it. It pays to design the stages and permissions deliberately, because a workflow that fits your team turns publishing from a free-for-all into a calm, predictable routine.

Back to top
Workflow in Joomla
Peter Martin
Peter Martin

Joomla specialist and Linux admin for fast, secure and scalable websites.