The Saxon 12.9 maintenance release has been published. This is a maintenance release for Java, C#, C/C++, PHP, and Python that fixes a number of issues that have been raised since 12.8 was released.
Saxon 12.9 was released on 12 September 2025. This release has been uploaded to the usual locations on the Saxonica website, GitHub, and Maven, PyPi, and NuGet. SaxonCS 12.9 is built with .NET 8.
For a list of the issues resolved in this release, please visit the issue trackers for SaxonJ and SaxonCS or SaxonC on the Saxon support site.
Download products:
- Binaries for PE and EE are available from our download pages.
- SaxonJ-HE is available on the Maven Central repository.
- SaxonJ-HE, PE, and EE can also be found on our experimental Maven repository.
- SaxonC releases for HE, PE, and EE are also available from our download pages.
- Python wheels for SaxonC (HE, PE, and EE) are available from PyPI.
- SaxonCS is available on NuGet
- Saxon-HE is available from our open source GitHub repository. The GitHub repository also provides source code for those who need it.
For more details, please consult the documentation.
Issues resolved in SaxonJ
This release fixes about twenty issues in SaxonJ and SaxonCS.
- 6893 Corrected an error in the Gizmo help messages
- 6892 Fixed expression tree corruption after a rewrite optimization
- 6891 Fixed an issue with regex flags when using the Java regex engine
- 6889 Fixed an infinite loop when using trace listeners with try/catch and function variables
- 6887 Added synchronization to avoid an exception
- 6883 Corrected an error where the xsl:catch errors attribute didn’t accept EQNames
- 6881 Fixed an exception when using 'position() eq last()' with no context item
- 6878
Changed
parse-xml()
so that validation is never attempted - 6866 Corrected a namespace handling error when using the Domino tree model
- 6864 Implemented a performance improvement for slash expressions and simple step expressions
- 6863 Corrected a navigation error in snapshot trees
- 6860 Corrected errors in how character maps were handled when using adaptive serialization
- 6858 Improved error location information for some exceptions
- 6856 Corrected an API error distinguishing between empty maps and empty sequences
- 6840 Fixed an incorrect type inference for call on abs()
- 6824 Fixed an error in how the retained static context is managed
- 6818 Corrected an exception that could arise if attempting to serialize a free-standing attribute
- 6809 Fixed the line number of errors in a free-standing XPath expression
- 6805 Fixed a streaming bug related to comment handling
- 6799 Fixed an exception on number-formatter option function of xml-to-json using xsl:value-of
Issues in SaxonC
This release includes a number of improvements in memory management and support for multi-threaded execution.
- 6897
Fixed a bug where the
XQueryProcessor.setQueryBaseURI()
method had no effect - 6885 Corrected a Python bug where getting the parent of the root node threw an exception
- 6880
Fixed a bug where
XsltExexutable.getXslMessages()
did not release memory - 6879
Fixed a bug where
XsltExecutable.callFunctionReturningValue()
did not release memory - 6859
Corrected an error where
saxonc-core.h
header was missing from source zip - 6843
Fixed a bug where
XsltExecutable.clone()
did not work correctly with multiple threads
If you encounter any issues with Saxon 12.9, please report them on our issue tracker.