Repository navigation
v0.23.0
[0.23.0] - 2026-10-05
Highlights
Writes no longer slow down as the graph grows. Statement atomicity runs
many writes on a copy of the graph. That copy used to cost one refcount per
512 entries, about 220 µs at 2M nodes, and every index insert copied a
1/256th share of its index. Both are now bounded-path copy-on-write
structures. The numbers below are medians at 2M nodes / 8M relationships,
v0.22.3 → v0.23.0:
| Write | v0.22.3 | v0.23.0 |
|---|---|---|
SET while any constraint exists |
238 µs | 11 µs |
CREATE on a label with a uniqueness constraint |
245 µs | 15 µs |
| Creating an indexed node via the Rust graph API | 425 µs | 16 µs |
Relationship CREATE |
290 µs | 57 µs |
Seek by id. MATCH (n) WHERE id(n) = $id (and IN $list, and
id(r) for relationships) is now a direct lookup instead of a full scan.
At 2M nodes it went from 210 ms to 1.3 µs. Writes such as
MATCH (n) WHERE id(n) = $id SET n.x = $v use it too.
Restarts.
- A database reopened from a snapshot or the WAL now holds the same index
memory as the process that wrote it. Before, it was 18–28% more, because
every property key was hash-indexed on load. - Snapshot load is about 2× faster: 17.4 s → 7.9 s at 10M elements.
MemoryReport(and wasmmemoryReport()) lists each active hash index
key with its size and whether it is declared.
Read latency is unchanged, except Cypher 2-hop, which is about 6–10% slower
in our runs. Memory per element is unchanged for the graph, and 3–14% lower
for indexes.
Behaviour change
After a restart, the planner has distinct-value statistics only for declared
indexes (RANGE indexes and uniqueness/key constraints), exactly like a
process that never restarted. An equality filter on an undeclared property
can therefore get a different plan than it did after a v0.22 restart, for
example a label scan instead of a property lookup. Query results are
unchanged. If a hot query filters on an undeclared property, declare an
index for it.
Upgrade notes
- No API, file-format, snapshot or WAL changes. v0.22 snapshots and WALs open
as before. MemoryReportgains aproperty_index_keysfield (defaulted on
deserialisation).
Changes
Bug fixes
- store: Restart rebuilds only declared property indexes (
8847a44)
Documentation
- design: Storage beyond memory, with a storage scaling probe (
26f1729)
Features
- compiler: Seek nodes and relationships by id (
21cc9da)
Performance
- store: Bounded-path copy-on-write index containers (
ac83386) - store: Clone the graph in O(1) (
0cb291e)
Assets
| Platform | Asset |
|---|---|
| Linux x86_64 | lora-server-v0.23.0-x86_64-unknown-linux-gnu.tar.gz |
| Windows x86_64 | lora-server-v0.23.0-x86_64-pc-windows-msvc.zip |
| macOS Intel | lora-server-v0.23.0-x86_64-apple-darwin.tar.gz |
| macOS Apple Silicon | lora-server-v0.23.0-aarch64-apple-darwin.tar.gz |
| Full changelog | CHANGELOG.md |
Each binary archive ships with a matching .sha256 file. An aggregated lora-server-v0.23.0-SHA256SUMS.txt is also attached.
Download, verify, and run instructions: see RELEASING.md and the README.