Workflow based on ticket type


This plugin controls what actions can be performed on a ticket. The actions are specified in the [ticket-workflow] section of the TracIni file.

With MultipleWorkflowPlugin Trac can read the workflow based on the type of ticket. If a section for that ticket type doesn't exist, then it uses the default workflow, see Example below.

The plugin works with Trac 0.11, 0.12 and 1.0.

See also TypedTicketWorkflowPlugin, TracWorkflowAdminPlugin.

Workflow editing

For changing the workflows an admin page is available in the Ticket System section.

Image of workflow editor

What's the difference to TypedTicketWorkflowPlugin?

With MultipleWorkflowPlugin you may have an exclusive workflow section for each ticket type like this:

# Default workflow
approve = new, reopened -> approved
approve.operations = del_resolution

# Workflow for ticket type 'Foo'
do_foo = new -> foo

# Workflow for ticket type 'Bar'
do_bar = new -> bar

With TypedTicketWorkflowPlugin you specify restrictions for ticket types in the default workflow by adding them to the transitions:

approve = new, reopened -> approved
approve.operations = del_resolution
# approve is only valid for ticket types 'defect' and 'feature'
approve.tickettype = defect, feature

The former is easier to manage if you have several ticket types with vastly different workflows.

See also #5287.

Bugs/Feature Requests

Existing bugs and feature requests for MultipleWorkflowPlugin are here.

If you have any issues, create a new ticket.


14 / 15


5 / 5


1 / 1


Download the zipped source from here.


You can check out MultipleWorkflowPlugin from here using Subversion, or browse the source with Trac.

The trunk is compatible with Trac 1.2.x. The 1.3 branch is compatible with Trac 1.0.x.


Note: This plugin doesn't require python package genshi when using Trac 1.4+.

General instructions on installing Trac plugins can be found on the TracPlugins page.

Enable the plugin by adding the following to your trac.ini file:

multipleworkflow.* = enabled

Add the controller to the workflow controller list:

workflow = MultipleWorkflowPlugin


To use it you should have the [ticket-workflow] section defined in your trac.ini file. When a custom section for a ticket type has not been defined, that one will be used.

To define a different workflow for a ticket with type Requirement create a section in trac.ini called [ticket-workflow-Requirement] and add your workflow items:

leave = * -> *
leave.default = 1
leave.operations = leave_status

approve = new, reopened -> approved
approve.operations = del_resolution
approve.permissions = TICKET_MODIFY

reopen_verified = closed -> reopened = Reopen
reopen_verified.operations = set_resolution
reopen_verified.set_resolution = from verified
reopen_verified.permissions = TICKET_MODIFY

reopen_approved = approved -> reopened = Reopen
reopen_approved.operations = set_resolution
reopen_approved.set_resolution = from approved
reopen_approved.permissions = TICKET_CREATE

remove = new, reopened, approved, closed -> removed = Remove this Requirement permanently
remove.operations = set_resolution
remove.set_resolution = removed
remove.permissions = TICKET_MODIFY

verify = approved -> closed = Verify the Requirement and mark
verify.operations = set_resolution
verify.set_resolution = verified
verify.permissions = TICKET_MODIFY

This results in the following workflow:

Custom Workflow Statuses on Query Page

Starting with [14565] all defined statuses from typed workflows are available on the ticket query page for filtering.

Recent Changes

17784 by Cinc-th on 2020-06-28 15:53:41
MultipleWorkflowPlugin: let user install the plugin as a workflow controller from the admin page.

closes #13839

17783 by Cinc-th on 2020-06-28 08:27:20
MultipleWorkflowPlugin: use Jinja2 instead of Genshi with Trac 1.4+.

  • No check for Genshi as a requirement anymore (introduced with [17781])
  • compatible with Trac 1.2+, Trac 1.4+

closes #13837

17782 by Cinc-th on 2020-06-27 17:36:39
  • Fix Javascript for Trac 1.4 for new ticket creation (see #13838)
  • No longer use filter_stream() from ITemplateStreamFilter

closes #13838

Refs #13837



Author: ermal
Maintainer: Cinc-th

Last modified 3 months ago Last modified on Jun 28, 2020, 12:10:21 PM

Attachments (1)

Download all attachments as: .zip