Saxonica: Latest releases

Latest releases

This page contains release information about the current actively maintained Saxon product releases:

For information on older products, see Older releases.

Saxon 12

This section contains information which applies to Saxon 12 products on all platforms. See the sections below for platform-specific product details:

Saxon 12 is a new major release of SaxonJ, SaxonCS, and SaxonC, all built from the same code base. It is the first time we have released simultaneously for all three platforms, which we have been able to achieve thanks to progress on build and test automation and continuous integration.

Bytecode generation has been dropped from SaxonJ in this release. The benefits of bytecode generation were becoming more and more marginal as Java's JIT compilation improved, and in the end, very few real production workloads gained a significant boost. Dropping bytecode generation also removes a potential security attack surface, as demonstrated by recent vulnerabilities found in the Xalan product. In its place we have introduced improvements to the interpreter. Using a technique we call expression elaboration, pioneered in SaxonJS, we now generate a Java or C# lambda function for every XPath expression in the stylesheet. This is done on first execution, to reduce the effort spent optimizing template rules that might never be used. It turns out that this gives particularly good results for SaxonCS, where the performance boost is around 20%, compared with 5% for SaxonJ.

Another significant development for performance optimization is a move towards use of learning strategies. Influenced by trends with JIT optimization technology, rather than relying entirely on static analysis to make optimization decisions, we are increasingly making decisions based on run-time monitoring. For example, it is hard to decide purely from static analysis what evaluation strategy to use for function parameters (lazy, eager, or incremental). By monitoring how the supplied parameter is actually used at run-time, we can make a more informed choice.

Most of the new functionality in Saxon 12 consists of experimental implementation of new features being developed for XSLT 4.0, XQuery 4.0, and XPath 4.0, a W3C Community initiative in which Saxonica is playing a leading role. This provides a wide range of handy new functions and operators. One of the most significant features is that user-defined functions can now define optional parameters with a default value; they can also be called using keyword arguments as well as positional arguments. These new features cannot yet be considered stable, and must be explicitly enabled if they are to be used. They generally require Saxon-PE or Saxon-EE.

One of the new features is a parse-html() function for processing HTML5 documents. Saxon previously offered a saxon:parse-html() extension, but it was not well tested, and was not conformant with HTML5. The new function provides welcome new capability for applications that need to consume HTML5 data. The SaxonJ implementation uses validator.nu, while SaxonCS uses AngleSharp.

Stylesheets that have been compiled into SEF files should be recompiled with the new release.

Changes and fixes

Changes in the functionality of the product in successive releases are documented in the Change history section of the documentation. Bug fixes are documented in the bug tracker database; you can search for bugs cleared in a particular maintenance release.

SaxonJ 12

SaxonJ 12.0 released 12 January 2023: EE, PE, and HE editions.

Product headlines

