Apache Daffodil 3.1.0


Javadoc | Scaladoc

Get Release



The above release files should be verified using the PGP signatures and the project release KEYS. See verification instructions for a description of using the PGP and KEYS files for verification. A SHA512 checksum is also provided as an alternative verification method.

libraryDependencies += "org.apache.daffodil" %% "daffodil-sapi" % "3.1.0"
Create the file /etc/yum.repos.d/apache-daffodil.repo with the following content:
name=Apache Daffodil
Run the folllowing command:
sudo dnf install apache-daffodil

Release Notes

Code Generation Backend (runtime2)

A new code generation back-end, called runtime2, is added supporting generating C code with limited parse and unparse capabilities. See the Command Line Interface page for commands and options to generate code. Visit Runtime2 ToDos for a list of limitations and planned future work.

Pluggable Validation

A new capability allowing pluggable infoset validation mechanisms is added. A Schematron validator is now available, which allows for validating the infoset against Schematron rules, either external or embedded in the DFDL schema. The CLI --validate option now allows for specifying a pluggable validator, in addition to the off/limited/full options. A new DataProcessor.withValidator() function is added to specify a new validator via the Java/Scala API.

DFDL Variables

Multiple bugs have been fixed to improve conformance with the DFDL specification related to DFDL newVariableInstance and setVariable properties, primarily related to defaults and external values. A new dfdlx:direction extension property is also added to specify that certain variables should only be evaluated during parse, unparse, or both.

SAX Updates

The SAX API has been updated, including improved conformance with SAX API namespace/prefix properties and improved unparse performance.

Bug Fixes

Miscellaneous Changes

Known Issues

A number of issues remain open that have been marked as critical, and are expected to be fixed in the next release. These issues are:


The use of the ParseResult.isAtEnd() function has been deprecated, because it can cause unexpected blocking in some cases. Instead, the final bit position should be accessed via the ParseResult.bitPos1b() function, and the result compared with the expected data length. Alternatively, a new InputSourceDataInputStream.hasData() function is added, which blocks until at least 1 byte of data is available to parse, or end-of-file is reached.

Dependency Changes

The following dependencies have been added or updated


Command Line Interface

Code Generator (runtime2)

Schematron Validator