eXist v7.0.0-beta3 Release Notes
Release Date: 2026-06-02 // 9 days ago-
🚀 Release Notes — eXist-db 7.0.0-beta3
NOTE Mac
DMGand winexeinstallers are signed but not yet working.Overview
We are pleased to announce the 7.0.0-beta3 release of eXist-db, representing 3,457 commits by 23 contributors since eXist-6.4.1, with 1,115 merged pull requests closing 299 issues.
🚀 This is a major version bump reflecting substantial infrastructure changes, breaking compatibility improvements, and significant W3C conformance work. Users migrating from any 6.x.x release should carefully review the breaking changes below.
Note : This is a beta release — not recommended for production use. Given the large number of breaking changes (Java 21, Jetty 12, XML:DB API 2.0, Lucene 10, and several behavioural changes), we are releasing this beta to gather feedback from the community before the final 7.0.0 release. We have tested extensively but invite all users to report both positive and negative experiences. As always, please ensure you have frequent and correct backups of your database.
🚀 For users of our
existdb/existdbcontainer images, please note that the moving tag:releasenow points to this beta. The last v6 tag is:6.4.1depending on your use case you might need to adjust your automation pipelines.
💥 Breaking Changes
Java 21 Required
eXist-db 7.0.0 requires Java 21 or later. Java 8 through 20 are no longer supported. The build and runtime have been updated accordingly including migration to ZGC as the default garbage collector.
On JDK 21+ , the
jdk.incubator.vectormodule is available for SIMD-accelerated vector operations in Lucene's vectorized code paths, powered by the Panama Vector API.Jetty 12 (Jakarta EE 10 / Servlet 6.0)
Upgraded from Jetty 11 to Jetty 12.0.x with Jakarta EE 10 (Servlet 6.0). This introduces a breaking API change — all javax.servlet namespace references have been migrated to jakarta.servlet. Third-party Java extensions and applications compiled against the previous servlet API will need to be updated.
XML:DB API 2.0
Upgraded to XML:DB API 2.0.0 , which uses Jakarta EE 9+ namespace (
javax.xml.xmldb→ package updates). Existing Java clients using the XML:DB API must be recompiled against the new version.0️⃣ Secure XML Processing Enabled by Default
🔧 Secure XML processing (XML parsing with external entity expansion disabled) is now the default configuration (
parser.secure-processing=trueinconf.xml). Previously this was opt-in. Applications relying on DOCTYPE-based entity expansion or external DTD fetching must explicitly enable these in their configuration.XML Declaration Preservation (On-Disk Format Change)
XML declarations (e.g.,
<?xml version="1.0" encoding="UTF-8"?>) are now persisted and serialized by default. This changes the on-disk storage format. A full backup and restore is required when migrating from 6.x.x. The REST API, Java Admin Client, and WebDAV endpoints all default to preserving the original XML declaration. New query parameters_omit-xml-declarationand_omit-original-xml-declarationprovide fine-grained control.fn:collectionSpec ComplianceThe
fn:collectionfunction signature has been made compliant with the XQuery 3.1 F&O specification. Thexmldb:xcollectionfunction has been re-aligned accordingly. Code using non-standard argument patterns may break.🔀
map:mergeUse-First Defaultmap:mergenow uses the first occurrence of duplicate keys (per the XQuery 3.1 specification), rather than the last. This is a behavioral change — code relying on the previous "last wins" semantics must be reviewed.0️⃣ Default Order for Empty Sequences: "Empty Least"
The implementation-defined behavior for ordering empty sequences has changed from "empty greatest" to "empty least" , aligning with Saxon and BaseX. Queries with
order bythat assume empty values sort to the end may produce different results.Cardinality Enforcement
🚩 Stricter enforcement of cardinality in function signatures and type checking has been introduced. Previously permissive handling of sequences where single items were expected may now raise errors.
🚚 Legacy JSON Utilities Removed
The deprecated
json.xqandjsonp.xqlibrary modules have been deleted. Code using these should migrate tofn:json-to-xml,fn:xml-to-json, or the JSON serialization support built into eXist-db's adaptive serializer.🚚 IPrange Filter Removed
⚡️ The IP address range filter has been removed from the distribution. Existing configurations referencing this filter will need to be updated.
EXPath HTTP Client Namespace Prefix Alignment
⚡️ The default EXPath HTTP Client namespace prefix has been aligned with the specification. Existing code using custom prefixes should continue to work, but reliance on the old default may require updates.
⬆️ JAXB 4 Upgrade
Upgraded from JAXB 3 to JAXB 4 (Jakarta XML Binding). Java code compiled against JAXB 3 will require recompilation.
🗄 Deprecated
Cardinality._MANY🗄 The
Cardinality._MANYconstant has been deprecated. UseCardinality.ZERO_OR_MOREorCardinality.ONE_OR_MOREas appropriate.📜 Lucene Analyzer & Query Parser Classes (collection.xconf)
🚚 Existing
collection.xconffiles may reference obsolete Lucene classes that have been removed or relocated:- 📜
org.apache.lucene.queryparser.analyzing.AnalyzingQueryParser— removed in Lucene 7.x; omit the<parser>element to use the default parser, or reference a current Lucene 10 query parser class - 📜
org.apache.lucene.queryParser.*(capital P) — package renamed to lowercase; update toorg.apache.lucene.queryparser.* org.apache.lucene.analysis.util.*— moved toorg.apache.lucene.analysis.*org.apache.lucene.analysis.standard.StandardFilter/StandardFilterFactory— removed (no-op)org.apache.lucene.util.Version— removed; analyzer constructors no longer accept a Version argumentorg.exist.indexing.lucene.analyzers.NoDiacriticsStandardAnalyzer— removed; useorg.apache.lucene.analysis.standard.StandardAnalyzerinstead
See the Lucene 10 Migration Guide for details.
Major Features
XQuery W3C Conformance Improvements
- Tumbling Window Expressions — support for the W3C XQuery 3.0 tumbling window clause (via PR #4529)
- Sliding Window Expressions — support for sliding window clauses (via PR #4529)
- Count Expressions — support for the XQuery 3.0
countclause in FLWOR expressions (via PR #4530) - XPath Regex Validation — improved compliance with W3C regex validation including XPath 4.0 lookaround support
fn:contains-token— fixed collation parameter to correctly accept empty sequence- 📜
fn:unparsed-text— improved conformance, BOM stripping, and security-gatedfile://URI resolution fn:matches/fn:analyze-string/fn:replace/fn:tokenize— fixed error codes and empty-pattern handling per spec
XQTS compliance
🚀 One of the main goals of this release was to push towards full XQuery 3.1 compliance. We now pass over 90% of close to 32 thousand test cases that make up the latest version of the entire test-suite. This is more than 10% of what our current release 6.4.1 passed.
🚀 And we plan to improve even further before the main release as there are a couple of low hanging fruits left.
For those of you who like raw stats here is a summary. Both runs were done on the same hardware (MacBookPro M1Max with 32 Gb of hardware) but keep in mind that the spec is not a good performance benchmark and we have seen quite a lot of variance in timings. Overall it is safe to say that even though we now pass more of the tests the overall execution time has gone down significantly.
✅ | exist-db version | Tests | Failures | Errors | Skipped | Success rate | Time | | --- | --- | --- | --- | --- | --- | --- | | 6.4.1 | 31815 | 4720 | 296 | 1185 | 80,5% | 279.741 | | 7.0.0-beta | 31815 | 1608 | 134 | 1259 | 90,57% | 155.328 |
Serialization Compliance (W3C)
Major serialization compliance overhaul:
- Spec-compliant DOCTYPE for XHTML/HTML serialization
- 🛠 HTML5/XHTML5 fragment and DOCTYPE serialization fixes
- HTML5 PI serialization per W3C 3.1 and HTML5 PR2372
- Duplicate
Content-Type/charsetmeta suppression in HTML/XHTML head cdata-section-elementsprefix resolution via static namespacesxmlns=""undeclaration via proper namespace stack in XMLWriter- 👍 XML 1.1 namespace undeclaration support in element constructors
- Parameter-document serialization parameter implementation
- Bulk-write and raw-text fast path optimizations for HTML/XML serialization
- JSON and adaptive serializer improvements for W3C compliance
- 👌 Improved XQuerySerializer for W3C serialization compliance
Lucene Index Improvements
- Lucene 10 migration — upgraded from Lucene 4 to Lucene 10.3.0, removing all deprecated APIs and obsolete query parser classes
Vector KNN search — new
KnnFloatVectorField/KnnFloatVectorQuerysupport enabling semantic search via:ft:query-vector($nodes, $vector, $k?)— KNN vector search with optional top-k parameterft:query-field-vector($field, $vector, $k?)— field-scoped vector search- Filter queries, range filters, and facet drill-down combined with vector search
Vector embedding module (
vector:*namespacehttp://exist-db.org/xquery/vector):vector:embed($text, $model, $model-path?, $api-key?)— single-text embeddingvector:embed-batch($texts, $model, $model-path?, $api-key?)— batch embeddingvector:models()— list known embedding modelsvector:diagnostics()— provider status and model cache info
Embedding providers — ONNX Runtime (local CPU/GPU models) and HTTP providers (OpenAI, Cohere-style APIs)
*...
- 📜
Previous changes from v6.4.1
-
🚀 Release Notes: https://exist-db.org/exist/apps/wiki/blogs/eXist/exist6.4.1
Maven Central: https://search.maven.org/search?q=g:org.exist-db
What's Changed
- 🛠 fix: version in two submodule poms by @line-o in #5788
- 🛠 [bugfix] 6XX: Make sure that the JMX servlet is started upon server start. by @dizzzz in #5835
- 🍎 [ci] fix macOS testing by @duncdrum in #5852
- 🛠 fix(ci-container): upload log on failure by @duncdrum in #5849
- 👉 Make unique query history keys for monex by @nverwer in #5881
- 🛠 [Bugfix] 6XX sync: small number formatted with exponent fails by @dizzzz in #5954
- 🗄 [enhancement] deprecate Cardinality _MANY by @reinhapa in #6005
- ⚡️ [6xx] Updating 3rd party libs and build plugins by @dizzzz in #6013
- 🛠 [bugfix] fn:transform: Conversion and treeIndex problems by @nverwer in #5882
Full Changelog : eXist-6.4.0...eXist-6.4.1