Release Date: 27 March 2026
The Neo4j Aura 2026.03 release has started to roll out, commencing on AuraDB Free and progressing to higher tiers later.Release Note for Neo4j 2026.03 (Release date: 27 March 2026)
Server
- Fleet Manager is now built-in and ready by default. Go to https://console.neo4j.io/ to set it up. If you have previously used the Fleet Manager plugin to connect your Neo4j deployment to Fleet Manager, upgrading to this release will no longer need the plugin, and this should be removed after the upgrade. See Aura documentation.
- Fleet Manager from this release supports collection of aggregate query logs for display in the Aura console. This feature will require the Neo4j deployment to be registered with Fleet Manager, and the
db.logs.query.obfuscate_literals=trueconfiguration to be set in order to use the feature. NOTE: This will obfuscate the literals in the local query log files as well.
Security
- Patch Jetty to version 12.0.33 to address CVE-2026-1605, a vulnerability in the GzipHandler that can cause a memory leak when handling certain compressed HTTP requests. This issue could be exploited to exhaust server memory and trigger a denial-of-service (DoS) condition.
Cypher
Cypher 25 additive features
- ACYCLIC path mode now available: When used in a MATCH statement, specifies that a node cannot be traversed more than once in a solution to the graph pattern, avoiding loops. In the current implementation, it cannot be used in conjunction with SHORTEST. This limitation will be lifted in future releases.
- Added real-time progress tracking for LOAD CSV and Cypher-based ingestion jobs in Neo4j using the command SHOW TRANSACTIONS. It allows users to see a set of key metrics for tracking the progress
- GQL conformance: Cypher now implements the GQL optional function PROPERTY_EXISTS()
Bug fix
Cypher
- Fixed a bug in pipelined runtime where some queries with EXISTS-subqueries planned with SelectOrSemiApply could in special circumstances cause incorrect intermediate result rows to be produced. The circumstances depend on a combination of the structure of the query, the input parameters and the queried data set. The bug did not affect parallel runtime. It could occur in cases where the order of intermediate rows needs to be preserved by SelectOrSemiApply, i.e. when it is planned on the right-hand side of an Apply or the plan relies on indexed-backed order. The symptoms and error messages triggered by the bug could vary. There is a theoretical risk that in the worst case it could potentially have resulted in incorrect data being written to the graph or an incorrect result returned to the client, even though we have seen no such example.
- Dynamic labels: Dynamic lookups now use locking index seeks when required, whereas previously they were vulnerable to constraint violations if used concurrently in a merge context.
Deprecations
- For all Cypher language changes, deprecations, and compatibility, see
Release Note for Neo4j 2026.02 (Release date: 2 March 2026)
Server
- The distributed neo4j.conf explicitly sets: db.query.default_language=CYPHER_25. As a result, deployments using the provided configuration file will default to Cypher 25 for newly created databases.
- New page cache metrics for MVCC snapshots and async I/O tracking
- <prefix>.page_cache.pages_snapshot_loaded
- <prefix>.page_cache.async_submit
- <prefix>.page_cache.async_complete
- <prefix>.page_cache.async_failure
Cypher
- Cypher 25 is the new default query language for newly created organisations. The default query language attached to created databases is determined by the organisation setting “Default Cypher Version” and can be manually changed.
- Change the type of exception thrown for a NodeByIdSeek when ids argument is not a valid list. Exception is now CypherTypeException, rather than ClassCastException or InternalException.
Cypher 25 Additive Features
- General availability: Vector search with filters (in-index filtering) and the new Cypher SEARCH syntax for vector queries are now GA and supported for production use. Vector indexes can include additional properties for filtering at index creation, and filters are applied via the WHERE subclause in SEARCH. See the Cypher SEARCH documentation and vector index documentation for syntax and supported filter predicates; the v2026.01 preview blog post remains a useful background overview.
- Introducing GRAPH TYPE (Preview): GRAPH TYPE provides you the ability to declare your data model in a single, unified blueprint. This enforces strict data integrity including validation of relationship connections and label definitions without sacrificing the flexibility of an open schema. The GRAPH TYPE feature is offered AS-IS as described in your agreement with Neo4j and should only be used for internal development purposes.
- Added GQL-compliant aliases for existing Cypher functions (e.g., ceiling, local_time, local_datetime, zoned_time, zoned_datetime, duration_between, path_length, ln, collect_list, percentile_disc, percentile_cont, stdev_pop, stdev_samp). These aliases redirect to the existing implementations, improving GQL compliance without changing behaviour.
- Add ai.text.structuredOutput() function to the GenAI Plugin, taking a textual prompt and map schema and outputting the result as a map adhering to the given schema.
Bug fixes
Cypher
- Fixed a bug in pipelined runtime where sometimes queries with multiple SelectOrSemiApply operators in the query plan could fail with error messages like: “Cannot invoke “org.neo4j.cypher.internal.runtime.pipelined.state.AbstractArgumentStateMap$StateController.peek()” because “controller” is null”.
- Fixed a bug where use of a composite property index in combination with a dynamic node label or dynamic relationship type could result in an incorrect MATCH result being returned. Note: this could also affect the MATCHing portion of a MERGE statement, potentially resulting in the runtime issuing a CREATE that cannot succeed, or an update to the incorrect node.
- Fixed issue with conditional query WHEN not aggregating null values correctly without a grouping key
- Fixed a bug with the new MergeUniqueNode operator
- Restored behavior allowing simple node patterns in FOREACH to shadow incoming variables.