---
title: Changelog
description: "relate, the embedded Cypher graph database (relatedb.ai): What each relate release added, changed, deprecated, removed and fixed, newest first, with the deprecation policy and a JSON feed."
type: reference
surfaces: []
status: stable
verified: 0.1.2
canonical_url: https://relatedb.ai/docs/reference/changelog/
prerequisites: []
related: []
last_updated: 2026-11-09
---

# Changelog

What each relate release added, changed, deprecated, removed and fixed, newest first, with the deprecation policy and a JSON feed.

> Verified against relate 0.1.2. If your `relate --version` is newer, read https://relatedb.ai/docs/reference/changelog/#since-0.1.2

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](https://relatedb.ai/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 is `4:relate-neo4j:n0` and its first relationship `5:relate-neo4j:r0`, where 0.1.1 returned `4:relate:n0` and `5:relate:r0`, and the clients, JSON output and Bolt carry the same strings. See [Types and values](https://relatedb.ai/docs/reference/cypher/types-and-values/), [Functions](https://relatedb.ai/docs/reference/cypher/functions/).
- A `shortestPath` whose 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 upgrade` no 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 on `relate 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](https://relatedb.ai/docs/reference/storage/formats/), [CLI flags](https://relatedb.ai/docs/reference/cli/flags/).
- Full-text search pages with `SKIP` and `OFFSET`, and `WITH ANALYZER` is evaluated per row, English stemming included.

### Changed

- **Breaking.** Full-text search passes the query string to the index's query syntax, so `AND` and `NOT` are operators while a lowercase `and` stays a term, and it ranks hits by BM25 scores, so a hit's `score` and the order of hits can differ from 0.1.0. See [Full-text and hybrid search](https://relatedb.ai/docs/guides/cypher/full-text-and-hybrid-search/), [Search](https://relatedb.ai/docs/reference/cypher/search/).
- **Breaking.** The Java client's `QueryType`, `Namespace`, `Severity` and `Category` are enums instead of strings, and `PlanActual` carries the whole plan shape. See [Java API](https://relatedb.ai/docs/reference/api/java/).
- POINT indexes seek radius and bounding-box queries through an R*-tree.
- The variable-shadowing notification also looks inside the bodies of `EXISTS`, `COUNT` and `COLLECT` subqueries.

### 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 `WHERE` or `FILTER` position is coerced to a predicate.
- `FINISH` is 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 envelope` and `--mode json` add a `timings` object and `planCache`, `--mode jsonl` ends each statement with a line holding both, `--mode toon` ends with `timings:` and `planCache:` entries, the envelope of MCP and the WebAssembly build adds `lex_parse_ms`, `rewrite_ms`, `lower_ms`, `result_generation_ms` and `plan_cache`, and the Rust crate's `QueryResult` adds the same four timings and `plan_cache()`; the C ABI and the other clients expose none of them yet. See [Output modes](https://relatedb.ai/docs/reference/cli/output-modes/).
- The `FOR` clause runs without a preview gate.

### Changed

- **Breaking.** `--mode json` prints 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](https://relatedb.ai/docs/reference/cli/output-modes/).
- **Breaking.** `--mode jsonl` prints one more line per statement, its timings, so a statement with no rows prints that one line instead of nothing. See [Output modes](https://relatedb.ai/docs/reference/cli/output-modes/).
- **Breaking.** `relate clone` refuses a `markdown` store as the source of a `.rl` bundle unless `--to-snapshot-format` names `parquet` or `json`, with `Failed 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](https://relatedb.ai/docs/reference/cli/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_MS` is removed; `relate telemetry off` deletes the spool. See [Privacy and telemetry](https://relatedb.ai/docs/reference/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 when `commit()` 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 with `code`, `gql_status`, `stage`, `retryable` and `message`.
- 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 `WHERE` or an operand of `AND`, `OR` or `XOR`, fails with `InvalidArgumentType` instead 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 a `CREATE` or `MERGE` whose node is bound to null fails instead of creating a new node.
- **Breaking.** An administration command with a `USE` clause that names a graph other than `system` fails with `UseClauseWithAdministrationCommand`. See [Errors](https://relatedb.ai/docs/reference/errors/#engine-use-on-administration-command).

### Removed

- **Breaking.** The `apoc.coll.sort` spelling: a call fails as an unknown function, `UnknownFunction: unknown function apoc.coll.sort()`, and `coll.sort` is the replacement. See [Errors](https://relatedb.ai/docs/reference/errors/#engine-unknown-function).

### 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.
- `push` keeps 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.
