The SCUFL2 API provides Java classes that can be used independently from Taverna to inspect, modify and generate SCUFL2 workflows.


The code and definitions for SCUFL2 are kept in the GitHub project scufl2.


Official modules:

Experimental modules:



2014-04-30: This release adds the methods WorkflowBundleIO.getSupportedReaderMediaTypes() and getSupportedWriterMediaTypes(). This version will not allow invalid names of workflow beans (e.g. containing /:or ASCII controll characters).

Changes: (commit log)


2013-11-18: This patch release updates SCUFL2's t2flow parser to correctly set the @base for any SemanticAnnotation's, e.g. from Taverna 2's Component Plugin. This is used by scufl2-wfdesc which now embeds any annotations on workflows, processors and ports.

Changes: (commit log)


2013-11-07: This release changes the API for the Processor dispatch stack. Retry, failover and looping are now set by configuring the Processor. The Dispatch Stack is now not directly exposed in SCUFL2. Custom dispatch stack layers can however still be added to the Processor configuration by using the keywords _below and _type within the processor configuration.

Changes: (commit log)


2013-10-07: This patch release primarily adds a manifest:version attribute in the Workflow Bundle's META-INF/manifest.xml, version 0.3.0 indicates the modified bundle format with JSON configurations as of SCUFL2 API 0.12.0.

Changes: (commit log)


2013-10-07: This release changes the API for Configurations. PropertyResource and friends have been replaced with JSON configurations, accessible using Jackson. Note that this means that the configuration for all the default Taverna activities also have changed. The motivation for this was to simplify the flexibility of configurations within the SCUFL2 API, Taverna 3 activities and third-party read/write of Workflow Bundles.

Changes: (commit log)


2013-04-25: A "silent" release which updates annotation support, used by scufl2-wfdesc.

Changes: (commit log)

Fixes (from Jira):



New Feature


2012-07-13: Internal snapshot release for the BioVel project

Changes: (commit log)


2012-06-12: First public release.

Changes: (commit log)


Changes: (commit log)


Changes: (commit log)

Important changes:


Changes: (commit log)

First internal release.


The simplest way to use the SCUFL2 API is to use Maven 3 (Maven 2 should also work) and the myGrid Maven repository. See the example pom.xml.

In short, add:

		<releases />
		<name>myGrid Repository</name>

The <property>scufl2.version</property> used above allows you to consistently upgrade to later versions of SCUFL2. Note that the version number above might not be the latest, see #Release notes.

Source code

You should not need to compile the SCUFL2 API for most uses, as the Maven deployment even includes the source code for retrieval by tools like Eclipse using the m2e plugin.

The simplest way to retrieve the current version of the SCUFL2 API is using git:

Note that this will by default check out the master branch, which represents the latest SNAPSHOT version of the API, which might not be stable or backwards-compatible.

To inspect the code of the latest release, use git tag and git checkout:

: stain@ralph /tmp/93/scufl2; git tag

: stain@ralph /tmp/93/scufl2; git checkout 0.9.2
Note: checking out '0.9.2'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 1a50c07... [maven-release-plugin]  copy for tag scufl2-0.9.2

: stain@ralph /tmp/93/scufl2 ;

Alternatively you can download a tagged release as a ZIP or TAR ball from:

Unpack using your favourite archiver, but don't use the ZIP support of Windows Explorer, as it occasionally don't unpack all files.


After installing Java JDK (6 or later) and Maven (2.2 or later), simply run:

This will build each module and run their tests, producing JARs like `scufl2-api/target/scufl2-api-0.9.2.jar`.

The build does not yet produce a single scufl2.jar for non-Maven users. This is planned for the 1.0 release. See #Usage below on how to use the JARs independently.

First time you build Scufl2 this might download dependencies needed for compilation. These have separate open source licenses, but should be compatible with LGPL. None of the dependencies are neccessary for using the compiled SCUFL2 API.

Some of the experimental modules are not built automatically, to build them separately, run the same command from within their folder.

Example output:

: stain@ralph /tmp/93/scufl2; mvn clean install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] Taverna Scufl 2
[INFO] Taverna Scufl 2 UCF Package
[INFO] Taverna Scufl 2 API
[INFO] Taverna Scufl 2 RDF/XML
[INFO] Taverna Scufl 2 t2Flow parser
[INFO] Taverna Scufl 2 SCUFL parser
[INFO] Taverna Scufl 2 use cases
[INFO] Taverna Scufl 2 validation
[INFO] Taverna Scufl 2 validation structural
[INFO] Taverna Scufl 2 validation correctness
[INFO] ------------------------------------------------------------------------
[INFO] Building Taverna Scufl 2 0.9.2
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] Taverna Scufl 2 ................................... SUCCESS [13.881s]
[INFO] Taverna Scufl 2 UCF Package ....................... SUCCESS [32.924s]
[INFO] Taverna Scufl 2 API ............................... SUCCESS [29.490s]
[INFO] Taverna Scufl 2 RDF/XML ........................... SUCCESS [1:20.551s]
[INFO] Taverna Scufl 2 t2Flow parser ..................... SUCCESS [1:37.902s]
[INFO] Taverna Scufl 2 SCUFL parser ...................... SUCCESS [11.911s]
[INFO] Taverna Scufl 2 use cases ......................... SUCCESS [15.337s]
[INFO] Taverna Scufl 2 validation ........................ SUCCESS [2.799s]
[INFO] Taverna Scufl 2 validation structural ............. SUCCESS [7.488s]
[INFO] Taverna Scufl 2 validation correctness ............ SUCCESS [12.120s]
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5:07.591s
[INFO] Finished at: Tue Jan 31 15:56:50 WET 2012
[INFO] Final Memory: 67M/176M
[INFO] ------------------------------------------------------------------------


The simplest way to use the SCUFL2 API is as Maven dependencies. See Maven above.

Typical use of the Scufl2 API will depend on the three modules scufl2-api, scufl2-t2flow and scufl2-rdfxml.

All Scufl2 modules are also valid OSGi bundles.

If you don't use Maven, you can alternatively copy and add the JARs from these modules to your classpath:

Note that version numbers and download links above might not be the latest, see Release notes


The SCUFL2 Javadocs document the core classes and functions of the SCUFL2 API. A good starting point is the package

If you are using Eclipse, then the built-in Maven support (m2e plugin) is able to provide both JavaDocs and source code from within the editor. After adding the Maven dependencies for SCUFL2, try Open declaration or Open Type on a class like (You can open the class with Navigate -> Open Type).


Examples of using the Scufl2 API are available as a separate Github project scufl2-examples. If you don't use Git you can download the example project as a ZIP fie.

See the scufl2-usecases folder of the SCUFL2 API source code for examples of Workflow Bundle usage in other programming languages like Python or Ruby.

The best classes to start using would be and

Example of converting .t2flow to .wfbundle:


    // ..

    WorkflowBundleIO io = new WorkflowBundleIO();
    File t2File = new File("workflow.t2flow");
    File scufl2File = new File("workflow.wfbundle");
    WorkflowBundle wfBundle = io.readBundle(t2File, "application/vnd.taverna.t2flow+xml");
    io.writeBundle(wfBundle, scufl2File, "application/vnd.taverna.scufl2.workflow-bundle");

Command line

The Github project scufl2-examples includes experimental SCUFL2 command line tools:

Other projects

These projects extend, use or relate to the SCUFL2 api: