eXist-db 5.3.0 Released

June 26, 2021

Submitted by Juri Leino.


We are very happy to announce that eXist-db 5.3.0 has been released.

It's been quite a while since the last release. A lot has been happening behind the scenes, and we are happy to share the outcome with you. 5.3.0 is a minor release, and should be 100% API compatible with 5.0.0 as such. 

  • tl;dr https://github.com/eXist-db/exist/releases/tag/eXist-5.3.0


XQuery 3.1 compatibility

  • Improved handling of the XQuery type system - [#3363](https://github.com/exist-db/exist/pull/3363), [#3266](https://github.com/exist-db/exist/pull/3266), [#3728](https://github.com/exist-db/exist/pull/3728), [#3791](https://github.com/exist-db/exist/pull/3791)
  • Function types are now allowed as values in context item expressions
  • Duplicate functions will reliably throw a useful error
  • Root context is shielded from user defined functions
  • Several fixes for positional predicates
  • When errors are thrown in XQuery most of them will now have useful location information
  • Fixed parser issues to allow empty function body, and allow || in attribute and element content
  • Allow other seed types in fn:random-number-generator (like dates) - [#3072](https://github.com/eXist-db/exist/pull/3072)
  • Fixed the cardinality of fn:random-number-generator#1 - [#3249](https://github.com/eXist-db/exist/pull/3249)
  • Improved fn:format-number - [#3348](https://github.com/eXist-db/exist/pull/3348)
  • Made fn:collection spec compliant - [#3349](https://github.com/eXist-db/exist/pull/3349)
  • Allow sequences for batch deletions in map:remove and array:remove - [#3328](https://github.com/eXist-db/exist/pull/3228), [#3692](https://github.com/eXist-db/exist/pull/3692)

New functions added

  • array:sort - [#3596](https://github.com/eXist-db/exist/pull/3596)
  • fn:document-uri#0 - [#3644](https://github.com/eXist-db/exist/pull/3644)
  • fn:trace#1 - [#3597](https://github.com/eXist-db/exist/pull/3597)
  • fn:xml-to-json - [#3141](https://github.com/eXist-db/exist/pull/3141)

Other important additions

  • Module handling and caching was improved significantly
  • Both controller.xq and controller.xql are now recognized in apps that use eXist's URL Rewriting facility, to conform with the community convention of .xq for main modules and .xqm for library modules.
  • The implementation of maps was changed to gain performance
  • Allow Bearer tokens and other schemes than "Basic" in Authentication header
  • Allow HTTP verb PATCH
  • Custom base64 handling code was replaced with apache.commons code and a new function util:base64-encode-url-safe was added
  • Enhanced util:eval to preserve the original error information
  • In Lucene, you can now use different analyzers for indexing and querying

Bundled apps

All bundled applications have their frontend dependencies updated.

  • The index view in monex now lists new fields and facets - [#124](https://github.com/eXist-db/monex/pull/124).
  • The shared resources and markdown packages are no longer bundled with eXist-db. If your application depends on those you can still declare dependencies on them in your package metadata and download them from the package repository.


The default eXist-db configuration settings are not production ready. Make sure to consult our article on best practices before making your eXist-db instance publicly available.

The new existdb-config project implements these "best practices" and can easily be used to harden your eXist-db(s) from version 5.1.1 till 5.3.0. 


A lot of effort was poured into getting eXist-db's source code licensed properly. It is now consistently LGPL 2.1, with exceptions where code from other projects is used with their permission.


See the change log entry for the full list of features and changes 

News items may be commercial in nature and are published as received.