RDF4J 6.0.0 is a major release of the Eclipse RDF4J framework. It adds broad RDF 1.2 and SPARQL 1.2 support, moves the project to Java 25 and Jakarta, replaces the public Apache HttpClient 4 integration, and includes improvements to LMDB, FedX, query execution, security and deployment. The 6.0.0 milestone contains 46 completed issues.
LATERAL, implemented separately from SPARQL 1.2.For a complete overview, see all issues completed for 6.0.0.
Java 25 is the minimum supported Java version (GH-5643). RDF4J Server and Workbench have moved from javax.servlet to Jakarta Servlet APIs (GH-3559). The associated platform upgrade includes Spring 7, Jetty 12 EE11 and Tomcat 11.
Applications embedding Server or Workbench, supplying servlet filters, or deploying RDF4J into an application server must update javax.* imports and use a compatible Jakarta runtime. The supplied Docker configurations now use Java 25 with Jetty 12 or Tomcat 11 (GH-5801).
Other major dependency changes include Lucene 10, adoption of Jackson 3 in core areas (GH-5744) and the Elasticsearch 9 Java client (GH-4776). Jackson 2 remains in a limited set of compatibility and integration paths. Applications using implementation-specific APIs from these libraries should be tested and migrated separately.
RDF4J no longer exposes Apache HttpClient 4 types through its public HTTP APIs (GH-5723). The new rdf4j-http-client-api module defines a client-neutral facade, immutable configuration and a ServiceLoader-based backend SPI.
Two implementations are included:
rdf4j-http-client-apache5, selected by default when present.java.net.http.HttpClient in rdf4j-http-client-jdk.Ordinary HTTPRepository use does not require selecting or constructing a client explicitly. Code that supplied a custom Apache HttpClient 4 instance through HttpClientDependent or HttpClientSessionManager must migrate to RDF4JHttpClient, RDF4JHttpClientConfig and the new authentication APIs.
The model and format APIs now use RDF 1.2 triple-term terminology. Code using RDF-star-specific Triple types, parser or writer names, or result-format constants must migrate to the corresponding TripleTerm and RDF/SPARQL 1.2 APIs. Legacy RDF-star-specific result formats have been replaced by the standard RDF/SPARQL 1.2 formats.
The RDF 1.2 reification conversion helper has also been renamed to convertRDF12ToStandardReification to describe its behavior more accurately (GH-5865).
BNODE("label") now uses the supplied label as its prefix while retaining solution- and invocation-specific disambiguation (GH-5909). Applications must not depend on the former fixed bnode_ prefix.RDF4J 6.0.0 adds broad support for the current RDF 1.2 and SPARQL 1.2 specifications (GH-5327). The implementation includes the emerging W3C conformance suites and covers the model, parsers, writers, query algebra, evaluation, result serialization, HTTP protocols and storage layers.
PREFIX, BASE and VERSION directives instead of the legacy @prefix, @base and @version forms (GH-5852).The SPARQL parser, algebra, evaluator and renderer have been updated for SPARQL 1.2 syntax and semantics. This includes triple-term query patterns, additional built-in functions and updated result handling.
The generated SPARQL parser has also been simplified to reduce expensive bounded lookahead paths and the amount of patched generated code (GH-5856).
Separately from the SPARQL 1.2 work, RDF4J 6.0.0 adds support for LATERAL correlated queries across parsing, algebra, evaluation, rendering and optimizer handling (GH-4315). LATERAL is not part of SPARQL 1.2.
LMDB values now use an extensible identifier layout with a one-bit inline-double marker and a six-bit type field (GH-4950). Ordinary payloads are shifted by seven bits, while inlined integer values are limited to 56 bits. Common booleans, numbers, dates and short strings can be encoded directly in the identifier instead of always requiring a separate dictionary lookup (GH-4774). The layout also supports RDF 1.2 triple terms.
The normal RDF import path now uses more efficient write batching and cursor reuse, with additional import telemetry. This is an optimization of regular repository imports, not a separate offline bulk loader or deferred index-building facility.
Further LMDB changes include:
Sketch-based LMDB planning is disabled by default while the estimator and planner continue to be tested and refined (GH-5868). It must be enabled explicitly.
NativeStore now persists RDF 1.2 triple terms and base-direction-aware literals through restart and write-ahead-log recovery. The release also restores and hardens transaction-status and concurrency behavior after regressions found during 6.0 verification (GH-5876). Memory-mapped transaction status remains an explicit opt-in.
RDF4J Server HTTP requests and responses can use gzip, deflate, Brotli and Zstandard compression (GH-5919). Its servlet filter performs response content negotiation and request decompression, including compressed RDF detection. Workbench reuses the shared Rio compression detection for uploaded RDF and negotiates gzip for query-result downloads.
Query maximum-execution-time settings are also applied as client-side response timeouts by the JDK and Apache HttpComponents 5 backends. The Apache backend exposes request construction to subclasses that need to capture and cancel active requests.
FedX source selection can group remote checks by endpoint (GH-5813). Rather than issuing one ASK for every statement-pattern and endpoint pair, it can use grouped SELECT queries with BIND(EXISTS { ... }). Grouped source selection is enabled by default and can be disabled with FedXConfig#withEnableGroupedSourceSelection(false).
FedX also includes:
The release contains new sketch-based, unified and Cascades-style planning work (GH-5720), together with runtime telemetry and plan-comparison tooling. This work includes the LMDB page-walking estimator and a Pareto-aware join-planning memo. Experimental planning components are not enabled by default unless explicitly documented by their configuration.
The standard evaluation pipeline also received fixes and optimizations for joins, filters, DISTINCT, ordering and left joins. In particular, optimizer ordering was corrected for a BIND and filter-scope regression (GH-5860).
RDF4J Server and Workbench can monitor JVM memory pressure while a query is executing (GH-5809). When pressure becomes unsafe, the circuit-breaker infrastructure can reject or interrupt work in memory-intensive operators including DISTINCT, GROUP BY and ORDER BY, and release the associated query resources.
Sail-backed repositories can log queries that exceed a configurable threshold before producing their first result (GH-5819). The timing context is propagated through Sail evaluation so the log can report the query and time to first result.
The custom aggregate SPI now supports n-ary aggregate operators, including arity validation, tuple-level DISTINCT handling and evaluation through GroupIterator (PR-5715).
XML processing has been hardened across transaction XML, RDF/XML, TriX and SPARQL XML results (GH-5824). DOCTYPE declarations, external entities and external DTDs are rejected by default. Workbench server selection also rejects unsafe URL, file and path-prefix probes before attempting a connection.
The release includes a broad dependency-security update (GH-5917). The OSV scan used during the release work went from 101 recorded findings to zero across the 556 scanned dependency coordinates at that time.
Docker configurations and end-to-end tests have been updated for Ubuntu Noble, Java 25, Jetty 12 EE11 and Tomcat 11. Local Server and Workbench testing and Docker Compose workflows are documented in the repository.
RDF4J now includes additional EU data, annotation and bibliographic vocabularies: ADMS, CPSV, the SEMIC Core Vocabularies (CV), ELI, CiteDCAT-AP, DCAT-AP HVD, GeoDCAT-AP, HealthDCAT-AP, MobilityDCAT-AP, ActivityStreams 2.0 (AS), OA, DQV, DUV, BIBO, CiTO, FRBR and FaBiO (GH-5709). The PROV-O vocabulary also exposes the inverse properties suggested by PROV-O (GH-5706).
This release was made possible by contributions from Andreas Schwarte, Bart Hanssens, Dancho Ivanov, Desislava Hristova, Håvard M. Ottestad, Ken Wenzel, Mohammad Alreeni, Ralitsa Dimitrova, Sarah Grand, and Sava Savov.
We also thank Ontotext, Bloomberg, Fraunhofer, and metaphacts for their support, and the Sovereign Tech Fund for funding parts of this work.
Table of Contents