Skip to content

Commit b19f28e

Browse files
2025.10 release (#1412)
1 parent 9067045 commit b19f28e

22 files changed

+1543
-309
lines changed

antora.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ nav:
77
- modules/ROOT/content-nav.adoc
88
asciidoc:
99
attributes:
10-
neo4j-version: '2025.09'
10+
neo4j-version: '2025.10'

modules/ROOT/content-nav.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
** xref::values-and-types/spatial.adoc[]
6565
** xref::values-and-types/lists.adoc[]
6666
** xref::values-and-types/maps.adoc[]
67+
** xref::values-and-types/vector.adoc[]
6768
** xref:values-and-types/graph-references.adoc[]
6869
** xref::values-and-types/working-with-null.adoc[]
6970
** xref::values-and-types/casting-data.adoc[]

modules/ROOT/pages/appendix/gql-conformance/additional-cypher.adoc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,14 @@ Either the pattern already exists, or it needs to be created.
5252
| Cypher feature
5353
| Description
5454

55+
| xref:values-and-types/maps.adoc#query-operators-list[`MAP` values].
56+
| Map values - the GQL equivalent is Records.
57+
5558
| xref:values-and-types/spatial.adoc[`POINT` values]
5659
| Spatial values.
5760

58-
| xref:values-and-types/maps.adoc#query-operators-list[`MAP` values].
59-
| Map values - the GQL equivalent is Records.
61+
| xref:values-and-types/vector.adoc[`VECTOR<TYPE>(DIMENSION)` values]
62+
| Vector values, defined with a coordinate type and dimension.
6063

6164
|===
6265

modules/ROOT/pages/constraints/managing-constraints.adoc

Lines changed: 137 additions & 84 deletions
Large diffs are not rendered by default.

modules/ROOT/pages/constraints/syntax.adoc

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ If a name is not explicitly given, a unique name will be auto-generated.
1919
[NOTE]
2020
Creating a constraint requires the link:{neo4j-docs-base-uri}/operations-manual/current/authentication-authorization/database-administration/#access-control-database-administration-constraints[`CREATE CONSTRAINT` privilege].
2121

22-
The `CREATE CONSTRAINT` command is optionally idempotent.
22+
The `CREATE CONSTRAINT` command is optionally idempotent.
2323
This means its default behavior is to throw an error if an attempt is made to create the same constraint twice.
2424
With the `IF NOT EXISTS` flag, no error is thrown and nothing happens should a constraint with the same name or same schema and constraint type already exist.
2525
It may still throw an error if conflicting data, indexes, or constraints exist.
@@ -122,6 +122,7 @@ Where `<TYPE>` is one of the following property types:
122122
* `ZONED DATETIME`
123123
* `DURATION`
124124
* `POINT`
125+
* `VECTOR<TYPE>(DIMENSION)` label:cypher[Cypher 25 only] label:new[Introduced in Neo4j 2025.10]
125126
* `LIST<BOOLEAN NOT NULL>`
126127
* `LIST<STRING NOT NULL>`
127128
* `LIST<INTEGER NOT NULL>`
@@ -135,6 +136,11 @@ Where `<TYPE>` is one of the following property types:
135136
* `LIST<POINT NOT NULL>`
136137
* Any closed dynamic union of the above types, e.g. `INTEGER | FLOAT | STRING`.
137138

139+
[NOTE]
140+
Because storing lists of xref:values-and-types/vector.adoc[`VECTOR`] values is not supported, property type constraints cannot be created for `LIST<VECTOR<TYPE>(DIMENSION) NOT NULL>`.
141+
Additionally, `VECTOR` property type constraints must be created with a specific dimension and coordinate value, where the dimension must be greater than `0` and less than or equal to `4096`.
142+
For more information, see xref:values-and-types/vector.adoc[Values and types -> Vectors].
143+
138144
Allowed syntax variations of these types are listed in xref::values-and-types/property-structural-constructed.adoc#types-synonyms[Types and their synonyms].
139145

140146
For examples on how to create property type constraints, see xref:constraints/managing-constraints.adoc#create-property-type-constraints[Create, show, and drop constraints -> Create property type constraints].
@@ -310,4 +316,4 @@ This means its default behavior is to throw an error if an attempt is made to dr
310316
With the `IF EXISTS` flag, no error is thrown and nothing happens should the constraint not exist.
311317
Instead, an informational notification is returned detailing that the constraint does not exist.
312318

313-
For examples on how to drop constraints, see xref:constraints/managing-constraints.adoc#drop-constraint[Create, show, and drop constraints -> DROP CONSTRAINT].
319+
For examples on how to drop constraints, see xref:constraints/managing-constraints.adoc#drop-constraint[Create, show, and drop constraints -> DROP CONSTRAINT].

modules/ROOT/pages/deprecations-additions-removals-compatibility.adoc

Lines changed: 131 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,123 @@ Cypher 25 was introduced in Neo4j 2025.06 and can only be used on Neo4j 2025.06+
2222
Features removed in Cypher 25 are still available on Neo4j 2025.06+ databases either by prepending a query with `CYPHER 5` or by having Cypher 5 as the default language for the database.
2323
For more information, see xref:queries/select-version.adoc[].
2424

25+
26+
[[cypher-deprecations-additions-removals-2025.10]]
27+
== Neo4j 2025.10
28+
29+
=== New in Cypher 25
30+
31+
[cols="2", options="header"]
32+
|===
33+
| Feature
34+
| Details
35+
36+
a|
37+
label:functionality[]
38+
label:new[]
39+
[source, cypher]
40+
----
41+
VECTOR([1.05, 0.123, 5], 3, FLOAT32 NOT NULL)
42+
----
43+
44+
a| Introduced a `VECTOR` value type that can be stored as xref:indexes/semantic-indexes/vector-indexes.adoc#embeddings[embedding] properties on nodes and relationships and utilized for efficient semantic retrieval using Neo4j's xref:indexes/semantic-indexes/vector-indexes.adoc[vector indexes] and xref:genai-integrations.adoc[GenAI plugin].
45+
For more information, see xref:values-and-types/vector.adoc[Values and types -> Vectors].
46+
47+
a|
48+
label:functionality[]
49+
label:new[]
50+
[source, cypher]
51+
----
52+
WITH vector([1, 2, 3], 3, INTEGER) AS vector
53+
RETURN vector, valueType(vector) AS vectorType
54+
----
55+
56+
a| New xref:functions/vector.adoc#functions-vector[`vector()`] function for the construction of xref:values-and-types/vector.adoc[`VECTOR`] values.
57+
58+
a|
59+
label:functionality[]
60+
label:new[]
61+
[source, cypher]
62+
----
63+
RETURN vector_dimension_count(vector([1, 2, 3], 3, INTEGER)) AS size
64+
----
65+
66+
a| New xref:functions/vector.adoc#functions-vector_dimension_count[`vector_dimension_count()`] function, which returns the dimension of a xref:values-and-types/vector.adoc[`VECTOR`] value.
67+
68+
a|
69+
label:functionality[]
70+
label:new[]
71+
[source, cypher]
72+
----
73+
RETURN vector_distance(vector([1, 2, 3], 3, INT), vector([1, 2, 4], 3, INT), COSINE) AS distance
74+
----
75+
76+
a| New xref:functions/vector.adoc#functions-vector_distance[`vector_distance()`] function, which returns the distance between two xref:values-and-types/vector.adoc[`VECTOR`] values based on the selected `vectorDistanceMetric` algorithm.
77+
78+
a|
79+
label:functionality[]
80+
label:new[]
81+
[source, cypher]
82+
----
83+
RETURN vector_norm(vector([1.0, 5.0, 3.0, 6.7], 4, FLOAT), EUCLIDEAN) AS norm
84+
----
85+
86+
a| New xref:functions/vector.adoc#functions-vector_norm[`vector_norm()`] function, which returns the distance between the given vector and an origin vector, which is a vector with the same dimension with all coordinates set to zero, calculated using the specified `vectorDistanceMetric`.
87+
88+
a|
89+
label:functionality[]
90+
label:new[]
91+
[source, cypher, role="noheader"]
92+
----
93+
CREATE CONSTRAINT node_vector_constraint
94+
FOR (n:Movie) REQUIRE n.embedding IS :: VECTOR<INT32>(42)
95+
----
96+
97+
[source, cypher, role="noheader"]
98+
----
99+
CREATE CONSTRAINT rel_vector_constraint
100+
FOR ()-[r:CONTAINS]->() REQUIRE r.embedding IS :: VECTOR<FLOAT32>(1536)
101+
----
102+
103+
a| Introduced `VECTOR` property type constraints.
104+
For more information, see xref:constraints/managing-constraints.adoc#create-property-type-constraints[Create property type constraints].
105+
106+
|===
107+
108+
=== Updated in Cypher 25
109+
110+
[cols="2", options="header"]
111+
|===
112+
| Feature
113+
| Details
114+
115+
a|
116+
label:functionality[]
117+
label:updated[]
118+
[source, cypher]
119+
----
120+
RETURN toFloatList(Vector([1, 2, 3], 3, INTEGER64)),
121+
toIntegerList(Vector([1, 2, 3], 3, INTEGER8)),
122+
vector.similarity.cosine(vector([3, 5, 7], 3, INT), vector([-1, -2, -3], 3, INT)),
123+
vector.similarity.euclidean(vector([3, 5, 7], 3, INT), vector([-1, -2, -3], 3, INT))
124+
----
125+
126+
a| The xref:functions/list.adoc#functions-tofloatlist[`toFloatList()`], xref:functions/list.adoc#functions-tointegerlist[`toIntegerList()`], xref:functions/vector.adoc#functions-similarity-cosine[`vector.similarity.cosine()`], and xref:functions/vector.adoc#functions-similarity-euclidean[`vector.similarity.euclidean()`] functions now accept `VECTOR` values as input arguments.
127+
128+
a|
129+
label:functionality[]
130+
label:updated[]
131+
[source, cypher]
132+
----
133+
RETURN datetime('11/18/1986', "MM/dd/yyyy") AS dt
134+
----
135+
136+
| The following constructors of temporal types have been extended with the optional argument `pattern`:
137+
xref:functions/temporal/index.adoc#functions-date[date()], xref:functions/temporal/index.adoc#functions-datetime[datetime()], xref:functions/temporal/index.adoc#functions-localdatetime[localdatetime()], xref:functions/temporal/index.adoc#functions-localtime[localtime()], xref:functions/temporal/index.adoc#functions-time[time()] and xref:functions/temporal/duration.adoc#functions-durations[duration()].
138+
These patterns are the same as those used to create temporal strings with the xref:functions/temporal/format.adoc[`format()`] function introduced in 2025.09 and thus allow for the parsing of temporal strings into temporal values.
139+
|===
140+
141+
25142
[[cypher-deprecations-additions-removals-2025.09]]
26143
== Neo4j 2025.09
27144

@@ -43,7 +160,7 @@ RETURN format(dt, "MM/dd/yyyy") AS US, format(dt, "dd/MM/yyyy") AS EU
43160

44161
| Cypher's new xref:functions/temporal/format.adoc[`format()`] function can create dynamically formatted string representations of temporal instance and duration types.
45162

46-
a|
163+
a|
47164
label:functionality[]
48165
label:new[]
49166

@@ -94,7 +211,7 @@ label:functionality[]
94211
label:updated[]
95212
[source, cypher]
96213
----
97-
PROFILE
214+
PROFILE
98215
WITH "Person" AS label
99216
MATCH (people:$(label))
100217
RETURN people.name
@@ -118,7 +235,7 @@ label:new[]
118235
----
119236
MATCH (()-->(n))+
120237
WHERE allReduce(acc = 0, node IN n \| acc + node.x, 6 < acc < 30)
121-
RETURN [i IN n \| i.x] AS sequence
238+
RETURN [i IN n \| i.x] AS sequence
122239
ORDER BY head(n).x, size(n)
123240
----
124241

@@ -151,7 +268,6 @@ RETURN n:$(<expr3>)
151268
| Added the ability to dynamically reference node labels and relationship types in places where xref:patterns/reference.adoc#label-expressions[label expressions] are allowed.
152269
|===
153270

154-
155271
[[cypher-deprecations-additions-removals-2025.06]]
156272
== Neo4j 2025.06
157273

@@ -492,10 +608,10 @@ label:new[]
492608
----
493609
CREATE ALIAS `remote-with-default-language`
494610
FOR DATABASE `northwind-graph-2020`
495-
AT "neo4j+s://location:7687"
496-
USER alice
497-
PASSWORD 'example_secret'
498-
DEFAULT LANGUAGE CYPHER 25
611+
AT "neo4j+s://location:7687"
612+
USER alice
613+
PASSWORD 'example_secret'
614+
DEFAULT LANGUAGE CYPHER 25
499615
----
500616

501617
a| Set the default Cypher version for a remote database alias when creating it.
@@ -917,7 +1033,7 @@ CASE x ... WHEN contains - 1 THEN ... END
9171033
a| Using a variable named `contains` (or any casing variant, like `CONTAINS`) in addition or subtraction operations within a `WHEN` operand of a xref:expressions/conditional-expressions.adoc#case-simple[simple `CASE`] expression is deprecated.
9181034
To continue using variables with this name, use backticks to quote the variable name:
9191035

920-
* Additions: `CASE x ... WHEN ++`contains`++ + 1 THEN ... END`
1036+
* Additions: `CASE x ... WHEN ++`contains`++ + 1 THEN ... END`
9211037
* Subtractions: `CASE x ... WHEN ++`contains`++ - 1 THEN ... END`
9221038

9231039
a|
@@ -932,8 +1048,8 @@ CASE x ... WHEN in["abc"] THEN ... END
9321048
----
9331049
a| Using the `[]` operator on a variable named `in` (or any casing variant, like `IN`) within a `WHEN` operand of a xref:expressions/conditional-expressions.adoc#case-simple[simple `CASE`] expression is deprecated.
9341050
To continue using variables with this name, use backticks to quote the variable name:
935-
936-
* `CASE x ... WHEN ++`in`++[1] THEN ... END`
1051+
1052+
* `CASE x ... WHEN ++`in`++[1] THEN ... END`
9371053
* `CASE x ... WHEN ++`in`++["abc"] THEN ... END`
9381054

9391055

@@ -1132,7 +1248,7 @@ label:functionality[]
11321248
label:updated[]
11331249
[source, cypher, role="noheader"]
11341250
----
1135-
CREATE (n:Label {property: 'name'}),
1251+
CREATE (n:Label {property: 'name'}),
11361252
()-[r:REL_TYPE]->()
11371253
----
11381254
| Neo4j's link:{neo4j-docs-base-uri}/operations-manual/current/database-internals/store-formats/#store-format-overview[block format] now implements xref:appendix/gql-conformance/index.adoc[GQL's] limit on the maximum length of identifiers.
@@ -1183,7 +1299,7 @@ RETURN t AS team, players
11831299

11841300
[source, cypher, role="noheader"]
11851301
----
1186-
OPTIONAL CALL db.labels() YIELD label
1302+
OPTIONAL CALL db.labels() YIELD label
11871303
RETURN label
11881304
----
11891305

@@ -1534,7 +1650,7 @@ MATCH SHORTEST 2 GROUPS (:A)-[:R]->{0,10}(:B)
15341650

15351651
a| Introduced new graph pattern matching keywords to find variations of the xref:patterns/shortest-paths.adoc[shortest paths] between nodes.
15361652

1537-
a|
1653+
a|
15381654
label:functionality[]
15391655
label:new[]
15401656

@@ -4732,4 +4848,4 @@ MATCH (n:N {prop1: 42} WHERE n.prop2 > 42)
47324848
a|
47334849
New syntax that enables inlining of `WHERE` clauses inside node patterns.
47344850

4735-
|===
4851+
|===

0 commit comments

Comments
 (0)