Skip to content

v0.25.0

Choose a tag to compare

@github-actions github-actions released this 12 Oct 12:51
· 233 commits to main since this release

Breaking changes

Each of these turns a silently wrong answer into the right one or into an error.

  • ORDER BY after an aggregating or DISTINCT projection reads only that projection's columns. A key over the grouping keys (WITH n, count(m) AS c ORDER BY c DESC, n.key) now sorts; it used to be ignored. A key that reads anything else from before the projection is a compile error.
  • A sort key that raises is an error, where its row used to sort as null.
  • A pattern on a variable bound to null matches nothing. MATCH returns no rows where it raised; a pattern comprehension, EXISTS { } and COUNT { } find nothing where they matched every node in the graph.
  • The order of a pattern comprehension's list can differ where an index seek, or a walk from the last node of the pattern, replaced a label scan. Sort the list where the order matters.
  • =~ with a pattern that does not compile is an error, not null.
  • A write whose expression fails is an error, not a success without the property.
  • lora-node: an integral number parameter above 2^32 is stored as an INTEGER, not a FLOAT.

Highlights

  • lora-node: a transaction whose statement was refused before the engine ran it (an already-aborted signal, invalid options) no longer keeps the writer lock. isOpen === false means the lock is free.
  • Engine: a WHERE on an indexed property inside a pattern comprehension, EXISTS { } or COUNT { } seeks (=, IN, STARTS WITH) instead of scanning the label once per row.
  • lora-graphql: creates and keyed updates that connect go to the database as one call; a lookup by @key shares one compile across keys; relationship rules hold on fields to interfaces and unions; triggers, workers and input validation directives.

[0.25.0] - 2026-10-12

Bug fixes

  • lora-graphql: The plan check passes a count-only root connection (d0de0ac)
  • executor: A null pattern variable matches nothing; a subquery WHERE seeks (46fdfe3)
  • analyzer: ORDER BY after an aggregation reads grouping keys, or fails (ecd0a41)
  • database: A write that gives up waiting for the writer lock says so (3c480ad)
  • lora-node: A statement the engine never ran rolls its transaction back (0bf657d)
  • lora-graphql: Single-call updates after an independent review (0ea1dd6)
  • executor: A sort key that fails is an error, not a null (1ae3261)
  • lora-node: A write batch that never got the lock is forgotten (2cfb797)
  • lora-graphql: Single-call creates after an independent review (4373cba)
  • lora-graphql: A batched mutation's database time is counted once (8873786)
  • lora-graphql: A second review of triggers and workers; check() plans mutations (f40c73b)
  • lora-graphql: Triggers and workers after an independent review (e4d9c09)
  • lora-node: Large integers stay integers; begin() takes timeoutMs and signal (e6e43e7)
  • store: An int8 HNSW index normalises a vector before quantising it (8b620de)
  • database: A failing write keeps nothing and waits no longer than its timeout (db26a5c)
  • executor: A bad regex is an error; local temporals take duration arithmetic (8e9731c)
  • lora-graphql: BigInt is stored as an integer; a refused scalar value is coded (1f7fc6b)
  • lora-graphql: UPDATE_EDGE alone keeps the type's update mutations (1c81b96)
  • lora-graphql: A keyed filter on an UNDIRECTED relationship matches both ways (eddd1b5)

Documentation

  • Serving from several threads, and the open list as it stands (7d8057f)
  • Null pattern variables, ORDER BY after aggregation, subquery seeks (e387e25)
  • What single-call updates measure (ed6cfa3)
  • The implementation plan, the triggers design, and the list as it stands (b76a6ad)
  • docs-site: Triggers and workers, OVERLOADED, and how a mutation is sent (ad35aa3)
  • Remove the multi-writer plan; one writer at a time is the design (1371514)
  • Validation rules for clients, tools and @cypher arguments (5972d65)
  • @normalize, constrained scalars and validators (ea21d47)
  • design: Input validation for lora-graphql (aec5f24)
  • docs-site: The validation directives and their errors (06117a0)
  • docs-site: Every directive gets its own section and an example (f943345)
  • docs-site: GraphQL gets its own tab, a tutorial and worked examples (0f44001)
  • lora-graphql: The tutorial project, with a test of every server (e7d80c4)

Features

  • lora-graphql: Relationship rules on a field to an interface or union (2f9a232)
  • executor: Assert(condition, message) fails the statement unless the condition is true (4409938)
  • lora-graphql: Check() reports what a full-text index skips; a lint for low-cardinality indexes (3f884d8)
  • lora-graphql: MaxTotalCount stops a connection's count at a cap (7a5b092)
  • lora-graphql: @cypher(cost:) charges a hand-written statement against maxCost (cf521f9)
  • lora-graphql: Triggers, workers and a shorter hold on the writer lock (b4554ac)
  • lora-graphql: Validation rules reach clients, tools and @cypher arguments (0776fc0)
  • lora-graphql: @normalize, rules on custom scalars, and validators (564fa40)
  • lora-graphql: Validation rules on fields (8354bed)

Maintenance

  • Remove dead code and stale comments; error messages follow the style guide (c0440d4)

Performance

  • lora-graphql: Creates and keyed updates that connect are one call (b4d7060)
  • lora-graphql: One compile serves every key of a lookup by @key (e9369fa)
  • lora-graphql: An update of one node by key is one call into the database (a7d08fc)
  • lora-graphql: A create without relationship writes is one call into the database (6e04df4)
  • lora-node: A write batch waits for the writer lock on its own thread and commits in one step (460b82d)
  • lora-graphql: Sign cursors with node:crypto; the document cache is LRU (73f09ae)

Tests

  • lora-graphql: Bench scenarios for connects, bulk writes and subscribers (99b7da7)
  • database: Triage the ignored tests (bcb1613)
  • lora-graphql: Run the website's GraphQL pages (168e9ce)

Assets

Platform Asset
Linux x86_64 lora-server-v0.25.0-x86_64-unknown-linux-gnu.tar.gz
Windows x86_64 lora-server-v0.25.0-x86_64-pc-windows-msvc.zip
macOS Intel lora-server-v0.25.0-x86_64-apple-darwin.tar.gz
macOS Apple Silicon lora-server-v0.25.0-aarch64-apple-darwin.tar.gz
Full changelog CHANGELOG.md

Each binary archive ships with a matching .sha256 file. An aggregated lora-server-v0.25.0-SHA256SUMS.txt is also attached.

Download, verify, and run instructions: see RELEASING.md and the README.