SaxonJ is the flagship Java product and remains available in three editions, Home (HE), Professional (PE), and Enterprise (EE). SaxonJ 12 is built and tested using Java 11, but should still be usable with Java 8 or later. (However, due to bug #5824, note that SaxonJ 12.0 does not run on Java 8.)

Saxon-HE is no longer distributed on SourceForge. The JAR files can be downloaded from Maven (package name Saxon-HE) or from GitHub. The GitHub repository also provides source code for those who need it.

SaxonCS 12

SaxonCS 12.0 released 12 January 2023.

Product headlines

SaxonCS is built by transpiling the source code of SaxonJ to C#. As well as new features inherited from SaxonJ, it now targets .NET 6, and plugs some gaps in the C# API. The new release also offers integration with the XML capabilities of LINQ.

SaxonCS delivers the functionality of Enterprise Edition: it is a commercial product and you will need a license key to activate it. 30-day evaluation licenses are available.

For further details, see the Saxon 12 feature matrix.

Installation and download

You can install SaxonCS using the nuget package manager at nuget.org. Typically all you need to do is to add a dependency to the package (saxonica/SaxonCS 12.0.0 or later) to your application in Visual Studio or JetBrains Rider, and the rest of the installation process is automatic. But the code won't execute until you install a license key.

With the SaxonCS nuget package installed, you can run transformations and queries from the command line using a command such as "dotnet SaxonCS transform -s:src.xml -xsl:style.xsl". Alternatively you can install platform-specific executables (for Windows, Linux, and MacOS) that run directly from the command line (rather than as subcommands of dotnet): see .NET platform downloads.

SaxonC 12

SaxonC 12.0 released 12 January 2023: EE, PE, and HE editions, for C/C++, PHP, and Python.

SaxonC provides APIs to run XSLT 3.0, XQuery 3.1, XPath 3.1, and XSD 1.1 from C/C++, PHP or Python applications.

SaxonC is a library with APIs for C, C++, PHP, and Python. This version is reengineered to use GraalVM, replacing the defunct ExcelsiorJET technology. The main benefit of the change is that we are now running on a supported platform, greatly reducing the risk of security vulnerabilities. In addition GraalVM is showing excellent performance results. All SaxonC editions currently ship with GraalVM Community Edition. For Python users (versions 3.8 - 3.10), the SaxonC API for Python can be installed using pip from the standard PyPi repository.

SaxonC is available in the standard Saxon range of editions: the open-source product SaxonC-HE, and the commercial products SaxonC-PE and SaxonC-EE. Separate downloads are available to run on Linux, MacOS and Windows. For further information see SaxonC.

Saxon 11

This section contains information which applies to Saxon 11 products on all platforms. See the sections below for platform-specific product details:

License

For Saxon 11 we're making an important change to the business model: in line with what is now the general industry practice, licenses for Saxon 11 and above are 1-year fixed-term rather than perpetual. For details see Saxon licenses and Annual term and subscription licenses.

Changes and fixes

Changes in the functionality of the product in successive releases are documented in the Change history section of the documentation. Bug fixes are documented in the bug tracker database; you can search for bugs cleared in a particular maintenance release.

SaxonCS 11

SaxonCS 11.4 released 28 July 2022. With this release, we are now recommending Saxon 11 as the most stable and reliable release for production use.

SaxonCS 11.3 released 28 March 2022.

SaxonCS 11.2 released 18 February 2022.

SaxonCS 11.1 released 1 February 2022.

SaxonCS 11.0 released 5 October 2021.

Product headlines

SaxonCS 11 is our first product produced from the version 11 source code, and our first product for .NET 5.

SaxonCS delivers the functionality of Enterprise Edition: it is a commercial product and you will need a license key to activate it. 30-day evaluation licenses are available.

For further details, see the Saxon 11 feature matrix.

Although the product is built from the established and mature Java code base, the build process is entirely new (we developed a transpiler to convert Java source code to C#) and there's a lot of new code to interface with the .NET 5 platform. There were a few teething troubles with the first version, mainly concerned with running on platforms localized to languages other than English. These have been ironed out in the maintenance release, but we're still keen to get feedback. You can email us privately, but we prefer it if you share your experiences with the wider user community by making entries in the appropriate section of the bug tracker database.

The product has been tested on .NET 5 only, on Windows, MacOS, and Linux. If you want to try it out on any other platform, please let us know how you get on. Note that it does not work on earlier .NET Framework or .NET Core releases. For .NET Framework 4, the older Saxon/.NET 10 product (built using the IKVM technology) remains available. We do not have a product that runs on older .NET Core releases.

We're working to get the MacOS version of the SaxonCS 11 notarized by Apple. Until that's achieved, you may have to contend with security warnings about the software being untrusted. That will hopefully be fixed soon. We think the problems can be avoided if you download the package from nuget.

Changes

The overall structure of the C# API is closely based on the API for the older Saxon 10 product on .NET, but there are many minor changes as we have tried to modernize the interface to take full advantage of C# features such as generics and delegates. Existing applications will therefore need some changes at the C# level. XSLT, XQuery, and XPath code should normally run without change. A few features of the older product have not (yet) been carried forward: the most noticeable omissions are probably in the area of localization (formatting of dates, times, and numbers according the conventions of languages other than English). Changes in the functionality of the product in successive releases are documented in the Change history section of the documentation.

Installation and download

You can install SaxonCS using the nuget package manager at nuget.org. Typically all you need to do is to add a dependency to the package (saxonica/SaxonCS 11.1.1 or later) to your application in Visual Studio or JetBrains Rider, and the rest of the installation process is automatic. But the code won't execute until you install a license key.

With the SaxonCS nuget package installed, you can run transformations and queries from the command line using a command such as "dotnet SaxonCS transform -s:src.xml -xsl:style.xsl". Alternatively you can install platform-specific executables (for Windows, Linux, and MacOS) that run directly from the command line (rather than as subcommands of dotnet): see .NET platform downloads.

SaxonJ 11

SaxonJ 11.4 released 28 July 2022. With this release, we are now recommending Saxon 11 as the most stable and reliable release for production use.

SaxonJ 11.3 released 28 March 2022.

SaxonJ 11.2 released 18 February 2022.

SaxonJ 11.1 released 1 February 2022: EE, PE, and HE editions.

Note: there was no SaxonJ 11.0.

Product headlines

Saxon on the Java platform is now a mature and stable product, and version 11 delivers incremental improvements rather than disruptive innovations.

Internally, there's some major re-engineering of the way Unicode strings are handled: instead of Java's standard approach of using two-byte character objects with surrogate pairs to support high-end Unicode characters such as emoji, we now use a new library of string-handling routines based on a UnicodeString class that supports the full unicode standard natively. Strings use one, two or three bytes per character as required, and characters are directly addressible. We've also introduced string representations that are much more efficient for operations that build a string incrementally, or that modify small parts of a large string, and we've future-proofed the library by designing it to accommodate strings that are longer than 231 characters.

A major part of the motivation for this change was so that we could use the same code across Java and C#; we found that the existing mechanisms we were using made it very difficult to translate our string-handling code from Java to C#.

The effects of this change on performance vary from one application to another. For very simple applications that do little complex string processing, there may be a small drop in performance caused by the overhead of converting strings into the new format; more complex applications show a performance improvement.

Another area of change in SaxonJ is in URI resolution. Previous releases had a myriad of callback interfaces for different kinds of resources (URIResolver, EntityResolver, SchemaURIResolver, ModuleURIResolver, UnparsedTextResolver) and this has all now been rationalized. All requests for resource access now go first to a ResourceResolver that's local to the particular tool (for example the XsltCompiler or the XQueryEvaluator); then, if not yet resolved, they go to a configuration-wide ResourceResolver whose default implementation is designed to work with OASIS catalog files; finally, if still not resolved, they are resolved using the default mechanisms in the Java runtime library. Nevertheless, many of the old APIs are retained alongside for compatibility.

We're continuing to experiment with new extensions to XSLT and XPath syntax and the function library, particularly to make processing JSON as convenient as processing XML. Some of the facilities are labelled as experimental: we hope you will try them out and give us feedback, but they may change in future releases. In the interest of standards conformance and interoperability, these features are generally disabled by default, except where we've been able to take advantage of XSLT's standard extensibility mechanisms.

SaxonC 11

SaxonC 11.4 released 28 July 2022. With this release, we are now recommending Saxon 11 as the most stable and reliable release for production use.

SaxonC 11.3 released 28 March 2022.

SaxonC 11.2 released 18 February 2022.

SaxonC 11.1 released 1 February 2022: EE, PE, and HE editions, for C/C++, PHP, and Python.

Note: there was no SaxonC 11.0.

This is the first new version of SaxonC since Saxon/C 1.2.1, released 28 October 2019.

SaxonC provides APIs to run XSLT 3.0, XQuery 3.1, XPath 3.1, and XSD 1.1 from C/C++, PHP or Python applications.

This version ties SaxonC more closely to the SaxonJ Java code base; the build mechanism has been integrated and in future we intend to ship SaxonC releases corresponding to each SaxonJ maintenance release.

Because of the variety of platforms and languages supported, SaxonC can be complex to install, and the new release benefits from the experience gained by a wide range of users with different environments. The amount of testing we do on different (real or virtual) platforms has greatly increased. It remains the case, however, that we can't test on every possible combination of hardware, operating system, and language compiler, so we greatly welcome feedback from users that will help us increase our coverage.

SaxonC 11 plugs many gaps in the various APIs for C++, PHP, and Python. There's also more focus on multi-threading and reuse of compiled stylesheets.

SaxonC is built by compiling the Java code of SaxonJ using the Excelsior JET Enterprise tool (version 15.3 MP1). Users should be aware that Excelsior JET, while highly reliable, is no longer supported. This creates a risk that if any serious problem is found with Excelsior JET (such as a security vulnerability), it is unlikely to be fixed. Following this release of SaxonC, we are proposing to evaluate alternative technologies to replace Excelsior JET: the most promising candidate is GraalVM.

SaxonC is available in the standard Saxon range of editions: the open-source product SaxonC-HE, and the commercial products SaxonC-PE and SaxonC-EE. Separate downloads are available to run on Linux, MacOS and Windows. For further information see SaxonC.

SaxonJS 2

SaxonJS 2.5 maintenance release 4 October 2022.

SaxonJS 2.4 maintenance release 12 May 2022.

Saxon-JS 2.3 maintenance release 20 August 2021.

Saxon-JS 2.2 maintenance release 11 May 2021.

Saxon-JS 2.1 maintenance release 2 March 2021.

Saxon-JS 2.0 first release 12 June 2020.

SaxonJS is a high-performance XSLT 3.0 processor that runs either in the browser, or on Node.js. It conforms with the latest W3C specifications (notably XSLT 3.0 and XPath 3.1), together with extensions designed to meet the needs of modern web applications. The latest version, SaxonJS 2, is a major upgrade. Stylesheets can be compiled to SEF using the internal compiler in SaxonJS for Node.js, or using Saxon-EE (10.0 or later).

For further information see SaxonJS.