Velr
Velr is an embedded property-graph database from Velr.ai, written in Rust, built on top of SQLite3 (persisting to a standard SQLite database file) and queried using the openCypher language.
Vector data and time-series support are actively in development and will ship after openCypher support has stabilized.
This crate provides the Rust binding for Velr. It links against a bundled native runtime with a C ABI, implemented in Rust.
Questions, feedback, or commercial licensing: tomas@velr.ai
Release status
This release is alpha.
- The API and query support are still evolving.
- openCypher coverage is already substantial, but some features are still missing.
If you hit a missing feature (see below), please reach out — it helps us prioritize.
Velr is already usable for real workflows and representative use cases, but rough edges remain and the API is not yet stable.
Installation
Add to Cargo.toml:
[]
= "0.1"
Enable Arrow IPC support (binding Arrow arrays + exporting result tables as Arrow IPC):
[]
= { = "0.1", = ["arrow-ipc"] }
Quick start
use ;
Query language support
Velr supports most of openCypher, but some features are not yet implemented.
Notable missing features:
REMOVEclause- Query parameters (for example
$name) - The query planner does not yet use indexes in all cases where expected.
Streaming multiple result tables
A single exec() can yield multiple result tables (e.g. multiple statements):
let db = open?;
let mut stream = db.exec?;
while let Some = stream.next_table?
Transactions and savepoints
Velr supports transactions together with two kinds of savepoints:
- Scoped savepoints via
savepoint(), which return a guard - Named savepoints via
savepoint_named(name), which remain active in the transaction until released or the transaction ends
Calling rollback_to(name) rolls back to the named savepoint, discards any newer named savepoints, and keeps the target savepoint active.
Scoped savepoint
let db = open?;
let tx = db.begin_tx?;
tx.run?;
tx.commit?;
Named savepoints
let db = open?;
let tx = db.begin_tx?;
tx.savepoint_named?;
tx.run?;
tx.savepoint_named?;
tx.run?;
tx.rollback_to?;
tx.run?;
tx.release_savepoint?;
tx.commit?;
release_savepoint(name) currently releases the most recent active named savepoint.
Dropping an active transaction without commit() will roll it back automatically.
Arrow IPC (optional)
With features = ["arrow-ipc"] you can:
- Bind Arrow arrays as a logical table (
bind_arrow,bind_arrow_chunks) - Export a result table as an Arrow IPC file (
to_arrow_ipc_file())
Supported functions
Velr currently supports these openCypher functions:
Scalars
id()type()length()nodes()relationships()coalesce()labels()properties()keys()
Aggregates
count()sum()avg()min()max()collect()
Platform support
This crate links against a bundled native runtime.
Currently bundled targets:
* macOS universal (arm64 + x86_64)
* Linux x86_64
* Linux aarch64
* Windows x86_64
Licensing
- The Rust binding source code in this package is licensed under MIT.
- The bundled native runtime binaries may be used and freely redistributed in unmodified form under the terms of
LICENSE.runtime.
See LICENSE and LICENSE.runtime for the full license texts.