Changelog
What each relate release added, changed, deprecated, removed and fixed, newest first, with the deprecation policy and a JSON feed.
Releases are newest first. Each is at the anchor #<version>, and #since-<version> marks where the changes after that version begin. The same entries are a JSON feed at /docs/changelog.json.
No release after 0.1.2 is listed yet.
0.1.2
Released 2026-11-09. Changes since 0.1.1.
Element ids carry the database's name, and a shortest path between two endpoints matched by property maps is searched from both ends.
Changed
- Breaking.
elementId()names the database: the first node of the default database is4:relate-neo4j:n0and its first relationship5:relate-neo4j:r0, where 0.1.1 returned4:relate:n0and5:relate:r0, and the clients, JSON output and Bolt carry the same strings. See Types and values, Functions. - A
shortestPathwhose two endpoints are matched by property maps looks up both endpoints and searches from both ends at once. - Opening a store whose write-ahead log replays nothing no longer rebuilds its indexes.
relate upgradeno longer prints the notice of the rename after its status line.
0.1.1
Released 2026-11-09. Changes since 0.1.0.
Full-text search reads the index's query syntax and ranks by BM25, and the Parquet codec can store each promoted property in a column of its own.
Added
--snapshot-format parquet-wide, on a query run and onrelate serve, which gains the flag: the Parquet codec writes one typed column per promoted property key, and from the store's next checkpoint on every later open keeps it wide. See Storage formats, CLI flags.- Full-text search pages with
SKIPandOFFSET, andWITH ANALYZERis evaluated per row, English stemming included.
Changed
- Breaking. Full-text search passes the query string to the index's query syntax, so
ANDandNOTare operators while a lowercaseandstays a term, and it ranks hits by BM25 scores, so a hit'sscoreand the order of hits can differ from 0.1.0. See Full-text and hybrid search, Search. - Breaking. The Java client's
QueryType,Namespace,SeverityandCategoryare enums instead of strings, andPlanActualcarries the whole plan shape. See Java API. - POINT indexes seek radius and bounding-box queries through an R*-tree.
- The variable-shadowing notification also looks inside the bodies of
EXISTS,COUNTandCOLLECTsubqueries.
Fixed
round()on a decimal, the sort order of temporal values, and the type of a nested list whose elements have mixed types.- A list value at a
WHEREorFILTERposition is coerced to a predicate. FINISHis accepted after a catalog command that returns rows, and a schema command runs only as a statement of its own.
0.1.0
Released 2026-11-09. Changes since 0.16.1.
The first release published as relate, which restarts the version line at 0.1.0 after cypherlite's 0.16.1: the release assets are relate-<os>-<arch> and relate-ffi-<target>.tar.gz, and the signer and the signature namespace are relate-release, with the same key.
Added
- Every machine-readable result carries per-phase timings and the plan cache's outcome:
--mode envelopeand--mode jsonadd atimingsobject andplanCache,--mode jsonlends each statement with a line holding both,--mode toonends withtimings:andplanCache:entries, the envelope of MCP and the WebAssembly build addslex_parse_ms,rewrite_ms,lower_ms,result_generation_msandplan_cache, and the Rust crate'sQueryResultadds the same four timings andplan_cache(); the C ABI and the other clients expose none of them yet. See Output modes. - The
FORclause runs without a preview gate.
Changed
- Breaking.
--mode jsonprints an object for every statement,{"data": [...], "planCache": ..., "timings": {...}}, where 0.16.1 printed a bare array for a result the row cap did not cut. See Output modes. - Breaking.
--mode jsonlprints one more line per statement, its timings, so a statement with no rows prints that one line instead of nothing. See Output modes. - Breaking.
relate clonerefuses amarkdownstore as the source of a.rlbundle unless--to-snapshot-formatnamesparquetorjson, withFailed to clone database: semantic error: markdown body properties are set but the store's snapshot codec is parquet, not markdown; the configuration would be ignored. See relate clone. - Usage metrics are written to a local spool at exit and sent by the next run, so an exit never waits on the network, and
RELATE_TELEMETRY_FLUSH_MSis removed;relate telemetry offdeletes the spool. See Privacy and telemetry.
Fixed
coll.max()returns null when the list holds a null, as Neo4j does.toString()of a path and an index into a null string return what Neo4j returns.- A count-style aggregate over a repeated node variable counts only self-loops.
- In the Swift client,
transaction(_:)rolls back whencommit()throws.
0.16.1
Released 2026-11-04. Changes since 0.16.0.
The last release published under the name cypherlite: its release assets carry that name, and a successful cypherlite upgrade ends with a notice of the rename and the relate install command.
Changed
- Breaking. The C ABI is the typed ABI v2:
relate_abi_version()returns 2, values are read through typed accessors instead of JSON strings, parameters are passed through a typed builder instead of a JSON string, and an error arrives as one object withcode,gql_status,stage,retryableandmessage. - The Python binding and the Java, JavaScript, Go and Swift clients use the typed ABI v2.
- The typed parameter builder is bounded: at most 100,000 entries per container, 4 KiB per name, and 16 MiB in all.
- A bookmark carries the engine's commit sequence, through the C ABI, Python and Bolt.
- An error of the internal class crosses the C ABI with a generic message; the internal detail stays inside the engine.
- Breaking. A non-boolean value where Cypher requires a boolean, such as a quantifier's
WHEREor an operand ofAND,ORorXOR, fails withInvalidArgumentTypeinstead of a generic syntax error. - Breaking. A clause that reads an entity it creates fails with
Entity, '<name>', cannot be created and referenced in the same clause, and aCREATEorMERGEwhose node is bound to null fails instead of creating a new node. - Breaking. An administration command with a
USEclause that names a graph other thansystemfails withUseClauseWithAdministrationCommand. See Errors.
Removed
- Breaking. The
apoc.coll.sortspelling: a call fails as an unknown function,UnknownFunction: unknown function apoc.coll.sort(), andcoll.sortis the replacement. See Errors.
Fixed
- A frontier search that exhausts its re-arrival budget falls back to the plain walk instead of dropping endpoints, which could make
count(DISTINCT n)return 0 on a dense clique. pushkeeps a node's secondary labels and merges on its keyed label, so an update no longer creates a second node.
Deprecation policy
relate is pre-1.0. Its releases follow semantic versioning, under which anything can change in a 0.x release, a patch release included: 0.16.1 removed the apoc.coll.sort spelling and replaced the C ABI with an incompatible typed one.
A change that can make working code or statements fail is marked Breaking in the entry of the release that ships it, under Changed or Removed, with its replacement when there is one. A feature that still works but is to be removed is listed under Deprecated in the release that deprecates it.