The Saxon 13.1 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 13.0 was released.
Saxon 13.1 was released on 15 October 2026. This release has been uploaded to the usual locations on the Saxonica website, GitHub, and Maven, PyPi, and NuGet. SaxonCS 13.1 is built with .NET 10.
Note that this Saxon 13.1 maintenance release does not try to track recent changes in the 4.0 language specifications. What’s implemented and what’s not implemented is largely unchanged from Saxon 13.0, though a few minor bugs may have been fixed.
As the 4.0 language features develop, there will be periods when implementation and specification are out-of-sync. See QT4 extensions for more information about exactly what is implemented in Saxon 13.1.
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-EE is available on NuGet; SaxonCS-HE is also 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 and SaxonCS
This release fixes more than sixty issues in SaxonJ and SaxonCS:
- 7274 NullPointerException when -TP (timing profile) is requested using the default stylesheet
- 7269 (and 7138 and 7134) Correct the behavior of the JAXP allowed protocols configuration with respect to the empty string
- 7263 Negating Long.MIN_VALUE fails with StackOverflow exception
- 7262 Improvements to the samples for schema-aware XQJ
- 7260 NullPointerException in NodeInfo.children()
- 7258 Saxon 13 XSLT 4.0: fixed-namespaces is ignored on an imported or included module
- 7257 SaxonJ-HE 13.0 with a xsl:template match which contains a union, is only tracing calls for the first item in the union
- 7250 Crash in fn:replace() when using 4.0 if the callback function has the wrong signature
- 7246 fn:transform() called from XQuery fails with "Unable to retrieve URI .."
- 7231 SaxonCS-HE 13 gives error when using fn:current-output-uri with xsl:result-document
- 7224
ClassCastException caused by incorrect result of
instance of - 7219 file:append-text-lines() fails to close the file
- 7216 Named xsl:result-document leaks primary FileOutputStream on Windows
- 7212 (and 7179) SaxonCS-HE 13 dependency vulnerabilities
- 7207 SaxonCS raises SIGILL 132 on older systems
- 7197 SaxonCS-HE 13 on .NET keeps files loaded by document() locked
- 7194 SaxonCS doesn't resolve UNC paths correctly
- 7193 Add Automatic-Module-Name to Saxon-HE jar manifest
- 7192 Saxon13 fails when for-each-group sorts by current-grouping-key() in a multi-mode template
- 7191
Optimizer error with
tooperator? - 7186 Internal error evaluating template rule
- 7165 A valid document must have only one child element
- 7156 Bare xsl:result-document leaks a FileOutputStream on Windows
- 7155 NullPointerException in NodePredicate.test(net.sf.saxon.om.GNode)
- 7150 Error in XML Catalog handling
- 7148 SaxonCS-HE 13.0 unintentionally includes ICU4N
- 7145 In SaxonCS-13, old schema API fails with IllegalStateException
- 7144 SaxonCS: format-number() does not respect picture if it ends with '#'
- 7143 random-number-generator() is not really deterministic
- 7142 SaxonCS-HE 13 incorrectly parses numeric values
- 7140 Incorrect result from bin:shift()
- 7139 Streamed grouping XSLT crashes when not finding a grouping key
- 7136 Saxon-HE 13 XQuery NullPointerException: Cannot load from object array because "collators" is null
- 7135 Unreported type error in general comparison
- 7133 SaxonCS-HE 13: surprising behavior on XsltTransformer.MessageListener
- 7128 Error with XInclude enabled, in Saxon 13.0
- 7127 Saxon 13.0 doesn't use XML catalog's public ID as expected
- 7118 ArrayIndexOutOfBoundsException in TwineBuilder.java (using non-BMP characters)
- 7111 Saxon 13.0 dereferences XQuery module namespace URI before using location hint
- 7110 NullPointerException in ResourceResolverWrappingLSResourceResolver
- 7102 apply-templates in streaming mode fails when multithreading
- 7100 SaxonCS-HE fails with MVID mismatch in ICU4N resources under some circumstances.
- 7098 The NineML jars are unnecessarily included in the Saxon-HE release
- 7097 ClassCastException in Saxon 13
- 7049 When used in a push context, fn:unparsed-text ignores the normalize-newlines option
- 6899 Multiple document validation in SaxonCS
- 6872 NPE when attempting to compile a recursive XSD
- 6857 Saxon does not stop when listener warning throws
Notes on the SaxonCS release: SaxonCS 13.1 requires .NET 10. We’ve also changed the way that the command line tools are packaged. Previously, a single, monolithic executable was produced. This seems to have been the source of at least one bug, so we’ve disabled that feature.
SaxonC
This release fixes about ten issues in SaxonC:
- 7132 The python samples readme for running pytest in Saxon 13 is incorrect.
- 7113 Failed to build SaxonC PHP extension: no rule to make target php8_saxon.cpp
- 7107 Typo in name of PyXsdSchema method export_compoments
- 7095 Trying to use fn:invisible-xml in XSLT 4.0 with SaxonC 13 EE fails
- 7094 SaxonC 13 Transform.exe doesn't handle and report exceptions during stylesheet compilation cleanly
- 7092 SaxonC 13 HE Query.exe doesn't handle error in XQuery cleanly as SaxonC 12.9 HE
- 6921 Comparison for unsigned integer incorrect
- 6919 XdmMap::containsKey incorrect check
If you encounter any issues with Saxon 13.1, please report them on our issue tracker.